datakeen-session-react 1.1.140-rc.21 → 1.1.140-rc.23

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.
Files changed (38) hide show
  1. package/dist/cjs/components/DatakeenSession.js +2 -2
  2. package/dist/cjs/components/DatakeenSession.js.map +1 -1
  3. package/dist/cjs/components/document-collection/DocumentProcessing.js +1 -1
  4. package/dist/cjs/components/document-collection/DocumentProcessing.js.map +1 -1
  5. package/dist/cjs/components/document-video/document-video-flow/DocumentVideoProcessing.js +1 -1
  6. package/dist/cjs/components/document-video/document-video-flow/DocumentVideoProcessing.js.map +1 -1
  7. package/dist/cjs/components/jdi/JDIProcessing.js +1 -1
  8. package/dist/cjs/components/jdi/JDIProcessing.js.map +1 -1
  9. package/dist/cjs/components/session/SessionContent.js +2 -2
  10. package/dist/cjs/components/session/SessionContent.js.map +1 -1
  11. package/dist/cjs/components/template/ConditionNodeHandler.js +4 -0
  12. package/dist/cjs/components/template/ConditionNodeHandler.js.map +1 -1
  13. package/dist/cjs/components/template/TemplateNodeRenderer.js +25 -2
  14. package/dist/cjs/components/template/TemplateNodeRenderer.js.map +1 -1
  15. package/dist/cjs/hooks/useStepNavigation.js +1 -0
  16. package/dist/cjs/hooks/useStepNavigation.js.map +1 -1
  17. package/dist/cjs/services/sessionService.js +20 -0
  18. package/dist/cjs/services/sessionService.js.map +1 -1
  19. package/dist/esm/components/DatakeenSession.js +2 -2
  20. package/dist/esm/components/DatakeenSession.js.map +1 -1
  21. package/dist/esm/components/document-collection/DocumentProcessing.js +1 -1
  22. package/dist/esm/components/document-collection/DocumentProcessing.js.map +1 -1
  23. package/dist/esm/components/document-video/document-video-flow/DocumentVideoProcessing.js +1 -1
  24. package/dist/esm/components/document-video/document-video-flow/DocumentVideoProcessing.js.map +1 -1
  25. package/dist/esm/components/jdi/JDIProcessing.js +1 -1
  26. package/dist/esm/components/jdi/JDIProcessing.js.map +1 -1
  27. package/dist/esm/components/session/SessionContent.js +2 -2
  28. package/dist/esm/components/session/SessionContent.js.map +1 -1
  29. package/dist/esm/components/template/ConditionNodeHandler.js +4 -0
  30. package/dist/esm/components/template/ConditionNodeHandler.js.map +1 -1
  31. package/dist/esm/components/template/TemplateNodeRenderer.js +26 -3
  32. package/dist/esm/components/template/TemplateNodeRenderer.js.map +1 -1
  33. package/dist/esm/hooks/useStepNavigation.js +1 -0
  34. package/dist/esm/hooks/useStepNavigation.js.map +1 -1
  35. package/dist/esm/services/sessionService.js +20 -1
  36. package/dist/esm/services/sessionService.js.map +1 -1
  37. package/docs/multi-runs.md +100 -0
  38. package/package.json +1 -1
@@ -0,0 +1,100 @@
1
+ # Multi-runs — Pré-remplissage par run avec `userInputList`
2
+
3
+ ## Vue d'ensemble
4
+
5
+ Un parcours peut contenir une **boucle** : un nœud `condition` avec `conditionFalseMode: "loop"` pointe via son edge "false" vers un nœud antérieur (ex: `information-input`). Cela permet de faire saisir des données à plusieurs personnes successivement dans la même session (ex: déclaration de plusieurs bénéficiaires).
6
+
7
+ Ce guide explique comment pré-remplir le formulaire différemment à chaque passage.
8
+
9
+ ---
10
+
11
+ ## Convention `_list`
12
+
13
+ À la **création de session**, l'intégrateur peut passer un tableau de pré-remplissages via la clé réservée `_list` dans `userInput` :
14
+
15
+ ```json
16
+ POST /backend/api/v1/session
17
+ {
18
+ "journeyId": "...",
19
+ "userInput": {
20
+ "_list": [
21
+ { "firstName": "Alice", "lastName": "Dupont" },
22
+ { "firstName": "Bob", "lastName": "Martin" }
23
+ ]
24
+ }
25
+ }
26
+ ```
27
+
28
+ - `_list[0]` → pré-rempli au **1er passage** sur le nœud
29
+ - `_list[1]` → pré-rempli au **2e passage**
30
+ - Si l'index est hors borne → **formulaire vide** (pas de reprise des valeurs du run précédent)
31
+
32
+ > **Aucun changement de schéma backend requis.** La clé `_list` est stockée dans le champ `userInput` (Json) existant.
33
+
34
+ ---
35
+
36
+ ## Compteur de run
37
+
38
+ Le SDK utilise `session.retryCounts[nodeId]` comme **index du run courant** (0-indexed).
39
+
40
+ Ce champ est déjà géré automatiquement :
41
+ - incrémenté par `ConditionNodeHandler` lorsque la condition évalue à `false` et `conditionFalseMode: "loop"` navigue en arrière
42
+ - persisté en base via `PATCH /session/sdk/:id`
43
+
44
+ Il n'y a **rien à configurer** — le SDK sélectionne automatiquement la bonne entrée de `_list`.
45
+
46
+ ---
47
+
48
+ ## Comportement détaillé
49
+
50
+ | Situation | `initialUserInput` reçu par le formulaire |
51
+ |-----------|------------------------------------------|
52
+ | `userInput` sans `_list` | `userInput` global (comportement inchangé) |
53
+ | `_list` présent, run 0 | `_list[0]` |
54
+ | `_list` présent, run 1 | `_list[1]` |
55
+ | `_list` présent, run N ≥ longueur | `{}` (formulaire vide) |
56
+
57
+ ---
58
+
59
+ ## Retour arrière
60
+
61
+ Le bouton "Retour" utilise `goBack()` qui remonte dans l'historique de navigation vers le **nœud précédent dans le graphe**. Il ne revient pas au run précédent sur le même nœud.
62
+
63
+ ---
64
+
65
+ ## Exemple de parcours complet
66
+
67
+ ```
68
+ start → information-input → condition (loop si false) → end
69
+ ↑_____________________|
70
+ ```
71
+
72
+ Payload de création avec 2 personnes à déclarer :
73
+ ```json
74
+ {
75
+ "journeyId": "journey-id",
76
+ "userInput": {
77
+ "_list": [
78
+ { "firstName": "Alice", "lastName": "Dupont", "birthDate": "1990-01-15" },
79
+ { "firstName": "Bob", "lastName": "Martin", "birthDate": "1985-06-22" }
80
+ ]
81
+ }
82
+ }
83
+ ```
84
+
85
+ **Déroulé :**
86
+ 1. Run 0 → formulaire pré-rempli avec Alice → condition évalue les données → false → retour sur le formulaire
87
+ 2. Run 1 → formulaire pré-rempli avec Bob → condition évalue → true → fin
88
+ 3. Run 2 (si prévu) → formulaire vide
89
+
90
+ ---
91
+
92
+ ## Fichiers de référence
93
+
94
+ | Fichier | Rôle |
95
+ |---------|------|
96
+ | `src/services/sessionService.ts` | `getRunPrefillData(userInput, runIndex)` |
97
+ | `src/components/template/TemplateNodeRenderer.tsx` | Calcul de `initialUserInput` pour `information-input` |
98
+ | `src/services/retryService.ts` | `getNodeRetryCount(session, nodeId)` |
99
+ | `src/components/template/ConditionNodeHandler.tsx` | Incrémente `retryCounts` en mode loop |
100
+ | `src/hooks/useStepNavigation.ts` | `goBack()` — retour au nœud précédent |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "datakeen-session-react",
3
- "version": "1.1.140-rc.21",
3
+ "version": "1.1.140-rc.23",
4
4
  "description": "React SDK component to manage and render Datakeen session experiences easily.",
5
5
  "publishConfig": {
6
6
  "access": "public",