"use client" import * as React from "react" import { zodResolver } from "@hookform/resolvers/zod" import { Loader } from "lucide-react" import { useForm } from "react-hook-form" import { toast } from "sonner" import { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, } from "@/components/ui/sheet" import { Button } from "@/components/ui/button" import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form" import { Textarea } from "@/components/ui/textarea" import { useRouter } from "next/navigation"; import { type GtcDocumentWithRelations } from "@/db/schema/gtc" import { updateGtcDocumentSchema, type UpdateGtcDocumentSchema } from "@/lib/gtc-contract/validations" import { updateGtcDocument } from "@/lib/gtc-contract/service" import { Input } from "@/components/ui/input" export interface UpdateGtcDocumentSheetProps extends React.ComponentPropsWithRef { gtcDocument: GtcDocumentWithRelations | null } export function UpdateGtcDocumentSheet({ gtcDocument, ...props }: UpdateGtcDocumentSheetProps) { const [isUpdatePending, startUpdateTransition] = React.useTransition() const router = useRouter(); const form = useForm({ resolver: zodResolver(updateGtcDocumentSchema), defaultValues: { editReason: "", title: "", isActive: gtcDocument?.isActive ?? true, }, }) // gtcDocument prop 바뀔 때마다 form.reset React.useEffect(() => { if (gtcDocument) { form.reset({ editReason: gtcDocument.editReason, title:gtcDocument.title, isActive: gtcDocument.isActive, }) } }, [gtcDocument, form]) async function onSubmit(input: UpdateGtcDocumentSchema) { startUpdateTransition(async () => { if (!gtcDocument) return try { const result = await updateGtcDocument(gtcDocument.id, input) if (result.error) { toast.error(result.error) return } form.reset() props.onOpenChange?.(false) router.refresh(); toast.success("GTC 문서가 업데이트되었습니다!") } catch (error) { toast.error("문서 업데이트 중 오류가 발생했습니다.") } }) } return ( Update GTC Document GTC 문서 정보를 수정하고 변경사항을 저장하세요
{/* 문서 정보 표시 */}
현재 문서 정보
구분: {gtcDocument?.type === "standard" ? "표준" : "프로젝트"}
{gtcDocument?.project && (
프로젝트: {gtcDocument.project.name} ({gtcDocument.project.code})
)}
리비전: v{gtcDocument?.revision}
( GTC 제목 (선택사항) 워드의 제목으로 사용됩니다. )} /> {/* 편집 사유 */} ( 편집 사유 (권장)