"use client" import * as React from "react" import { useForm } from "react-hook-form" import { zodResolver } from "@hookform/resolvers/zod" import { z } from "zod" import { Button } from "@/components/ui/button" import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle, } from "@/components/ui/sheet" import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form" import { Input } from "@/components/ui/input" import { Textarea } from "@/components/ui/textarea" import { toast } from "sonner" import { Loader2, Copy } from "lucide-react" import { duplicateApprovalLine } from "../service" import { type ApprovalLine } from "../service" import { useSession } from "next-auth/react" const duplicateSchema = z.object({ name: z.string().min(1, "결재선 이름은 필수입니다"), description: z.string().optional(), }) type DuplicateFormData = z.infer interface DuplicateApprovalLineSheetProps { open: boolean onOpenChange: (open: boolean) => void line: ApprovalLine | null } export function DuplicateApprovalLineSheet({ open, onOpenChange, line, }: DuplicateApprovalLineSheetProps) { const { data: session } = useSession() const [isSubmitting, setIsSubmitting] = React.useState(false) const form = useForm({ resolver: zodResolver(duplicateSchema), defaultValues: { name: line ? `${line.name} (복사본)` : "", description: line?.description ? `${line.description} (복사본)` : "", }, }) // line이 변경될 때 폼 초기화 React.useEffect(() => { if (line) { form.reset({ name: `${line.name} (복사본)`, description: line.description ? `${line.description} (복사본)` : "", }) } }, [line, form]) const onSubmit = async (data: DuplicateFormData) => { if (!line || !session?.user?.id) { toast.error("복제할 결재선이 없거나 로그인이 필요합니다.") return } setIsSubmitting(true) try { const result = await duplicateApprovalLine( line.id, data.name, session.user.id ) if (result.success) { toast.success("결재선이 성공적으로 복제되었습니다.") form.reset() onOpenChange(false) } else { toast.error(result.error || "복제에 실패했습니다.") } } catch (error) { toast.error("복제 중 오류가 발생했습니다.") } finally { setIsSubmitting(false) } } if (!line) return null return ( 결재선 복제 "{line.name}" 결재선을 복제하여 새로운 결재선을 만듭니다.
{/* 원본 정보 표시 */}

원본 결재선 정보

이름: {line.name}
{line.description && (
설명: {line.description}
)}
결재자: {(line.aplns as any[])?.length || 0}명
{/* 새 결재선 정보 */}
( 새 결재선 이름 * 원본과 구분할 수 있는 이름을 입력하세요. )} /> ( 설명