'use client'; import { useState, useEffect } from 'react'; import { Card } from '@/components/ui/card'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Button } from '@/components/ui/button'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { Checkbox } from '@/components/ui/checkbox'; import { Badge } from '@/components/ui/badge'; import { NumberingTemplate } from '@/lib/api/numbering'; const DOCUMENT_TYPES = [ { value: 'RFA', label: 'Request for Approval (RFA)' }, { value: 'RFI', label: 'Request for Information (RFI)' }, { value: 'TRANSMITTAL', label: 'Transmittal' }, { value: 'EMAIL', label: 'Email' }, { value: 'INSTRUCTION', label: 'Instruction' }, { value: 'LETTER', label: 'Letter' }, { value: 'MEMO', label: 'Memorandum' }, { value: 'MOM', label: 'Minutes of Meeting' }, { value: 'NOTICE', label: 'Notice' }, { value: 'OTHER', label: 'Other' }, ]; const VARIABLES = [ { key: '{PROJECT}', name: 'Project Code', example: 'LCBP3' }, { key: '{ORIGINATOR}', name: 'Originator Code', example: 'PAT' }, { key: '{RECIPIENT}', name: 'Recipient Code', example: 'CN' }, { key: '{CORR_TYPE}', name: 'Correspondence Type', example: 'RFA' }, { key: '{SUB_TYPE}', name: 'Sub Type', example: '21' }, { key: '{DISCIPLINE}', name: 'Discipline', example: 'STR' }, { key: '{RFA_TYPE}', name: 'RFA Type', example: 'SDW' }, { key: '{YEAR:B.E.}', name: 'Year (B.E.)', example: '2568' }, { key: '{YEAR:A.D.}', name: 'Year (A.D.)', example: '2025' }, { key: '{SEQ:4}', name: 'Sequence (4-digit)', example: '0001' }, { key: '{REV}', name: 'Revision', example: 'A' }, ]; export interface TemplateEditorProps { template?: NumberingTemplate; projectId: number; projectName: string; onSave: (data: Partial) => void; onCancel: () => void; } export function TemplateEditor({ template, projectId, projectName, onSave, onCancel }: TemplateEditorProps) { const [format, setFormat] = useState(template?.templateFormat || ''); const [docType, setDocType] = useState(template?.documentTypeName || ''); const [discipline, setDiscipline] = useState(template?.disciplineCode || ''); const [padding, setPadding] = useState(template?.paddingLength || 4); const [reset, setReset] = useState(template?.resetAnnually ?? true); const [preview, setPreview] = useState(''); useEffect(() => { // Generate preview let previewText = format || ''; VARIABLES.forEach((v) => { let replacement = v.example; // Dynamic preview for dates to be more realistic if (v.key === '{YYYY}') replacement = new Date().getFullYear().toString(); if (v.key === '{YY}') replacement = new Date().getFullYear().toString().slice(-2); if (v.key === '{THXXXX}') replacement = (new Date().getFullYear() + 543).toString(); if (v.key === '{THXX}') replacement = (new Date().getFullYear() + 543).toString().slice(-2); previewText = previewText.replace(new RegExp(v.key.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'g'), replacement); }); setPreview(previewText); }, [format]); const insertVariable = (variable: string) => { setFormat((prev) => prev + variable); }; const handleSave = () => { onSave({ ...template, projectId: projectId, templateFormat: format, documentTypeName: docType, disciplineCode: discipline || undefined, paddingLength: padding, resetAnnually: reset, exampleNumber: preview }); }; return (

{template ? 'Edit Template' : 'New Template'}

Project: {projectName}
setFormat(e.target.value)} placeholder="e.g., {ORIGINATOR}-{RECIPIENT}-{DOCTYPE}-{YYYY}-{SEQ}" className="font-mono text-base" />
{VARIABLES.map((v) => ( ))}

Example number:

{preview || 'Enter format above'}

setPadding(Number(e.target.value))} min={1} max={10} />

Number of digits (e.g., 4 = 0001)

{/* Variable Reference */}

Available Variables

{VARIABLES.map((v) => (
{v.key}

{v.name}

{v.example}
))}
); }