"use client" import * as React from "react" import { useForm } from "react-hook-form" import { zodResolver } from "@hookform/resolvers/zod" import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from "@/components/ui/dialog" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { useToast } from "@/hooks/use-toast" // react-hook-form + shadcn/ui Form import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form" import { createVendorType } from "../service" import { CreateVendorTypeSchema, createVendorTypeSchema } from "../validations" export function AddVendorTypeDialog() { const [open, setOpen] = React.useState(false) const { toast } = useToast() const [isSubmitting, setIsSubmitting] = React.useState(false) // react-hook-form 세팅 const form = useForm({ resolver: zodResolver(createVendorTypeSchema), defaultValues: { nameKo: "", nameEn: "", }, mode: "onChange", // 입력값이 변경될 때마다 유효성 검사 }) // 폼 값 감시 const nameKo = form.watch("nameKo") const nameEn = form.watch("nameEn") // 두 필드가 모두 입력되었는지 확인 const isFormValid = nameKo.trim() !== "" && nameEn.trim() !== "" async function onSubmit(data: CreateVendorTypeSchema) { setIsSubmitting(true) try { const result = await createVendorType(data) if (result.error) { toast({ title: "오류 발생", description: result.error, variant: "destructive", }) return } // 성공 시 모달 닫고 폼 리셋 toast({ title: "성공", description: "협력업체 타입이 성공적으로 생성되었습니다.", }) form.reset() setOpen(false) } catch (error) { toast({ title: "오류 발생", description: "협력업체 타입 생성 중 오류가 발생했습니다.", variant: "destructive", }) } finally { setIsSubmitting(false) } } function handleDialogOpenChange(nextOpen: boolean) { if (!nextOpen) { form.reset() } setOpen(nextOpen) } return ( {/* 모달을 열기 위한 버튼 */} 새 협력업체 타입 생성 새 Vendor Type 정보를 입력하고 Create 버튼을 누르세요. {/* shadcn/ui Form을 이용해 react-hook-form과 연결 */}
( 업체 유형(한글) * )} /> ( 업체 유형(영문) * )} />
) }