import { Button } from "@/components/ui/button" import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog" import { Input } from "@/components/ui/input" import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form" import { ScrollArea } from "@/components/ui/scroll-area" import { useForm } from "react-hook-form" import { z } from "zod" import { zodResolver } from "@hookform/resolvers/zod" import { ModelServer } from "@/types" import { updateServer } from "@/api/server" import { Checkbox } from "@/components/ui/checkbox" import { Label } from "@/components/ui/label" import { conv } from "@/lib/utils" import { useState } from "react" import { KeyedMutator } from "swr" import { asOptionalField } from "@/lib/utils" import { IconButton } from "@/components/xui/icon-button" import { Textarea } from "@/components/ui/textarea" 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.number().int(), hide_for_guest: asOptionalField(z.boolean()), enable_ddns: asOptionalField(z.boolean()), ddns_profiles: z.array(z.string()).transform((v => { return v.filter(Boolean).map(Number); })), }); export const ServerCard: React.FC = ({ data, mutate }) => { 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 (
New Service
( Name )} /> ( Display Index )} /> ( DDNS Profile IDs (Separate with comma) { const arr = conv.strToArr(e.target.value); field.onChange(arr); }} /> )} /> (
)} /> (
)} /> ( Note