feat(registratura): auto-detect {proiect} placeholder in subject and switch to template mode
Typing {proiect}, {nr}, {an}, {detalii} or {text} in the subject field
now auto-transforms to template mode with the appropriate input widgets
(project dropdown, number fields, etc.).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -27,6 +27,7 @@ import {
|
||||
filterSubjects,
|
||||
getRecommendedTemplates,
|
||||
getSubjectPlaceholder,
|
||||
createDynamicTemplate,
|
||||
} from "../services/subject-template-service";
|
||||
import type { SubjectTemplate } from "../services/subject-template-service";
|
||||
import { SubjectTemplateInput } from "./subject-template-input";
|
||||
@@ -912,6 +913,7 @@ export function RegistryEntryForm({
|
||||
<li>Contract nr. 15/2026 — Proiect X</li>
|
||||
</ul>
|
||||
<p className="text-muted-foreground">Selecteaza un sablon sau tasteaza liber.</p>
|
||||
<p className="text-muted-foreground mt-1">Tip: scrie <span className="font-mono text-foreground">{"{proiect}"}</span> pentru dropdown de proiecte.</p>
|
||||
</div>
|
||||
) : (
|
||||
<div className="text-xs space-y-1">
|
||||
@@ -923,6 +925,7 @@ export function RegistryEntryForm({
|
||||
<li>Notificare incepere lucrari — Proiect X</li>
|
||||
</ul>
|
||||
<p className="text-muted-foreground">Selecteaza un sablon sau tasteaza liber.</p>
|
||||
<p className="text-muted-foreground mt-1">Tip: scrie <span className="font-mono text-foreground">{"{proiect}"}</span> pentru dropdown de proiecte.</p>
|
||||
</div>
|
||||
)}
|
||||
</TooltipContent>
|
||||
@@ -949,8 +952,29 @@ export function RegistryEntryForm({
|
||||
<Input
|
||||
value={subjectQuery}
|
||||
onChange={(e) => {
|
||||
setSubjectQuery(e.target.value);
|
||||
setSubject(e.target.value);
|
||||
const val = e.target.value;
|
||||
setSubjectQuery(val);
|
||||
setSubject(val);
|
||||
|
||||
// Auto-detect {proiect}, {nr}, {an}, {detalii}, {text} placeholders
|
||||
// and switch to template mode when a closing } is typed
|
||||
if (val.includes("{") && val.includes("}")) {
|
||||
const dynTemplate = createDynamicTemplate(val);
|
||||
if (dynTemplate) {
|
||||
// Pre-fill default values (e.g. current year for {an})
|
||||
const prefill: Record<string, string> = {};
|
||||
for (const field of dynTemplate.fields) {
|
||||
if (field.defaultValue) {
|
||||
prefill[field.id] = field.defaultValue;
|
||||
}
|
||||
}
|
||||
setActiveTemplate(dynTemplate);
|
||||
setTemplateFieldValues(prefill);
|
||||
setSubject(assembleSubject(dynTemplate, prefill));
|
||||
setSubjectFocused(false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}}
|
||||
onFocus={() => setSubjectFocused(true)}
|
||||
onBlur={() => setTimeout(() => setSubjectFocused(false), 200)}
|
||||
|
||||
Reference in New Issue
Block a user