"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 { Textarea } from "@/components/ui/textarea" import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form" import { Loader } from "lucide-react" import { toast } from "sonner" import { createNewRevisionSchema, type CreateNewRevisionSchema } from "@/lib/gtc-contract/validations" import { createNewRevision } from "@/lib/gtc-contract/service" import { type GtcDocumentWithRelations } from "@/db/schema/gtc" interface CreateNewRevisionDialogProps { open: boolean onOpenChange: (open: boolean) => void originalDocument: GtcDocumentWithRelations | null } export function CreateNewRevisionDialog({ open, onOpenChange, originalDocument, }: CreateNewRevisionDialogProps) { const [isCreatePending, startCreateTransition] = React.useTransition() const form = useForm({ resolver: zodResolver(createNewRevisionSchema), defaultValues: { editReason: "", }, }) // 다이얼로그가 열릴 때마다 폼 초기화 React.useEffect(() => { if (open && originalDocument) { form.reset({ editReason: "", }) } }, [open, originalDocument, form]) async function onSubmit(data: CreateNewRevisionSchema) { if (!originalDocument) { toast.error("원본 문서 정보가 없습니다.") return } startCreateTransition(async () => { try { const result = await createNewRevision(originalDocument.id, data) if (result.error) { toast.error(`에러: ${result.error}`) return } form.reset() onOpenChange(false) toast.success(`새 리비전 v${result.revision}이 생성되었습니다.`) } catch (error) { toast.error("리비전 생성 중 오류가 발생했습니다.") } }) } function handleDialogOpenChange(nextOpen: boolean) { if (!nextOpen) { form.reset() } onOpenChange(nextOpen) } if (!originalDocument) return null return ( Create New Revision 기존 문서의 새로운 리비전을 생성합니다. {/* 원본 문서 정보 표시 */}
원본 문서 정보
구분: {originalDocument.type === "standard" ? "표준" : "프로젝트"}
{originalDocument.project && (
프로젝트: {originalDocument.project.name} ({originalDocument.project.code})
)}
현재 리비전: v{originalDocument.revision}
{/* 편집 사유 (필수) */} ( 편집 사유 *