@rsuci/shared-form-components 1.0.87 → 1.0.88
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/form-renderer/FormRenderer.d.ts.map +1 -1
- package/dist/components/form-renderer/FormRenderer.js +12 -27
- package/dist/hooks/useFormRenderer.d.ts.map +1 -1
- package/dist/hooks/useFormRenderer.js +38 -12
- package/dist/lib/utils/interpolateVariableLabel.d.ts.map +1 -1
- package/dist/lib/utils/interpolateVariableLabel.js +1 -35
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormRenderer.d.ts","sourceRoot":"","sources":["../../../src/components/form-renderer/FormRenderer.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAA4D,MAAM,OAAO,CAAC;AACjF,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,cAAc,EAIf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EAEtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAsBlF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,UAAU,EAAE,iBAAiB,CAAC;IAC9B,6DAA6D;IAC7D,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,yBAAyB;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAClD,oCAAoC;IACpC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,iCAAiC;IACjC,SAAS,EAAE,qBAAqB,CAAC;IACjC,wBAAwB;IACxB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,wCAAwC;IACxC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,iCAAiC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iCAAiC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"FormRenderer.d.ts","sourceRoot":"","sources":["../../../src/components/form-renderer/FormRenderer.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAA4D,MAAM,OAAO,CAAC;AACjF,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,cAAc,EAIf,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EAEtB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAsBlF;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,UAAU,EAAE,iBAAiB,CAAC;IAC9B,6DAA6D;IAC7D,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,yBAAyB;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAClD,oCAAoC;IACpC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,iCAAiC;IACjC,SAAS,EAAE,qBAAqB,CAAC;IACjC,wBAAwB;IACxB,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,wCAAwC;IACxC,oBAAoB,CAAC,EAAE,oBAAoB,CAAC;IAC5C,iCAAiC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iCAAiC;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAuxBD;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAgBpD,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -76,6 +76,9 @@ const FormRendererInner = () => {
|
|
|
76
76
|
const instanceNumber = currentGroup.estMultiple
|
|
77
77
|
? currentInstance?.numeroInstance
|
|
78
78
|
: undefined;
|
|
79
|
+
// Ne pas exécuter les auto-actions sans instance résolue dans un groupe multiple
|
|
80
|
+
if (currentGroup.estMultiple && instanceNumber === undefined)
|
|
81
|
+
return;
|
|
79
82
|
// Évaluer les autoactions pour le groupe courant
|
|
80
83
|
const autoUpdates = evaluateAutoActionsForInstance(currentGroup.code, instanceNumber);
|
|
81
84
|
// Appliquer les mises à jour si nécessaire
|
|
@@ -94,7 +97,6 @@ const FormRendererInner = () => {
|
|
|
94
97
|
: targetVariable.code;
|
|
95
98
|
const currentValue = responses[currentResponseKey]?.valeur;
|
|
96
99
|
if (currentValue !== value) {
|
|
97
|
-
console.log(`🔄 [AutoAction] Setting ${targetKey} = ${JSON.stringify(value)}`);
|
|
98
100
|
updateResponse(targetVariable.code, value, targetVariable, instanceNumber);
|
|
99
101
|
}
|
|
100
102
|
}
|
|
@@ -142,9 +144,15 @@ const FormRendererInner = () => {
|
|
|
142
144
|
let numeroMembre = currentGroup?.estMultiple
|
|
143
145
|
? currentInstance?.numeroInstance
|
|
144
146
|
: undefined;
|
|
147
|
+
// Pour les groupes multiples, ne PAS continuer sans instance résolue
|
|
148
|
+
// (évite de stocker les réponses sans suffixe _N)
|
|
149
|
+
if (currentGroup?.estMultiple && numeroMembre === undefined) {
|
|
150
|
+
console.warn('[FormRenderer] handleVariableChange: groupe multiple sans currentInstance, rejet');
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
145
153
|
// Pour les groupes non-multiples, préserver le numeroMembre existant du backend
|
|
146
154
|
// afin que la sauvegarde utilise la même clé que le chargement
|
|
147
|
-
if (numeroMembre === undefined) {
|
|
155
|
+
if (numeroMembre === undefined && !currentGroup?.estMultiple) {
|
|
148
156
|
const existingResponse = responsesByVariableCode.get(variable.code);
|
|
149
157
|
if (existingResponse?.numeroMembre) {
|
|
150
158
|
numeroMembre = existingResponse.numeroMembre;
|
|
@@ -246,24 +254,19 @@ const FormRendererInner = () => {
|
|
|
246
254
|
}
|
|
247
255
|
// Pour les groupes normaux, valider uniquement les variables visibles et obligatoires
|
|
248
256
|
const requiredVariables = currentGroup.variables.filter(v => v.estObligatoire);
|
|
249
|
-
console.log('🔍 [Validation] Mode:', mode, 'Groupe:', currentGroup.code);
|
|
250
|
-
console.log('🔍 [Validation] Variables obligatoires:', requiredVariables.length);
|
|
251
257
|
for (const variable of requiredVariables) {
|
|
252
258
|
// Ignorer les variables LABEL - ce sont des éléments d'affichage uniquement qui ne peuvent pas avoir de valeur
|
|
253
259
|
if (variable.typeCode === 'LABEL') {
|
|
254
|
-
console.log('🔍 [Validation] Variable LABEL ignorée:', variable.code);
|
|
255
260
|
continue;
|
|
256
261
|
}
|
|
257
262
|
// Vérifier si la variable est filtrée par le mode (MENAGE/ENQUETE en mode public)
|
|
258
263
|
const isFilteredByMode = isVariableFilteredByMode(variable);
|
|
259
264
|
if (isFilteredByMode) {
|
|
260
|
-
console.log('🔍 [Validation] Variable filtrée par mode:', variable.code, 'typeCode:', variable.typeCode);
|
|
261
265
|
continue;
|
|
262
266
|
}
|
|
263
267
|
// Vérifier si la variable est visible via le formTree
|
|
264
268
|
const isVisible = isVariableVisible(variable);
|
|
265
269
|
if (!isVisible) {
|
|
266
|
-
console.log('🔍 [Validation] Variable masquée par formTree:', variable.code);
|
|
267
270
|
continue;
|
|
268
271
|
}
|
|
269
272
|
// Vérifier si la variable a une valeur
|
|
@@ -272,13 +275,10 @@ const FormRendererInner = () => {
|
|
|
272
275
|
: variable.code;
|
|
273
276
|
const response = responses[responseKey];
|
|
274
277
|
const hasValue = response && response.valeur != null && response.valeur !== '';
|
|
275
|
-
console.log('🔍 [Validation] Variable:', variable.code, 'hasValue:', hasValue, 'valeur:', response?.valeur);
|
|
276
278
|
if (!hasValue) {
|
|
277
|
-
console.log('❌ [Validation] ECHEC - Variable sans valeur:', variable.code);
|
|
278
279
|
return false;
|
|
279
280
|
}
|
|
280
281
|
}
|
|
281
|
-
console.log('✅ [Validation] Toutes les variables obligatoires sont remplies');
|
|
282
282
|
return true;
|
|
283
283
|
}, [currentGroup, currentInstance, responses, isVariableVisible, isVariableFilteredByMode, validateGroupForInstance, mode]);
|
|
284
284
|
// Mode consultation (pas de validation, navigation libre)
|
|
@@ -296,7 +296,6 @@ const FormRendererInner = () => {
|
|
|
296
296
|
}
|
|
297
297
|
// Valider les champs obligatoires
|
|
298
298
|
if (!canGoNext) {
|
|
299
|
-
console.log('❌ [Navigation] Champs obligatoires non remplis');
|
|
300
299
|
return;
|
|
301
300
|
}
|
|
302
301
|
// Valider les conditions de validation (ConditionEval) du groupe actuel
|
|
@@ -304,7 +303,6 @@ const FormRendererInner = () => {
|
|
|
304
303
|
const numeroMembre = currentGroup.estMultiple ? currentInstance?.numeroInstance : undefined;
|
|
305
304
|
const conditionErrors = validateConditionGroup(currentGroup, numeroMembre);
|
|
306
305
|
if (conditionErrors.length > 0) {
|
|
307
|
-
console.log('❌ [Navigation] Erreurs de validation ConditionEval:', conditionErrors);
|
|
308
306
|
// Les erreurs sont déjà affichées sous les variables via getConditionErrorForVariable
|
|
309
307
|
return;
|
|
310
308
|
}
|
|
@@ -339,7 +337,6 @@ const FormRendererInner = () => {
|
|
|
339
337
|
}
|
|
340
338
|
const conditionErrors = validateAllConditions(groupes, instancesMap);
|
|
341
339
|
if (conditionErrors.length > 0) {
|
|
342
|
-
console.log('❌ [Soumission] Erreurs de validation ConditionEval:', conditionErrors);
|
|
343
340
|
if (callbacks.onValidationError) {
|
|
344
341
|
// Convertir les erreurs de condition en erreurs de validation standard
|
|
345
342
|
callbacks.onValidationError(conditionErrors.map(e => ({
|
|
@@ -405,25 +402,13 @@ const FormRendererInner = () => {
|
|
|
405
402
|
: variable.code;
|
|
406
403
|
let currentValue = responses[responseKey]?.valeur;
|
|
407
404
|
// Fallback: si pas trouvé par clé directe, chercher par variableCode
|
|
408
|
-
//
|
|
409
|
-
if (currentValue === undefined) {
|
|
405
|
+
// UNIQUEMENT pour les groupes non-multiples (évite la fuite de données cross-instance)
|
|
406
|
+
if (currentValue === undefined && !currentGroup?.estMultiple) {
|
|
410
407
|
const fallbackResponse = responsesByVariableCode.get(variable.code);
|
|
411
408
|
if (fallbackResponse) {
|
|
412
409
|
currentValue = fallbackResponse.valeur;
|
|
413
410
|
}
|
|
414
411
|
}
|
|
415
|
-
// Debug log pour tracer le flux de données géographiques
|
|
416
|
-
if (['DISTRICT', 'REGION', 'DEPARTEMENT', 'SOUSPREFECTURE', 'QUARTIER'].includes(variable.typeCode)) {
|
|
417
|
-
console.log('[FormRenderer] Variable géographique:', {
|
|
418
|
-
variableCode: variable.code,
|
|
419
|
-
typeCode: variable.typeCode,
|
|
420
|
-
responseKey,
|
|
421
|
-
hasResponseKey: responseKey in responses,
|
|
422
|
-
responseObject: responses[responseKey],
|
|
423
|
-
currentValue,
|
|
424
|
-
currentValueType: typeof currentValue
|
|
425
|
-
});
|
|
426
|
-
}
|
|
427
412
|
// Extraire les variables roster si c'est un type ROSTERCHECK ou ROSTERLIST
|
|
428
413
|
const rosterVariables = (variable.typeCode === 'ROSTERCHECK' || variable.typeCode === 'ROSTERLIST')
|
|
429
414
|
? variable.rosterVariables
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFormRenderer.d.ts","sourceRoot":"","sources":["../../src/hooks/useFormRenderer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"useFormRenderer.d.ts","sourceRoot":"","sources":["../../src/hooks/useFormRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -126,20 +126,46 @@ export function useFormRenderer(formulaire, enquete, options = { config: { mode:
|
|
|
126
126
|
}
|
|
127
127
|
return updated;
|
|
128
128
|
});
|
|
129
|
-
// Mettre à jour l'instance si c'est un groupe multiple
|
|
129
|
+
// Mettre à jour l'instance si c'est un groupe multiple (immutable via setter)
|
|
130
130
|
if (currentGroup?.estMultiple && currentInstance) {
|
|
131
|
-
|
|
132
|
-
|
|
131
|
+
instances.setGroupesWithInstances(prev => prev.map(g => {
|
|
132
|
+
if (g.code !== currentGroup.code || !g.instances)
|
|
133
|
+
return g;
|
|
134
|
+
return {
|
|
135
|
+
...g,
|
|
136
|
+
instances: g.instances.map(inst => {
|
|
137
|
+
if (inst.numeroInstance !== currentInstance.numeroInstance)
|
|
138
|
+
return inst;
|
|
139
|
+
const updatedReponses = { ...inst.reponses, [variableCode]: newResponse };
|
|
140
|
+
return {
|
|
141
|
+
...inst,
|
|
142
|
+
reponses: updatedReponses,
|
|
143
|
+
estComplete: instances.isInstanceComplete({ ...inst, reponses: updatedReponses }, currentGroup)
|
|
144
|
+
};
|
|
145
|
+
})
|
|
146
|
+
};
|
|
147
|
+
}));
|
|
133
148
|
}
|
|
134
|
-
// Mettre à jour les propriétés des groupes affectés
|
|
135
|
-
const
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
149
|
+
// Mettre à jour les propriétés des groupes affectés (immutable via setter)
|
|
150
|
+
const affectedGroupCodes = instances.groupesWithInstances
|
|
151
|
+
.filter(g => g.codeVariable === variableCode)
|
|
152
|
+
.map(g => g.code);
|
|
153
|
+
if (affectedGroupCodes.length > 0) {
|
|
154
|
+
const updatedResponses = { ...responses, [responseKey]: newResponse };
|
|
155
|
+
instances.setGroupesWithInstances(prev => prev.map(g => {
|
|
156
|
+
if (!affectedGroupCodes.includes(g.code))
|
|
157
|
+
return g;
|
|
158
|
+
return {
|
|
159
|
+
...g,
|
|
160
|
+
maxInstances: GroupeInstanceManager.getMaxInstances(g, updatedResponses),
|
|
161
|
+
minInstances: GroupeInstanceManager.getMinInstances(g),
|
|
162
|
+
instancesCount: g.instances?.length ?? 0,
|
|
163
|
+
instances: g.instances?.map(inst => ({
|
|
164
|
+
...inst,
|
|
165
|
+
estComplete: GroupeInstanceManager.isInstanceComplete(inst, g)
|
|
166
|
+
}))
|
|
167
|
+
};
|
|
168
|
+
}));
|
|
143
169
|
}
|
|
144
170
|
setHasUnsavedChanges(true);
|
|
145
171
|
}, [
|
|
@@ -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,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"}
|
|
@@ -31,71 +31,37 @@
|
|
|
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
|
-
});
|
|
40
34
|
// Si pas de label ou pas de pattern ${}, retourner tel quel
|
|
41
35
|
if (!label || !label.includes('${')) {
|
|
42
|
-
console.log('🔍 [interpolateVariableLabel] Pas de pattern ${} trouvé, retour direct');
|
|
43
36
|
return label;
|
|
44
37
|
}
|
|
45
38
|
// Regex pour capturer ${CODE} - le code peut contenir lettres, chiffres, underscores
|
|
46
39
|
const regex = /\$\{([A-Za-z0-9_]+)\}/g;
|
|
47
40
|
const result = label.replace(regex, (match, variableCode) => {
|
|
48
|
-
console.log('🔍 [interpolateVariableLabel] Traitement de', { match, variableCode });
|
|
49
41
|
let response;
|
|
50
42
|
// Stratégie de recherche de la valeur
|
|
51
43
|
// 1. Essayer avec le code exact tel quel
|
|
52
44
|
// Cela couvre le cas ${CODE_N} où N est explicite
|
|
53
45
|
response = allResponses[variableCode];
|
|
54
|
-
console.log('🔍 [interpolateVariableLabel] Stratégie 1 - Code exact', {
|
|
55
|
-
variableCode,
|
|
56
|
-
found: !!response,
|
|
57
|
-
value: response?.valeur
|
|
58
|
-
});
|
|
59
46
|
// 2. Si pas trouvé, essayer avec l'instance courante
|
|
60
|
-
// La stratégie de recherche en étapes garantit le bon fonctionnement :
|
|
61
47
|
// - Les références explicites (${CODE_1}) sont trouvées à l'étape 1
|
|
62
48
|
// - Les variables dans groupes multiples (${S0_1} -> S0_1_2) sont trouvées ici
|
|
63
49
|
if (!response && currentInstanceNumber) {
|
|
64
|
-
// Essayer CODE_instanceNumber
|
|
65
50
|
const keyWithInstance = `${variableCode}_${currentInstanceNumber}`;
|
|
66
51
|
response = allResponses[keyWithInstance];
|
|
67
|
-
console.log('🔍 [interpolateVariableLabel] Stratégie 2 - Avec instance', {
|
|
68
|
-
keyWithInstance,
|
|
69
|
-
found: !!response,
|
|
70
|
-
value: response?.valeur
|
|
71
|
-
});
|
|
72
52
|
}
|
|
73
53
|
// 3. Si toujours pas trouvé, chercher dans les réponses par variableCode
|
|
74
54
|
// (pour le cas où la clé est juste le code sans suffix)
|
|
75
55
|
if (!response) {
|
|
76
56
|
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
|
-
});
|
|
82
57
|
}
|
|
83
58
|
// 4. Formater et retourner la valeur si trouvée
|
|
84
59
|
if (response?.valeur !== undefined && response?.valeur !== null && response?.valeur !== '') {
|
|
85
|
-
|
|
86
|
-
console.log('🔍 [interpolateVariableLabel] Valeur trouvée et formatée', {
|
|
87
|
-
match,
|
|
88
|
-
variableCode,
|
|
89
|
-
rawValue: response.valeur,
|
|
90
|
-
formatted
|
|
91
|
-
});
|
|
92
|
-
return formatted;
|
|
60
|
+
return formatValue(response.valeur);
|
|
93
61
|
}
|
|
94
62
|
// 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 });
|
|
96
63
|
return match;
|
|
97
64
|
});
|
|
98
|
-
console.log('🔍 [interpolateVariableLabel] RESULTAT', { original: label, result });
|
|
99
65
|
return result;
|
|
100
66
|
}
|
|
101
67
|
/**
|
package/package.json
CHANGED