import { IconDeviceFloppy, IconX, } from "@tabler/icons-react"; import { useEffect } from "react"; import { useForm } from "react-hook-form"; interface WireGuardServerModalProps { wgInterface?: any; onHide?: () => void; resolve?: (data: any) => void; } const WG_DEFAULT_MTU = 1420; const WG_DEFAULT_DNS = "1.1.1.1, 8.8.8.8"; function WireGuardServerModal({ wgInterface, onHide, resolve }: WireGuardServerModalProps) { const { register, handleSubmit, setValue, formState: { errors }, } = useForm({ defaultValues: { host: "", dns: WG_DEFAULT_DNS, mtu: WG_DEFAULT_MTU, isolate_clients: false, }, }); useEffect(() => { if (wgInterface) { setValue("host", wgInterface.host || ""); setValue("dns", wgInterface.dns || WG_DEFAULT_DNS); setValue("mtu", wgInterface.mtu || WG_DEFAULT_MTU); setValue("isolate_clients", wgInterface.isolateClients || false); } }, [wgInterface, setValue]); const onSubmit = (data: any) => { // Convert number types appropriately const submitData = { ...data, mtu: Number(data.mtu) || WG_DEFAULT_MTU, }; if (resolve) { resolve(submitData); } if (onHide) { onHide(); } }; return (
{wgInterface ? `Edit Server: ${wgInterface.name}` : "New WireGuard Server"}
{errors.host && (
{errors.host.message as string}
)} The public IP or hostname domain that clients will use to connect.
Comma separated list. Assigned to clients.
); } export default WireGuardServerModal;