import { useState } from "react"; import type { ContractTemplate, Phase, Deliverable } from "../../types/templates"; interface Props { template: ContractTemplate; onSave: (template: ContractTemplate) => void; onCancel: () => void; } export function TemplateEditor({ template, onSave, onCancel }: Props) { const [editedTemplate, setEditedTemplate] = useState({ ...template, phases: template.phases.map((p) => ({ ...p, deliverables: [...p.deliverables], })), }); const [newDeliverableName, setNewDeliverableName] = useState<{ [phaseId: string]: string; }>({}); const handlePhaseNameChange = (phaseId: string, newName: string) => { setEditedTemplate((prev) => ({ ...prev, phases: prev.phases.map((p) => p.id === phaseId ? { ...p, name: newName } : p ), })); }; const handleDeliverableNameChange = ( phaseId: string, deliverableId: string, newName: string ) => { setEditedTemplate((prev) => ({ ...prev, phases: prev.phases.map((p) => p.id === phaseId ? { ...p, deliverables: p.deliverables.map((d) => d.id === deliverableId ? { ...d, name: newName } : d ), } : p ), })); }; const handleAddDeliverable = (phaseId: string) => { const name = newDeliverableName[phaseId]?.trim(); if (!name) return; const newDeliverable: Deliverable = { id: `deliverable-${Date.now()}`, name, }; setEditedTemplate((prev) => ({ ...prev, phases: prev.phases.map((p) => p.id === phaseId ? { ...p, deliverables: [...p.deliverables, newDeliverable] } : p ), })); setNewDeliverableName((prev) => ({ ...prev, [phaseId]: "" })); }; const handleRemoveDeliverable = (phaseId: string, deliverableId: string) => { setEditedTemplate((prev) => ({ ...prev, phases: prev.phases.map((p) => p.id === phaseId ? { ...p, deliverables: p.deliverables.filter((d) => d.id !== deliverableId), } : p ), })); }; const handleAddPhase = () => { const newPhase: Phase = { id: `phase-${Date.now()}`, name: "New Phase", deliverables: [], }; setEditedTemplate((prev) => ({ ...prev, phases: [...prev.phases, newPhase], })); }; const handleRemovePhase = (phaseId: string) => { setEditedTemplate((prev) => ({ ...prev, phases: prev.phases.filter((p) => p.id !== phaseId), })); }; return (
{/* Header */}

Edit Template: {template.name}

{template.description}

{/* Phases */}
{editedTemplate.phases.map((phase, phaseIndex) => (
{/* Phase Header */}
{phaseIndex + 1} handlePhaseNameChange(phase.id, e.target.value)} placeholder="Phase name" /> {!template.isBuiltIn && ( )}
{/* Deliverables */}
{phase.deliverables.length === 0 ? (
No deliverables
) : ( phase.deliverables.map((deliverable) => (
- handleDeliverableNameChange( phase.id, deliverable.id, e.target.value ) } />
)) )} {/* Add Deliverable */}
setNewDeliverableName((prev) => ({ ...prev, [phase.id]: e.target.value, })) } onKeyPress={(e) => { if (e.key === "Enter") { handleAddDeliverable(phase.id); } }} />
))}
{/* Add Phase (only for custom templates) */} {!template.isBuiltIn && ( )} {/* Footer Actions */}
); }