@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.
@@ -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;CACpB;AAsID,QAAA,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAmU/C,CAAC;AAEF,eAAe,aAAa,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,CAmGrD,CAAC;AAEF,eAAe,gBAAgB,CAAC;AAChC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,CAAC"}
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,CA0CR;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"}
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
- return label.replace(regex, (match, variableCode) => {
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
- return formatValue(response.valeur);
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsuci/shared-form-components",
3
- "version": "1.0.23",
3
+ "version": "1.0.25",
4
4
  "description": "Composants partagés de rendu de formulaires RSU v2 - Package local pour frontend Admin et Public",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",