@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.
@@ -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,CA2MxE,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
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
- * @param valeur - Valeur du champ variable.valeur (ex: "${G_01}")
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(valeur: string | null | undefined): string | null;
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 G_03 (Département) avec valeur: "${G_02}"
25
- * // reponses = { "G_02": { valeur: { id: 10, code: "REG01", designation: "Abidjan" } } }
26
- * resolveParentValue(variable, reponses) // Returns: 10
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;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAcpF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,GAAG,EACb,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC5B,MAAM,GAAG,IAAI,CAiCf;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"}
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
- * @param valeur - Valeur du champ variable.valeur (ex: "${G_01}")
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(valeur) {
17
- if (!valeur)
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 = valeur.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(valeur)) {
26
- return valeur;
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 G_03 (Département) avec valeur: "${G_02}"
38
- * // reponses = { "G_02": { valeur: { id: 10, code: "REG01", designation: "Abidjan" } } }
39
- * resolveParentValue(variable, reponses) // Returns: 10
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.valeur);
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. Autre format (on essaie d'extraire l'ID)
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 qui pourrait être un nombre
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsuci/shared-form-components",
3
- "version": "1.0.20",
3
+ "version": "1.0.21",
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",