"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 { CreateTemplateDto } from "@/types/numbering"; const VARIABLES = [ { key: "{ORG}", name: "Organization Code", example: "กทท" }, { key: "{DOCTYPE}", name: "Document Type", example: "CORR" }, { key: "{DISC}", name: "Discipline", example: "STR" }, { key: "{YYYY}", name: "Year (4-digit)", example: "2025" }, { key: "{YY}", name: "Year (2-digit)", example: "25" }, { key: "{MM}", name: "Month", example: "12" }, { key: "{SEQ}", name: "Sequence Number", example: "0001" }, { key: "{CONTRACT}", name: "Contract Code", example: "C01" }, ]; interface TemplateEditorProps { initialData?: Partial; onSave: (data: CreateTemplateDto) => void; } export function TemplateEditor({ initialData, onSave }: TemplateEditorProps) { const [formData, setFormData] = useState({ document_type_id: initialData?.document_type_id || "", discipline_code: initialData?.discipline_code || "", template_format: initialData?.template_format || "", reset_annually: initialData?.reset_annually ?? true, padding_length: initialData?.padding_length || 4, starting_number: initialData?.starting_number || 1, }); const [preview, setPreview] = useState(""); useEffect(() => { // Generate preview let previewText = formData.template_format; VARIABLES.forEach((v) => { // Escape special characters for regex if needed, but simple replaceAll is safer for fixed strings previewText = previewText.split(v.key).join(v.example); }); setPreview(previewText); }, [formData.template_format]); const insertVariable = (variable: string) => { setFormData((prev) => ({ ...prev, template_format: prev.template_format + variable, })); }; return (

Template Configuration

setFormData({ ...formData, template_format: e.target.value })} placeholder="e.g., {ORG}-{DOCTYPE}-{YYYY}-{SEQ}" className="font-mono" />
{VARIABLES.map((v) => ( ))}

Example number:

{preview || "Enter format above"}

setFormData({ ...formData, padding_length: parseInt(e.target.value) })} min={1} max={10} />

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

setFormData({ ...formData, starting_number: parseInt(e.target.value) })} min={1} />
{/* Variable Reference */}

Available Variables

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

{v.name}

{v.example}
))}
); }