// lib/project-doc-template/template-edit-sheet.tsx "use client"; import * as React from "react"; import { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle, SheetFooter, } from "@/components/ui/sheet"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { Textarea } from "@/components/ui/textarea"; import { Badge } from "@/components/ui/badge"; import { Switch } from "@/components/ui/switch"; import { toast } from "sonner"; import { updateProjectDocTemplate } from "@/lib/project-doc-templates/service"; import type { ProjectDocTemplate, DocTemplateVariable } from "@/db/schema/project-doc-templates"; import { Plus, X, Save, Loader2 } from "lucide-react"; interface TemplateEditSheetProps { template: ProjectDocTemplate | null; open: boolean; onOpenChange: (open: boolean) => void; onSuccess?: () => void; } export function TemplateEditSheet({ template, open, onOpenChange, onSuccess, }: TemplateEditSheetProps) { const [isLoading, setIsLoading] = React.useState(false); const [formData, setFormData] = React.useState({ templateName: "", description: "", variables: [] as DocTemplateVariable[], status: "ACTIVE", }); // 템플릿 데이터 로드 React.useEffect(() => { if (template && open) { setFormData({ templateName: template.templateName || "", description: template.description || "", variables: template.variables || [], status: template.status || "ACTIVE", }); } }, [template, open]); // 변수 추가 const addVariable = () => { setFormData({ ...formData, variables: [ ...formData.variables, { name: "", displayName: "", type: "text", required: false, defaultValue: "", description: "", }, ], }); }; // 변수 제거 const removeVariable = (index: number) => { setFormData({ ...formData, variables: formData.variables.filter((_, i) => i !== index), }); }; // 변수 업데이트 const updateVariable = (index: number, field: string, value: any) => { const updatedVariables = [...formData.variables]; updatedVariables[index] = { ...updatedVariables[index], [field]: value, }; setFormData({ ...formData, variables: updatedVariables, }); }; // 저장 처리 const handleSave = async () => { if (!template) return; setIsLoading(true); try { const result = await updateProjectDocTemplate(template.id, { templateName: formData.templateName, description: formData.description, variables: formData.variables, status: formData.status, }); if (result.success) { toast.success("템플릿이 수정되었습니다."); onOpenChange(false); onSuccess?.(); } else { throw new Error(result.error); } } catch (error) { console.error("Failed to update template:", error); toast.error(error instanceof Error ? error.message : "템플릿 수정에 실패했습니다."); } finally { setIsLoading(false); } }; return ( 템플릿 수정 템플릿 정보와 변수를 수정할 수 있습니다. 파일을 변경하려면 새 버전을 생성하세요.
{/* 기본 정보 */}
setFormData({ ...formData, templateName: e.target.value })} placeholder="템플릿 이름을 입력하세요" />