"use client"; import * as React from "react"; import { useForm } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import * as z from "zod"; import { Plus, Loader2 } 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 { createIncoterm } from "../service"; import { toast } from "sonner"; const createIncotermSchema = z.object({ code: z.string().min(1, "코드는 필수입니다."), description: z.string().min(1, "설명은 필수입니다."), isActive: z.boolean().default(true), }); type CreateIncotermFormValues = z.infer; interface IncotermsAddDialogProps { onSuccess?: () => void; } export function IncotermsAddDialog({ onSuccess }: IncotermsAddDialogProps) { const [open, setOpen] = React.useState(false); const [isLoading, setIsLoading] = React.useState(false); const form = useForm({ resolver: zodResolver(createIncotermSchema), defaultValues: { code: "", description: "", isActive: true, }, }); const handleOpenChange = (newOpen: boolean) => { setOpen(newOpen); if (!newOpen) { form.reset(); } }; const handleCancel = () => { form.reset(); setOpen(false); }; const onSubmit = async (data: CreateIncotermFormValues) => { setIsLoading(true); try { const result = await createIncoterm(data); if (result.data) { toast.success("인코텀즈가 성공적으로 추가되었습니다."); form.reset(); setOpen(false); if (onSuccess) { onSuccess(); } } else { toast.error(result.error || "생성 중 오류가 발생했습니다."); } } catch (error) { console.error("인코텀즈 생성 오류:", error); toast.error("인코텀즈 생성에 실패했습니다."); } finally { setIsLoading(false); } }; return ( 새 인코텀즈 추가 새로운 인코텀즈를 추가합니다. 필수 정보를 입력해주세요. * 표시된 항목은 필수 입력사항입니다.
( 코드 * )} /> ( 설명 * )} />
); }