"use client" import * as React from "react" import { useForm } from "react-hook-form" import { zodResolver } from "@hookform/resolvers/zod" import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription, DialogFooter } from "@/components/ui/dialog" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form" import { updateVendorContactSchema, type UpdateVendorContactSchema, } from "../validations" import { updateVendorContact } from "../service" import { VendorContact } from "@/db/schema/vendors" interface EditContactDialogProps { contact: VendorContact | null open: boolean onOpenChange: (open: boolean) => void onSuccess: () => void } export function EditContactDialog({ contact, open, onOpenChange, onSuccess }: EditContactDialogProps) { // 담당업무 옵션 const taskOptions = [ { value: "회사대표", label: "회사대표 President/Director" }, { value: "영업관리", label: "영업관리 Sales Management" }, { value: "설계/기술", label: "설계/기술 Engineering/Design" }, { value: "구매", label: "구매 Procurement" }, { value: "납기/출하/운송", label: "납기/출하/운송 Delivery Control" }, { value: "PM/생산관리", label: "PM/생산관리 PM/Manufacturing" }, { value: "품질관리", label: "품질관리 Quality Management" }, { value: "세금계산서/납품서관리", label: "세금계산서/납품서관리 Shipping Doc. Management" }, { value: "A/S 관리", label: "A/S 관리 A/S Management" }, { value: "FSE", label: "FSE(야드작업자) Field Service Engineer" } ] // react-hook-form 세팅 const form = useForm({ resolver: zodResolver(updateVendorContactSchema), defaultValues: { contactName: "", contactPosition: "", contactDepartment: "", contactTask: "", contactEmail: "", contactPhone: "", isPrimary: false, }, }) // contact가 변경되면 폼 초기화 React.useEffect(() => { if (contact) { form.reset({ contactName: contact.contactName || "", contactPosition: contact.contactPosition || "", contactDepartment: contact.contactDepartment || "", contactTask: contact.contactTask || "", contactEmail: contact.contactEmail || "", contactPhone: contact.contactPhone || "", isPrimary: contact.isPrimary || false, }) } }, [contact, form]) async function onSubmit(data: UpdateVendorContactSchema) { if (!contact) return const result = await updateVendorContact(contact.id, data) if (result.error) { alert(`에러: ${result.error}`) return } // 성공 시 모달 닫고 폼 리셋 form.reset() onOpenChange(false) onSuccess() } function handleDialogOpenChange(nextOpen: boolean) { if (!nextOpen) { form.reset() } onOpenChange(nextOpen) } if (!contact) return null return ( 연락처 수정 연락처 정보를 수정하고 Update 버튼을 누르세요. {/* shadcn/ui Form을 이용해 react-hook-form과 연결 */}
( 담당자명 )} /> ( 직급 )} /> ( 부서 )} /> ( 담당업무 )} /> ( 이메일 )} /> ( 전화번호 )} />
) }