import { createDDNSProfile, updateDDNSProfile } from "@/api/ddns" 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 { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { IconButton } from "@/components/xui/icon-button" import { conv } from "@/lib/utils" import { asOptionalField } from "@/lib/utils" import { ModelDDNSProfile } from "@/types" import { ddnsRequestTypes, ddnsTypes } 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" import { Textarea } from "./ui/textarea" interface DDNSCardProps { data?: ModelDDNSProfile providers: string[] mutate: KeyedMutator } const ddnsFormSchema = z.object({ max_retries: z.coerce.number().int().min(1), enable_ipv4: asOptionalField(z.boolean()), enable_ipv6: asOptionalField(z.boolean()), name: z.string().min(1), provider: z.string(), domains: z.array(z.string()), domains_raw: z.string(), access_id: asOptionalField(z.string()), access_secret: asOptionalField(z.string()), webhook_url: asOptionalField(z.string().url()), webhook_method: asOptionalField(z.coerce.number().int().min(1).max(255)), webhook_request_type: asOptionalField(z.coerce.number().int().min(1).max(255)), webhook_request_body: asOptionalField(z.string()), webhook_headers: asOptionalField(z.string()), }) export const DDNSCard: React.FC = ({ data, providers, mutate }) => { const { t } = useTranslation() const form = useForm>({ resolver: zodResolver(ddnsFormSchema), defaultValues: data ? { ...data, domains_raw: conv.arrToStr(data.domains), } : { max_retries: 3, name: "", provider: "dummy", domains: [], domains_raw: "", }, resetOptions: { keepDefaultValues: false, }, }) const [open, setOpen] = useState(false) const onSubmit = async (values: z.infer) => { try { values.domains = conv.strToArr(values.domains_raw) data?.id ? await updateDDNSProfile(data.id, values) : await createDDNSProfile(values) } catch (e) { console.error(e) toast(t("Error"), { description: t("Results.UnExpectedError"), }) return } setOpen(false) await mutate() form.reset() } return ( {data ? : }
{data ? t("EditDDNS") : t("CreateDDNS")}
( {t("Name")} )} /> ( {t("Provider")} )} /> ( {t("Domains") + t("SeparateWithComma")} )} /> ( {t("Credential")} 1 )} /> ( {t("Credential")} 2 )} /> ( {t("MaximumRetryAttempts")} )} /> ( Webhook URL )} /> ( Webhook {t("RequestMethod")} )} /> ( Webhook {t("RequestType")} )} /> ( Webhook {t("RequestHeader")}