import { createServerGroup, updateServerGroup } from "@/api/server-group" import { Button } from "@/components/ui/button" 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 { ScrollArea } from "@/components/ui/scroll-area" import { IconButton } from "@/components/xui/icon-button" import { MultiSelect } from "@/components/xui/multi-select" import { useServer } from "@/hooks/useServer" import { ModelServerGroupResponseItem } from "@/types" import { zodResolver } from "@hookform/resolvers/zod" import { useState } from "react" import { useForm } from "react-hook-form" import { useTranslation } from "react-i18next" import { toast } from "sonner" import { KeyedMutator } from "swr" import { z } from "zod" interface ServerGroupCardProps { data?: ModelServerGroupResponseItem mutate: KeyedMutator } const serverGroupFormSchema = z.object({ name: z.string().min(1), servers: z.array(z.number()), }) export const ServerGroupCard: React.FC = ({ data, mutate }) => { const { t } = useTranslation() const form = useForm>({ resolver: zodResolver(serverGroupFormSchema), defaultValues: data ? { name: data.group.name, servers: data.servers, } : { name: "", servers: [], }, resetOptions: { keepDefaultValues: false, }, }) const [open, setOpen] = useState(false) const onSubmit = async (values: z.infer) => { try { data?.group.id ? await updateServerGroup(data.group.id, values) : await createServerGroup(values) } catch (e) { console.error(e) toast(t("Error"), { description: t("Results.UnExpectedError"), }) return } setOpen(false) await mutate() form.reset() } const { servers } = useServer() const serverList = servers?.map((s) => ({ value: `${s.id}`, label: s.name, })) || [{ value: "", label: "" }] return ( {data ? : }
{data ? t("EditServerGroup") : t("CreateServerGroup")}
( {t("Name")} )} /> ( {t("Server")} { const arr = e.map(Number) field.onChange(arr) }} defaultValue={field.value?.map(String)} /> )} />
) }