"use client" import * as React from "react" import { zodResolver } from "@hookform/resolvers/zod" import { useForm } from "react-hook-form" import { CalendarIcon, Loader } from "lucide-react" import { format } from "date-fns" import { toast } from "sonner" import { Button } from "@/components/ui/button" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form" import { Textarea } from "@/components/ui/textarea" import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { Calendar } from "@/components/ui/calendar" import { Popover, PopoverContent, PopoverTrigger, } from "@/components/ui/popover" import { z } from "zod" // Validation schema for editing investigation const editInvestigationSchema = z.object({ confirmedAt: z.union([ z.date(), z.string().transform((str) => str ? new Date(str) : undefined) ]).optional(), evaluationResult: z.enum(["APPROVED", "SUPPLEMENT", "REJECTED"]).optional(), investigationNotes: z.string().max(1000, "QM 의견은 1000자 이내로 입력해주세요.").optional(), }) type EditInvestigationSchema = z.infer interface EditInvestigationDialogProps { isOpen: boolean onClose: () => void investigation: { id: number confirmedAt?: Date | null evaluationResult?: string | null investigationNotes?: string | null } | null onSubmit: (data: EditInvestigationSchema) => Promise } export function EditInvestigationDialog({ isOpen, onClose, investigation, onSubmit, }: EditInvestigationDialogProps) { const [isPending, startTransition] = React.useTransition() const form = useForm({ resolver: zodResolver(editInvestigationSchema), defaultValues: { confirmedAt: investigation?.confirmedAt || undefined, evaluationResult: investigation?.evaluationResult as "APPROVED" | "SUPPLEMENT" | "REJECTED" | undefined, investigationNotes: investigation?.investigationNotes || "", }, }) // Reset form when investigation changes React.useEffect(() => { if (investigation) { form.reset({ confirmedAt: investigation.confirmedAt || undefined, evaluationResult: investigation.evaluationResult as "APPROVED" | "SUPPLEMENT" | "REJECTED" | undefined, investigationNotes: investigation.investigationNotes || "", }) } }, [investigation, form]) const handleSubmit = async (values: EditInvestigationSchema) => { startTransition(async () => { try { await onSubmit(values) toast.success("실사 정보가 업데이트되었습니다!") onClose() } catch (error) { console.error("실사 정보 업데이트 오류:", error) toast.error("실사 정보 업데이트 중 오류가 발생했습니다.") } }) } return ( 실사 정보 수정 구매자체평가 실사 정보를 수정합니다.
{/* 실사 확정일 */} ( 실사 확정일 )} /> {/* 평가 결과 */} ( 평가 결과 )} /> {/* QM 의견 */} ( QM 의견