"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 { createDocumentClassOptionItem } from "@/lib/docu-list-rule/document-class/service" import { documentClasses } from "@/db/schema/documentClasses" const createDocumentClassOptionSchema = z.object({ optionValue: z.string().min(1, "옵션 값은 필수입니다."), }) type CreateDocumentClassOptionSchema = z.infer interface DocumentClassOptionAddDialogProps { selectedDocumentClass: typeof documentClasses.$inferSelect | null onSuccess?: () => void } export function DocumentClassOptionAddDialog({ selectedDocumentClass, onSuccess, }: DocumentClassOptionAddDialogProps) { const [open, setOpen] = React.useState(false) const [isPending, startTransition] = React.useTransition() const form = useForm({ resolver: zodResolver(createDocumentClassOptionSchema), defaultValues: { optionValue: "", }, mode: "onChange" }) async function onSubmit(input: CreateDocumentClassOptionSchema) { if (!selectedDocumentClass) { toast.error("Document Class가 선택되지 않았습니다.") return } startTransition(async () => { try { const result = await createDocumentClassOptionItem({ documentClassId: selectedDocumentClass.id, optionValue: input.optionValue, }) 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 옵션 추가 {selectedDocumentClass?.description || "Document Class"}에 새로운 옵션을 추가합니다. * 표시된 항목은 필수 입력사항입니다.
( 옵션 값 * )} />
) }