"use client"; import { useState } from "react"; import type { User } from "@prisma/client"; import { PendingSubmitButton } from "@/components/shared/pending-submit-button"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; import { createUser, updateUser } from "@/actions/admin/users"; import { getErrorMessage } from "@/lib/errors"; import { toast } from "sonner"; export function UserForm({ user, triggerLabel, triggerVariant = "default", }: { user?: User; triggerLabel?: string; triggerVariant?: "default" | "outline" | "ghost"; }) { const [open, setOpen] = useState(false); const isEdit = Boolean(user); async function handleSubmit(formData: FormData) { try { if (user) { await updateUser(user.id, formData); toast.success("用户已更新"); } else { await createUser(formData); toast.success("用户创建成功"); } setOpen(false); } catch (error) { toast.error(getErrorMessage(error, isEdit ? "更新失败" : "创建失败")); } } return ( }> {triggerLabel ?? (isEdit ? "编辑" : "创建用户")} {isEdit ? "编辑用户" : "创建用户"}
{isEdit ? "保存" : "创建"}
); }