@rsuci/shared-form-components 1.0.23 → 1.0.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/GroupRenderer.d.ts +4 -0
- package/dist/components/GroupRenderer.d.ts.map +1 -1
- package/dist/components/GroupRenderer.js +24 -5
- package/dist/components/VariableRenderer.d.ts.map +1 -1
- package/dist/components/VariableRenderer.js +14 -0
- package/dist/lib/utils/interpolateVariableLabel.d.ts.map +1 -1
- package/dist/lib/utils/interpolateVariableLabel.js +35 -2
- package/package.json +1 -1
|
@@ -21,6 +21,10 @@ interface GroupRendererProps {
|
|
|
21
21
|
onValidation: (errors: ValidationError[]) => void;
|
|
22
22
|
onAutoAction?: (actions: AutoAction[]) => void;
|
|
23
23
|
disabled?: boolean;
|
|
24
|
+
allResponses?: Record<string, EnqueteReponse>;
|
|
25
|
+
interpolateVariableLabel?: (label: string, responses: Record<string, EnqueteReponse>, numeroMembre?: number) => string;
|
|
26
|
+
RosterCheckInput?: React.ComponentType<any>;
|
|
27
|
+
RosterListInput?: React.ComponentType<any>;
|
|
24
28
|
}
|
|
25
29
|
declare const GroupRenderer: React.FC<GroupRendererProps>;
|
|
26
30
|
export default GroupRenderer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GroupRenderer.d.ts","sourceRoot":"","sources":["../../src/components/GroupRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAuC,MAAM,OAAO,CAAC;AAE5D,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,eAAe,EACf,UAAU,EAEX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,UAAU,kBAAkB;IAC1B,MAAM,EAAE,gBAAgB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,+CAA+C;IAC/C,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnF,YAAY,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;IAClD,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"GroupRenderer.d.ts","sourceRoot":"","sources":["../../src/components/GroupRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAuC,MAAM,OAAO,CAAC;AAE5D,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,eAAe,EACf,UAAU,EAEX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,UAAU,kBAAkB;IAC1B,MAAM,EAAE,gBAAgB,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,+CAA+C;IAC/C,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,QAAQ,EAAE,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnF,YAAY,EAAE,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,IAAI,CAAC;IAClD,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC9C,wBAAwB,CAAC,EAAE,CACzB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EACzC,YAAY,CAAC,EAAE,MAAM,KAClB,MAAM,CAAC;IACZ,gBAAgB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;IAC5C,eAAe,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;CAC5C;AAgKD,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CA0V/C,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -20,7 +20,16 @@ const MultipleGroupManager = ({ groupe, entries, onAddEntry, onRemoveEntry, chil
|
|
|
20
20
|
: 'bg-gray-300 text-gray-500 cursor-not-allowed'}`, children: [_jsx(Plus, { className: "h-4 w-4 mr-1" }), "Ajouter"] }))] }), _jsx("div", { className: "space-y-4", children: children })] }));
|
|
21
21
|
};
|
|
22
22
|
// Composant pour une entrée individuelle dans un groupe multiple
|
|
23
|
-
const MultipleGroupEntry = ({ groupe, iterationNumber, totalIterations, visibleVariables, responses, onChange, onRemove, canRemove, disabled }) => {
|
|
23
|
+
const MultipleGroupEntry = ({ groupe, iterationNumber, totalIterations, visibleVariables, responses, onChange, onRemove, canRemove, disabled, allResponses, interpolateVariableLabel, RosterCheckInput, RosterListInput }) => {
|
|
24
|
+
console.log('🔢 [MultipleGroupEntry] Rendu de l\'entrée', {
|
|
25
|
+
groupeCode: groupe.code,
|
|
26
|
+
iterationNumber,
|
|
27
|
+
hasAllResponses: !!allResponses,
|
|
28
|
+
allResponsesKeys: allResponses ? Object.keys(allResponses) : [],
|
|
29
|
+
allResponsesCount: allResponses ? Object.keys(allResponses).length : 0,
|
|
30
|
+
hasInterpolateFunction: !!interpolateVariableLabel,
|
|
31
|
+
visibleVariablesCount: visibleVariables.length
|
|
32
|
+
});
|
|
24
33
|
const entryTitle = groupe.configMultiple?.labelTemplate?.replace('{index}', iterationNumber.toString()) ||
|
|
25
34
|
`${groupe.designation} ${iterationNumber}`;
|
|
26
35
|
return (_jsxs("div", { className: "iteration-card bg-white border border-gray-200 rounded-lg p-4 shadow-sm", children: [_jsxs("div", { className: "flex items-center justify-between mb-4", children: [_jsxs("h4", { className: "text-lg font-medium text-gray-800 flex items-center", children: [_jsx("span", { className: "w-6 h-6 bg-blue-100 text-blue-800 rounded-full flex items-center justify-center text-sm font-semibold mr-2", children: iterationNumber }), entryTitle] }), groupe.configMultiple?.allowManualControl && canRemove && onRemove && (_jsx("button", { onClick: onRemove, disabled: disabled, className: "p-2 text-red-500 hover:text-red-700 hover:bg-red-50 rounded-lg transition-colors disabled:opacity-50 disabled:cursor-not-allowed", title: "Supprimer cette entr\u00E9e", children: _jsx(Trash2, { className: "h-4 w-4" }) }))] }), _jsx("div", { className: "variables-grid grid grid-cols-1 md:grid-cols-2 gap-4", children: visibleVariables.map(variable => {
|
|
@@ -29,11 +38,21 @@ const MultipleGroupEntry = ({ groupe, iterationNumber, totalIterations, visibleV
|
|
|
29
38
|
const rosterVariables = (variable.typeCode === 'ROSTERCHECK' || variable.typeCode === 'ROSTERLIST')
|
|
30
39
|
? variable.rosterVariables
|
|
31
40
|
: undefined;
|
|
32
|
-
return (_jsx(VariableRenderer, { variable: variable, value: responses[responseKey]?.valeur, onChange: (value) => onChange(responseKey, value, iterationNumber), numeroMembre: iterationNumber, disabled: disabled, rosterVariables: rosterVariables }, responseKey));
|
|
41
|
+
return (_jsx(VariableRenderer, { variable: variable, value: responses[responseKey]?.valeur, onChange: (value) => onChange(responseKey, value, iterationNumber), numeroMembre: iterationNumber, disabled: disabled, rosterVariables: rosterVariables, allResponses: allResponses, interpolateVariableLabel: interpolateVariableLabel, RosterCheckInput: RosterCheckInput, RosterListInput: RosterListInput }, responseKey));
|
|
33
42
|
}) })] }));
|
|
34
43
|
};
|
|
35
44
|
// Composant principal GroupRenderer
|
|
36
|
-
const GroupRenderer = ({ groupe, responses, conditionEngine, formTree, onChange, onValidation, onAutoAction, disabled = false }) => {
|
|
45
|
+
const GroupRenderer = ({ groupe, responses, conditionEngine, formTree, onChange, onValidation, onAutoAction, disabled = false, allResponses, interpolateVariableLabel, RosterCheckInput, RosterListInput }) => {
|
|
46
|
+
console.log('📦 [GroupRenderer] Rendu du groupe', {
|
|
47
|
+
groupeCode: groupe.code,
|
|
48
|
+
groupeDesignation: groupe.designation,
|
|
49
|
+
estMultiple: groupe.estMultiple,
|
|
50
|
+
hasAllResponses: !!allResponses,
|
|
51
|
+
allResponsesKeys: allResponses ? Object.keys(allResponses) : [],
|
|
52
|
+
allResponsesCount: allResponses ? Object.keys(allResponses).length : 0,
|
|
53
|
+
hasInterpolateFunction: !!interpolateVariableLabel,
|
|
54
|
+
variablesCount: groupe.variables.length
|
|
55
|
+
});
|
|
37
56
|
const [multipleEntries, setMultipleEntries] = useState([1]);
|
|
38
57
|
const [validationErrors, setValidationErrors] = useState([]);
|
|
39
58
|
// Déterminer le mode d'utilisation
|
|
@@ -226,7 +245,7 @@ const GroupRenderer = ({ groupe, responses, conditionEngine, formTree, onChange,
|
|
|
226
245
|
return (_jsxs("div", { className: "mb-4 p-3 bg-red-50 border border-red-200 rounded-lg", children: [_jsxs("div", { className: "flex items-center mb-2", children: [_jsx(AlertCircle, { className: "h-4 w-4 text-red-600 mr-2" }), _jsxs("h4", { className: "text-sm font-medium text-red-800", children: ["Erreurs de validation (", validationErrors.length, ")"] })] }), _jsxs("ul", { className: "text-sm text-red-700 space-y-1", children: [validationErrors.slice(0, 5).map((error, index) => (_jsxs("li", { children: ["\u2022 ", error.message] }, index))), validationErrors.length > 5 && (_jsxs("li", { className: "text-red-600 font-medium", children: ["... et ", validationErrors.length - 5, " autres erreurs"] }))] })] }));
|
|
227
246
|
};
|
|
228
247
|
if (groupe.estMultiple) {
|
|
229
|
-
return (_jsxs("div", { className: "group-renderer-multiple", children: [_jsx(ErrorSummary, {}), _jsx(MultipleGroupManager, { groupe: groupe, entries: multipleEntries, onAddEntry: addEntry, onRemoveEntry: removeEntry, children: multipleEntries.map((iterationNumber, index) => (_jsx(MultipleGroupEntry, { groupe: groupe, iterationNumber: iterationNumber, totalIterations: multipleEntries.length, visibleVariables: visibleVariables, responses: responses, onChange: onChange, onRemove: () => removeEntry(index), canRemove: multipleEntries.length > (groupe.configMultiple?.minIterations || 1), disabled: disabled }, iterationNumber))) })] }));
|
|
248
|
+
return (_jsxs("div", { className: "group-renderer-multiple", children: [_jsx(ErrorSummary, {}), _jsx(MultipleGroupManager, { groupe: groupe, entries: multipleEntries, onAddEntry: addEntry, onRemoveEntry: removeEntry, children: multipleEntries.map((iterationNumber, index) => (_jsx(MultipleGroupEntry, { groupe: groupe, iterationNumber: iterationNumber, totalIterations: multipleEntries.length, visibleVariables: visibleVariables, responses: responses, onChange: onChange, onRemove: () => removeEntry(index), canRemove: multipleEntries.length > (groupe.configMultiple?.minIterations || 1), disabled: disabled, allResponses: allResponses, interpolateVariableLabel: interpolateVariableLabel, RosterCheckInput: RosterCheckInput, RosterListInput: RosterListInput }, iterationNumber))) })] }));
|
|
230
249
|
}
|
|
231
250
|
// Groupe simple
|
|
232
251
|
return (_jsxs("div", { className: "group-renderer-simple", children: [_jsxs("div", { className: "mb-6", children: [_jsx("h2", { className: "text-xl font-semibold text-gray-900 mb-2", children: groupe.designation }), visibleVariables.length > 0 && (_jsxs("p", { className: "text-gray-600 text-sm", children: [visibleVariables.length, " ", visibleVariables.length > 1 ? 'champs' : 'champ'] }))] }), _jsx(ErrorSummary, {}), _jsx("div", { className: "variables-container space-y-6", children: visibleVariables.map(variable => {
|
|
@@ -234,7 +253,7 @@ const GroupRenderer = ({ groupe, responses, conditionEngine, formTree, onChange,
|
|
|
234
253
|
const rosterVariables = (variable.typeCode === 'ROSTERCHECK' || variable.typeCode === 'ROSTERLIST')
|
|
235
254
|
? variable.rosterVariables
|
|
236
255
|
: undefined;
|
|
237
|
-
return (_jsx(VariableRenderer, { variable: variable, value: responses[variable.code]?.valeur, onChange: (value) => onChange(variable.code, value), disabled: disabled, rosterVariables: rosterVariables }, variable.code));
|
|
256
|
+
return (_jsx(VariableRenderer, { variable: variable, value: responses[variable.code]?.valeur, onChange: (value) => onChange(variable.code, value), disabled: disabled, rosterVariables: rosterVariables, allResponses: allResponses, interpolateVariableLabel: interpolateVariableLabel, RosterCheckInput: RosterCheckInput, RosterListInput: RosterListInput }, variable.code));
|
|
238
257
|
}) }), visibleVariables.length === 0 && (_jsx("div", { className: "text-center py-8 text-gray-500", children: _jsx("p", { children: "Aucun champ \u00E0 afficher dans ce groupe" }) }))] }));
|
|
239
258
|
};
|
|
240
259
|
export default GroupRenderer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VariableRenderer.d.ts","sourceRoot":"","sources":["../../src/components/VariableRenderer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AA+BxC,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,CAAC,UAAU,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC9D,qBAAqB,CAAC,EAAE,CAAC,WAAW,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjE,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC3C,eAAe,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1L,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAG/B,gBAAgB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAC9D,eAAe,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAC7D,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAGvH,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,oBAAoB,CAAC,EAAE,GAAG,CAAC;CAC5B;AAGD,QAAA,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAQvD,CAAC;AAGF,QAAA,MAAM,mBAAmB,GACvB,UAAU,MAAM,EAChB,mBAAmB,KAAK,CAAC,aAAa,CAAC,qBAAqB,CAAC,EAC7D,kBAAkB,KAAK,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAC3D,KAAK,CAAC,aAAa,CAAC,qBAAqB,CAsD3C,CAAC;AAGF,QAAA,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,
|
|
1
|
+
{"version":3,"file":"VariableRenderer.d.ts","sourceRoot":"","sources":["../../src/components/VariableRenderer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAmB,MAAM,OAAO,CAAC;AA+BxC,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC1F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAGlE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IACzC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oBAAoB,CAAC,EAAE,CAAC,UAAU,EAAE,gBAAgB,KAAK,IAAI,CAAC;IAC9D,qBAAqB,CAAC,EAAE,CAAC,WAAW,EAAE,iBAAiB,KAAK,IAAI,CAAC;IACjE,mBAAmB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC3C,eAAe,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1L,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAG/B,gBAAgB,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAC9D,eAAe,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAC;IAC7D,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAGvH,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,oBAAoB,CAAC,EAAE,GAAG,CAAC;CAC5B;AAGD,QAAA,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAQvD,CAAC;AAGF,QAAA,MAAM,mBAAmB,GACvB,UAAU,MAAM,EAChB,mBAAmB,KAAK,CAAC,aAAa,CAAC,qBAAqB,CAAC,EAC7D,kBAAkB,KAAK,CAAC,aAAa,CAAC,qBAAqB,CAAC,KAC3D,KAAK,CAAC,aAAa,CAAC,qBAAqB,CAsD3C,CAAC;AAGF,QAAA,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAmHrD,CAAC;AAEF,eAAe,gBAAgB,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -59,11 +59,25 @@ const getVariableRenderer = (typeCode, RosterCheckInput, RosterListInput) => {
|
|
|
59
59
|
};
|
|
60
60
|
// Composant principal VariableRenderer
|
|
61
61
|
const VariableRenderer = ({ variable, value, onChange, onBlur, error, disabled, numeroMembre, valeurMin, onFillFormFromMenage, onFillFormFromEnquete, formulaireVariables, rosterVariables, allResponses = {}, RosterCheckInput, RosterListInput, interpolateVariableLabel, reponses = {}, services }) => {
|
|
62
|
+
console.log('🎨 [VariableRenderer] Rendu de variable', {
|
|
63
|
+
code: variable.code,
|
|
64
|
+
designation: variable.designation,
|
|
65
|
+
numeroMembre,
|
|
66
|
+
hasInterpolateFunction: !!interpolateVariableLabel,
|
|
67
|
+
allResponsesKeys: Object.keys(allResponses),
|
|
68
|
+
allResponsesCount: Object.keys(allResponses).length
|
|
69
|
+
});
|
|
62
70
|
const RendererComponent = getVariableRenderer(variable.typeCode, RosterCheckInput, RosterListInput);
|
|
63
71
|
// Interpoler le libellé avec les valeurs des autres variables (si fonction fournie)
|
|
64
72
|
const interpolatedDesignation = interpolateVariableLabel
|
|
65
73
|
? interpolateVariableLabel(variable.designation, allResponses, numeroMembre)
|
|
66
74
|
: variable.designation;
|
|
75
|
+
console.log('🎨 [VariableRenderer] Après interpolation', {
|
|
76
|
+
code: variable.code,
|
|
77
|
+
original: variable.designation,
|
|
78
|
+
interpolated: interpolatedDesignation,
|
|
79
|
+
changed: variable.designation !== interpolatedDesignation
|
|
80
|
+
});
|
|
67
81
|
// Ne pas afficher les labels et panneaux avec le wrapper standard (ils sont gérés séparément)
|
|
68
82
|
if (variable.typeCode === 'LABEL' || variable.typeCode === 'PANEL') {
|
|
69
83
|
// Pour LABEL et PANEL, créer une variable avec le libellé interpolé
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interpolateVariableLabel.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/interpolateVariableLabel.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EAC5C,qBAAqB,CAAC,EAAE,MAAM,GAC7B,MAAM,
|
|
1
|
+
{"version":3,"file":"interpolateVariableLabel.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/interpolateVariableLabel.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,EAC5C,qBAAqB,CAAC,EAAE,MAAM,GAC7B,MAAM,CA6ER;AA2DD;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAG5D;AAED;;;;;;;;;GASG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAcjE;AAED,eAAe,wBAAwB,CAAC"}
|
|
@@ -31,18 +31,31 @@
|
|
|
31
31
|
* // Cherchera MEMBRE_NOM_2 → "Nom: Pierre"
|
|
32
32
|
*/
|
|
33
33
|
export function interpolateVariableLabel(label, allResponses, currentInstanceNumber) {
|
|
34
|
+
console.log('🔍 [interpolateVariableLabel] DEBUT', {
|
|
35
|
+
label,
|
|
36
|
+
currentInstanceNumber,
|
|
37
|
+
allResponsesKeys: Object.keys(allResponses),
|
|
38
|
+
allResponsesCount: Object.keys(allResponses).length
|
|
39
|
+
});
|
|
34
40
|
// Si pas de label ou pas de pattern ${}, retourner tel quel
|
|
35
41
|
if (!label || !label.includes('${')) {
|
|
42
|
+
console.log('🔍 [interpolateVariableLabel] Pas de pattern ${} trouvé, retour direct');
|
|
36
43
|
return label;
|
|
37
44
|
}
|
|
38
45
|
// Regex pour capturer ${CODE} - le code peut contenir lettres, chiffres, underscores
|
|
39
46
|
const regex = /\$\{([A-Za-z0-9_]+)\}/g;
|
|
40
|
-
|
|
47
|
+
const result = label.replace(regex, (match, variableCode) => {
|
|
48
|
+
console.log('🔍 [interpolateVariableLabel] Traitement de', { match, variableCode });
|
|
41
49
|
let response;
|
|
42
50
|
// Stratégie de recherche de la valeur
|
|
43
51
|
// 1. Essayer avec le code exact tel quel
|
|
44
52
|
// Cela couvre le cas ${CODE_N} où N est explicite
|
|
45
53
|
response = allResponses[variableCode];
|
|
54
|
+
console.log('🔍 [interpolateVariableLabel] Stratégie 1 - Code exact', {
|
|
55
|
+
variableCode,
|
|
56
|
+
found: !!response,
|
|
57
|
+
value: response?.valeur
|
|
58
|
+
});
|
|
46
59
|
// 2. Si pas trouvé, essayer avec l'instance courante
|
|
47
60
|
// La stratégie de recherche en étapes garantit le bon fonctionnement :
|
|
48
61
|
// - Les références explicites (${CODE_1}) sont trouvées à l'étape 1
|
|
@@ -51,19 +64,39 @@ export function interpolateVariableLabel(label, allResponses, currentInstanceNum
|
|
|
51
64
|
// Essayer CODE_instanceNumber
|
|
52
65
|
const keyWithInstance = `${variableCode}_${currentInstanceNumber}`;
|
|
53
66
|
response = allResponses[keyWithInstance];
|
|
67
|
+
console.log('🔍 [interpolateVariableLabel] Stratégie 2 - Avec instance', {
|
|
68
|
+
keyWithInstance,
|
|
69
|
+
found: !!response,
|
|
70
|
+
value: response?.valeur
|
|
71
|
+
});
|
|
54
72
|
}
|
|
55
73
|
// 3. Si toujours pas trouvé, chercher dans les réponses par variableCode
|
|
56
74
|
// (pour le cas où la clé est juste le code sans suffix)
|
|
57
75
|
if (!response) {
|
|
58
76
|
response = Object.values(allResponses).find(r => r.variableCode === variableCode);
|
|
77
|
+
console.log('🔍 [interpolateVariableLabel] Stratégie 3 - Par variableCode', {
|
|
78
|
+
variableCode,
|
|
79
|
+
found: !!response,
|
|
80
|
+
value: response?.valeur
|
|
81
|
+
});
|
|
59
82
|
}
|
|
60
83
|
// 4. Formater et retourner la valeur si trouvée
|
|
61
84
|
if (response?.valeur !== undefined && response?.valeur !== null && response?.valeur !== '') {
|
|
62
|
-
|
|
85
|
+
const formatted = formatValue(response.valeur);
|
|
86
|
+
console.log('🔍 [interpolateVariableLabel] Valeur trouvée et formatée', {
|
|
87
|
+
match,
|
|
88
|
+
variableCode,
|
|
89
|
+
rawValue: response.valeur,
|
|
90
|
+
formatted
|
|
91
|
+
});
|
|
92
|
+
return formatted;
|
|
63
93
|
}
|
|
64
94
|
// 5. Pas de valeur trouvée → garder le placeholder pour indiquer le champ à remplir
|
|
95
|
+
console.log('⚠️ [interpolateVariableLabel] Aucune valeur trouvée, garder le placeholder', { match, variableCode });
|
|
65
96
|
return match;
|
|
66
97
|
});
|
|
98
|
+
console.log('🔍 [interpolateVariableLabel] RESULTAT', { original: label, result });
|
|
99
|
+
return result;
|
|
67
100
|
}
|
|
68
101
|
/**
|
|
69
102
|
* Formate une valeur pour l'affichage dans le libellé
|
package/package.json
CHANGED