@rsuci/shared-form-components 1.0.20 → 1.0.21
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/inputs/GeographicCascadeInput.d.ts.map +1 -1
- package/dist/components/inputs/GeographicCascadeInput.js +13 -1
- package/dist/utils/variableDependencyResolver.d.ts +8 -6
- package/dist/utils/variableDependencyResolver.d.ts.map +1 -1
- package/dist/utils/variableDependencyResolver.js +49 -14
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeographicCascadeInput.d.ts","sourceRoot":"","sources":["../../../src/components/inputs/GeographicCascadeInput.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAmD,MAAM,OAAO,CAAC;AAUxE;;GAEG;AACH,UAAU,SAAS;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAWD,UAAU,2BAA2B;IACnC,QAAQ,EAAE,GAAG,CAAC;IACd,KAAK,EAAE,GAAG,CAAC;IACX,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,
|
|
1
|
+
{"version":3,"file":"GeographicCascadeInput.d.ts","sourceRoot":"","sources":["../../../src/components/inputs/GeographicCascadeInput.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAmD,MAAM,OAAO,CAAC;AAUxE;;GAEG;AACH,UAAU,SAAS;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAWD,UAAU,2BAA2B;IACnC,QAAQ,EAAE,GAAG,CAAC;IACd,KAAK,EAAE,GAAG,CAAC;IACX,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAC5C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,sBAAsB,EAAE,KAAK,CAAC,EAAE,CAAC,2BAA2B,CAwNxE,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
|
|
@@ -7,7 +7,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
7
7
|
*/
|
|
8
8
|
import { useEffect, useState, useCallback, useRef } from 'react';
|
|
9
9
|
import SearchableSelect from './SearchableSelect';
|
|
10
|
-
import { resolveParentValue, getApiEndpoint, getParentLabel, requiresParent } from '../../utils/variableDependencyResolver';
|
|
10
|
+
import { extractVariableCode, resolveParentValue, getApiEndpoint, getParentLabel, requiresParent } from '../../utils/variableDependencyResolver';
|
|
11
11
|
export const GeographicCascadeInput = ({ variable, value, onChange, reponses, disabled = false, required = false, className = '' }) => {
|
|
12
12
|
const [items, setItems] = useState([]);
|
|
13
13
|
const [loading, setLoading] = useState(false);
|
|
@@ -16,6 +16,18 @@ export const GeographicCascadeInput = ({ variable, value, onChange, reponses, di
|
|
|
16
16
|
const needsParent = requiresParent(variable.typeCode);
|
|
17
17
|
// 2. Résoudre la valeur du parent depuis les réponses
|
|
18
18
|
const parentValue = resolveParentValue(variable, reponses);
|
|
19
|
+
// Debug temporaire - À SUPPRIMER après validation
|
|
20
|
+
console.log('[GeographicCascade] Debug:', {
|
|
21
|
+
variableCode: variable.code,
|
|
22
|
+
variableType: variable.typeCode,
|
|
23
|
+
variableValeur: variable.valeur,
|
|
24
|
+
variableValeurDefaut: variable.valeurDefaut,
|
|
25
|
+
needsParent,
|
|
26
|
+
parentCode: extractVariableCode(variable),
|
|
27
|
+
parentReponse: reponses?.[extractVariableCode(variable) || ''],
|
|
28
|
+
parentValue,
|
|
29
|
+
reponsesKeys: Object.keys(reponses || {})
|
|
30
|
+
});
|
|
19
31
|
// 3. Pour DISTRICT, déterminer le code pays (depuis variable.valeur ou défaut 'CIV')
|
|
20
32
|
const countryCode = variable.typeCode === 'DISTRICT'
|
|
21
33
|
? (variable.valeur || 'CIV')
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
/**
|
|
6
6
|
* Extrait le code d'une variable depuis le format "${CODE}"
|
|
7
|
-
*
|
|
7
|
+
* Cherche dans variable.valeur, puis variable.valeurDefaut, puis variable.proprietes?.valeur
|
|
8
|
+
* @param valeurOrVariable - Valeur du champ (ex: "${G_01}") OU l'objet variable complet
|
|
8
9
|
* @returns Code de la variable (ex: "G_01") ou null si pas de référence
|
|
9
10
|
*
|
|
10
11
|
* @example
|
|
@@ -12,18 +13,19 @@
|
|
|
12
13
|
* extractVariableCode("${DISTRICT_VAR}") // Returns: "DISTRICT_VAR"
|
|
13
14
|
* extractVariableCode(null) // Returns: null
|
|
14
15
|
* extractVariableCode("G_01") // Returns: "G_01" (format direct supporté)
|
|
16
|
+
* extractVariableCode({ valeurDefaut: "${S0_01}" }) // Returns: "S0_01" (objet variable)
|
|
15
17
|
*/
|
|
16
|
-
export declare function extractVariableCode(
|
|
18
|
+
export declare function extractVariableCode(valeurOrVariable: string | any | null | undefined): string | null;
|
|
17
19
|
/**
|
|
18
20
|
* Résout la valeur ID d'une variable parente depuis les réponses
|
|
19
|
-
* @param variable - Variable actuelle
|
|
21
|
+
* @param variable - Variable actuelle (cherche dans valeur, valeurDefaut, proprietes.valeur)
|
|
20
22
|
* @param reponses - Toutes les réponses du formulaire
|
|
21
23
|
* @returns ID de la valeur parente ou null
|
|
22
24
|
*
|
|
23
25
|
* @example
|
|
24
|
-
* // Variable
|
|
25
|
-
* // reponses = { "
|
|
26
|
-
* resolveParentValue(variable, reponses) // Returns:
|
|
26
|
+
* // Variable S0_02 (Région) avec valeurDefaut: "${S0_01}"
|
|
27
|
+
* // reponses = { "S0_01": { valeur: { id: 21, code: "01", designation: "ABIDJAN" } } }
|
|
28
|
+
* resolveParentValue(variable, reponses) // Returns: 21
|
|
27
29
|
*/
|
|
28
30
|
export declare function resolveParentValue(variable: any, reponses: Record<string, any>): number | null;
|
|
29
31
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"variableDependencyResolver.d.ts","sourceRoot":"","sources":["../../src/utils/variableDependencyResolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH
|
|
1
|
+
{"version":3,"file":"variableDependencyResolver.d.ts","sourceRoot":"","sources":["../../src/utils/variableDependencyResolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,gBAAgB,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAmCpG;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,GAAG,EACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC5B,MAAM,GAAG,IAAI,CA+Cf;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,EACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,EACxB,kBAAkB,GAAE,MAAc,GACjC,MAAM,GAAG,IAAI,CA2Bf;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAa3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAW5D;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAY9D"}
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
*/
|
|
5
5
|
/**
|
|
6
6
|
* Extrait le code d'une variable depuis le format "${CODE}"
|
|
7
|
-
*
|
|
7
|
+
* Cherche dans variable.valeur, puis variable.valeurDefaut, puis variable.proprietes?.valeur
|
|
8
|
+
* @param valeurOrVariable - Valeur du champ (ex: "${G_01}") OU l'objet variable complet
|
|
8
9
|
* @returns Code de la variable (ex: "G_01") ou null si pas de référence
|
|
9
10
|
*
|
|
10
11
|
* @example
|
|
@@ -12,35 +13,55 @@
|
|
|
12
13
|
* extractVariableCode("${DISTRICT_VAR}") // Returns: "DISTRICT_VAR"
|
|
13
14
|
* extractVariableCode(null) // Returns: null
|
|
14
15
|
* extractVariableCode("G_01") // Returns: "G_01" (format direct supporté)
|
|
16
|
+
* extractVariableCode({ valeurDefaut: "${S0_01}" }) // Returns: "S0_01" (objet variable)
|
|
15
17
|
*/
|
|
16
|
-
export function extractVariableCode(
|
|
17
|
-
|
|
18
|
+
export function extractVariableCode(valeurOrVariable) {
|
|
19
|
+
// Si c'est un objet variable, chercher dans plusieurs propriétés
|
|
20
|
+
if (typeof valeurOrVariable === 'object' && valeurOrVariable !== null) {
|
|
21
|
+
// Priorité: valeur > valeurDefaut > proprietes.valeur
|
|
22
|
+
const valeur = valeurOrVariable.valeur
|
|
23
|
+
|| valeurOrVariable.valeurDefaut
|
|
24
|
+
|| valeurOrVariable.proprietes?.valeur;
|
|
25
|
+
if (!valeur || typeof valeur !== 'string')
|
|
26
|
+
return null;
|
|
27
|
+
// Extraire le code du format ${CODE}
|
|
28
|
+
const match = valeur.match(/\$\{([^}]+)\}/);
|
|
29
|
+
if (match)
|
|
30
|
+
return match[1];
|
|
31
|
+
// Support format direct (G_01 sans ${})
|
|
32
|
+
if (/^[A-Za-z_][A-Za-z0-9_]*$/.test(valeur)) {
|
|
33
|
+
return valeur;
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
// Si c'est une chaîne directe
|
|
38
|
+
if (typeof valeurOrVariable !== 'string' || !valeurOrVariable)
|
|
18
39
|
return null;
|
|
19
40
|
// Match ${ANYTHING} format (ex: "${G_01}")
|
|
20
|
-
const match =
|
|
41
|
+
const match = valeurOrVariable.match(/\$\{([^}]+)\}/);
|
|
21
42
|
if (match)
|
|
22
43
|
return match[1];
|
|
23
44
|
// Support du format direct sans ${} (ex: "G_01")
|
|
24
45
|
// Si c'est un code de variable valide (commence par lettre/underscore, suivi de lettres/chiffres/underscores)
|
|
25
|
-
if (/^[A-Za-z_][A-Za-z0-9_]*$/.test(
|
|
26
|
-
return
|
|
46
|
+
if (/^[A-Za-z_][A-Za-z0-9_]*$/.test(valeurOrVariable)) {
|
|
47
|
+
return valeurOrVariable;
|
|
27
48
|
}
|
|
28
49
|
return null;
|
|
29
50
|
}
|
|
30
51
|
/**
|
|
31
52
|
* Résout la valeur ID d'une variable parente depuis les réponses
|
|
32
|
-
* @param variable - Variable actuelle
|
|
53
|
+
* @param variable - Variable actuelle (cherche dans valeur, valeurDefaut, proprietes.valeur)
|
|
33
54
|
* @param reponses - Toutes les réponses du formulaire
|
|
34
55
|
* @returns ID de la valeur parente ou null
|
|
35
56
|
*
|
|
36
57
|
* @example
|
|
37
|
-
* // Variable
|
|
38
|
-
* // reponses = { "
|
|
39
|
-
* resolveParentValue(variable, reponses) // Returns:
|
|
58
|
+
* // Variable S0_02 (Région) avec valeurDefaut: "${S0_01}"
|
|
59
|
+
* // reponses = { "S0_01": { valeur: { id: 21, code: "01", designation: "ABIDJAN" } } }
|
|
60
|
+
* resolveParentValue(variable, reponses) // Returns: 21
|
|
40
61
|
*/
|
|
41
62
|
export function resolveParentValue(variable, reponses) {
|
|
42
|
-
// Extraire le code de la variable parente
|
|
43
|
-
const parentCode = extractVariableCode(variable
|
|
63
|
+
// Extraire le code de la variable parente (cherche dans valeur, valeurDefaut, proprietes.valeur)
|
|
64
|
+
const parentCode = extractVariableCode(variable);
|
|
44
65
|
if (!parentCode)
|
|
45
66
|
return null;
|
|
46
67
|
// Récupérer la réponse de la variable parente
|
|
@@ -50,7 +71,8 @@ export function resolveParentValue(variable, reponses) {
|
|
|
50
71
|
// La valeur peut être :
|
|
51
72
|
// 1. Un objet SelectDto : { id: number, code: string, designation: string }
|
|
52
73
|
// 2. Un nombre (ID direct)
|
|
53
|
-
// 3.
|
|
74
|
+
// 3. Une string JSON sérialisée : '{"id":1,"code":"01","designation":"..."}'
|
|
75
|
+
// 4. Une string numérique : "123"
|
|
54
76
|
const parentValue = parentReponse.valeur;
|
|
55
77
|
// Cas 1 : Objet avec propriété id
|
|
56
78
|
if (typeof parentValue === 'object' && parentValue !== null && 'id' in parentValue) {
|
|
@@ -60,8 +82,21 @@ export function resolveParentValue(variable, reponses) {
|
|
|
60
82
|
if (typeof parentValue === 'number') {
|
|
61
83
|
return parentValue;
|
|
62
84
|
}
|
|
63
|
-
// Cas 3 : String
|
|
85
|
+
// Cas 3 : String - peut être un JSON sérialisé ou un nombre
|
|
64
86
|
if (typeof parentValue === 'string') {
|
|
87
|
+
// D'abord essayer de parser comme JSON (pour les objets sérialisés)
|
|
88
|
+
if (parentValue.startsWith('{')) {
|
|
89
|
+
try {
|
|
90
|
+
const parsed = JSON.parse(parentValue);
|
|
91
|
+
if (parsed && typeof parsed.id === 'number') {
|
|
92
|
+
return parsed.id;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// Ignorer l'erreur de parsing et continuer
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Ensuite essayer comme nombre direct
|
|
65
100
|
const parsed = parseInt(parentValue, 10);
|
|
66
101
|
return isNaN(parsed) ? null : parsed;
|
|
67
102
|
}
|
package/package.json
CHANGED