fix(quadri-editor): bottone 'Aggiungi campo' sempre visibile (anche su Quadri B/F/G)

Bug: nei quadri B (titolari row_type), F (upload_slots), G (legal frame), la key
'fields' non esisteva nel questions_snapshot → la condizione (q.fields !== undefined)
nascondeva tutto il blocco 'Campi' incluso il bottone 'Aggiungi campo'. Carlo non
poteva aggiungere campi normali a questi 3 quadri.

Fix:
  - Rimosso condizionale (q.fields !== undefined): blocco 'Campi' sempre renderizzato
  - Count dinamico '(q.fields || []).length' mostra 0 se non esiste
  - Messaggio 'Nessun campo diretto. Aggiungine uno col bottone...' contestuale:
    - Se row_type presente -> 'o usa i Campi riga per i titolari_effettivi'
    - Se nested_full presente -> 'o usa i Campi annidati qui sotto'
  - addField ora genera id univoco con prefisso quadro:
    'campo_a_17', 'campo_b_1', 'campo_g_1' invece del semplice 'campo_1' che
    poteva collidere tra quadri dello stesso template
This commit is contained in:
BFLOWS
2026-04-23 16:30:57 +02:00
parent 8f9e3d5622
commit 09da2b7c25

View File

@@ -100,8 +100,9 @@ const QuadriStructureEditor = ({ value, onChange }) => {
const addField = (qIdx) => {
const q = quadri[qIdx];
const fields = q.fields || [];
// id basato su letter quadro + numero crescente per evitare collisioni
const newField = {
id: `campo_${fields.length + 1}`,
id: `campo_${q.id || 'X'}_${fields.length + 1}`.toLowerCase(),
type: 'text',
label: 'Nuovo campo',
required: false
@@ -350,28 +351,31 @@ const QuadriStructureEditor = ({ value, onChange }) => {
text="Quadro normativo (D.Lgs. 231/2007). Il testo dichiara responsabilita legali del firmatario. Modifica con massima cautela: il contenuto viene inserito nel PDF firmato dal beneficiario." />
)}
{/* Fields normali */}
{(q.fields !== undefined) && (
<>
<div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: 6 }}>
<strong style={{ fontSize: 13 }}>Campi ({(q.fields || []).length})</strong>
<Button label="Aggiungi campo" icon="pi pi-plus" size="small" outlined
onClick={() => addField(qIdx)} />
</div>
{(q.fields || []).map((f, fIdx) =>
renderFieldRow(f, fIdx,
(p) => updateField(qIdx, fIdx, p),
() => removeField(qIdx, fIdx),
() => moveField(qIdx, fIdx, -1),
() => moveField(qIdx, fIdx, 1),
(q.fields || []).length
)
)}
{(!q.fields || q.fields.length === 0) && !q.row_type && !q.nested_full && (
<p style={{ color: '#888', fontStyle: 'italic', textAlign: 'center' }}>Nessun campo. Aggiungine uno.</p>
)}
</>
)}
{/* Fields normali — sempre mostrato, anche se q.fields non esiste (Quadri B/F/G) */}
<>
<div style={{ display: 'flex', justifyContent: 'space-between', marginBottom: 6 }}>
<strong style={{ fontSize: 13 }}>Campi ({(q.fields || []).length})</strong>
<Button label="Aggiungi campo" icon="pi pi-plus" size="small" outlined
onClick={() => addField(qIdx)} />
</div>
{(q.fields || []).map((f, fIdx) =>
renderFieldRow(f, fIdx,
(p) => updateField(qIdx, fIdx, p),
() => removeField(qIdx, fIdx),
() => moveField(qIdx, fIdx, -1),
() => moveField(qIdx, fIdx, 1),
(q.fields || []).length
)
)}
{(!q.fields || q.fields.length === 0) && (
<p style={{ color: '#888', fontStyle: 'italic', textAlign: 'center', fontSize: 12 }}>
Nessun campo diretto. Aggiungine uno col bottone qui sopra
{q.row_type ? ` (o usa i "Campi riga" qui sotto per i ${q.row_type})` : ''}
{q.nested_full ? ' (o usa i "Campi annidati" qui sotto)' : ''}
.
</p>
)}
</>
{/* Row fields (Quadro B titolari) */}
{q.row_type && (