"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 { z } from "zod" import { useRouter } from "next/navigation" import { Button } from "@/components/ui/button" import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form" import { Input } from "@/components/ui/input" import { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, } from "@/components/ui/sheet" import { type ApprovalTemplate } from "@/lib/approval-template/service" import { duplicateApprovalTemplate } from "../service" import { useSession } from "next-auth/react" const duplicateSchema = z.object({ name: z.string().min(1, "템플릿 이름은 필수입니다").max(100, "100자 이내여야 합니다"), }) type DuplicateSchema = z.infer interface DuplicateApprovalTemplateSheetProps extends React.ComponentPropsWithRef { template: ApprovalTemplate | null } export function DuplicateApprovalTemplateSheet({ template, ...props }: DuplicateApprovalTemplateSheetProps) { const [isPending, startTransition] = React.useTransition() const router = useRouter() const { data: session } = useSession() const form = useForm({ resolver: zodResolver(duplicateSchema), defaultValues: { name: "" }, }) React.useEffect(() => { if (template) { form.reset({ name: `${template.name} (복사본)` }) } }, [template, form]) function onSubmit(values: DuplicateSchema) { startTransition(async () => { if (!template) return if (!session?.user?.id) { toast.error("로그인이 필요합니다") return } const { success, error, data } = await duplicateApprovalTemplate( template.id, values.name, Number(session.user.id), ) if (!success || error) { toast.error(error ?? "복제에 실패했습니다") return } toast.success("템플릿이 복제되었습니다") props.onOpenChange?.(false) // 상세 페이지로 이동 (id 기반) if (data?.id) { router.push(`/evcp/approval/template/${data.id}`) } else { window.location.reload() } }) } return ( 템플릿 복제 기존 템플릿을 복사하여 새로운 템플릿을 생성합니다. {template && (

원본 템플릿

이름: {template.name}
ID: {template.id}
카테고리: {template.category ?? "-"}
)}
( 새 템플릿 이름 )} />
) }