'use client'; import {useMutation, useQueryClient} from '@tanstack/react-query'; import {useState} from 'react'; import {useForm} from 'react-hook-form'; import {Loader2} from 'lucide-react'; import {Button} from '@/components/ui/button'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import {Input} from '@/components/ui/input'; import {Label} from '@/components/ui/label'; import {Select, SelectContent, SelectItem, SelectTrigger, SelectValue,} from '@/components/ui/select'; import {DnsAccountService} from '@/lib/services/openflare'; import {getErrorMessage} from './website-utils'; const dnsAccountsQueryKey = ['openflare', 'dns-accounts']; type DnsAccountFormValues = { name: string; type: string; authorization: string; }; interface DnsAccountCreateDialogProps { open: boolean; onOpenChange: (open: boolean) => void; onCreated?: () => void; } export function DnsAccountCreateDialog({ open, onOpenChange, onCreated, }: DnsAccountCreateDialogProps) { const queryClient = useQueryClient(); const [error, setError] = useState(''); const {register, handleSubmit, setValue, watch, formState, reset} = useForm({ defaultValues: {name: '', type: 'cloudflare', authorization: ''}, }); const createMutation = useMutation({ mutationFn: DnsAccountService.create, onSuccess: async () => { await queryClient.invalidateQueries({queryKey: dnsAccountsQueryKey}); reset(); setError(''); onCreated?.(); onOpenChange(false); }, onError: (err) => setError(getErrorMessage(err)), }); const onSubmit = handleSubmit((values) => { setError(''); let auth = values.authorization.trim(); if (!auth.startsWith('{')) { auth = JSON.stringify({api_token: values.authorization}); } createMutation.mutate({...values, authorization: auth}); }); const handleClose = () => { reset(); setError(''); onOpenChange(false); }; return ( !next && handleClose()}> 添加 DNS 账号 统一管理 DNS 服务商账号,用于 ACME 证书的 DNS 验证申请。
{error ?

{error}

: null}
{formState.errors.name ? (

{formState.errors.name.message}

) : null}
{formState.errors.authorization ? (

{formState.errors.authorization.message}

) : null}
); }