"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는 필수입니다.") .max(1, "Value는 1자리만 입력 가능합니다. (예: A, B, 0, 1)") .regex(/^[A-Z0-9]$/, "대문자 알파벳 또는 숫자 1자리만 입력 가능합니다. (예: A, B, 0, 1)"), 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 * field.onChange(e.target.value.toUpperCase())} />
💡 대문자 알파벳 또는 숫자 1자리 (A, B, 0, 1 등) - API DOC_CLASS로 전송됩니다
)} /> ( Description
선택사항: Document Class에 대한 추가 설명
)} />
) }