datakeen-session-react 1.1.197 → 1.1.198-rc.1

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 (62) hide show
  1. package/dist/cjs/components/session/EndFlow.js +15 -5
  2. package/dist/cjs/components/session/EndFlow.js.map +1 -1
  3. package/dist/cjs/components/session/SessionContent.js +5 -3
  4. package/dist/cjs/components/session/SessionContent.js.map +1 -1
  5. package/dist/cjs/components/start-flow/Start.js +1 -0
  6. package/dist/cjs/components/start-flow/Start.js.map +1 -1
  7. package/dist/cjs/components/template/ComplementaryMandateNodeHandler.js +36 -0
  8. package/dist/cjs/components/template/ComplementaryMandateNodeHandler.js.map +1 -0
  9. package/dist/cjs/components/template/TemplateNodeRenderer.js +8 -3
  10. package/dist/cjs/components/template/TemplateNodeRenderer.js.map +1 -1
  11. package/dist/cjs/hooks/useSessionData.js +10 -5
  12. package/dist/cjs/hooks/useSessionData.js.map +1 -1
  13. package/dist/cjs/hooks/useStepNavigation.js +7 -5
  14. package/dist/cjs/hooks/useStepNavigation.js.map +1 -1
  15. package/dist/cjs/hooks/useUserInputForm.js +27 -6
  16. package/dist/cjs/hooks/useUserInputForm.js.map +1 -1
  17. package/dist/cjs/i18n/en.json.js +22 -1
  18. package/dist/cjs/i18n/en.json.js.map +1 -1
  19. package/dist/cjs/i18n/es.json.js +22 -1
  20. package/dist/cjs/i18n/es.json.js.map +1 -1
  21. package/dist/cjs/i18n/fr.json.js +22 -1
  22. package/dist/cjs/i18n/fr.json.js.map +1 -1
  23. package/dist/cjs/services/sessionService.js +33 -6
  24. package/dist/cjs/services/sessionService.js.map +1 -1
  25. package/dist/cjs/types/session.js.map +1 -1
  26. package/dist/cjs/utils/customFieldValidation.js +44 -1
  27. package/dist/cjs/utils/customFieldValidation.js.map +1 -1
  28. package/dist/cjs/utils/sessionStatus.js +28 -0
  29. package/dist/cjs/utils/sessionStatus.js.map +1 -0
  30. package/dist/esm/components/session/EndFlow.js +15 -5
  31. package/dist/esm/components/session/EndFlow.js.map +1 -1
  32. package/dist/esm/components/session/SessionContent.js +5 -3
  33. package/dist/esm/components/session/SessionContent.js.map +1 -1
  34. package/dist/esm/components/start-flow/Start.js +1 -0
  35. package/dist/esm/components/start-flow/Start.js.map +1 -1
  36. package/dist/esm/components/template/ComplementaryMandateNodeHandler.js +32 -0
  37. package/dist/esm/components/template/ComplementaryMandateNodeHandler.js.map +1 -0
  38. package/dist/esm/components/template/TemplateNodeRenderer.js +8 -3
  39. package/dist/esm/components/template/TemplateNodeRenderer.js.map +1 -1
  40. package/dist/esm/hooks/useSessionData.js +10 -5
  41. package/dist/esm/hooks/useSessionData.js.map +1 -1
  42. package/dist/esm/hooks/useStepNavigation.js +5 -3
  43. package/dist/esm/hooks/useStepNavigation.js.map +1 -1
  44. package/dist/esm/hooks/useUserInputForm.js +28 -7
  45. package/dist/esm/hooks/useUserInputForm.js.map +1 -1
  46. package/dist/esm/i18n/en.json.js +22 -2
  47. package/dist/esm/i18n/en.json.js.map +1 -1
  48. package/dist/esm/i18n/es.json.js +22 -2
  49. package/dist/esm/i18n/es.json.js.map +1 -1
  50. package/dist/esm/i18n/fr.json.js +22 -2
  51. package/dist/esm/i18n/fr.json.js.map +1 -1
  52. package/dist/esm/services/sessionService.js +33 -7
  53. package/dist/esm/services/sessionService.js.map +1 -1
  54. package/dist/esm/types/session.js.map +1 -1
  55. package/dist/esm/utils/customFieldValidation.js +44 -2
  56. package/dist/esm/utils/customFieldValidation.js.map +1 -1
  57. package/dist/esm/utils/sessionStatus.js +26 -0
  58. package/dist/esm/utils/sessionStatus.js.map +1 -0
  59. package/docs/COMPLEMENTARY_MANDATE.md +22 -0
  60. package/docs/JOURNEY_NODE_BUILDER.md +15 -0
  61. package/docs/navigation-history.md +8 -0
  62. package/package.json +1 -1
@@ -196,3 +196,18 @@ L’absence signifie donnée personnelle côté backoffice/backend. Seul `false`
196
196
  permet un affichage restreint des champs métier ; une liste est classée en bloc.
197
197
  La version mineure `1.2.0-dev.0` est préparée localement, sans publication.
198
198
  Le backend doit conserver exactement la conversion `labelToKey` du SDK.
199
+
200
+ ## Regex conditionnelle des colonnes email
201
+
202
+ Les colonnes `email` d'un champ `list` contrôlent d'abord le format email, puis la
203
+ regex résolue selon la colonne enum de la même ligne (cas, regex par défaut, aucune
204
+ regex). Message : cas, colonne, traduction générique. `allowUnconstrained` est un
205
+ choix du builder et n'affecte pas la résolution runtime.
206
+ Le serveur peut refuser une liste configurée avec HTTP 400 et le code
207
+ `CUSTOM_FIELD_VALIDATION_FAILED` ; `useSessionData` journalise ce code sans modifier
208
+ le comportement de synchronisation.
209
+
210
+
211
+ ## Mandat complémentaire
212
+
213
+ Le nœud auto-exécutant `complementary-mandate` route sur le verdict serveur (`same_signer`, `new_signer`, `no_mandate`). Toute erreur bloque le routage et propose de réessayer. Voir [COMPLEMENTARY_MANDATE.md](COMPLEMENTARY_MANDATE.md).
@@ -143,6 +143,14 @@ const goOnPreviousStep = () => goBack();
143
143
 
144
144
  Préférer `goToNextStep(node.id, template)` qui résout automatiquement l'index suivant via le graphe. `setStep` est réservé aux cas où l'index de destination est déjà connu (ex: reprise de session, `goBack`).
145
145
 
146
+ ### Reprise d'une session déjà terminée : ne jamais rejouer un nœud `end`
147
+
148
+ La reprise se fait **par index** (`currentStep`) sur `getOrderedJourneySteps()` (nœuds triés par `order`, puis par `id`). Si le parcours est modifié après coup — par exemple un nœud `end` ajouté avec le même `order` qu'une étape existante — l'index persisté peut désigner un autre nœud qu'au moment de la sauvegarde. Une session rouverte peut alors « atterrir » sur une fin jamais empruntée, et `EndFlow` enverrait `ended` + l'id de cette fin au montage (incident Quadient, sept. 2026 : dossiers signés passés en `ai_rejected`).
149
+
150
+ Protection : `isSessionFinished(status)` (`src/utils/sessionStatus.ts`) — vrai pour `ended` et les statuts consolidés (`verify`, `ai_approved`, `ai_rejected`, `user_approved`, `user_rejected`), **faux pour `conform`** (posé après la signature, avant le vrai nœud `end`). `useStepNavigation`, `TemplateNodeRenderer` et `SessionContent` l'utilisent pour afficher directement l'écran de fin ; pour un statut consolidé, `EndFlow` reçoit `alreadyFinished` : **aucun PATCH** au montage, écran calculé depuis le statut connu. Le backend ignore de son côté un second `ended` sur une session déjà terminée (voir `backend/docs/SESSION_STATUS_CALCULATION.md`).
151
+
152
+ La reprise par index reste une limite connue : la remplacer par une reprise par id de nœud est un chantier séparé.
153
+
146
154
  ---
147
155
 
148
156
  ## Fichiers de référence
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "datakeen-session-react",
3
- "version": "1.1.197",
3
+ "version": "1.1.198-rc.1",
4
4
  "description": "React SDK component to manage and render Datakeen session experiences easily.",
5
5
  "publishConfig": {
6
6
  "access": "public",