import React, { useState } from 'react' import { ContractTemplate, Phase, Deliverable } from '../../types' type Props = { template: ContractTemplate onSave: (template: ContractTemplate) => void onCancel: () => void } export const TemplateEditor: React.FC = ({ template, onSave, onCancel }) => { 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 (

Edit Template: {template.name}

{template.description}

{editedTemplate.phases.map((phase, phaseIndex) => (
{phaseIndex + 1} handlePhaseNameChange(phase.id, e.target.value)} placeholder="Phase name" /> {!template.isBuiltIn && ( )}
{phase.deliverables.length === 0 ? (
No deliverables
) : ( phase.deliverables.map(deliverable => (
handleDeliverableNameChange(phase.id, deliverable.id, e.target.value)} />
)) )}
setNewDeliverableName(prev => ({ ...prev, [phase.id]: e.target.value }))} onKeyPress={(e) => { if (e.key === 'Enter') { handleAddDeliverable(phase.id) } }} />
))}
{!template.isBuiltIn && ( )}
) }