"use client" import * as React from "react" import { zodResolver } from "@hookform/resolvers/zod" import { useForm } from "react-hook-form" import { toast } from "sonner" import * as z from "zod" import { Plus } from "lucide-react" import { Button } from "@/components/ui/button" import { Dialog, 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 { createDocumentClassCodeGroup } from "@/lib/docu-list-rule/document-class/service" import { useParams } from "next/navigation" const createDocumentClassSchema = z.object({ value: z.string().min(1, "Value는 필수입니다."), description: z.string().optional(), }) type CreateDocumentClassSchema = z.infer interface DocumentClassAddDialogProps { onSuccess?: () => void } export function DocumentClassAddDialog({ onSuccess, }: DocumentClassAddDialogProps) { const params = useParams() const projectId = Number(params?.projectId) const [open, setOpen] = React.useState(false) const [isPending, startTransition] = React.useTransition() const form = useForm({ resolver: zodResolver(createDocumentClassSchema), defaultValues: { value: "", description: "", }, mode: "onChange" }) async function onSubmit(input: CreateDocumentClassSchema) { startTransition(async () => { try { const result = await createDocumentClassCodeGroup({ projectId: projectId, value: input.value, description: input.description, }) if (result.success) { toast.success("Document Class가 생성되었습니다.") form.reset() setOpen(false) onSuccess?.() } else { toast.error(result.error || "생성에 실패했습니다.") } } catch (error) { console.error("Create error:", error) toast.error("Document Class 생성 중 오류가 발생했습니다.") } }) } const handleCancel = () => { form.reset() setOpen(false) } return ( Document Class 추가 새로운 Document Class를 추가합니다. * 표시된 항목은 필수 입력사항입니다.
( Value * )} /> ( Description )} />
) }