feat(add-system): add link to binary install docs in copy button

This commit is contained in:
henrygd
2025-02-23 20:39:57 -05:00
parent aef3b3e610
commit e5a66cc156

View File

@@ -112,9 +112,12 @@ export const SystemDialog = memo(({ setOpen, system }: { setOpen: (open: boolean
} }
return ( return (
<DialogContent className="w-[90%] sm:w-auto sm:ns-dialog max-w-full rounded-lg" onCloseAutoFocus={() => { <DialogContent
className="w-[90%] sm:w-auto sm:ns-dialog max-w-full rounded-lg"
onCloseAutoFocus={() => {
setHostValue(system?.host ?? "") setHostValue(system?.host ?? "")
}}> }}
>
<Tabs defaultValue="docker"> <Tabs defaultValue="docker">
<DialogHeader> <DialogHeader>
<DialogTitle className="mb-2"> <DialogTitle className="mb-2">
@@ -207,35 +210,21 @@ export const SystemDialog = memo(({ setOpen, system }: { setOpen: (open: boolean
<DialogFooter className="flex justify-end gap-x-2 gap-y-3 flex-col mt-5"> <DialogFooter className="flex justify-end gap-x-2 gap-y-3 flex-col mt-5">
{/* Docker */} {/* Docker */}
<TabsContent value="docker" className="contents"> <TabsContent value="docker" className="contents">
<div className="flex gap-0 rounded-lg"> <CopyButton
<Button text={t`Copy` + " docker compose"}
type="button"
variant="outline"
onClick={() => copyDockerCompose(isUnixSocket ? hostValue : port.current?.value, publicKey)} onClick={() => copyDockerCompose(isUnixSocket ? hostValue : port.current?.value, publicKey)}
className="rounded-e-none dark:border-e-0 grow" dropdownText={t`Copy` + " docker run"}
> dropdownOnClick={() => copyDockerRun(isUnixSocket ? hostValue : port.current?.value, publicKey)}
<Trans>Copy</Trans> docker compose />
</Button>
<div className="w-px h-full bg-muted"></div>
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="outline" className={"px-2 rounded-s-none border-s-0"}>
<ChevronDownIcon />
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end">
<DropdownMenuItem onClick={() => copyDockerRun(isUnixSocket ? hostValue : port.current?.value, publicKey)}>
<Trans>Copy</Trans> docker run
</DropdownMenuItem>
</DropdownMenuContent>
</DropdownMenu>
</div>
</TabsContent> </TabsContent>
{/* Binary */} {/* Binary */}
<TabsContent value="binary" className="contents"> <TabsContent value="binary" className="contents">
<Button type="button" variant="outline" onClick={() => copyInstallCommand(isUnixSocket ? hostValue : port.current?.value, publicKey)}> <CopyButton
<Trans>Copy Linux command</Trans> text={t`Copy Linux command`}
</Button> onClick={() => copyInstallCommand(isUnixSocket ? hostValue : port.current?.value, publicKey)}
dropdownText={t`Manual setup instructions`}
dropdownUrl="https://beszel.dev/guide/agent-installation#binary"
/>
</TabsContent> </TabsContent>
{/* Save */} {/* Save */}
<Button>{system ? <Trans>Save system</Trans> : <Trans>Add system</Trans>}</Button> <Button>{system ? <Trans>Save system</Trans> : <Trans>Add system</Trans>}</Button>
@@ -245,3 +234,40 @@ export const SystemDialog = memo(({ setOpen, system }: { setOpen: (open: boolean
</DialogContent> </DialogContent>
) )
}) })
interface CopyButtonProps {
text: string
onClick: () => void
dropdownText: string
dropdownOnClick?: () => void
dropdownUrl?: string
}
const CopyButton = memo((props: CopyButtonProps) => {
return (
<div className="flex gap-0 rounded-lg">
<Button type="button" variant="outline" onClick={props.onClick} className="rounded-e-none dark:border-e-0 grow">
{props.text}
</Button>
<div className="w-px h-full bg-muted"></div>
<DropdownMenu>
<DropdownMenuTrigger asChild>
<Button variant="outline" className={"px-2 rounded-s-none border-s-0"}>
<ChevronDownIcon />
</Button>
</DropdownMenuTrigger>
<DropdownMenuContent align="end">
{props.dropdownUrl ? (
<DropdownMenuItem asChild>
<a href={props.dropdownUrl} target="_blank" rel="noopener noreferrer">
{props.dropdownText}
</a>
</DropdownMenuItem>
) : (
<DropdownMenuItem onClick={props.dropdownOnClick}>{props.dropdownText}</DropdownMenuItem>
)}
</DropdownMenuContent>
</DropdownMenu>
</div>
)
})