import { updateServer } from "@/api/server" import { Button } from "@/components/ui/button" import { Checkbox } from "@/components/ui/checkbox" import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog" import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { ScrollArea } from "@/components/ui/scroll-area" import { Textarea } from "@/components/ui/textarea" import { IconButton } from "@/components/xui/icon-button" import { conv } from "@/lib/utils" import { asOptionalField } from "@/lib/utils" import { ModelServer } from "@/types" import { zodResolver } from "@hookform/resolvers/zod" import { useState } from "react" import { useForm } from "react-hook-form" import { useTranslation } from "react-i18next" import { KeyedMutator } from "swr" import { z } from "zod" interface ServerCardProps { data: ModelServer mutate: KeyedMutator } const serverFormSchema = z.object({ name: z.string().min(1), note: asOptionalField(z.string()), public_note: asOptionalField(z.string()), display_index: z.coerce.number().int(), hide_for_guest: asOptionalField(z.boolean()), enable_ddns: asOptionalField(z.boolean()), ddns_profiles: asOptionalField(z.array(z.number())), }) export const ServerCard: React.FC = ({ data, mutate }) => { const { t } = useTranslation() const form = useForm>({ resolver: zodResolver(serverFormSchema), defaultValues: data, resetOptions: { keepDefaultValues: false, }, }) const [open, setOpen] = useState(false) const onSubmit = async (values: z.infer) => { await updateServer(data!.id!, values) setOpen(false) await mutate() form.reset() } return (
{t("EditServer")}
( {t("Name")} )} /> ( {t("Weight")} )} /> ( {t("DDNSProfiles") + t("SeparateWithComma")} { const arr = conv .strToArr(e.target.value) .map(Number) field.onChange(arr) }} /> )} /> (
)} /> (
)} /> ( {t("Private") + t("Note")}