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.
- package/dist/cjs/components/DatakeenSession.js +2 -2
- package/dist/cjs/components/DatakeenSession.js.map +1 -1
- package/dist/cjs/components/document-collection/DocumentProcessing.js +1 -1
- package/dist/cjs/components/document-collection/DocumentProcessing.js.map +1 -1
- package/dist/cjs/components/document-video/document-video-flow/DocumentVideoProcessing.js +1 -1
- package/dist/cjs/components/document-video/document-video-flow/DocumentVideoProcessing.js.map +1 -1
- package/dist/cjs/components/jdi/JDIProcessing.js +1 -1
- package/dist/cjs/components/jdi/JDIProcessing.js.map +1 -1
- package/dist/cjs/components/session/SessionContent.js +2 -2
- package/dist/cjs/components/session/SessionContent.js.map +1 -1
- package/dist/cjs/components/template/ConditionNodeHandler.js +4 -0
- package/dist/cjs/components/template/ConditionNodeHandler.js.map +1 -1
- package/dist/cjs/components/template/TemplateNodeRenderer.js +25 -2
- package/dist/cjs/components/template/TemplateNodeRenderer.js.map +1 -1
- package/dist/cjs/hooks/useStepNavigation.js +1 -0
- package/dist/cjs/hooks/useStepNavigation.js.map +1 -1
- package/dist/cjs/services/sessionService.js +20 -0
- package/dist/cjs/services/sessionService.js.map +1 -1
- package/dist/esm/components/DatakeenSession.js +2 -2
- package/dist/esm/components/DatakeenSession.js.map +1 -1
- package/dist/esm/components/document-collection/DocumentProcessing.js +1 -1
- package/dist/esm/components/document-collection/DocumentProcessing.js.map +1 -1
- package/dist/esm/components/document-video/document-video-flow/DocumentVideoProcessing.js +1 -1
- package/dist/esm/components/document-video/document-video-flow/DocumentVideoProcessing.js.map +1 -1
- package/dist/esm/components/jdi/JDIProcessing.js +1 -1
- package/dist/esm/components/jdi/JDIProcessing.js.map +1 -1
- package/dist/esm/components/session/SessionContent.js +2 -2
- package/dist/esm/components/session/SessionContent.js.map +1 -1
- package/dist/esm/components/template/ConditionNodeHandler.js +4 -0
- package/dist/esm/components/template/ConditionNodeHandler.js.map +1 -1
- package/dist/esm/components/template/TemplateNodeRenderer.js +26 -3
- package/dist/esm/components/template/TemplateNodeRenderer.js.map +1 -1
- package/dist/esm/hooks/useStepNavigation.js +1 -0
- package/dist/esm/hooks/useStepNavigation.js.map +1 -1
- package/dist/esm/services/sessionService.js +20 -1
- package/dist/esm/services/sessionService.js.map +1 -1
- package/docs/multi-runs.md +100 -0
- 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 |
|