datakeen-session-react 1.1.195-rc.3 → 1.1.196
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/start-flow/Start.js +0 -1
- package/dist/cjs/components/start-flow/Start.js.map +1 -1
- package/dist/cjs/components/template/TemplateNodeRenderer.js +0 -3
- package/dist/cjs/components/template/TemplateNodeRenderer.js.map +1 -1
- package/dist/cjs/hooks/useSessionData.js +5 -10
- package/dist/cjs/hooks/useSessionData.js.map +1 -1
- package/dist/cjs/hooks/useStepNavigation.js +1 -1
- package/dist/cjs/hooks/useStepNavigation.js.map +1 -1
- package/dist/cjs/hooks/useUserInputForm.js +6 -27
- package/dist/cjs/hooks/useUserInputForm.js.map +1 -1
- package/dist/cjs/i18n/en.json.js +1 -22
- package/dist/cjs/i18n/en.json.js.map +1 -1
- package/dist/cjs/i18n/es.json.js +1 -22
- package/dist/cjs/i18n/es.json.js.map +1 -1
- package/dist/cjs/i18n/fr.json.js +1 -22
- package/dist/cjs/i18n/fr.json.js.map +1 -1
- package/dist/cjs/services/sessionService.js +6 -33
- package/dist/cjs/services/sessionService.js.map +1 -1
- package/dist/cjs/types/session.js.map +1 -1
- package/dist/cjs/utils/customFieldValidation.js +1 -44
- package/dist/cjs/utils/customFieldValidation.js.map +1 -1
- package/dist/esm/components/start-flow/Start.js +0 -1
- package/dist/esm/components/start-flow/Start.js.map +1 -1
- package/dist/esm/components/template/TemplateNodeRenderer.js +0 -3
- package/dist/esm/components/template/TemplateNodeRenderer.js.map +1 -1
- package/dist/esm/hooks/useSessionData.js +5 -10
- package/dist/esm/hooks/useSessionData.js.map +1 -1
- package/dist/esm/hooks/useStepNavigation.js +1 -1
- package/dist/esm/hooks/useStepNavigation.js.map +1 -1
- package/dist/esm/hooks/useUserInputForm.js +7 -28
- package/dist/esm/hooks/useUserInputForm.js.map +1 -1
- package/dist/esm/i18n/en.json.js +2 -22
- package/dist/esm/i18n/en.json.js.map +1 -1
- package/dist/esm/i18n/es.json.js +2 -22
- package/dist/esm/i18n/es.json.js.map +1 -1
- package/dist/esm/i18n/fr.json.js +2 -22
- package/dist/esm/i18n/fr.json.js.map +1 -1
- package/dist/esm/services/sessionService.js +7 -33
- package/dist/esm/services/sessionService.js.map +1 -1
- package/dist/esm/types/session.js.map +1 -1
- package/dist/esm/utils/customFieldValidation.js +2 -44
- package/dist/esm/utils/customFieldValidation.js.map +1 -1
- package/docs/JOURNEY_NODE_BUILDER.md +0 -15
- package/package.json +1 -1
- package/dist/cjs/components/template/ComplementaryMandateNodeHandler.js +0 -36
- package/dist/cjs/components/template/ComplementaryMandateNodeHandler.js.map +0 -1
- package/dist/esm/components/template/ComplementaryMandateNodeHandler.js +0 -32
- package/dist/esm/components/template/ComplementaryMandateNodeHandler.js.map +0 -1
- package/docs/COMPLEMENTARY_MANDATE.md +0 -22
|
@@ -13,7 +13,6 @@ require('../../utils/cssLoader.js');
|
|
|
13
13
|
require('../../context/DocumentContext.js');
|
|
14
14
|
require('../../services/api.js');
|
|
15
15
|
require('../../config/env.js');
|
|
16
|
-
require('axios');
|
|
17
16
|
require('../../services/auditTrailService.js');
|
|
18
17
|
require('ua-parser-js');
|
|
19
18
|
var StartIcon = require('../icons/StartIcon.js');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Start.js","sources":["../../../../../src/components/start-flow/Start.tsx"],"sourcesContent":["import { useI18n } from \"../..\";\nimport { SessionData } from \"../../types/session\";\nimport StartIcon from \"../icons/StartIcon\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Title from \"../ui/Title\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\ninterface StartProps {\n setStep: (nubr: number) => void;\n welcomeTitle?: string;\n welcomeSubtitle?: string;\n welcomeDescription?: string;\n welcomeImage?: string;\n session?: SessionData;\n}\n\nconst Start = ({\n setStep,\n welcomeTitle,\n welcomeSubtitle,\n welcomeDescription,\n welcomeImage,\n session,\n}: StartProps) => {\n const { t } = useI18n();\n\n const displayTitle =\n welcomeTitle || t(\"start.welcome_title\", \"Vérifions votre identité\");\n const displaySubtitle =\n welcomeSubtitle ||\n t(\"start.welcome_subtitle\", \"Nous devons vérifier votre identité\");\n const displayDescription =\n welcomeDescription || t(\"start.welcome_description\");\n\n const goOnNextStep = () => {\n setStep(1);\n };\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button onClick={goOnNextStep}>{t(\"start_verification\")}</Button>\n }\n />\n }\n session={session}\n >\n <div className=\"flex flex-col items-center px-4 py-8 md:px-8\">\n <div className=\"w-full max-w-md mx-auto text-center space-y-6 flex flex-col\">\n {/* Icon/Image - shown on top for both mobile and desktop */}\n <div className=\"flex justify-center\">\n {welcomeImage ? (\n <img\n src={welcomeImage}\n alt=\"Welcome image\"\n className=\"max-w-48 w-auto h-auto rounded-lg\"\n />\n ) : (\n <StartIcon className=\"w-48 h-48\" />\n )}\n </div>\n\n {/* Text content */}\n <div className=\"space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {displayTitle}\n </Title>\n <Subtitle className=\"text-sm md:text-base text-gray-600 leading-relaxed whitespace-pre-line\">\n {displaySubtitle}\n </Subtitle>\n </div>\n\n {/* Terms notice */}\n <div className=\"md:block mt-8\">\n <p className=\"text-xs text-gray-500 leading-relaxed max-w-sm mx-auto whitespace-pre-line\">\n {displayDescription}\n </p>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default Start;\n"],"names":["useI18n","_jsx","MobilePageLayout","PageActions","Button","_jsxs","StartIcon","Title","Subtitle"],"mappings":"
|
|
1
|
+
{"version":3,"file":"Start.js","sources":["../../../../../src/components/start-flow/Start.tsx"],"sourcesContent":["import { useI18n } from \"../..\";\nimport { SessionData } from \"../../types/session\";\nimport StartIcon from \"../icons/StartIcon\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Title from \"../ui/Title\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\ninterface StartProps {\n setStep: (nubr: number) => void;\n welcomeTitle?: string;\n welcomeSubtitle?: string;\n welcomeDescription?: string;\n welcomeImage?: string;\n session?: SessionData;\n}\n\nconst Start = ({\n setStep,\n welcomeTitle,\n welcomeSubtitle,\n welcomeDescription,\n welcomeImage,\n session,\n}: StartProps) => {\n const { t } = useI18n();\n\n const displayTitle =\n welcomeTitle || t(\"start.welcome_title\", \"Vérifions votre identité\");\n const displaySubtitle =\n welcomeSubtitle ||\n t(\"start.welcome_subtitle\", \"Nous devons vérifier votre identité\");\n const displayDescription =\n welcomeDescription || t(\"start.welcome_description\");\n\n const goOnNextStep = () => {\n setStep(1);\n };\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button onClick={goOnNextStep}>{t(\"start_verification\")}</Button>\n }\n />\n }\n session={session}\n >\n <div className=\"flex flex-col items-center px-4 py-8 md:px-8\">\n <div className=\"w-full max-w-md mx-auto text-center space-y-6 flex flex-col\">\n {/* Icon/Image - shown on top for both mobile and desktop */}\n <div className=\"flex justify-center\">\n {welcomeImage ? (\n <img\n src={welcomeImage}\n alt=\"Welcome image\"\n className=\"max-w-48 w-auto h-auto rounded-lg\"\n />\n ) : (\n <StartIcon className=\"w-48 h-48\" />\n )}\n </div>\n\n {/* Text content */}\n <div className=\"space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {displayTitle}\n </Title>\n <Subtitle className=\"text-sm md:text-base text-gray-600 leading-relaxed whitespace-pre-line\">\n {displaySubtitle}\n </Subtitle>\n </div>\n\n {/* Terms notice */}\n <div className=\"md:block mt-8\">\n <p className=\"text-xs text-gray-500 leading-relaxed max-w-sm mx-auto whitespace-pre-line\">\n {displayDescription}\n </p>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default Start;\n"],"names":["useI18n","_jsx","MobilePageLayout","PageActions","Button","_jsxs","StartIcon","Title","Subtitle"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkBA,IAAM,KAAK,GAAG,UAAC,EAOF,EAAA;AANX,IAAA,IAAA,OAAO,GAAA,EAAA,CAAA,OAAA,EACP,YAAY,GAAA,EAAA,CAAA,YAAA,EACZ,eAAe,GAAA,EAAA,CAAA,eAAA,EACf,kBAAkB,wBAAA,EAClB,YAAY,GAAA,EAAA,CAAA,YAAA,EACZ,OAAO,GAAA,EAAA,CAAA,OAAA;AAEC,IAAA,IAAA,CAAC,GAAKA,eAAO,EAAE,EAAd;IAET,IAAM,YAAY,GAChB,YAAY,IAAI,CAAC,CAAC,qBAAqB,EAAE,0BAA0B,CAAC;IACtE,IAAM,eAAe,GACnB,eAAe;AACf,QAAA,CAAC,CAAC,wBAAwB,EAAE,qCAAqC,CAAC;IACpE,IAAM,kBAAkB,GACtB,kBAAkB,IAAI,CAAC,CAAC,2BAA2B,CAAC;AAEtD,IAAA,IAAM,YAAY,GAAG,YAAA;QACnB,OAAO,CAAC,CAAC,CAAC;AACZ,IAAA,CAAC;IAED,QACEC,cAAA,CAACC,wBAAgB,EAAA,EACf,MAAM,EACJD,cAAA,CAACE,mBAAW,EAAA,EACV,OAAO,EACLF,cAAA,CAACG,cAAM,EAAA,EAAC,OAAO,EAAE,YAAY,EAAA,QAAA,EAAG,CAAC,CAAC,oBAAoB,CAAC,EAAA,CAAU,EAAA,CAEnE,EAEJ,OAAO,EAAE,OAAO,EAAA,QAAA,EAEhBH,wBAAK,SAAS,EAAC,8CAA8C,EAAA,QAAA,EAC3DI,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6DAA6D,EAAA,QAAA,EAAA,CAE1EJ,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,qBAAqB,EAAA,QAAA,EACjC,YAAY,IACXA,cAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,YAAY,EACjB,GAAG,EAAC,eAAe,EACnB,SAAS,EAAC,mCAAmC,EAAA,CAC7C,KAEFA,cAAA,CAACK,iBAAS,EAAA,EAAC,SAAS,EAAC,WAAW,EAAA,CAAG,CACpC,EAAA,CACG,EAGND,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CACxBJ,cAAA,CAACM,aAAK,EAAA,EAAC,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAC/C,YAAY,EAAA,CACP,EACRN,cAAA,CAACO,gBAAQ,EAAA,EAAC,SAAS,EAAC,wEAAwE,EAAA,QAAA,EACzF,eAAe,EAAA,CACP,CAAA,EAAA,CACP,EAGNP,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,eAAe,EAAA,QAAA,EAC5BA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,4EAA4E,EAAA,QAAA,EACtF,kBAAkB,EAAA,CACjB,EAAA,CACA,CAAA,EAAA,CACF,EAAA,CACF,EAAA,CACW;AAEvB;;;;"}
|
|
@@ -4,7 +4,6 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var tslib_es6 = require('../../node_modules/tslib/tslib.es6.js');
|
|
6
6
|
var jsxRuntime = require('react/jsx-runtime');
|
|
7
|
-
var ComplementaryMandateNodeHandler = require('./ComplementaryMandateNodeHandler.js');
|
|
8
7
|
var React = require('react');
|
|
9
8
|
var Selfie = require('../session/Selfie.js');
|
|
10
9
|
var VideoWorkInProgress = require('../session/VideoWorkInProgress.js');
|
|
@@ -128,8 +127,6 @@ var TemplateNodeRenderer = function (_a) {
|
|
|
128
127
|
case "condition":
|
|
129
128
|
console.debug("🔀 Rendering Condition Node Handler component and well");
|
|
130
129
|
return (jsxRuntime.jsx(ConditionNodeHandler.default, { node: node, session: session, templateNodes: templateNodes, stepObject: stepObject, userInput: userInput, contactInfo: contactInfo }));
|
|
131
|
-
case "complementary-mandate":
|
|
132
|
-
return jsxRuntime.jsx(ComplementaryMandateNodeHandler.default, { sessionId: sessionId, nodeId: node.id, onOutcome: function (outcome) { return stepObject.goToNextStep(node.id, session.template, outcome); } });
|
|
133
130
|
case "external-verification":
|
|
134
131
|
console.debug("🔍 Rendering External Verification Node Handler");
|
|
135
132
|
return (jsxRuntime.jsx(ExternalVerificationNodeHandler.default, { node: node, session: session, userInput: userInput, setUserInput: setUserInput, onNext: function () { return stepObject.goToNextStep(node.id, session.template); }, onPrevious: function () { return stepObject.goBack(); }, onNavigateToNode: function (nodeId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TemplateNodeRenderer.js","sources":["../../../../../src/components/template/TemplateNodeRenderer.tsx"],"sourcesContent":["import ComplementaryMandateNodeHandler from './ComplementaryMandateNodeHandler';\nimport React, { useMemo } from \"react\";\nimport Selfie from \"../session/Selfie\";\nimport VideoWorkInProgress from \"../session/VideoWorkInProgress\";\nimport DocumentCheck, { NodeIdentityControl } from \"../session/DocumentCheck\";\nimport DocumentCollection, {\n DocumentTypeSide,\n NodeDocumentCollection,\n} from \"../document-collection/DocumentCollection\";\nimport EndFlow from \"../session/EndFlow\";\nimport LoadingState from \"../states/LoadingState\";\nimport JDDWorkInProgress from \"../jdi/JDDWorkInProgress\";\nimport { getOrderedJourneySteps, getRunPrefillData } from \"../../services/sessionService\";\nimport type { SessionData, stepObject } from \"../../types/session\";\nimport type { UserInput } from \"../../types/userInput\";\nimport type { ContactInfo } from \"../../types/contactInfo\";\nimport UserInputForm from \"../session/UserInputForm\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport ConditionNodeHandler from \"./ConditionNodeHandler\";\nimport SignatureElectronic from \"../signature-electronic/SignatureElectronic\";\nimport ExternalVerificationNodeHandler from \"./ExternalVerificationNodeHandler\";\nimport PdfGeneration from \"../session/PdfGeneration\";\nimport LegalConsentNode from \"../legal-consent/LegalConsentNode\";\n\ninterface TemplateNodeRendererProps {\n session: SessionData;\n sessionId: string;\n stepObject: stepObject;\n stepHistory: number[];\n templateIndex: number;\n onContinueOnPC: () => void;\n userInput: UserInput;\n setUserInput: React.Dispatch<React.SetStateAction<UserInput>>;\n contactInfo: ContactInfo;\n setContactInfo: React.Dispatch<React.SetStateAction<ContactInfo>>;\n isMobileTemplate: boolean;\n}\n\nconst TemplateNodeRenderer: React.FC<TemplateNodeRendererProps> = ({\n session,\n sessionId,\n stepObject,\n stepHistory,\n templateIndex,\n onContinueOnPC,\n userInput,\n setUserInput,\n contactInfo,\n setContactInfo,\n isMobileTemplate,\n}) => {\n const { t } = useI18n();\n\n if (!session?.template) {\n console.error(t(\"template.error.console_no_template\"));\n return (\n <div className=\"flex flex-col items-center justify-center h-full p-4 text-center\">\n <div className=\"text-red-500 text-4xl mb-4\">⚠️</div>\n <h2 className=\"text-xl font-bold text-red-600 mb-2\">\n {t(\"template.error.configuration\")}\n </h2>\n <p className=\"text-gray-600 mb-4\">{t(\"template.error.no_template\")}</p>\n </div>\n );\n }\n\n // Check if session is ended before rendering nodes\n if (session.status === \"ended\") {\n return (\n <EndFlow\n sessionId={sessionId}\n sessionStatus={session.status}\n callbackURL={session.callbackURL}\n compliantCase={session.template?.endScreenConfig?.compliant}\n nonCompliantCase={session.template?.endScreenConfig?.nonCompliant}\n />\n );\n }\n\n // Use getOrderedWorkflowSteps to get sorted and filtered nodes\n const templateNodes = useMemo(\n () => getOrderedJourneySteps(session.template),\n [session.template],\n );\n\n // Check if index is valid\n if (templateNodes.length === 0) {\n console.warn(\"No valid template nodes found after filtering\");\n return (\n <EndFlow\n sessionId={sessionId}\n sessionStatus={session?.status}\n callbackURL={session?.callbackURL}\n />\n );\n }\n\n if (templateIndex < 0 || templateIndex >= templateNodes.length) {\n console.warn(\n `Invalid template index: ${templateIndex}, max index: ${templateNodes.length - 1\n }`,\n );\n\n // If we're beyond the maximum index, it means we've completed all nodes\n if (templateIndex >= templateNodes.length) {\n return (\n <EndFlow\n sessionId={sessionId}\n sessionStatus={session?.status}\n callbackURL={session?.callbackURL}\n compliantCase={session?.template?.endScreenConfig?.compliant}\n nonCompliantCase={session?.template?.endScreenConfig?.nonCompliant}\n />\n );\n }\n\n // If index is negative, redirect to start\n if (templateIndex < 0) {\n setTimeout(() => stepObject.setStep(0), 0);\n return <LoadingState message={t(\"loading.step\")} subtitle=\"\" />;\n }\n }\n\n // At this point, we should have a valid node\n const node = templateNodes[templateIndex];\n if (!node) {\n console.error(\n `Node at index ${templateIndex} is undefined. Available nodes:`,\n templateNodes,\n );\n return (\n <div className=\"flex flex-col items-center justify-center h-full p-4 text-center\">\n <div className=\"text-red-500 text-4xl mb-4\">⚠️</div>\n <h2 className=\"text-xl font-bold text-red-600 mb-2\">\n {t(\"template.error.render\")}\n </h2>\n <p className=\"text-gray-600 mb-4\">\n {t(\"template.error.node_not_found\")}\n </p>\n <button\n className=\"px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors\"\n onClick={() => stepObject.setStep(0)}\n >\n {t(\"template.buttons.restart\")}\n </button>\n </div>\n );\n }\n\n switch (node.type) {\n case \"end\":\n console.log(\"📄 Rendering EndFlow component\");\n return (\n <EndFlow\n sessionId={sessionId}\n sessionStatus={session?.status}\n callbackURL={session?.callbackURL}\n endNodeId={node.id}\n expectedResult={node.expectedResult}\n compliantCase={session?.template?.endScreenConfig?.compliant}\n nonCompliantCase={session?.template?.endScreenConfig?.nonCompliant}\n />\n );\n\n case \"information-input\": {\n // runIndex = nombre de fois que ce step a déjà été visité dans l'historique\n // (0 = premier passage, 1 = deuxième, …).\n // On compte les occurrences de (templateIndex + 1) dans stepHistory,\n // minus 1 car le step courant est déjà dans l'historique.\n const currentStep = templateIndex + 1;\n const visitCount = stepHistory.filter((s) => s === currentStep).length;\n const runIndex = Math.max(0, visitCount - 1);\n\n // Pré-remplissage multi-ENTITÉS : si _list présent, utiliser _list[runIndex]\n // (ou {} hors borne). L'énumération de plusieurs entités successives passe\n // exclusivement par _list (cf. docs/multi-runs.md).\n // Sans _list : on pré-remplit TOUJOURS depuis le userInput persisté — y compris\n // sur une ré-entrée (boucle condition de correction, retour arrière, bouton\n // \"Corriger ma saisie\"). Une ré-entrée sans _list = corriger les MÊMES données,\n // pas en saisir de nouvelles → on ne doit pas vider le formulaire.\n const hasList = Array.isArray(\n (session.userInput as Record<string, unknown>)?._list,\n );\n let initialUserInput: UserInput;\n if (hasList) {\n const prefill = getRunPrefillData(\n session.userInput as Record<string, unknown>,\n runIndex,\n );\n initialUserInput = (prefill ?? {}) as UserInput;\n } else {\n initialUserInput = userInput;\n }\n return (\n // key={node.id} : remonte le formulaire à chaque changement de nœud, pour\n // qu'il se ré-initialise depuis initialUserInput (comportement \"refresh sans\n // refresh\"). Évite la réutilisation d'instance qui laissait customFormData\n // périmé au retour arrière entre deux nœuds information-input.\n <UserInputForm\n key={node.id}\n stepObject={stepObject}\n node={node}\n template={session.template}\n setUserInput={setUserInput}\n initialUserInput={initialUserInput}\n contactInfo={contactInfo}\n setContactInfo={setContactInfo}\n sessionId={sessionId}\n />\n );\n }\n\n case \"document-collection\": {\n return (\n <DocumentCollection\n key={`doc-collection-${templateIndex}`}\n node={node as NodeDocumentCollection}\n stepObject={stepObject}\n sessionId={sessionId}\n template={session.template}\n onContinueOnPC={onContinueOnPC}\n allowedDocumentTypes={(node.allowedDocumentTypes || []).map(\n (docType: any) => ({\n ...docType,\n side:\n typeof docType.side === \"string\" ||\n typeof docType.side === \"number\"\n ? (docType.side as DocumentTypeSide)\n : undefined,\n }),\n )}\n allowedAddingMethods={node.allowedAddingMethods || [\"download\"]}\n introductionPage={node.introductionPage}\n documentSelection={node.documentSelection}\n allowResubmission={node.allowResubmission}\n maxResubmissionAttempts={node.maxResubmissionAttempts}\n />\n );\n }\n\n case \"document-selection\":\n case \"controle-jdi\": {\n if (!node.requiredDocumentType) {\n console.error(\n \"Missing requiredDocumentType in document-selection node:\",\n node,\n );\n return (\n <div className=\"flex flex-col items-center justify-center h-full p-4 text-center\">\n <div className=\"text-red-500 text-4xl mb-4\">⚠️</div>\n <h2 className=\"text-xl font-bold text-red-600 mb-2\">\n Erreur de configuration\n </h2>\n <p className=\"text-gray-600 mb-4\">\n Le type de document requis n'est pas spécifié dans le template.\n </p>\n <button\n className=\"px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors\"\n onClick={() => stepObject.setStep(0)}\n >\n Recommencer\n </button>\n </div>\n );\n }\n\n // Determine if current device is mobile for capture method\n const isMobile =\n /Android|iPhone|iPad|iPod|Opera Mini|IEMobile|WPDesktop/i.test(\n navigator.userAgent,\n );\n\n return (\n <DocumentCheck\n key={`doc-check-${templateIndex}`}\n stepObject={stepObject}\n node={node as NodeIdentityControl}\n sessionId={sessionId}\n documentTypeId={node.requiredDocumentType}\n acceptedCountries={node.acceptedCountries}\n onContinueOnPC={onContinueOnPC}\n isMobileCapture={isMobileTemplate && isMobile}\n allowedAddingMethods={\n node.allowedAddingMethods || [\"download\", \"picture\"]\n }\n template={session.template}\n templateIndex={templateIndex}\n setUserInput={setUserInput}\n />\n );\n // }\n }\n\n case \"biometric-capture\":\n case \"selfie-capture\":\n return (\n <Selfie\n key={`selfie-${templateIndex}`}\n stepObject={stepObject}\n sessionId={sessionId}\n node={node}\n template={session.template}\n />\n );\n\n case \"signature-electronic\":\n return (\n <SignatureElectronic\n key={`signature-${templateIndex}`}\n sessionId={sessionId}\n stepObject={stepObject}\n node={node}\n session={session}\n title={node.title}\n description={node.description}\n // Always pass a stable node identifier so backend can resolve\n // either a static DocuSeal template OR a generated PDF source.\n external_id={node.templateId || node.external_id || node.id}\n fieldMappings={node.fieldMappings}\n userInput={userInput}\n contactInfo={contactInfo}\n />\n );\n\n case \"video-capture\":\n console.log(\"🎥 Rendering Video Work in Progress component\");\n return <VideoWorkInProgress onContinue={onContinueOnPC} />;\n\n case \"jdd\":\n console.log(\"🚧 Rendering JDD Work in Progress component\");\n return <JDDWorkInProgress onContinue={onContinueOnPC} />;\n\n case \"condition\":\n console.debug(\"🔀 Rendering Condition Node Handler component and well\");\n return (\n <ConditionNodeHandler\n node={node}\n session={session}\n templateNodes={templateNodes}\n stepObject={stepObject}\n userInput={userInput}\n contactInfo={contactInfo}\n />\n );\n\n case \"complementary-mandate\":\n return <ComplementaryMandateNodeHandler sessionId={sessionId} nodeId={node.id} onOutcome={outcome => stepObject.goToNextStep(node.id, session.template, outcome)} />;\n\n case \"external-verification\":\n console.debug(\"🔍 Rendering External Verification Node Handler\");\n return (\n <ExternalVerificationNodeHandler\n node={node}\n session={session}\n userInput={userInput}\n setUserInput={setUserInput}\n onNext={() => stepObject.goToNextStep(node.id, session.template)}\n onPrevious={() => stepObject.goBack()}\n onNavigateToNode={(nodeId: string) => {\n const idx = templateNodes.findIndex((n: any) => n.id === nodeId);\n // idx est 0-based, les steps sont 1-based → idx + 1.\n // goBackToStep tronque l'historique pour que le nœud corrigé\n // redevienne runIndex 0 (formulaire pré-rempli).\n if (idx !== -1) stepObject.goBackToStep(idx + 1);\n else stepObject.goBack();\n }}\n />\n );\n\n case \"pdf-generation\":\n console.debug(\"📄 Rendering PDF Generation component\");\n return (\n <PdfGeneration\n key={`pdf-generation-${templateIndex}`}\n node={node}\n session={session}\n sessionId={sessionId}\n stepObject={stepObject}\n userInput={userInput}\n />\n );\n\n case \"legal-consent\":\n return (\n <LegalConsentNode\n node={node}\n session={session}\n sessionId={sessionId}\n stepObject={stepObject}\n />\n );\n\n case \"custom\":\n // For custom nodes, we provide a basic structure that can be extended\n return (\n <div className=\"flex flex-col items-center justify-center h-full p-4 text-center\">\n <div className=\"text-blue-500 text-4xl mb-4\">🔧</div>\n <h2 className=\"text-xl font-bold text-blue-600 mb-2\">\n Nœud personnalisé\n </h2>\n <p className=\"text-gray-600 mb-4\">\n Implémentation personnalisée requise pour: \"{node.title || node.id}\"\n </p>\n <div className=\"bg-blue-50 border border-blue-200 rounded p-3 text-left text-sm mb-4 max-w-md\">\n <p className=\"font-semibold text-blue-700 mb-2\">\n Configuration du nœud:\n </p>\n <pre className=\"text-xs overflow-auto max-h-32\">\n {JSON.stringify(\n {\n id: node.id,\n title: node.title,\n description: node.description,\n options: node.options,\n selectedOptions: node.selectedOptions,\n },\n null,\n 2,\n )}\n </pre>\n </div>\n <button\n className=\"px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700 transition-colors\"\n onClick={() => {\n console.log(\"Custom node action:\", node);\n stepObject.goToNextStep(node.id, session.template);\n }}\n >\n {t(\"template.buttons.continue\")}\n </button>\n </div>\n );\n\n default:\n console.warn(`❌ Type de nœud non supporté: ${node.type}`, node);\n console.log(\"❓ Available supported types:\", [\n \"end\",\n \"information-input\",\n \"document-collection\",\n \"document-selection\",\n \"document-upload\",\n \"controle-jdi\",\n \"selfie-capture\",\n \"video-capture\",\n \"country-selection\",\n \"identity-control\",\n \"jdd\",\n \"condition\",\n \"custom\",\n ]);\n return (\n <div className=\"flex flex-col items-center justify-center h-full p-4 text-center\">\n <div className=\"text-yellow-500 text-4xl mb-4\">⚠️</div>\n <h2 className=\"text-xl font-bold text-yellow-600 mb-2\">\n Étape non supportée\n </h2>\n <p className=\"text-gray-600 mb-4\">\n Le type d'étape \"{node.type}\" n'est pas pris en charge.\n </p>\n <div className=\"bg-gray-100 p-4 rounded mb-4 text-left text-xs overflow-auto max-h-32\">\n <pre>{JSON.stringify(node, null, 2)}</pre>\n </div>\n <button\n className=\"px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors\"\n onClick={() => {\n stepObject.goToNextStep(node.id, session.template);\n }}\n >\n {t(\"template.buttons.continue\")}\n </button>\n </div>\n );\n }\n};\n\nexport default TemplateNodeRenderer;\n"],"names":["useI18n","_jsxs","_jsx","EndFlow","useMemo","getOrderedJourneySteps","LoadingState","getRunPrefillData","UserInputForm","DocumentCollection","__assign","DocumentCheck","Selfie","SignatureElectronic","VideoWorkInProgress","JDDWorkInProgress","ConditionNodeHandler","ComplementaryMandateNodeHandler","ExternalVerificationNodeHandler","PdfGeneration","LegalConsentNode"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAsCA,IAAM,oBAAoB,GAAwC,UAAC,EAYlE,EAAA;;AAXC,IAAA,IAAA,OAAO,GAAA,EAAA,CAAA,OAAA,EACP,SAAS,GAAA,EAAA,CAAA,SAAA,EACT,UAAU,GAAA,EAAA,CAAA,UAAA,EACV,WAAW,GAAA,EAAA,CAAA,WAAA,EACX,aAAa,mBAAA,EACb,cAAc,GAAA,EAAA,CAAA,cAAA,EACd,SAAS,GAAA,EAAA,CAAA,SAAA,EACT,YAAY,GAAA,EAAA,CAAA,YAAA,EACZ,WAAW,GAAA,EAAA,CAAA,WAAA,EACX,cAAc,GAAA,EAAA,CAAA,cAAA,EACd,gBAAgB,GAAA,EAAA,CAAA,gBAAA;AAER,IAAA,IAAA,CAAC,GAAKA,eAAO,EAAE,EAAd;IAET,IAAI,EAAC,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,QAAQ,CAAA,EAAE;QACtB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC;AACtD,QAAA,QACEC,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kEAAkE,EAAA,QAAA,EAAA,CAC/EC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,4BAA4B,EAAA,QAAA,EAAA,cAAA,EAAA,CAAS,EACpDA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,qCAAqC,EAAA,QAAA,EAChD,CAAC,CAAC,8BAA8B,CAAC,EAAA,CAC/B,EACLA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,oBAAoB,EAAA,QAAA,EAAE,CAAC,CAAC,4BAA4B,CAAC,EAAA,CAAK,CAAA,EAAA,CACnE;IAEV;;AAGA,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE;QAC9B,QACEA,eAACC,eAAO,EAAA,EACN,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,OAAO,CAAC,MAAM,EAC7B,WAAW,EAAE,OAAO,CAAC,WAAW,EAChC,aAAa,EAAE,MAAA,CAAA,EAAA,GAAA,OAAO,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,SAAS,EAC3D,gBAAgB,EAAE,MAAA,CAAA,EAAA,GAAA,OAAO,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,YAAY,EAAA,CACjE;IAEN;;IAGA,IAAM,aAAa,GAAGC,aAAO,CAC3B,cAAM,OAAAC,qCAAsB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA,CAAxC,CAAwC,EAC9C,CAAC,OAAO,CAAC,QAAQ,CAAC,CACnB;;AAGD,IAAA,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9B,QAAA,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC;AAC7D,QAAA,QACEH,cAAA,CAACC,eAAO,EAAA,EACN,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,MAAM,EAC9B,WAAW,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,WAAW,EAAA,CACjC;IAEN;IAEA,IAAI,aAAa,GAAG,CAAC,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,EAAE;AAC9D,QAAA,OAAO,CAAC,IAAI,CACV,0BAAA,CAAA,MAAA,CAA2B,aAAa,EAAA,eAAA,CAAA,CAAA,MAAA,CAAgB,aAAa,CAAC,MAAM,GAAG,CAAC,CAC9E,CACH;;AAGD,QAAA,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,EAAE;AACzC,YAAA,QACED,cAAA,CAACC,eAAO,EAAA,EACN,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,MAAM,EAC9B,WAAW,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,WAAW,EACjC,aAAa,EAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,SAAS,EAC5D,gBAAgB,EAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,YAAY,EAAA,CAClE;QAEN;;AAGA,QAAA,IAAI,aAAa,GAAG,CAAC,EAAE;AACrB,YAAA,UAAU,CAAC,YAAA,EAAM,OAAA,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAArB,CAAqB,EAAE,CAAC,CAAC;AAC1C,YAAA,OAAOD,cAAA,CAACI,oBAAY,EAAA,EAAC,OAAO,EAAE,CAAC,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAC,EAAE,GAAG;QACjE;IACF;;AAGA,IAAA,IAAM,IAAI,GAAG,aAAa,CAAC,aAAa,CAAC;IACzC,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,CAAC,KAAK,CACX,gBAAA,CAAA,MAAA,CAAiB,aAAa,EAAA,iCAAA,CAAiC,EAC/D,aAAa,CACd;QACD,QACEL,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kEAAkE,EAAA,QAAA,EAAA,CAC/EC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,4BAA4B,EAAA,QAAA,EAAA,cAAA,EAAA,CAAS,EACpDA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,qCAAqC,EAAA,QAAA,EAChD,CAAC,CAAC,uBAAuB,CAAC,EAAA,CACxB,EACLA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,oBAAoB,EAAA,QAAA,EAC9B,CAAC,CAAC,+BAA+B,CAAC,EAAA,CACjC,EACJA,cAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAC,iFAAiF,EAC3F,OAAO,EAAE,YAAA,EAAM,OAAA,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAArB,CAAqB,EAAA,QAAA,EAEnC,CAAC,CAAC,0BAA0B,CAAC,EAAA,CACvB,CAAA,EAAA,CACL;IAEV;AAEA,IAAA,QAAQ,IAAI,CAAC,IAAI;AACf,QAAA,KAAK,KAAK;AACR,YAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC;AAC7C,YAAA,QACEA,cAAA,CAACC,eAAO,EAAA,EACN,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,MAAM,EAC9B,WAAW,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,EACjC,SAAS,EAAE,IAAI,CAAC,EAAE,EAClB,cAAc,EAAE,IAAI,CAAC,cAAc,EACnC,aAAa,EAAE,MAAA,CAAA,EAAA,GAAA,OAAO,KAAA,IAAA,IAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,SAAS,EAC5D,gBAAgB,EAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,QAAQ,0CAAE,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,YAAY,EAAA,CAClE;QAGN,KAAK,mBAAmB,EAAE;;;;;AAKxB,YAAA,IAAM,aAAW,GAAG,aAAa,GAAG,CAAC;AACrC,YAAA,IAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,UAAC,CAAC,EAAA,EAAK,OAAA,CAAC,KAAK,aAAW,CAAA,CAAjB,CAAiB,CAAC,CAAC,MAAM;AACtE,YAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC;;;;;;;;AAS5C,YAAA,IAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAC3B,CAAA,EAAA,GAAC,OAAO,CAAC,SAAqC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,CACtD;YACD,IAAI,gBAAgB,SAAW;YAC/B,IAAI,OAAO,EAAE;gBACX,IAAM,OAAO,GAAGI,gCAAiB,CAC/B,OAAO,CAAC,SAAoC,EAC5C,QAAQ,CACT;gBACD,gBAAgB,IAAI,OAAO,KAAA,IAAA,IAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAc;YACjD;iBAAO;gBACL,gBAAgB,GAAG,SAAS;YAC9B;YACA;;;;;AAKE,YAAAL,cAAA,CAACM,qBAAa,EAAA,EAEZ,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAC1B,YAAY,EAAE,YAAY,EAC1B,gBAAgB,EAAE,gBAAgB,EAClC,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,SAAS,EAAA,EARf,IAAI,CAAC,EAAE,CASZ;QAEN;QAEA,KAAK,qBAAqB,EAAE;YAC1B,QACEN,cAAA,CAACO,0BAAkB,EAAA,EAEjB,IAAI,EAAE,IAA8B,EACpC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAC1B,cAAc,EAAE,cAAc,EAC9B,oBAAoB,EAAE,CAAC,IAAI,CAAC,oBAAoB,IAAI,EAAE,EAAE,GAAG,CACzD,UAAC,OAAY,IAAK,QAAAC,kBAAA,CAAAA,kBAAA,CAAA,EAAA,EACb,OAAO,CAAA,EAAA,EACV,IAAI,EACF,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;AAC9B,wBAAA,OAAO,OAAO,CAAC,IAAI,KAAK;0BACrB,OAAO,CAAC;0BACT,SAAS,EAAA,CAAA,EACf,CAPgB,CAOhB,CACH,EACD,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,IAAI,CAAC,UAAU,CAAC,EAC/D,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EACvC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EACzC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EACzC,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,EAAA,EApBhD,yBAAkB,aAAa,CAAE,CAqBtC;QAEN;AAEA,QAAA,KAAK,oBAAoB;QACzB,KAAK,cAAc,EAAE;AACnB,YAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;AAC9B,gBAAA,OAAO,CAAC,KAAK,CACX,0DAA0D,EAC1D,IAAI,CACL;gBACD,QACET,yBAAK,SAAS,EAAC,kEAAkE,EAAA,QAAA,EAAA,CAC/EC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,4BAA4B,6BAAS,EACpDA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,qCAAqC,wCAE9C,EACLA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,oBAAoB,0FAE7B,EACJA,cAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAC,iFAAiF,EAC3F,OAAO,EAAE,cAAM,OAAA,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAArB,CAAqB,EAAA,QAAA,EAAA,aAAA,EAAA,CAG7B,CAAA,EAAA,CACL;YAEV;;YAGA,IAAM,QAAQ,GACZ,yDAAyD,CAAC,IAAI,CAC5D,SAAS,CAAC,SAAS,CACpB;AAEH,YAAA,QACEA,cAAA,CAACS,qBAAa,EAAA,EAEZ,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAA2B,EACjC,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,IAAI,CAAC,oBAAoB,EACzC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EACzC,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,gBAAgB,IAAI,QAAQ,EAC7C,oBAAoB,EAClB,IAAI,CAAC,oBAAoB,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,EAEtD,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAC1B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,IAbrB,YAAA,CAAA,MAAA,CAAa,aAAa,CAAE,CAcjC;;QAGN;AAEA,QAAA,KAAK,mBAAmB;AACxB,QAAA,KAAK,gBAAgB;YACnB,QACET,cAAA,CAACU,cAAM,EAAA,EAEL,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAA,EAJrB,SAAA,CAAA,MAAA,CAAU,aAAa,CAAE,CAK9B;AAGN,QAAA,KAAK,sBAAsB;AACzB,YAAA,QACEV,cAAA,CAACW,2BAAmB,EAAA,EAElB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,WAAW,EAAE,IAAI,CAAC,WAAW;;;AAG7B,gBAAA,WAAW,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,EAAE,EAC3D,aAAa,EAAE,IAAI,CAAC,aAAa,EACjC,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EAAA,EAZnB,YAAA,CAAA,MAAA,CAAa,aAAa,CAAE,CAajC;AAGN,QAAA,KAAK,eAAe;AAClB,YAAA,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC;AAC5D,YAAA,OAAOX,eAACY,2BAAmB,EAAA,EAAC,UAAU,EAAE,cAAc,GAAI;AAE5D,QAAA,KAAK,KAAK;AACR,YAAA,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC;AAC1D,YAAA,OAAOZ,eAACa,yBAAiB,EAAA,EAAC,UAAU,EAAE,cAAc,GAAI;AAE1D,QAAA,KAAK,WAAW;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC;AACvE,YAAA,QACEb,cAAA,CAACc,4BAAoB,EAAA,EACnB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EAAA,CACxB;AAGN,QAAA,KAAK,uBAAuB;AAC1B,YAAA,OAAOd,eAACe,uCAA+B,EAAA,EAAC,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,UAAA,OAAO,EAAA,EAAI,OAAA,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA,CAA3D,CAA2D,GAAI;AAEtK,QAAA,KAAK,uBAAuB;AAC1B,YAAA,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC;YAChE,QACEf,cAAA,CAACgB,uCAA+B,EAAA,EAC9B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,YAAA,EAAM,OAAA,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA,CAAlD,CAAkD,EAChE,UAAU,EAAE,YAAA,EAAM,OAAA,UAAU,CAAC,MAAM,EAAE,CAAA,CAAnB,CAAmB,EACrC,gBAAgB,EAAE,UAAC,MAAc,EAAA;AAC/B,oBAAA,IAAM,GAAG,GAAG,aAAa,CAAC,SAAS,CAAC,UAAC,CAAM,EAAA,EAAK,OAAA,CAAC,CAAC,EAAE,KAAK,MAAM,CAAA,CAAf,CAAe,CAAC;;;;oBAIhE,IAAI,GAAG,KAAK,EAAE;AAAE,wBAAA,UAAU,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC;;wBAC3C,UAAU,CAAC,MAAM,EAAE;gBAC1B,CAAC,EAAA,CACD;AAGN,QAAA,KAAK,gBAAgB;AACnB,YAAA,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC;AACtD,YAAA,QACEhB,cAAA,CAACiB,qBAAa,EAAA,EAEZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EAAA,EALf,iBAAA,CAAA,MAAA,CAAkB,aAAa,CAAE,CAMtC;AAGN,QAAA,KAAK,eAAe;YAClB,QACEjB,eAACkB,wBAAgB,EAAA,EACf,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EAAA,CACtB;AAGN,QAAA,KAAK,QAAQ;;YAEX,QACEnB,yBAAK,SAAS,EAAC,kEAAkE,EAAA,QAAA,EAAA,CAC/EC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAAA,cAAA,EAAA,CAAS,EACrDA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,sCAAsC,EAAA,QAAA,EAAA,6BAAA,EAAA,CAE/C,EACLD,uBAAG,SAAS,EAAC,oBAAoB,EAAA,QAAA,EAAA,CAAA,yDAAA,EACc,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,EAAA,IAAA,CAAA,EAAA,CAChE,EACJA,yBAAK,SAAS,EAAC,+EAA+E,EAAA,QAAA,EAAA,CAC5FC,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,kCAAkC,EAAA,QAAA,EAAA,6BAAA,EAAA,CAE3C,EACJA,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gCAAgC,EAAA,QAAA,EAC5C,IAAI,CAAC,SAAS,CACb;oCACE,EAAE,EAAE,IAAI,CAAC,EAAE;oCACX,KAAK,EAAE,IAAI,CAAC,KAAK;oCACjB,WAAW,EAAE,IAAI,CAAC,WAAW;oCAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;oCACrB,eAAe,EAAE,IAAI,CAAC,eAAe;AACtC,iCAAA,EACD,IAAI,EACJ,CAAC,CACF,EAAA,CACG,CAAA,EAAA,CACF,EACNA,cAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAC,8EAA8E,EACxF,OAAO,EAAE,YAAA;AACP,4BAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC;4BACxC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC;wBACpD,CAAC,EAAA,QAAA,EAEA,CAAC,CAAC,2BAA2B,CAAC,EAAA,CACxB,CAAA,EAAA,CACL;AAGV,QAAA;YACE,OAAO,CAAC,IAAI,CAAC,8CAAA,CAAA,MAAA,CAAgC,IAAI,CAAC,IAAI,CAAE,EAAE,IAAI,CAAC;AAC/D,YAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE;gBAC1C,KAAK;gBACL,mBAAmB;gBACnB,qBAAqB;gBACrB,oBAAoB;gBACpB,iBAAiB;gBACjB,cAAc;gBACd,gBAAgB;gBAChB,eAAe;gBACf,mBAAmB;gBACnB,kBAAkB;gBAClB,KAAK;gBACL,WAAW;gBACX,QAAQ;AACT,aAAA,CAAC;YACF,QACED,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kEAAkE,aAC/EC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,+BAA+B,EAAA,QAAA,EAAA,cAAA,EAAA,CAAS,EACvDA,uBAAI,SAAS,EAAC,wCAAwC,EAAA,QAAA,EAAA,+BAAA,EAAA,CAEjD,EACLD,eAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,oBAAoB,EAAA,QAAA,EAAA,CAAA,yBAAA,EACb,IAAI,CAAC,IAAI,oCACzB,EACJC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uEAAuE,EAAA,QAAA,EACpFA,kCAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAA,CAAO,EAAA,CACtC,EACNA,cAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAC,iFAAiF,EAC3F,OAAO,EAAE,YAAA;4BACP,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC;wBACpD,CAAC,EAAA,QAAA,EAEA,CAAC,CAAC,2BAA2B,CAAC,EAAA,CACxB,CAAA,EAAA,CACL;;AAGd;;;;"}
|
|
1
|
+
{"version":3,"file":"TemplateNodeRenderer.js","sources":["../../../../../src/components/template/TemplateNodeRenderer.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport Selfie from \"../session/Selfie\";\nimport VideoWorkInProgress from \"../session/VideoWorkInProgress\";\nimport DocumentCheck, { NodeIdentityControl } from \"../session/DocumentCheck\";\nimport DocumentCollection, {\n DocumentTypeSide,\n NodeDocumentCollection,\n} from \"../document-collection/DocumentCollection\";\nimport EndFlow from \"../session/EndFlow\";\nimport LoadingState from \"../states/LoadingState\";\nimport JDDWorkInProgress from \"../jdi/JDDWorkInProgress\";\nimport { getOrderedJourneySteps, getRunPrefillData } from \"../../services/sessionService\";\nimport type { SessionData, stepObject } from \"../../types/session\";\nimport type { UserInput } from \"../../types/userInput\";\nimport type { ContactInfo } from \"../../types/contactInfo\";\nimport UserInputForm from \"../session/UserInputForm\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport ConditionNodeHandler from \"./ConditionNodeHandler\";\nimport SignatureElectronic from \"../signature-electronic/SignatureElectronic\";\nimport ExternalVerificationNodeHandler from \"./ExternalVerificationNodeHandler\";\nimport PdfGeneration from \"../session/PdfGeneration\";\nimport LegalConsentNode from \"../legal-consent/LegalConsentNode\";\n\ninterface TemplateNodeRendererProps {\n session: SessionData;\n sessionId: string;\n stepObject: stepObject;\n stepHistory: number[];\n templateIndex: number;\n onContinueOnPC: () => void;\n userInput: UserInput;\n setUserInput: React.Dispatch<React.SetStateAction<UserInput>>;\n contactInfo: ContactInfo;\n setContactInfo: React.Dispatch<React.SetStateAction<ContactInfo>>;\n isMobileTemplate: boolean;\n}\n\nconst TemplateNodeRenderer: React.FC<TemplateNodeRendererProps> = ({\n session,\n sessionId,\n stepObject,\n stepHistory,\n templateIndex,\n onContinueOnPC,\n userInput,\n setUserInput,\n contactInfo,\n setContactInfo,\n isMobileTemplate,\n}) => {\n const { t } = useI18n();\n\n if (!session?.template) {\n console.error(t(\"template.error.console_no_template\"));\n return (\n <div className=\"flex flex-col items-center justify-center h-full p-4 text-center\">\n <div className=\"text-red-500 text-4xl mb-4\">⚠️</div>\n <h2 className=\"text-xl font-bold text-red-600 mb-2\">\n {t(\"template.error.configuration\")}\n </h2>\n <p className=\"text-gray-600 mb-4\">{t(\"template.error.no_template\")}</p>\n </div>\n );\n }\n\n // Check if session is ended before rendering nodes\n if (session.status === \"ended\") {\n return (\n <EndFlow\n sessionId={sessionId}\n sessionStatus={session.status}\n callbackURL={session.callbackURL}\n compliantCase={session.template?.endScreenConfig?.compliant}\n nonCompliantCase={session.template?.endScreenConfig?.nonCompliant}\n />\n );\n }\n\n // Use getOrderedWorkflowSteps to get sorted and filtered nodes\n const templateNodes = useMemo(\n () => getOrderedJourneySteps(session.template),\n [session.template],\n );\n\n // Check if index is valid\n if (templateNodes.length === 0) {\n console.warn(\"No valid template nodes found after filtering\");\n return (\n <EndFlow\n sessionId={sessionId}\n sessionStatus={session?.status}\n callbackURL={session?.callbackURL}\n />\n );\n }\n\n if (templateIndex < 0 || templateIndex >= templateNodes.length) {\n console.warn(\n `Invalid template index: ${templateIndex}, max index: ${templateNodes.length - 1\n }`,\n );\n\n // If we're beyond the maximum index, it means we've completed all nodes\n if (templateIndex >= templateNodes.length) {\n return (\n <EndFlow\n sessionId={sessionId}\n sessionStatus={session?.status}\n callbackURL={session?.callbackURL}\n compliantCase={session?.template?.endScreenConfig?.compliant}\n nonCompliantCase={session?.template?.endScreenConfig?.nonCompliant}\n />\n );\n }\n\n // If index is negative, redirect to start\n if (templateIndex < 0) {\n setTimeout(() => stepObject.setStep(0), 0);\n return <LoadingState message={t(\"loading.step\")} subtitle=\"\" />;\n }\n }\n\n // At this point, we should have a valid node\n const node = templateNodes[templateIndex];\n if (!node) {\n console.error(\n `Node at index ${templateIndex} is undefined. Available nodes:`,\n templateNodes,\n );\n return (\n <div className=\"flex flex-col items-center justify-center h-full p-4 text-center\">\n <div className=\"text-red-500 text-4xl mb-4\">⚠️</div>\n <h2 className=\"text-xl font-bold text-red-600 mb-2\">\n {t(\"template.error.render\")}\n </h2>\n <p className=\"text-gray-600 mb-4\">\n {t(\"template.error.node_not_found\")}\n </p>\n <button\n className=\"px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors\"\n onClick={() => stepObject.setStep(0)}\n >\n {t(\"template.buttons.restart\")}\n </button>\n </div>\n );\n }\n\n switch (node.type) {\n case \"end\":\n console.log(\"📄 Rendering EndFlow component\");\n return (\n <EndFlow\n sessionId={sessionId}\n sessionStatus={session?.status}\n callbackURL={session?.callbackURL}\n endNodeId={node.id}\n expectedResult={node.expectedResult}\n compliantCase={session?.template?.endScreenConfig?.compliant}\n nonCompliantCase={session?.template?.endScreenConfig?.nonCompliant}\n />\n );\n\n case \"information-input\": {\n // runIndex = nombre de fois que ce step a déjà été visité dans l'historique\n // (0 = premier passage, 1 = deuxième, …).\n // On compte les occurrences de (templateIndex + 1) dans stepHistory,\n // minus 1 car le step courant est déjà dans l'historique.\n const currentStep = templateIndex + 1;\n const visitCount = stepHistory.filter((s) => s === currentStep).length;\n const runIndex = Math.max(0, visitCount - 1);\n\n // Pré-remplissage multi-ENTITÉS : si _list présent, utiliser _list[runIndex]\n // (ou {} hors borne). L'énumération de plusieurs entités successives passe\n // exclusivement par _list (cf. docs/multi-runs.md).\n // Sans _list : on pré-remplit TOUJOURS depuis le userInput persisté — y compris\n // sur une ré-entrée (boucle condition de correction, retour arrière, bouton\n // \"Corriger ma saisie\"). Une ré-entrée sans _list = corriger les MÊMES données,\n // pas en saisir de nouvelles → on ne doit pas vider le formulaire.\n const hasList = Array.isArray(\n (session.userInput as Record<string, unknown>)?._list,\n );\n let initialUserInput: UserInput;\n if (hasList) {\n const prefill = getRunPrefillData(\n session.userInput as Record<string, unknown>,\n runIndex,\n );\n initialUserInput = (prefill ?? {}) as UserInput;\n } else {\n initialUserInput = userInput;\n }\n return (\n // key={node.id} : remonte le formulaire à chaque changement de nœud, pour\n // qu'il se ré-initialise depuis initialUserInput (comportement \"refresh sans\n // refresh\"). Évite la réutilisation d'instance qui laissait customFormData\n // périmé au retour arrière entre deux nœuds information-input.\n <UserInputForm\n key={node.id}\n stepObject={stepObject}\n node={node}\n template={session.template}\n setUserInput={setUserInput}\n initialUserInput={initialUserInput}\n contactInfo={contactInfo}\n setContactInfo={setContactInfo}\n sessionId={sessionId}\n />\n );\n }\n\n case \"document-collection\": {\n return (\n <DocumentCollection\n key={`doc-collection-${templateIndex}`}\n node={node as NodeDocumentCollection}\n stepObject={stepObject}\n sessionId={sessionId}\n template={session.template}\n onContinueOnPC={onContinueOnPC}\n allowedDocumentTypes={(node.allowedDocumentTypes || []).map(\n (docType: any) => ({\n ...docType,\n side:\n typeof docType.side === \"string\" ||\n typeof docType.side === \"number\"\n ? (docType.side as DocumentTypeSide)\n : undefined,\n }),\n )}\n allowedAddingMethods={node.allowedAddingMethods || [\"download\"]}\n introductionPage={node.introductionPage}\n documentSelection={node.documentSelection}\n allowResubmission={node.allowResubmission}\n maxResubmissionAttempts={node.maxResubmissionAttempts}\n />\n );\n }\n\n case \"document-selection\":\n case \"controle-jdi\": {\n if (!node.requiredDocumentType) {\n console.error(\n \"Missing requiredDocumentType in document-selection node:\",\n node,\n );\n return (\n <div className=\"flex flex-col items-center justify-center h-full p-4 text-center\">\n <div className=\"text-red-500 text-4xl mb-4\">⚠️</div>\n <h2 className=\"text-xl font-bold text-red-600 mb-2\">\n Erreur de configuration\n </h2>\n <p className=\"text-gray-600 mb-4\">\n Le type de document requis n'est pas spécifié dans le template.\n </p>\n <button\n className=\"px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors\"\n onClick={() => stepObject.setStep(0)}\n >\n Recommencer\n </button>\n </div>\n );\n }\n\n // Determine if current device is mobile for capture method\n const isMobile =\n /Android|iPhone|iPad|iPod|Opera Mini|IEMobile|WPDesktop/i.test(\n navigator.userAgent,\n );\n\n return (\n <DocumentCheck\n key={`doc-check-${templateIndex}`}\n stepObject={stepObject}\n node={node as NodeIdentityControl}\n sessionId={sessionId}\n documentTypeId={node.requiredDocumentType}\n acceptedCountries={node.acceptedCountries}\n onContinueOnPC={onContinueOnPC}\n isMobileCapture={isMobileTemplate && isMobile}\n allowedAddingMethods={\n node.allowedAddingMethods || [\"download\", \"picture\"]\n }\n template={session.template}\n templateIndex={templateIndex}\n setUserInput={setUserInput}\n />\n );\n // }\n }\n\n case \"biometric-capture\":\n case \"selfie-capture\":\n return (\n <Selfie\n key={`selfie-${templateIndex}`}\n stepObject={stepObject}\n sessionId={sessionId}\n node={node}\n template={session.template}\n />\n );\n\n case \"signature-electronic\":\n return (\n <SignatureElectronic\n key={`signature-${templateIndex}`}\n sessionId={sessionId}\n stepObject={stepObject}\n node={node}\n session={session}\n title={node.title}\n description={node.description}\n // Always pass a stable node identifier so backend can resolve\n // either a static DocuSeal template OR a generated PDF source.\n external_id={node.templateId || node.external_id || node.id}\n fieldMappings={node.fieldMappings}\n userInput={userInput}\n contactInfo={contactInfo}\n />\n );\n\n case \"video-capture\":\n console.log(\"🎥 Rendering Video Work in Progress component\");\n return <VideoWorkInProgress onContinue={onContinueOnPC} />;\n\n case \"jdd\":\n console.log(\"🚧 Rendering JDD Work in Progress component\");\n return <JDDWorkInProgress onContinue={onContinueOnPC} />;\n\n case \"condition\":\n console.debug(\"🔀 Rendering Condition Node Handler component and well\");\n return (\n <ConditionNodeHandler\n node={node}\n session={session}\n templateNodes={templateNodes}\n stepObject={stepObject}\n userInput={userInput}\n contactInfo={contactInfo}\n />\n );\n\n case \"external-verification\":\n console.debug(\"🔍 Rendering External Verification Node Handler\");\n return (\n <ExternalVerificationNodeHandler\n node={node}\n session={session}\n userInput={userInput}\n setUserInput={setUserInput}\n onNext={() => stepObject.goToNextStep(node.id, session.template)}\n onPrevious={() => stepObject.goBack()}\n onNavigateToNode={(nodeId: string) => {\n const idx = templateNodes.findIndex((n: any) => n.id === nodeId);\n // idx est 0-based, les steps sont 1-based → idx + 1.\n // goBackToStep tronque l'historique pour que le nœud corrigé\n // redevienne runIndex 0 (formulaire pré-rempli).\n if (idx !== -1) stepObject.goBackToStep(idx + 1);\n else stepObject.goBack();\n }}\n />\n );\n\n case \"pdf-generation\":\n console.debug(\"📄 Rendering PDF Generation component\");\n return (\n <PdfGeneration\n key={`pdf-generation-${templateIndex}`}\n node={node}\n session={session}\n sessionId={sessionId}\n stepObject={stepObject}\n userInput={userInput}\n />\n );\n\n case \"legal-consent\":\n return (\n <LegalConsentNode\n node={node}\n session={session}\n sessionId={sessionId}\n stepObject={stepObject}\n />\n );\n\n case \"custom\":\n // For custom nodes, we provide a basic structure that can be extended\n return (\n <div className=\"flex flex-col items-center justify-center h-full p-4 text-center\">\n <div className=\"text-blue-500 text-4xl mb-4\">🔧</div>\n <h2 className=\"text-xl font-bold text-blue-600 mb-2\">\n Nœud personnalisé\n </h2>\n <p className=\"text-gray-600 mb-4\">\n Implémentation personnalisée requise pour: \"{node.title || node.id}\"\n </p>\n <div className=\"bg-blue-50 border border-blue-200 rounded p-3 text-left text-sm mb-4 max-w-md\">\n <p className=\"font-semibold text-blue-700 mb-2\">\n Configuration du nœud:\n </p>\n <pre className=\"text-xs overflow-auto max-h-32\">\n {JSON.stringify(\n {\n id: node.id,\n title: node.title,\n description: node.description,\n options: node.options,\n selectedOptions: node.selectedOptions,\n },\n null,\n 2,\n )}\n </pre>\n </div>\n <button\n className=\"px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700 transition-colors\"\n onClick={() => {\n console.log(\"Custom node action:\", node);\n stepObject.goToNextStep(node.id, session.template);\n }}\n >\n {t(\"template.buttons.continue\")}\n </button>\n </div>\n );\n\n default:\n console.warn(`❌ Type de nœud non supporté: ${node.type}`, node);\n console.log(\"❓ Available supported types:\", [\n \"end\",\n \"information-input\",\n \"document-collection\",\n \"document-selection\",\n \"document-upload\",\n \"controle-jdi\",\n \"selfie-capture\",\n \"video-capture\",\n \"country-selection\",\n \"identity-control\",\n \"jdd\",\n \"condition\",\n \"custom\",\n ]);\n return (\n <div className=\"flex flex-col items-center justify-center h-full p-4 text-center\">\n <div className=\"text-yellow-500 text-4xl mb-4\">⚠️</div>\n <h2 className=\"text-xl font-bold text-yellow-600 mb-2\">\n Étape non supportée\n </h2>\n <p className=\"text-gray-600 mb-4\">\n Le type d'étape \"{node.type}\" n'est pas pris en charge.\n </p>\n <div className=\"bg-gray-100 p-4 rounded mb-4 text-left text-xs overflow-auto max-h-32\">\n <pre>{JSON.stringify(node, null, 2)}</pre>\n </div>\n <button\n className=\"px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors\"\n onClick={() => {\n stepObject.goToNextStep(node.id, session.template);\n }}\n >\n {t(\"template.buttons.continue\")}\n </button>\n </div>\n );\n }\n};\n\nexport default TemplateNodeRenderer;\n"],"names":["useI18n","_jsxs","_jsx","EndFlow","useMemo","getOrderedJourneySteps","LoadingState","getRunPrefillData","UserInputForm","DocumentCollection","__assign","DocumentCheck","Selfie","SignatureElectronic","VideoWorkInProgress","JDDWorkInProgress","ConditionNodeHandler","ExternalVerificationNodeHandler","PdfGeneration","LegalConsentNode"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAqCA,IAAM,oBAAoB,GAAwC,UAAC,EAYlE,EAAA;;AAXC,IAAA,IAAA,OAAO,GAAA,EAAA,CAAA,OAAA,EACP,SAAS,GAAA,EAAA,CAAA,SAAA,EACT,UAAU,GAAA,EAAA,CAAA,UAAA,EACV,WAAW,GAAA,EAAA,CAAA,WAAA,EACX,aAAa,mBAAA,EACb,cAAc,GAAA,EAAA,CAAA,cAAA,EACd,SAAS,GAAA,EAAA,CAAA,SAAA,EACT,YAAY,GAAA,EAAA,CAAA,YAAA,EACZ,WAAW,GAAA,EAAA,CAAA,WAAA,EACX,cAAc,GAAA,EAAA,CAAA,cAAA,EACd,gBAAgB,GAAA,EAAA,CAAA,gBAAA;AAER,IAAA,IAAA,CAAC,GAAKA,eAAO,EAAE,EAAd;IAET,IAAI,EAAC,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,QAAQ,CAAA,EAAE;QACtB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC;AACtD,QAAA,QACEC,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kEAAkE,EAAA,QAAA,EAAA,CAC/EC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,4BAA4B,EAAA,QAAA,EAAA,cAAA,EAAA,CAAS,EACpDA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,qCAAqC,EAAA,QAAA,EAChD,CAAC,CAAC,8BAA8B,CAAC,EAAA,CAC/B,EACLA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,oBAAoB,EAAA,QAAA,EAAE,CAAC,CAAC,4BAA4B,CAAC,EAAA,CAAK,CAAA,EAAA,CACnE;IAEV;;AAGA,IAAA,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE;QAC9B,QACEA,eAACC,eAAO,EAAA,EACN,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,OAAO,CAAC,MAAM,EAC7B,WAAW,EAAE,OAAO,CAAC,WAAW,EAChC,aAAa,EAAE,MAAA,CAAA,EAAA,GAAA,OAAO,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,SAAS,EAC3D,gBAAgB,EAAE,MAAA,CAAA,EAAA,GAAA,OAAO,CAAC,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,YAAY,EAAA,CACjE;IAEN;;IAGA,IAAM,aAAa,GAAGC,aAAO,CAC3B,cAAM,OAAAC,qCAAsB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA,CAAxC,CAAwC,EAC9C,CAAC,OAAO,CAAC,QAAQ,CAAC,CACnB;;AAGD,IAAA,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE;AAC9B,QAAA,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC;AAC7D,QAAA,QACEH,cAAA,CAACC,eAAO,EAAA,EACN,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,MAAM,EAC9B,WAAW,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,WAAW,EAAA,CACjC;IAEN;IAEA,IAAI,aAAa,GAAG,CAAC,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,EAAE;AAC9D,QAAA,OAAO,CAAC,IAAI,CACV,0BAAA,CAAA,MAAA,CAA2B,aAAa,EAAA,eAAA,CAAA,CAAA,MAAA,CAAgB,aAAa,CAAC,MAAM,GAAG,CAAC,CAC9E,CACH;;AAGD,QAAA,IAAI,aAAa,IAAI,aAAa,CAAC,MAAM,EAAE;AACzC,YAAA,QACED,cAAA,CAACC,eAAO,EAAA,EACN,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,MAAM,EAC9B,WAAW,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,WAAW,EACjC,aAAa,EAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,SAAS,EAC5D,gBAAgB,EAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,YAAY,EAAA,CAClE;QAEN;;AAGA,QAAA,IAAI,aAAa,GAAG,CAAC,EAAE;AACrB,YAAA,UAAU,CAAC,YAAA,EAAM,OAAA,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAArB,CAAqB,EAAE,CAAC,CAAC;AAC1C,YAAA,OAAOD,cAAA,CAACI,oBAAY,EAAA,EAAC,OAAO,EAAE,CAAC,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAC,EAAE,GAAG;QACjE;IACF;;AAGA,IAAA,IAAM,IAAI,GAAG,aAAa,CAAC,aAAa,CAAC;IACzC,IAAI,CAAC,IAAI,EAAE;QACT,OAAO,CAAC,KAAK,CACX,gBAAA,CAAA,MAAA,CAAiB,aAAa,EAAA,iCAAA,CAAiC,EAC/D,aAAa,CACd;QACD,QACEL,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kEAAkE,EAAA,QAAA,EAAA,CAC/EC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,4BAA4B,EAAA,QAAA,EAAA,cAAA,EAAA,CAAS,EACpDA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,qCAAqC,EAAA,QAAA,EAChD,CAAC,CAAC,uBAAuB,CAAC,EAAA,CACxB,EACLA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,oBAAoB,EAAA,QAAA,EAC9B,CAAC,CAAC,+BAA+B,CAAC,EAAA,CACjC,EACJA,cAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAC,iFAAiF,EAC3F,OAAO,EAAE,YAAA,EAAM,OAAA,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAArB,CAAqB,EAAA,QAAA,EAEnC,CAAC,CAAC,0BAA0B,CAAC,EAAA,CACvB,CAAA,EAAA,CACL;IAEV;AAEA,IAAA,QAAQ,IAAI,CAAC,IAAI;AACf,QAAA,KAAK,KAAK;AACR,YAAA,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC;AAC7C,YAAA,QACEA,cAAA,CAACC,eAAO,EAAA,EACN,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,MAAM,EAC9B,WAAW,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,EACjC,SAAS,EAAE,IAAI,CAAC,EAAE,EAClB,cAAc,EAAE,IAAI,CAAC,cAAc,EACnC,aAAa,EAAE,MAAA,CAAA,EAAA,GAAA,OAAO,KAAA,IAAA,IAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,SAAS,EAC5D,gBAAgB,EAAE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,OAAO,KAAA,IAAA,IAAP,OAAO,KAAA,MAAA,GAAA,MAAA,GAAP,OAAO,CAAE,QAAQ,0CAAE,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,YAAY,EAAA,CAClE;QAGN,KAAK,mBAAmB,EAAE;;;;;AAKxB,YAAA,IAAM,aAAW,GAAG,aAAa,GAAG,CAAC;AACrC,YAAA,IAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,UAAC,CAAC,EAAA,EAAK,OAAA,CAAC,KAAK,aAAW,CAAA,CAAjB,CAAiB,CAAC,CAAC,MAAM;AACtE,YAAA,IAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC;;;;;;;;AAS5C,YAAA,IAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAC3B,CAAA,EAAA,GAAC,OAAO,CAAC,SAAqC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,CACtD;YACD,IAAI,gBAAgB,SAAW;YAC/B,IAAI,OAAO,EAAE;gBACX,IAAM,OAAO,GAAGI,gCAAiB,CAC/B,OAAO,CAAC,SAAoC,EAC5C,QAAQ,CACT;gBACD,gBAAgB,IAAI,OAAO,KAAA,IAAA,IAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAc;YACjD;iBAAO;gBACL,gBAAgB,GAAG,SAAS;YAC9B;YACA;;;;;AAKE,YAAAL,cAAA,CAACM,qBAAa,EAAA,EAEZ,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAC1B,YAAY,EAAE,YAAY,EAC1B,gBAAgB,EAAE,gBAAgB,EAClC,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,SAAS,EAAA,EARf,IAAI,CAAC,EAAE,CASZ;QAEN;QAEA,KAAK,qBAAqB,EAAE;YAC1B,QACEN,cAAA,CAACO,0BAAkB,EAAA,EAEjB,IAAI,EAAE,IAA8B,EACpC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAC1B,cAAc,EAAE,cAAc,EAC9B,oBAAoB,EAAE,CAAC,IAAI,CAAC,oBAAoB,IAAI,EAAE,EAAE,GAAG,CACzD,UAAC,OAAY,IAAK,QAAAC,kBAAA,CAAAA,kBAAA,CAAA,EAAA,EACb,OAAO,CAAA,EAAA,EACV,IAAI,EACF,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;AAC9B,wBAAA,OAAO,OAAO,CAAC,IAAI,KAAK;0BACrB,OAAO,CAAC;0BACT,SAAS,EAAA,CAAA,EACf,CAPgB,CAOhB,CACH,EACD,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,IAAI,CAAC,UAAU,CAAC,EAC/D,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EACvC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EACzC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EACzC,uBAAuB,EAAE,IAAI,CAAC,uBAAuB,EAAA,EApBhD,yBAAkB,aAAa,CAAE,CAqBtC;QAEN;AAEA,QAAA,KAAK,oBAAoB;QACzB,KAAK,cAAc,EAAE;AACnB,YAAA,IAAI,CAAC,IAAI,CAAC,oBAAoB,EAAE;AAC9B,gBAAA,OAAO,CAAC,KAAK,CACX,0DAA0D,EAC1D,IAAI,CACL;gBACD,QACET,yBAAK,SAAS,EAAC,kEAAkE,EAAA,QAAA,EAAA,CAC/EC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,4BAA4B,6BAAS,EACpDA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,qCAAqC,wCAE9C,EACLA,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,oBAAoB,0FAE7B,EACJA,cAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAC,iFAAiF,EAC3F,OAAO,EAAE,cAAM,OAAA,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA,CAArB,CAAqB,EAAA,QAAA,EAAA,aAAA,EAAA,CAG7B,CAAA,EAAA,CACL;YAEV;;YAGA,IAAM,QAAQ,GACZ,yDAAyD,CAAC,IAAI,CAC5D,SAAS,CAAC,SAAS,CACpB;AAEH,YAAA,QACEA,cAAA,CAACS,qBAAa,EAAA,EAEZ,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAA2B,EACjC,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,IAAI,CAAC,oBAAoB,EACzC,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,EACzC,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,gBAAgB,IAAI,QAAQ,EAC7C,oBAAoB,EAClB,IAAI,CAAC,oBAAoB,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,EAEtD,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAC1B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,IAbrB,YAAA,CAAA,MAAA,CAAa,aAAa,CAAE,CAcjC;;QAGN;AAEA,QAAA,KAAK,mBAAmB;AACxB,QAAA,KAAK,gBAAgB;YACnB,QACET,cAAA,CAACU,cAAM,EAAA,EAEL,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAA,EAJrB,SAAA,CAAA,MAAA,CAAU,aAAa,CAAE,CAK9B;AAGN,QAAA,KAAK,sBAAsB;AACzB,YAAA,QACEV,cAAA,CAACW,2BAAmB,EAAA,EAElB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,IAAI,CAAC,KAAK,EACjB,WAAW,EAAE,IAAI,CAAC,WAAW;;;AAG7B,gBAAA,WAAW,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,EAAE,EAC3D,aAAa,EAAE,IAAI,CAAC,aAAa,EACjC,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EAAA,EAZnB,YAAA,CAAA,MAAA,CAAa,aAAa,CAAE,CAajC;AAGN,QAAA,KAAK,eAAe;AAClB,YAAA,OAAO,CAAC,GAAG,CAAC,+CAA+C,CAAC;AAC5D,YAAA,OAAOX,eAACY,2BAAmB,EAAA,EAAC,UAAU,EAAE,cAAc,GAAI;AAE5D,QAAA,KAAK,KAAK;AACR,YAAA,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC;AAC1D,YAAA,OAAOZ,eAACa,yBAAiB,EAAA,EAAC,UAAU,EAAE,cAAc,GAAI;AAE1D,QAAA,KAAK,WAAW;AACd,YAAA,OAAO,CAAC,KAAK,CAAC,wDAAwD,CAAC;AACvE,YAAA,QACEb,cAAA,CAACc,4BAAoB,EAAA,EACnB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EAAA,CACxB;AAGN,QAAA,KAAK,uBAAuB;AAC1B,YAAA,OAAO,CAAC,KAAK,CAAC,iDAAiD,CAAC;YAChE,QACEd,cAAA,CAACe,uCAA+B,EAAA,EAC9B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,YAAY,EAC1B,MAAM,EAAE,YAAA,EAAM,OAAA,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAA,CAAlD,CAAkD,EAChE,UAAU,EAAE,YAAA,EAAM,OAAA,UAAU,CAAC,MAAM,EAAE,CAAA,CAAnB,CAAmB,EACrC,gBAAgB,EAAE,UAAC,MAAc,EAAA;AAC/B,oBAAA,IAAM,GAAG,GAAG,aAAa,CAAC,SAAS,CAAC,UAAC,CAAM,EAAA,EAAK,OAAA,CAAC,CAAC,EAAE,KAAK,MAAM,CAAA,CAAf,CAAe,CAAC;;;;oBAIhE,IAAI,GAAG,KAAK,EAAE;AAAE,wBAAA,UAAU,CAAC,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC;;wBAC3C,UAAU,CAAC,MAAM,EAAE;gBAC1B,CAAC,EAAA,CACD;AAGN,QAAA,KAAK,gBAAgB;AACnB,YAAA,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC;AACtD,YAAA,QACEf,cAAA,CAACgB,qBAAa,EAAA,EAEZ,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EAAA,EALf,iBAAA,CAAA,MAAA,CAAkB,aAAa,CAAE,CAMtC;AAGN,QAAA,KAAK,eAAe;YAClB,QACEhB,eAACiB,wBAAgB,EAAA,EACf,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EAAA,CACtB;AAGN,QAAA,KAAK,QAAQ;;YAEX,QACElB,yBAAK,SAAS,EAAC,kEAAkE,EAAA,QAAA,EAAA,CAC/EC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6BAA6B,EAAA,QAAA,EAAA,cAAA,EAAA,CAAS,EACrDA,cAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,sCAAsC,EAAA,QAAA,EAAA,6BAAA,EAAA,CAE/C,EACLD,uBAAG,SAAS,EAAC,oBAAoB,EAAA,QAAA,EAAA,CAAA,yDAAA,EACc,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,EAAA,IAAA,CAAA,EAAA,CAChE,EACJA,yBAAK,SAAS,EAAC,+EAA+E,EAAA,QAAA,EAAA,CAC5FC,cAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,kCAAkC,EAAA,QAAA,EAAA,6BAAA,EAAA,CAE3C,EACJA,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gCAAgC,EAAA,QAAA,EAC5C,IAAI,CAAC,SAAS,CACb;oCACE,EAAE,EAAE,IAAI,CAAC,EAAE;oCACX,KAAK,EAAE,IAAI,CAAC,KAAK;oCACjB,WAAW,EAAE,IAAI,CAAC,WAAW;oCAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;oCACrB,eAAe,EAAE,IAAI,CAAC,eAAe;AACtC,iCAAA,EACD,IAAI,EACJ,CAAC,CACF,EAAA,CACG,CAAA,EAAA,CACF,EACNA,cAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAC,8EAA8E,EACxF,OAAO,EAAE,YAAA;AACP,4BAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,IAAI,CAAC;4BACxC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC;wBACpD,CAAC,EAAA,QAAA,EAEA,CAAC,CAAC,2BAA2B,CAAC,EAAA,CACxB,CAAA,EAAA,CACL;AAGV,QAAA;YACE,OAAO,CAAC,IAAI,CAAC,8CAAA,CAAA,MAAA,CAAgC,IAAI,CAAC,IAAI,CAAE,EAAE,IAAI,CAAC;AAC/D,YAAA,OAAO,CAAC,GAAG,CAAC,8BAA8B,EAAE;gBAC1C,KAAK;gBACL,mBAAmB;gBACnB,qBAAqB;gBACrB,oBAAoB;gBACpB,iBAAiB;gBACjB,cAAc;gBACd,gBAAgB;gBAChB,eAAe;gBACf,mBAAmB;gBACnB,kBAAkB;gBAClB,KAAK;gBACL,WAAW;gBACX,QAAQ;AACT,aAAA,CAAC;YACF,QACED,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kEAAkE,aAC/EC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,+BAA+B,EAAA,QAAA,EAAA,cAAA,EAAA,CAAS,EACvDA,uBAAI,SAAS,EAAC,wCAAwC,EAAA,QAAA,EAAA,+BAAA,EAAA,CAEjD,EACLD,eAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,oBAAoB,EAAA,QAAA,EAAA,CAAA,yBAAA,EACb,IAAI,CAAC,IAAI,oCACzB,EACJC,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uEAAuE,EAAA,QAAA,EACpFA,kCAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAA,CAAO,EAAA,CACtC,EACNA,cAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAC,iFAAiF,EAC3F,OAAO,EAAE,YAAA;4BACP,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,QAAQ,CAAC;wBACpD,CAAC,EAAA,QAAA,EAEA,CAAC,CAAC,2BAA2B,CAAC,EAAA,CACxB,CAAA,EAAA,CACL;;AAGd;;;;"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var tslib_es6 = require('../node_modules/tslib/tslib.es6.js');
|
|
4
|
-
var axios = require('axios');
|
|
5
4
|
var React = require('react');
|
|
6
5
|
var sessionService = require('../services/sessionService.js');
|
|
7
6
|
var auditTrailService = require('../services/auditTrailService.js');
|
|
@@ -202,24 +201,20 @@ var useSessionData = function (sessionId, clientInfo, clientInfoLoaded) {
|
|
|
202
201
|
sessionMemoryStore.setSessionMemoryUserInput(sessionId, cleanedUserInput);
|
|
203
202
|
var updateUserData = function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () {
|
|
204
203
|
var updatedSession, err_3;
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
switch (_c.label) {
|
|
204
|
+
return tslib_es6.__generator(this, function (_a) {
|
|
205
|
+
switch (_a.label) {
|
|
208
206
|
case 0:
|
|
209
|
-
|
|
207
|
+
_a.trys.push([0, 2, , 3]);
|
|
210
208
|
return [4 /*yield*/, sessionService.updateSessionUserInput(sessionId, cleanedUserInput)];
|
|
211
209
|
case 1:
|
|
212
|
-
updatedSession =
|
|
210
|
+
updatedSession = _a.sent();
|
|
213
211
|
// Ne mettre à jour que si la requête réussit
|
|
214
212
|
if (updatedSession) {
|
|
215
213
|
setSession(updatedSession);
|
|
216
214
|
}
|
|
217
215
|
return [3 /*break*/, 3];
|
|
218
216
|
case 2:
|
|
219
|
-
err_3 =
|
|
220
|
-
if (axios.isAxiosError(err_3) && ((_b = (_a = err_3.response) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.code) === "CUSTOM_FIELD_VALIDATION_FAILED") {
|
|
221
|
-
console.error("CUSTOM_FIELD_VALIDATION_FAILED: user input synchronization rejected");
|
|
222
|
-
}
|
|
217
|
+
err_3 = _a.sent();
|
|
223
218
|
console.error("Failed to update user input:", err_3);
|
|
224
219
|
return [3 /*break*/, 3];
|
|
225
220
|
case 3: return [2 /*return*/];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSessionData.js","sources":["../../../../src/hooks/useSessionData.ts"],"sourcesContent":["import { isAxiosError } from \"axios\";\nimport { useState, useEffect, useRef } from \"react\";\nimport type { UserInput } from \"../types/userInput\";\nimport type { ContactInfo } from \"../types/contactInfo\";\nimport {\n clearSessionSensitiveData,\n fetchSessionById,\n isSessionExpired,\n updateSessionUserInput,\n updateSessionContactInfo,\n storeDocumentOptions,\n sendClientInfo,\n} from \"../services/sessionService\";\nimport { logSessionStarted } from \"../services/auditTrailService\";\nimport type { ClientInfo, SessionData } from \"../types/session\";\nimport {\n getSessionMemoryContactInfo,\n getSessionMemoryUserInput,\n setActiveSessionId,\n setSessionMemoryContactInfo,\n setSessionMemoryUserInput,\n} from \"../services/sessionMemoryStore\";\n\nexport const useSessionData = (\n sessionId: string,\n clientInfo: ClientInfo,\n clientInfoLoaded: boolean,\n) => {\n const [session, setSessionState] = useState<SessionData | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [isExpired, setIsExpired] = useState(false);\n\n const [userInput, setUserInput] = useState<UserInput>({});\n\n const [contactInfo, setContactInfo] = useState<ContactInfo>({\n email: \"\",\n phoneNumber: \"\",\n });\n\n const maskClientInfoForLog = (input: ClientInfo): string => {\n if (!input) {\n return \"[client-info-unavailable]\";\n }\n\n const maskedIp = input.ip ? input.ip.replace(/\\d+$/, \"***\") : \"unknown\";\n const device = input.device || \"unknown\";\n return `device=${device}, ip=${maskedIp}`;\n };\n\n const normalizeSessionData = (\n sessionData: SessionData,\n previousSession?: SessionData | null,\n ): SessionData => {\n const templateToUse = sessionData.template ?? previousSession?.template;\n const normalizedBase =\n templateToUse && sessionData.template !== templateToUse\n ? ({\n ...sessionData,\n template: templateToUse,\n } as SessionData)\n : sessionData;\n\n const templateNodes = templateToUse?.nodes || [];\n const endNodeWithCallback = templateNodes.find(\n (node) => node.type === \"end\" && node.callbackURL !== undefined,\n );\n\n if (endNodeWithCallback && endNodeWithCallback.callbackURL !== undefined) {\n const callbackValue =\n endNodeWithCallback.callbackURL !== null\n ? endNodeWithCallback.callbackURL\n : \"\";\n return {\n ...normalizedBase,\n callbackURL: callbackValue,\n };\n }\n\n if (normalizedBase.callbackURL !== undefined) {\n return normalizedBase;\n }\n\n if (previousSession?.callbackURL !== undefined) {\n return {\n ...normalizedBase,\n callbackURL: previousSession.callbackURL,\n };\n }\n\n return normalizedBase;\n };\n\n const setSession = (\n value:\n | SessionData\n | null\n | ((prev: SessionData | null) => SessionData | null),\n ) => {\n setSessionState((previousSession) => {\n const nextValue =\n typeof value === \"function\"\n ? (value as (prev: SessionData | null) => SessionData | null)(\n previousSession,\n )\n : value;\n\n if (nextValue) {\n return normalizeSessionData(nextValue, previousSession);\n }\n\n return null;\n });\n };\n\n // Load session data\n const loadSession = async () => {\n if (!sessionId) return;\n setActiveSessionId(sessionId);\n\n setLoading(true);\n try {\n const sessionData = await fetchSessionById(sessionId);\n setSession(sessionData);\n\n // Check if session is expired\n if (isSessionExpired(sessionData)) {\n setIsExpired(true);\n setLoading(false);\n return;\n }\n\n // Initialize configuration based on session template\n if (sessionData.template) {\n // Store document options for each type in localStorage\n const templateNodes = sessionData.template.nodes;\n templateNodes.forEach((node) => {\n if (\n node.type === \"document-selection\" &&\n node.requiredDocumentType &&\n node.selectedOptions.length > 0\n ) {\n storeDocumentOptions(\n sessionId,\n node.requiredDocumentType,\n node.selectedOptions,\n );\n } else if (\n node.type === \"document-collection\" &&\n node.allowedDocumentTypes &&\n node.allowedDocumentTypes.length > 0\n ) {\n // Store allowed document types as names for document-collection nodes\n const documentNames = node.allowedDocumentTypes.map(\n (doc) => doc.name,\n );\n storeDocumentOptions(\n sessionId,\n \"document-collection\",\n documentNames,\n );\n }\n });\n\n const memoryUserInput = getSessionMemoryUserInput(sessionId);\n if (Object.keys(memoryUserInput).length > 0) {\n setUserInput((prev) => ({\n ...prev,\n ...memoryUserInput,\n }));\n } else if (\n sessionData.userInput &&\n Object.keys(sessionData.userInput).length > 0\n ) {\n const mergedUserInput = {\n ...(sessionData.userInput as Record<string, unknown>),\n };\n setUserInput((prev) => ({\n ...prev,\n ...mergedUserInput,\n }));\n setSessionMemoryUserInput(sessionId, mergedUserInput as UserInput);\n }\n\n const memoryContactInfo = getSessionMemoryContactInfo(sessionId);\n if (memoryContactInfo.email || memoryContactInfo.phoneNumber) {\n setContactInfo((prev) => ({\n ...prev,\n ...memoryContactInfo,\n }));\n } else if (\n sessionData.contactInfo &&\n Object.keys(sessionData.contactInfo).length > 0\n ) {\n const mergedContactInfo: ContactInfo = {\n email: String(sessionData.contactInfo.email || \"\"),\n phoneNumber: String(sessionData.contactInfo.phoneNumber || \"\"),\n };\n setContactInfo((prev) => ({\n ...prev,\n ...mergedContactInfo,\n }));\n setSessionMemoryContactInfo(sessionId, mergedContactInfo);\n }\n }\n\n setError(null);\n } catch (err) {\n console.error(\"Failed to load session:\", err);\n setError(\"Failed to load session data. Please try again.\");\n } finally {\n setLoading(false);\n }\n };\n\n // Retry loading the session\n const handleRetrySession = async () => {\n setIsExpired(false);\n setLoading(true);\n setError(null);\n\n try {\n const sessionData = await fetchSessionById(sessionId);\n\n if (isSessionExpired(sessionData)) {\n setIsExpired(true);\n } else {\n setSession(sessionData);\n }\n } catch (err) {\n console.error(\"Failed to retry loading session:\", err);\n setError(\"Failed to load session data. Please try again.\");\n } finally {\n setLoading(false);\n }\n };\n\n const userInputSyncInitialized = useRef(false);\n\n // Update user input in backend and in-memory store\n useEffect(() => {\n if (!sessionId) {\n return;\n }\n\n const entries = Object.entries(userInput || {}).filter(([, value]) => {\n if (value === undefined || value === null) {\n return false;\n }\n if (typeof value === \"string\") {\n return value.trim().length > 0;\n }\n return true;\n });\n\n if (!userInputSyncInitialized.current) {\n userInputSyncInitialized.current = true;\n return;\n }\n\n if (entries.length === 0) {\n return;\n }\n\n const cleanedUserInput = entries.reduce<Record<string, unknown>>(\n (acc, [key, value]) => {\n acc[key] = value;\n return acc;\n },\n {},\n );\n\n setSessionMemoryUserInput(sessionId, cleanedUserInput as UserInput);\n\n const updateUserData = async () => {\n try {\n const updatedSession = await updateSessionUserInput(\n sessionId,\n cleanedUserInput,\n );\n // Ne mettre à jour que si la requête réussit\n if (updatedSession) {\n setSession(updatedSession);\n }\n } catch (err) {\n if (isAxiosError(err) && err.response?.data?.code === \"CUSTOM_FIELD_VALIDATION_FAILED\") {\n console.error(\"CUSTOM_FIELD_VALIDATION_FAILED: user input synchronization rejected\");\n }\n console.error(\"Failed to update user input:\", err);\n // Ne pas mettre à jour la session en cas d'erreur\n }\n };\n\n updateUserData();\n }, [sessionId, userInput]);\n\n // Update contact info in backend and in-memory store\n useEffect(() => {\n if (contactInfo && contactInfo.email && contactInfo.phoneNumber) {\n setSessionMemoryContactInfo(sessionId, contactInfo);\n\n const updateContactData = async () => {\n if (sessionId && contactInfo.email && contactInfo.phoneNumber) {\n try {\n const updatedSession = await updateSessionContactInfo(sessionId, {\n email: contactInfo.email,\n phoneNumber: contactInfo.phoneNumber,\n });\n // Ne mettre à jour que si la requête réussit\n if (updatedSession) {\n setSession(updatedSession);\n }\n } catch (err) {\n console.error(\"Failed to update contact info:\", err);\n // Ne pas mettre à jour la session en cas d'erreur\n }\n }\n };\n\n updateContactData();\n }\n }, [contactInfo, sessionId]);\n\n // Send client info when it becomes available\n useEffect(() => {\n if (clientInfoLoaded && clientInfo && session) {\n console.log(\n \"Sending client info to backend:\",\n maskClientInfoForLog(clientInfo),\n );\n\n const sendClientInfoAsync = async () => {\n try {\n await sendClientInfo(sessionId, clientInfo);\n } catch (e) {\n console.error(\"Failed to send client info:\", e);\n }\n };\n\n const sendStartAuditTrail = async () => {\n try {\n // Utiliser analysisId et clientInfoId s'il existe\n await logSessionStarted(sessionId);\n } catch (err) {\n console.error(\"Failed to log session start in audit trail:\", err);\n // Non-blocking error - continue session loading\n }\n };\n\n sendClientInfoAsync();\n sendStartAuditTrail();\n }\n }, [clientInfoLoaded, clientInfo, sessionId, session]);\n\n // Keep active session id in memory only and clear traces on unmount/session switch.\n useEffect(() => {\n if (!sessionId) {\n return;\n }\n\n setActiveSessionId(sessionId);\n\n return () => {\n clearSessionSensitiveData(sessionId);\n };\n }, [sessionId]);\n\n // Check session expiration periodically\n useEffect(() => {\n if (!session || isExpired) return;\n\n if (isSessionExpired(session)) {\n setIsExpired(true);\n return;\n }\n\n const intervalId = setInterval(() => {\n if (isSessionExpired(session)) {\n setIsExpired(true);\n }\n }, 30000);\n\n return () => {\n clearInterval(intervalId);\n };\n }, [session, isExpired]);\n\n useEffect(() => {\n if (!isExpired || !sessionId) {\n return;\n }\n\n clearSessionSensitiveData(sessionId);\n }, [isExpired, sessionId]);\n\n const sessionSummary = session\n ? {\n id: session.id,\n status: session.status,\n currentStep: session.currentStep,\n expireTime: session.expireTime,\n templateId: session.template?.id,\n }\n : null;\n\n return {\n session,\n sessionSummary,\n setSession,\n loading,\n setLoading,\n error,\n setError,\n isExpired,\n setIsExpired,\n userInput,\n setUserInput,\n contactInfo,\n setContactInfo,\n loadSession,\n handleRetrySession,\n };\n};\n"],"names":["useState","__assign","__awaiter","setActiveSessionId","fetchSessionById","isSessionExpired","storeDocumentOptions","getSessionMemoryUserInput","setSessionMemoryUserInput","getSessionMemoryContactInfo","setSessionMemoryContactInfo","useRef","useEffect","updateSessionUserInput","isAxiosError","updateSessionContactInfo","sendClientInfo","logSessionStarted","clearSessionSensitiveData"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useSessionData.js","sources":["../../../../src/hooks/useSessionData.ts"],"sourcesContent":["import { useState, useEffect, useRef } from \"react\";\nimport type { UserInput } from \"../types/userInput\";\nimport type { ContactInfo } from \"../types/contactInfo\";\nimport {\n clearSessionSensitiveData,\n fetchSessionById,\n isSessionExpired,\n updateSessionUserInput,\n updateSessionContactInfo,\n storeDocumentOptions,\n sendClientInfo,\n} from \"../services/sessionService\";\nimport { logSessionStarted } from \"../services/auditTrailService\";\nimport type { ClientInfo, SessionData } from \"../types/session\";\nimport {\n getSessionMemoryContactInfo,\n getSessionMemoryUserInput,\n setActiveSessionId,\n setSessionMemoryContactInfo,\n setSessionMemoryUserInput,\n} from \"../services/sessionMemoryStore\";\n\nexport const useSessionData = (\n sessionId: string,\n clientInfo: ClientInfo,\n clientInfoLoaded: boolean,\n) => {\n const [session, setSessionState] = useState<SessionData | null>(null);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n const [isExpired, setIsExpired] = useState(false);\n\n const [userInput, setUserInput] = useState<UserInput>({});\n\n const [contactInfo, setContactInfo] = useState<ContactInfo>({\n email: \"\",\n phoneNumber: \"\",\n });\n\n const maskClientInfoForLog = (input: ClientInfo): string => {\n if (!input) {\n return \"[client-info-unavailable]\";\n }\n\n const maskedIp = input.ip ? input.ip.replace(/\\d+$/, \"***\") : \"unknown\";\n const device = input.device || \"unknown\";\n return `device=${device}, ip=${maskedIp}`;\n };\n\n const normalizeSessionData = (\n sessionData: SessionData,\n previousSession?: SessionData | null,\n ): SessionData => {\n const templateToUse = sessionData.template ?? previousSession?.template;\n const normalizedBase =\n templateToUse && sessionData.template !== templateToUse\n ? ({\n ...sessionData,\n template: templateToUse,\n } as SessionData)\n : sessionData;\n\n const templateNodes = templateToUse?.nodes || [];\n const endNodeWithCallback = templateNodes.find(\n (node) => node.type === \"end\" && node.callbackURL !== undefined,\n );\n\n if (endNodeWithCallback && endNodeWithCallback.callbackURL !== undefined) {\n const callbackValue =\n endNodeWithCallback.callbackURL !== null\n ? endNodeWithCallback.callbackURL\n : \"\";\n return {\n ...normalizedBase,\n callbackURL: callbackValue,\n };\n }\n\n if (normalizedBase.callbackURL !== undefined) {\n return normalizedBase;\n }\n\n if (previousSession?.callbackURL !== undefined) {\n return {\n ...normalizedBase,\n callbackURL: previousSession.callbackURL,\n };\n }\n\n return normalizedBase;\n };\n\n const setSession = (\n value:\n | SessionData\n | null\n | ((prev: SessionData | null) => SessionData | null),\n ) => {\n setSessionState((previousSession) => {\n const nextValue =\n typeof value === \"function\"\n ? (value as (prev: SessionData | null) => SessionData | null)(\n previousSession,\n )\n : value;\n\n if (nextValue) {\n return normalizeSessionData(nextValue, previousSession);\n }\n\n return null;\n });\n };\n\n // Load session data\n const loadSession = async () => {\n if (!sessionId) return;\n setActiveSessionId(sessionId);\n\n setLoading(true);\n try {\n const sessionData = await fetchSessionById(sessionId);\n setSession(sessionData);\n\n // Check if session is expired\n if (isSessionExpired(sessionData)) {\n setIsExpired(true);\n setLoading(false);\n return;\n }\n\n // Initialize configuration based on session template\n if (sessionData.template) {\n // Store document options for each type in localStorage\n const templateNodes = sessionData.template.nodes;\n templateNodes.forEach((node) => {\n if (\n node.type === \"document-selection\" &&\n node.requiredDocumentType &&\n node.selectedOptions.length > 0\n ) {\n storeDocumentOptions(\n sessionId,\n node.requiredDocumentType,\n node.selectedOptions,\n );\n } else if (\n node.type === \"document-collection\" &&\n node.allowedDocumentTypes &&\n node.allowedDocumentTypes.length > 0\n ) {\n // Store allowed document types as names for document-collection nodes\n const documentNames = node.allowedDocumentTypes.map(\n (doc) => doc.name,\n );\n storeDocumentOptions(\n sessionId,\n \"document-collection\",\n documentNames,\n );\n }\n });\n\n const memoryUserInput = getSessionMemoryUserInput(sessionId);\n if (Object.keys(memoryUserInput).length > 0) {\n setUserInput((prev) => ({\n ...prev,\n ...memoryUserInput,\n }));\n } else if (\n sessionData.userInput &&\n Object.keys(sessionData.userInput).length > 0\n ) {\n const mergedUserInput = {\n ...(sessionData.userInput as Record<string, unknown>),\n };\n setUserInput((prev) => ({\n ...prev,\n ...mergedUserInput,\n }));\n setSessionMemoryUserInput(sessionId, mergedUserInput as UserInput);\n }\n\n const memoryContactInfo = getSessionMemoryContactInfo(sessionId);\n if (memoryContactInfo.email || memoryContactInfo.phoneNumber) {\n setContactInfo((prev) => ({\n ...prev,\n ...memoryContactInfo,\n }));\n } else if (\n sessionData.contactInfo &&\n Object.keys(sessionData.contactInfo).length > 0\n ) {\n const mergedContactInfo: ContactInfo = {\n email: String(sessionData.contactInfo.email || \"\"),\n phoneNumber: String(sessionData.contactInfo.phoneNumber || \"\"),\n };\n setContactInfo((prev) => ({\n ...prev,\n ...mergedContactInfo,\n }));\n setSessionMemoryContactInfo(sessionId, mergedContactInfo);\n }\n }\n\n setError(null);\n } catch (err) {\n console.error(\"Failed to load session:\", err);\n setError(\"Failed to load session data. Please try again.\");\n } finally {\n setLoading(false);\n }\n };\n\n // Retry loading the session\n const handleRetrySession = async () => {\n setIsExpired(false);\n setLoading(true);\n setError(null);\n\n try {\n const sessionData = await fetchSessionById(sessionId);\n\n if (isSessionExpired(sessionData)) {\n setIsExpired(true);\n } else {\n setSession(sessionData);\n }\n } catch (err) {\n console.error(\"Failed to retry loading session:\", err);\n setError(\"Failed to load session data. Please try again.\");\n } finally {\n setLoading(false);\n }\n };\n\n const userInputSyncInitialized = useRef(false);\n\n // Update user input in backend and in-memory store\n useEffect(() => {\n if (!sessionId) {\n return;\n }\n\n const entries = Object.entries(userInput || {}).filter(([, value]) => {\n if (value === undefined || value === null) {\n return false;\n }\n if (typeof value === \"string\") {\n return value.trim().length > 0;\n }\n return true;\n });\n\n if (!userInputSyncInitialized.current) {\n userInputSyncInitialized.current = true;\n return;\n }\n\n if (entries.length === 0) {\n return;\n }\n\n const cleanedUserInput = entries.reduce<Record<string, unknown>>(\n (acc, [key, value]) => {\n acc[key] = value;\n return acc;\n },\n {},\n );\n\n setSessionMemoryUserInput(sessionId, cleanedUserInput as UserInput);\n\n const updateUserData = async () => {\n try {\n const updatedSession = await updateSessionUserInput(\n sessionId,\n cleanedUserInput,\n );\n // Ne mettre à jour que si la requête réussit\n if (updatedSession) {\n setSession(updatedSession);\n }\n } catch (err) {\n console.error(\"Failed to update user input:\", err);\n // Ne pas mettre à jour la session en cas d'erreur\n }\n };\n\n updateUserData();\n }, [sessionId, userInput]);\n\n // Update contact info in backend and in-memory store\n useEffect(() => {\n if (contactInfo && contactInfo.email && contactInfo.phoneNumber) {\n setSessionMemoryContactInfo(sessionId, contactInfo);\n\n const updateContactData = async () => {\n if (sessionId && contactInfo.email && contactInfo.phoneNumber) {\n try {\n const updatedSession = await updateSessionContactInfo(sessionId, {\n email: contactInfo.email,\n phoneNumber: contactInfo.phoneNumber,\n });\n // Ne mettre à jour que si la requête réussit\n if (updatedSession) {\n setSession(updatedSession);\n }\n } catch (err) {\n console.error(\"Failed to update contact info:\", err);\n // Ne pas mettre à jour la session en cas d'erreur\n }\n }\n };\n\n updateContactData();\n }\n }, [contactInfo, sessionId]);\n\n // Send client info when it becomes available\n useEffect(() => {\n if (clientInfoLoaded && clientInfo && session) {\n console.log(\n \"Sending client info to backend:\",\n maskClientInfoForLog(clientInfo),\n );\n\n const sendClientInfoAsync = async () => {\n try {\n await sendClientInfo(sessionId, clientInfo);\n } catch (e) {\n console.error(\"Failed to send client info:\", e);\n }\n };\n\n const sendStartAuditTrail = async () => {\n try {\n // Utiliser analysisId et clientInfoId s'il existe\n await logSessionStarted(sessionId);\n } catch (err) {\n console.error(\"Failed to log session start in audit trail:\", err);\n // Non-blocking error - continue session loading\n }\n };\n\n sendClientInfoAsync();\n sendStartAuditTrail();\n }\n }, [clientInfoLoaded, clientInfo, sessionId, session]);\n\n // Keep active session id in memory only and clear traces on unmount/session switch.\n useEffect(() => {\n if (!sessionId) {\n return;\n }\n\n setActiveSessionId(sessionId);\n\n return () => {\n clearSessionSensitiveData(sessionId);\n };\n }, [sessionId]);\n\n // Check session expiration periodically\n useEffect(() => {\n if (!session || isExpired) return;\n\n if (isSessionExpired(session)) {\n setIsExpired(true);\n return;\n }\n\n const intervalId = setInterval(() => {\n if (isSessionExpired(session)) {\n setIsExpired(true);\n }\n }, 30000);\n\n return () => {\n clearInterval(intervalId);\n };\n }, [session, isExpired]);\n\n useEffect(() => {\n if (!isExpired || !sessionId) {\n return;\n }\n\n clearSessionSensitiveData(sessionId);\n }, [isExpired, sessionId]);\n\n const sessionSummary = session\n ? {\n id: session.id,\n status: session.status,\n currentStep: session.currentStep,\n expireTime: session.expireTime,\n templateId: session.template?.id,\n }\n : null;\n\n return {\n session,\n sessionSummary,\n setSession,\n loading,\n setLoading,\n error,\n setError,\n isExpired,\n setIsExpired,\n userInput,\n setUserInput,\n contactInfo,\n setContactInfo,\n loadSession,\n handleRetrySession,\n };\n};\n"],"names":["useState","__assign","__awaiter","setActiveSessionId","fetchSessionById","isSessionExpired","storeDocumentOptions","getSessionMemoryUserInput","setSessionMemoryUserInput","getSessionMemoryContactInfo","setSessionMemoryContactInfo","useRef","useEffect","updateSessionUserInput","updateSessionContactInfo","sendClientInfo","logSessionStarted","clearSessionSensitiveData"],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@ var React = require('react');
|
|
|
5
5
|
var sessionService = require('../services/sessionService.js');
|
|
6
6
|
|
|
7
7
|
/** Node types that auto-execute and should be skipped when going back */
|
|
8
|
-
var AUTO_EXECUTING_TYPES = new Set(["external-verification", "condition"
|
|
8
|
+
var AUTO_EXECUTING_TYPES = new Set(["external-verification", "condition"]);
|
|
9
9
|
var COMMITTED_NODE_TYPES = new Set(["selfie-capture", "biometric-capture"]);
|
|
10
10
|
var getNodeTypeAtStep = function (step, template) { var _a; return (_a = sessionService.getOrderedJourneySteps(template)[step - 1]) === null || _a === void 0 ? void 0 : _a.type; };
|
|
11
11
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useStepNavigation.js","sources":["../../../../src/hooks/useStepNavigation.ts"],"sourcesContent":["import { useState, useEffect, useRef } from \"react\";\nimport {\n updateSessionCurrentStep,\n getNextStepIndex,\n getOrderedJourneySteps,\n reconstructHistoryToStep,\n} from \"../services/sessionService\";\nimport type { SessionTemplate } from \"../types/session\";\n\n/** Node types that auto-execute and should be skipped when going back */\nconst AUTO_EXECUTING_TYPES = new Set([\"external-verification\", \"condition\", \"complementary-mandate\"]);\nconst COMMITTED_NODE_TYPES = new Set([\"selfie-capture\", \"biometric-capture\"]);\n\nconst getNodeTypeAtStep = (\n step: number,\n template: SessionTemplate,\n): string | undefined => getOrderedJourneySteps(template)[step - 1]?.type;\n\n/**\n * Rebuilds only the reversible part of a path after a committed node.\n * Auto-executing nodes immediately following the commit are excluded so the\n * first interactive destination remains the history boundary after reload.\n */\nconst trimHistoryAfterCommittedNode = (\n reconstructedHistory: number[],\n template: SessionTemplate,\n): number[] => {\n let committedHistoryIndex = -1;\n\n for (let index = reconstructedHistory.length - 2; index >= 0; index -= 1) {\n const nodeType = getNodeTypeAtStep(reconstructedHistory[index], template);\n if (nodeType && COMMITTED_NODE_TYPES.has(nodeType)) {\n committedHistoryIndex = index;\n break;\n }\n }\n\n if (committedHistoryIndex === -1) {\n return reconstructedHistory;\n }\n\n let reversibleHistoryStart = committedHistoryIndex + 1;\n while (reversibleHistoryStart < reconstructedHistory.length - 1) {\n const nodeType = getNodeTypeAtStep(\n reconstructedHistory[reversibleHistoryStart],\n template,\n );\n if (!nodeType || !AUTO_EXECUTING_TYPES.has(nodeType)) {\n break;\n }\n reversibleHistoryStart += 1;\n }\n\n return reconstructedHistory.slice(reversibleHistoryStart);\n};\n\nexport const useStepNavigation = (\n sessionId: string,\n sessionStatus?: string,\n initialStep?: number,\n template?: SessionTemplate,\n) => {\n const [step, setStepState] = useState(initialStep ?? 0);\n const [history, setHistory] = useState<number[]>(initialStep !== undefined ? [initialStep] : [0]);\n const hasInitialized = useRef(false);\n const committedNavigationPending = useRef(false);\n\n const setStep = (newStep: number, skipHistory = false) => {\n if (!skipHistory && newStep !== step) {\n setHistory((prev) => {\n if (prev[prev.length - 1] === newStep) return prev;\n return [...prev, newStep];\n });\n }\n setStepState(newStep);\n\n // Update current step in database\n if (sessionId) {\n updateSessionCurrentStep(sessionId, newStep).catch((error) => {\n console.error(\"Failed to update current step in database:\", error);\n // Non-blocking error - the step is still updated locally\n });\n }\n };\n\n const goBack = () => {\n if (history.length > 1) {\n let newHistory = [...history];\n newHistory.pop(); // Remove current step\n\n // Skip auto-executing nodes when going back\n if (template) {\n const orderedNodes = getOrderedJourneySteps(template);\n while (newHistory.length > 1) {\n const candidateStep = newHistory[newHistory.length - 1];\n // steps are 1-indexed (step 0 = start, step 1 = first node, etc.)\n const nodeIndex = candidateStep - 1;\n const candidateNode = orderedNodes[nodeIndex];\n if (candidateNode && AUTO_EXECUTING_TYPES.has(candidateNode.type)) {\n newHistory.pop();\n } else {\n break;\n }\n }\n }\n\n const previousStep = newHistory[newHistory.length - 1];\n setHistory(newHistory);\n setStep(previousStep, true);\n } else {\n console.warn(\"[goBack] BLOCKED — history.length <= 1, history:\", [...history]);\n }\n };\n\n /**\n * Retour arrière vers un nœud précis (ex: bouton \"Corriger ma saisie\").\n * Contrairement à `setStep`, on TRONQUE l'historique jusqu'à la dernière\n * occurrence de `targetStep` au lieu de l'empiler : le nœud cible cesse\n * ainsi d'être compté comme un \"revisit\" (runIndex 0 côté\n * TemplateNodeRenderer → formulaire pré-rempli). Si la cible n'est pas dans\n * l'historique, on retombe sur un `setStep` classique.\n */\n const goBackToStep = (targetStep: number) => {\n const idx = history.lastIndexOf(targetStep);\n if (idx !== -1) {\n const newHistory = history.slice(0, idx + 1);\n setHistory(newHistory);\n setStep(targetStep, true);\n } else {\n console.warn(\"[goBackToStep] target not in history — pushing instead:\", targetStep);\n setStep(targetStep);\n }\n };\n\n const goToNextStep = (\n currentNodeId: string,\n template: SessionTemplate,\n handle?: string\n ) => {\n const nextStepIndex = getNextStepIndex(currentNodeId, template, handle);\n\n if (nextStepIndex !== null) {\n if (committedNavigationPending.current) {\n const destinationType = getNodeTypeAtStep(nextStepIndex, template);\n committedNavigationPending.current = Boolean(\n destinationType && AUTO_EXECUTING_TYPES.has(destinationType),\n );\n setHistory([nextStepIndex]);\n setStep(nextStepIndex, true);\n } else {\n setStep(nextStepIndex);\n }\n } else {\n committedNavigationPending.current = false;\n console.warn(\n `[useStepNavigation] Could not find next step for node ${currentNodeId}. Staying on current step.`\n );\n }\n };\n\n /**\n * Navigates through the graph and makes the destination a point of no return.\n * The destination remains persisted by setStep, while prior history is discarded.\n */\n const goToNextStepCommitted = (\n currentNodeId: string,\n template: SessionTemplate,\n handle?: string,\n ) => {\n const nextStepIndex = getNextStepIndex(currentNodeId, template, handle);\n\n if (nextStepIndex !== null) {\n const destinationType = getNodeTypeAtStep(nextStepIndex, template);\n committedNavigationPending.current = Boolean(\n destinationType && AUTO_EXECUTING_TYPES.has(destinationType),\n );\n setHistory([nextStepIndex]);\n setStep(nextStepIndex, true);\n } else {\n committedNavigationPending.current = false;\n console.warn(\n `[useStepNavigation] Could not find next step for node ${currentNodeId}. Staying on current step.`,\n );\n }\n };\n\n // Initialize step from session data or status\n useEffect(() => {\n if (!sessionId) {\n return;\n }\n\n // Check if session is already ended\n if (sessionStatus === \"ended\") {\n setStepState(100);\n return;\n }\n\n // Only initialize once when initialStep becomes available\n if (initialStep !== undefined && !hasInitialized.current) {\n setStepState(initialStep);\n setHistory((prev) => {\n // Preserve history if the user already navigated past the initial step\n if (prev.length > 1 && prev[prev.length - 1] === initialStep) {\n return prev;\n }\n // Reconstruct history by following the graph from step 0\n const reconstructed = template\n ? trimHistoryAfterCommittedNode(\n reconstructHistoryToStep(initialStep, template),\n template,\n )\n : initialStep > 0 ? [0, initialStep] : [initialStep];\n return reconstructed;\n });\n hasInitialized.current = true;\n }\n }, [sessionId, sessionStatus, initialStep]);\n\n const stepObject = {\n setStep,\n goBack,\n goBackToStep,\n goToNextStep,\n goToNextStepCommitted,\n step,\n canGoBack: history.length > 1,\n };\n\n return {\n step,\n setStep,\n goBack,\n goBackToStep,\n goToNextStep,\n goToNextStepCommitted,\n stepObject,\n history,\n };\n};\n"],"names":["getOrderedJourneySteps","useState","useRef","__spreadArray","updateSessionCurrentStep","getNextStepIndex","useEffect","reconstructHistoryToStep"],"mappings":";;;;;;AASA;AACA,IAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,uBAAuB,EAAE,WAAW,EAAE,uBAAuB,CAAC,CAAC;AACrG,IAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,CAAC;AAE7E,IAAM,iBAAiB,GAAG,UACxB,IAAY,EACZ,QAAyB,EAAA,EAAA,IAAA,EAAA,CAAA,CACF,OAAA,CAAA,EAAA,GAAAA,qCAAsB,CAAC,QAAQ,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,CAAA,CAAA,CAAA;AAEzE;;;;AAIG;AACH,IAAM,6BAA6B,GAAG,UACpC,oBAA8B,EAC9B,QAAyB,EAAA;AAEzB,IAAA,IAAI,qBAAqB,GAAG,EAAE;AAE9B,IAAA,KAAK,IAAI,KAAK,GAAG,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE;QACxE,IAAM,QAAQ,GAAG,iBAAiB,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC;QACzE,IAAI,QAAQ,IAAI,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAClD,qBAAqB,GAAG,KAAK;YAC7B;QACF;IACF;AAEA,IAAA,IAAI,qBAAqB,KAAK,EAAE,EAAE;AAChC,QAAA,OAAO,oBAAoB;IAC7B;AAEA,IAAA,IAAI,sBAAsB,GAAG,qBAAqB,GAAG,CAAC;IACtD,OAAO,sBAAsB,GAAG,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE;QAC/D,IAAM,QAAQ,GAAG,iBAAiB,CAChC,oBAAoB,CAAC,sBAAsB,CAAC,EAC5C,QAAQ,CACT;QACD,IAAI,CAAC,QAAQ,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YACpD;QACF;QACA,sBAAsB,IAAI,CAAC;IAC7B;AAEA,IAAA,OAAO,oBAAoB,CAAC,KAAK,CAAC,sBAAsB,CAAC;AAC3D,CAAC;AAEM,IAAM,iBAAiB,GAAG,UAC/B,SAAiB,EACjB,aAAsB,EACtB,WAAoB,EACpB,QAA0B,EAAA;AAEpB,IAAA,IAAA,KAAuBC,cAAQ,CAAC,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,MAAA,GAAX,WAAW,GAAI,CAAC,CAAC,EAAhD,IAAI,QAAA,EAAE,YAAY,QAA8B;IACjD,IAAA,EAAA,GAAwBA,cAAQ,CAAW,WAAW,KAAK,SAAS,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAA1F,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,UAAU,GAAA,EAAA,CAAA,CAAA,CAAuE;AACjG,IAAA,IAAM,cAAc,GAAGC,YAAM,CAAC,KAAK,CAAC;AACpC,IAAA,IAAM,0BAA0B,GAAGA,YAAM,CAAC,KAAK,CAAC;AAEhD,IAAA,IAAM,OAAO,GAAG,UAAC,OAAe,EAAE,WAAmB,EAAA;AAAnB,QAAA,IAAA,WAAA,KAAA,MAAA,EAAA,EAAA,WAAA,GAAA,KAAmB,CAAA,CAAA;AACnD,QAAA,IAAI,CAAC,WAAW,IAAI,OAAO,KAAK,IAAI,EAAE;YACpC,UAAU,CAAC,UAAC,IAAI,EAAA;gBACd,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,OAAO;AAAE,oBAAA,OAAO,IAAI;gBAClD,OAAAC,uBAAA,CAAAA,uBAAA,CAAA,EAAA,EAAW,IAAI,EAAA,IAAA,CAAA,EAAA,CAAE,OAAO,CAAA,EAAA,KAAA,CAAA;AAC1B,YAAA,CAAC,CAAC;QACJ;QACA,YAAY,CAAC,OAAO,CAAC;;QAGrB,IAAI,SAAS,EAAE;YACbC,uCAAwB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,UAAC,KAAK,EAAA;AACvD,gBAAA,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC;;AAEpE,YAAA,CAAC,CAAC;QACJ;AACF,IAAA,CAAC;AAED,IAAA,IAAM,MAAM,GAAG,YAAA;AACb,QAAA,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;AACtB,YAAA,IAAI,UAAU,GAAAD,uBAAA,CAAA,EAAA,EAAO,OAAO,EAAA,IAAA,CAAC;AAC7B,YAAA,UAAU,CAAC,GAAG,EAAE,CAAC;;YAGjB,IAAI,QAAQ,EAAE;AACZ,gBAAA,IAAM,YAAY,GAAGH,qCAAsB,CAAC,QAAQ,CAAC;AACrD,gBAAA,OAAO,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;oBAC5B,IAAM,aAAa,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;;AAEvD,oBAAA,IAAM,SAAS,GAAG,aAAa,GAAG,CAAC;AACnC,oBAAA,IAAM,aAAa,GAAG,YAAY,CAAC,SAAS,CAAC;oBAC7C,IAAI,aAAa,IAAI,oBAAoB,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;wBACjE,UAAU,CAAC,GAAG,EAAE;oBAClB;yBAAO;wBACL;oBACF;gBACF;YACF;YAEA,IAAM,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;YACtD,UAAU,CAAC,UAAU,CAAC;AACtB,YAAA,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC;QAC7B;aAAO;AACL,YAAA,OAAO,CAAC,IAAI,CAAC,kDAAkD,EAAAG,uBAAA,CAAA,EAAA,EAAM,OAAO,QAAE;QAChF;AACF,IAAA,CAAC;AAED;;;;;;;AAOG;IACH,IAAM,YAAY,GAAG,UAAC,UAAkB,EAAA;QACtC,IAAM,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC;AAC3C,QAAA,IAAI,GAAG,KAAK,EAAE,EAAE;AACd,YAAA,IAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;YAC5C,UAAU,CAAC,UAAU,CAAC;AACtB,YAAA,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC;QAC3B;aAAO;AACL,YAAA,OAAO,CAAC,IAAI,CAAC,yDAAyD,EAAE,UAAU,CAAC;YACnF,OAAO,CAAC,UAAU,CAAC;QACrB;AACF,IAAA,CAAC;AAED,IAAA,IAAM,YAAY,GAAG,UACnB,aAAqB,EACrB,QAAyB,EACzB,MAAe,EAAA;QAEf,IAAM,aAAa,GAAGE,+BAAgB,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC;AAEvE,QAAA,IAAI,aAAa,KAAK,IAAI,EAAE;AAC1B,YAAA,IAAI,0BAA0B,CAAC,OAAO,EAAE;gBACtC,IAAM,eAAe,GAAG,iBAAiB,CAAC,aAAa,EAAE,QAAQ,CAAC;AAClE,gBAAA,0BAA0B,CAAC,OAAO,GAAG,OAAO,CAC1C,eAAe,IAAI,oBAAoB,CAAC,GAAG,CAAC,eAAe,CAAC,CAC7D;AACD,gBAAA,UAAU,CAAC,CAAC,aAAa,CAAC,CAAC;AAC3B,gBAAA,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;YAC9B;iBAAO;gBACL,OAAO,CAAC,aAAa,CAAC;YACxB;QACF;aAAO;AACL,YAAA,0BAA0B,CAAC,OAAO,GAAG,KAAK;AAC1C,YAAA,OAAO,CAAC,IAAI,CACV,gEAAyD,aAAa,EAAA,4BAAA,CAA4B,CACnG;QACH;AACF,IAAA,CAAC;AAED;;;AAGG;AACH,IAAA,IAAM,qBAAqB,GAAG,UAC5B,aAAqB,EACrB,QAAyB,EACzB,MAAe,EAAA;QAEf,IAAM,aAAa,GAAGA,+BAAgB,CAAC,aAAa,EAAE,QAAQ,EAAE,MAAM,CAAC;AAEvE,QAAA,IAAI,aAAa,KAAK,IAAI,EAAE;YAC1B,IAAM,eAAe,GAAG,iBAAiB,CAAC,aAAa,EAAE,QAAQ,CAAC;AAClE,YAAA,0BAA0B,CAAC,OAAO,GAAG,OAAO,CAC1C,eAAe,IAAI,oBAAoB,CAAC,GAAG,CAAC,eAAe,CAAC,CAC7D;AACD,YAAA,UAAU,CAAC,CAAC,aAAa,CAAC,CAAC;AAC3B,YAAA,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC;QAC9B;aAAO;AACL,YAAA,0BAA0B,CAAC,OAAO,GAAG,KAAK;AAC1C,YAAA,OAAO,CAAC,IAAI,CACV,gEAAyD,aAAa,EAAA,4BAAA,CAA4B,CACnG;QACH;AACF,IAAA,CAAC;;AAGD,IAAAC,eAAS,CAAC,YAAA;QACR,IAAI,CAAC,SAAS,EAAE;YACd;QACF;;AAGA,QAAA,IAAI,aAAa,KAAK,OAAO,EAAE;YAC7B,YAAY,CAAC,GAAG,CAAC;YACjB;QACF;;QAGA,IAAI,WAAW,KAAK,SAAS,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;YACxD,YAAY,CAAC,WAAW,CAAC;YACzB,UAAU,CAAC,UAAC,IAAI,EAAA;;AAEd,gBAAA,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,WAAW,EAAE;AAC5D,oBAAA,OAAO,IAAI;gBACb;;gBAEA,IAAM,aAAa,GAAG;sBAClB,6BAA6B,CAC3BC,uCAAwB,CAAC,WAAW,EAAE,QAAQ,CAAC,EAC/C,QAAQ;AAEZ,sBAAE,WAAW,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;AACtD,gBAAA,OAAO,aAAa;AACtB,YAAA,CAAC,CAAC;AACF,YAAA,cAAc,CAAC,OAAO,GAAG,IAAI;QAC/B;IACF,CAAC,EAAE,CAAC,SAAS,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;AAE3C,IAAA,IAAM,UAAU,GAAG;AACjB,QAAA,OAAO,EAAA,OAAA;AACP,QAAA,MAAM,EAAA,MAAA;AACN,QAAA,YAAY,EAAA,YAAA;AACZ,QAAA,YAAY,EAAA,YAAA;AACZ,QAAA,qBAAqB,EAAA,qBAAA;AACrB,QAAA,IAAI,EAAA,IAAA;AACJ,QAAA,SAAS,EAAE,OAAO,CAAC,MAAM,GAAG,CAAC;KAC9B;IAED,OAAO;AACL,QAAA,IAAI,EAAA,IAAA;AACJ,QAAA,OAAO,EAAA,OAAA;AACP,QAAA,MAAM,EAAA,MAAA;AACN,QAAA,YAAY,EAAA,YAAA;AACZ,QAAA,YAAY,EAAA,YAAA;AACZ,QAAA,qBAAqB,EAAA,qBAAA;AACrB,QAAA,UAAU,EAAA,UAAA;AACV,QAAA,OAAO,EAAA,OAAA;KACR;AACH;;;;"}
|
|
1
|
+
{"version":3,"file":"useStepNavigation.js","sources":["../../../../src/hooks/useStepNavigation.ts"],"sourcesContent":["import { useState, useEffect, useRef } from \"react\";\nimport {\n updateSessionCurrentStep,\n getNextStepIndex,\n getOrderedJourneySteps,\n reconstructHistoryToStep,\n} from \"../services/sessionService\";\nimport type { SessionTemplate } from \"../types/session\";\n\n/** Node types that auto-execute and should be skipped when going back */\nconst AUTO_EXECUTING_TYPES = new Set([\"external-verification\", \"condition\"]);\nconst COMMITTED_NODE_TYPES = new Set([\"selfie-capture\", \"biometric-capture\"]);\n\nconst getNodeTypeAtStep = (\n step: number,\n template: SessionTemplate,\n): string | undefined => getOrderedJourneySteps(template)[step - 1]?.type;\n\n/**\n * Rebuilds only the reversible part of a path after a committed node.\n * Auto-executing nodes immediately following the commit are excluded so the\n * first interactive destination remains the history boundary after reload.\n */\nconst trimHistoryAfterCommittedNode = (\n reconstructedHistory: number[],\n template: SessionTemplate,\n): number[] => {\n let committedHistoryIndex = -1;\n\n for (let index = reconstructedHistory.length - 2; index >= 0; index -= 1) {\n const nodeType = getNodeTypeAtStep(reconstructedHistory[index], template);\n if (nodeType && COMMITTED_NODE_TYPES.has(nodeType)) {\n committedHistoryIndex = index;\n break;\n }\n }\n\n if (committedHistoryIndex === -1) {\n return reconstructedHistory;\n }\n\n let reversibleHistoryStart = committedHistoryIndex + 1;\n while (reversibleHistoryStart < reconstructedHistory.length - 1) {\n const nodeType = getNodeTypeAtStep(\n reconstructedHistory[reversibleHistoryStart],\n template,\n );\n if (!nodeType || !AUTO_EXECUTING_TYPES.has(nodeType)) {\n break;\n }\n reversibleHistoryStart += 1;\n }\n\n return reconstructedHistory.slice(reversibleHistoryStart);\n};\n\nexport const useStepNavigation = (\n sessionId: string,\n sessionStatus?: string,\n initialStep?: number,\n template?: SessionTemplate,\n) => {\n const [step, setStepState] = useState(initialStep ?? 0);\n const [history, setHistory] = useState<number[]>(initialStep !== undefined ? [initialStep] : [0]);\n const hasInitialized = useRef(false);\n const committedNavigationPending = useRef(false);\n\n const setStep = (newStep: number, skipHistory = false) => {\n if (!skipHistory && newStep !== step) {\n setHistory((prev) => {\n if (prev[prev.length - 1] === newStep) return prev;\n return [...prev, newStep];\n });\n }\n setStepState(newStep);\n\n // Update current step in database\n if (sessionId) {\n updateSessionCurrentStep(sessionId, newStep).catch((error) => {\n console.error(\"Failed to update current step in database:\", error);\n // Non-blocking error - the step is still updated locally\n });\n }\n };\n\n const goBack = () => {\n if (history.length > 1) {\n let newHistory = [...history];\n newHistory.pop(); // Remove current step\n\n // Skip auto-executing nodes when going back\n if (template) {\n const orderedNodes = getOrderedJourneySteps(template);\n while (newHistory.length > 1) {\n const candidateStep = newHistory[newHistory.length - 1];\n // steps are 1-indexed (step 0 = start, step 1 = first node, etc.)\n const nodeIndex = candidateStep - 1;\n const candidateNode = orderedNodes[nodeIndex];\n if (candidateNode && AUTO_EXECUTING_TYPES.has(candidateNode.type)) {\n newHistory.pop();\n } else {\n break;\n }\n }\n }\n\n const previousStep = newHistory[newHistory.length - 1];\n setHistory(newHistory);\n setStep(previousStep, true);\n } else {\n console.warn(\"[goBack] BLOCKED — history.length <= 1, history:\", [...history]);\n }\n };\n\n /**\n * Retour arrière vers un nœud précis (ex: bouton \"Corriger ma saisie\").\n * Contrairement à `setStep`, on TRONQUE l'historique jusqu'à la dernière\n * occurrence de `targetStep` au lieu de l'empiler : le nœud cible cesse\n * ainsi d'être compté comme un \"revisit\" (runIndex 0 côté\n * TemplateNodeRenderer → formulaire pré-rempli). Si la cible n'est pas dans\n * l'historique, on retombe sur un `setStep` classique.\n */\n const goBackToStep = (targetStep: number) => {\n const idx = history.lastIndexOf(targetStep);\n if (idx !== -1) {\n const newHistory = history.slice(0, idx + 1);\n setHistory(newHistory);\n setStep(targetStep, true);\n } else {\n console.warn(\"[goBackToStep] target not in history — pushing instead:\", targetStep);\n setStep(targetStep);\n }\n };\n\n const goToNextStep = (\n currentNodeId: string,\n template: SessionTemplate,\n handle?: string\n ) => {\n const nextStepIndex = getNextStepIndex(currentNodeId, template, handle);\n\n if (nextStepIndex !== null) {\n if (committedNavigationPending.current) {\n const destinationType = getNodeTypeAtStep(nextStepIndex, template);\n committedNavigationPending.current = Boolean(\n destinationType && AUTO_EXECUTING_TYPES.has(destinationType),\n );\n setHistory([nextStepIndex]);\n setStep(nextStepIndex, true);\n } else {\n setStep(nextStepIndex);\n }\n } else {\n committedNavigationPending.current = false;\n console.warn(\n `[useStepNavigation] Could not find next step for node ${currentNodeId}. Staying on current step.`\n );\n }\n };\n\n /**\n * Navigates through the graph and makes the destination a point of no return.\n * The destination remains persisted by setStep, while prior history is discarded.\n */\n const goToNextStepCommitted = (\n currentNodeId: string,\n template: SessionTemplate,\n handle?: string,\n ) => {\n const nextStepIndex = getNextStepIndex(currentNodeId, template, handle);\n\n if (nextStepIndex !== null) {\n const destinationType = getNodeTypeAtStep(nextStepIndex, template);\n committedNavigationPending.current = Boolean(\n destinationType && AUTO_EXECUTING_TYPES.has(destinationType),\n );\n setHistory([nextStepIndex]);\n setStep(nextStepIndex, true);\n } else {\n committedNavigationPending.current = false;\n console.warn(\n `[useStepNavigation] Could not find next step for node ${currentNodeId}. Staying on current step.`,\n );\n }\n };\n\n // Initialize step from session data or status\n useEffect(() => {\n if (!sessionId) {\n return;\n }\n\n // Check if session is already ended\n if (sessionStatus === \"ended\") {\n setStepState(100);\n return;\n }\n\n // Only initialize once when initialStep becomes available\n if (initialStep !== undefined && !hasInitialized.current) {\n setStepState(initialStep);\n setHistory((prev) => {\n // Preserve history if the user already navigated past the initial step\n if (prev.length > 1 && prev[prev.length - 1] === initialStep) {\n return prev;\n }\n // Reconstruct history by following the graph from step 0\n const reconstructed = template\n ? trimHistoryAfterCommittedNode(\n reconstructHistoryToStep(initialStep, template),\n template,\n )\n : initialStep > 0 ? [0, initialStep] : [initialStep];\n return reconstructed;\n });\n hasInitialized.current = true;\n }\n }, [sessionId, sessionStatus, initialStep]);\n\n const stepObject = {\n setStep,\n goBack,\n goBackToStep,\n goToNextStep,\n goToNextStepCommitted,\n step,\n canGoBack: history.length > 1,\n };\n\n return {\n step,\n setStep,\n goBack,\n goBackToStep,\n goToNextStep,\n goToNextStepCommitted,\n stepObject,\n history,\n };\n};\n"],"names":["getOrderedJourneySteps","useState","useRef","__spreadArray","updateSessionCurrentStep","getNextStepIndex","useEffect","reconstructHistoryToStep"],"mappings":"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"}
|
|
@@ -371,8 +371,7 @@ var useUserInputForm = function (_a) {
|
|
|
371
371
|
if (requestedFields.has("tva") && !form.tva) {
|
|
372
372
|
markError("tva");
|
|
373
373
|
}
|
|
374
|
-
if (requestedFields.has("registrationNumber") &&
|
|
375
|
-
!form.registrationNumber) {
|
|
374
|
+
if (requestedFields.has("registrationNumber") && !form.registrationNumber) {
|
|
376
375
|
markError("registrationNumber");
|
|
377
376
|
}
|
|
378
377
|
}
|
|
@@ -439,9 +438,7 @@ var useUserInputForm = function (_a) {
|
|
|
439
438
|
var _a, _b;
|
|
440
439
|
var value = customFormData[field.id];
|
|
441
440
|
if (field.valueType === "list") {
|
|
442
|
-
var rows = Array.isArray(value)
|
|
443
|
-
? value
|
|
444
|
-
: [];
|
|
441
|
+
var rows = Array.isArray(value) ? value : [];
|
|
445
442
|
var minRows = listFieldUtils.getListFieldMinRows(field);
|
|
446
443
|
var columns_1 = listFieldUtils.normalizeListColumns(field.listColumns);
|
|
447
444
|
var fieldCellErrors_1 = {};
|
|
@@ -472,16 +469,6 @@ var useUserInputForm = function (_a) {
|
|
|
472
469
|
fieldCellErrors_1[key] = t("custom_form.invalid_email");
|
|
473
470
|
listFieldInvalid_1 = true;
|
|
474
471
|
}
|
|
475
|
-
else {
|
|
476
|
-
var _c = customFieldValidation.resolveColumnRegex(col, row), regex = _c.regex, errorMessage = _c.errorMessage;
|
|
477
|
-
if (regex && !customFieldValidation.isRegexMatch(cellValue, regex)) {
|
|
478
|
-
fieldCellErrors_1[key] =
|
|
479
|
-
errorMessage ||
|
|
480
|
-
col.regexErrorMessage ||
|
|
481
|
-
t("custom_form.invalid_format");
|
|
482
|
-
listFieldInvalid_1 = true;
|
|
483
|
-
}
|
|
484
|
-
}
|
|
485
472
|
break;
|
|
486
473
|
case "date": {
|
|
487
474
|
var fmt = (_b = col.dateFormat) !== null && _b !== void 0 ? _b : session.DEFAULT_DATE_DISPLAY_FORMAT;
|
|
@@ -493,17 +480,14 @@ var useUserInputForm = function (_a) {
|
|
|
493
480
|
}
|
|
494
481
|
break;
|
|
495
482
|
}
|
|
496
|
-
case "text":
|
|
497
|
-
|
|
498
|
-
if (regex && !customFieldValidation.isRegexMatch(cellValue, regex)) {
|
|
483
|
+
case "text":
|
|
484
|
+
if (col.regex && !customFieldValidation.isRegexMatch(cellValue, col.regex)) {
|
|
499
485
|
fieldCellErrors_1[key] =
|
|
500
|
-
|
|
501
|
-
col.regexErrorMessage ||
|
|
486
|
+
col.regexErrorMessage ||
|
|
502
487
|
t("custom_form.invalid_format");
|
|
503
488
|
listFieldInvalid_1 = true;
|
|
504
489
|
}
|
|
505
490
|
break;
|
|
506
|
-
}
|
|
507
491
|
}
|
|
508
492
|
});
|
|
509
493
|
});
|
|
@@ -639,12 +623,7 @@ var useUserInputForm = function (_a) {
|
|
|
639
623
|
postalCode: form.postalCode,
|
|
640
624
|
city: form.city,
|
|
641
625
|
countryCode: form.countryCode,
|
|
642
|
-
})), (requestedFields.has("siret") && { siret: form.siret })), (requestedFields.has("tva") && { tva: form.tva })), (requestedFields.has("registrationNumber") && {
|
|
643
|
-
registrationNumber: form.registrationNumber,
|
|
644
|
-
})), (requestedFields.has("siret") &&
|
|
645
|
-
!requestedFields.has("registrationNumber") && {
|
|
646
|
-
registrationNumber: form.siret,
|
|
647
|
-
})), (requestedFields.has("nationalite") && {
|
|
626
|
+
})), (requestedFields.has("siret") && { siret: form.siret })), (requestedFields.has("tva") && { tva: form.tva })), (requestedFields.has("registrationNumber") && { registrationNumber: form.registrationNumber })), (requestedFields.has("siret") && !requestedFields.has("registrationNumber") && { registrationNumber: form.siret })), (requestedFields.has("nationalite") && {
|
|
648
627
|
nationality: form.nationality,
|
|
649
628
|
})), (requestedFields.has("legalRepresentativeNom") && {
|
|
650
629
|
legalRepresentativeLastName: form.legalRepresentativeLastName,
|