import { zodResolver } from "@hookform/resolvers/zod" import { useEffect, useState } from "react" import { Controller, useForm } from "react-hook-form" import { toast } from "sonner" import { z } from "zod" import { updateUserInfo } from "@/api/user" import { Button } from "@/components/ui/button" import { Dialog, DialogContent, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { FieldError } from "@/components/ui/field" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" export type EditInfoValues = { qq: string wechat: string // taobao: string email: string } const editInfoSchema = z.object({ qq: z.string(), wechat: z.string(), // taobao: z.string(), email: z .string() .refine( v => !v || /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(v), "请输入正确的邮箱", ), }) interface EditInfoDialogProps { open: boolean onOpenChange: (open: boolean) => void initialData?: EditInfoValues onSaved?: () => void } const DEFAULT_INITIAL_DATA: EditInfoValues = { qq: "", wechat: "", // taobao: "", email: "", } export function EditInfoDialog({ open, onOpenChange, initialData = DEFAULT_INITIAL_DATA, onSaved, }: EditInfoDialogProps) { const [submitting, setSubmitting] = useState(false) const form = useForm({ resolver: zodResolver(editInfoSchema), defaultValues: initialData, }) useEffect(() => { if (open) { form.reset(initialData) } }, [open, initialData, form]) const onSubmit = async (data: EditInfoValues) => { setSubmitting(true) const res = await updateUserInfo({ QQ: data.qq, Wx: data.wechat, // TaoBao: data.taobao, Email: data.email, }) setSubmitting(false) if (!res.success) { toast.error(res.message) return } toast.success("保存成功") onOpenChange(false) onSaved?.() } return ( 编辑信息
( )} />
( )} />
{/*
( )} />
*/}
( <> {fieldState.error?.message} )} />
) }