"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 { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form" import { createTechVendorContactSchema, type CreateTechVendorContactSchema, } from "@/lib/tech-vendors/validations" import { createTechVendorContact } from "@/lib/tech-vendors/service" interface AddContactDialogProps { vendorId: number } export function AddContactDialog({ vendorId }: AddContactDialogProps) { const [open, setOpen] = React.useState(false) // react-hook-form 세팅 const form = useForm({ resolver: zodResolver(createTechVendorContactSchema), defaultValues: { // vendorId는 form에 표시할 필요가 없다면 hidden으로 관리하거나, submit 시 추가 vendorId, contactName: "", contactPosition: "", contactTitle: "", contactEmail: "", contactPhone: "", contactCountry: "", isPrimary: false, }, }) async function onSubmit(data: CreateTechVendorContactSchema) { // 혹은 여기서 data.vendorId = vendorId; 해줘도 됨 const result = await createTechVendorContact(data) if (result.error) { alert(`에러: ${result.error}`) return } // 성공 시 메시지 표시 if (result.data?.message) { alert(result.data.message) } // 성공 시 모달 닫고 폼 리셋 form.reset() setOpen(false) } function handleDialogOpenChange(nextOpen: boolean) { if (!nextOpen) { form.reset() } setOpen(nextOpen) } return ( {/* 모달을 열기 위한 버튼 */} Create New Contact 새 Contact 정보를 입력하고 Create 버튼을 누르세요. {/* shadcn/ui Form을 이용해 react-hook-form과 연결 */}
( Contact Name )} /> ( Position / Title )} /> ( Contact Title )} /> ( Email )} /> ( Phone )} /> ( Contact Country )} /> {/* 단순 checkbox */} (
field.onChange(e.target.checked)} /> Is Primary?
)} />
) }