diff --git a/src/modules/ar1/pages/Ar1Wizard.js b/src/modules/ar1/pages/Ar1Wizard.js index 5c09ccb..acc8a89 100644 --- a/src/modules/ar1/pages/Ar1Wizard.js +++ b/src/modules/ar1/pages/Ar1Wizard.js @@ -55,6 +55,19 @@ const Ar1Wizard = () => { return false; }; + // show_if formati seed: "campo == 'VALORE'", "campo == true", "campo != true" + const evalShowIf = (expr, quadroData) => { + if (!expr) return true; + const m = String(expr).match(/^\s*(\w+)\s*(==|!=)\s*(?:'(.*)'|(true|false))\s*$/); + if (!m) return true; // formato ignoto: non nascondere mai per errore + const raw = (quadroData || {})[m[1]]; + const val = raw && typeof raw === 'object' && 'value' in raw ? raw.value : raw; + const target = m[4] !== undefined ? (m[4] === 'true') : m[3]; + const eq = m[4] !== undefined ? (!!val === target) : (String(val ?? '') === target); + return m[2] === '==' ? eq : !eq; + }; + const isFieldVisible = (field, quadroData) => evalShowIf(field.show_if, quadroData); + const validateQuadro = (quadro, data) => { const errs = []; const d = data || {}; @@ -78,8 +91,14 @@ const Ar1Wizard = () => { if (sl.required && isEmptyVal(d[sl.id])) errs.push(`Quadro ${quadro.id}: allegato obbligatorio — ${sl.label}`); }); (quadro.fields || []).forEach(f => { - if (f.required && !f.show_if && isEmptyVal(d[f.id])) errs.push(`Quadro ${quadro.id}: ${f.label}`); + if (f.required && isFieldVisible(f, d) && isEmptyVal(d[f.id])) errs.push(`Quadro ${quadro.id}: ${f.label}`); }); + if (quadro.nested_full && evalShowIf(quadro.nested_full.show_if, d)) { + const nd = d.nested || {}; + (quadro.nested_full.fields || []).forEach(f => { + if (f.required && isFieldVisible(f, nd) && isEmptyVal(nd[f.id])) errs.push(`Quadro ${quadro.id} (dettaglio): ${f.label}`); + }); + } return errs; }; @@ -416,8 +435,8 @@ const Ar1Wizard = () => {

{quadro.title}

{quadro.description &&

{quadro.description}

} - {(quadro.fields || []).map(field => renderField(field, q[field.id], (fid, val) => handleFieldChange(quadro.id, fid, val), `q-${quadro.id}`))} - {quadro.nested_full && ( + {(quadro.fields || []).filter(field => isFieldVisible(field, q)).map(field => renderField(field, q[field.id], (fid, val) => handleFieldChange(quadro.id, fid, val), `q-${quadro.id}`))} + {quadro.nested_full && evalShowIf(quadro.nested_full.show_if, q) && (

{__('Dettaglio aggiuntivo', 'gepafin')}

{(quadro.nested_full.fields || []).map(field => renderField(