datakeen-session-react 1.1.194 → 1.1.195-dev.2
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/session/StartSession.js +4 -29
- package/dist/cjs/components/session/StartSession.js.map +1 -1
- package/dist/cjs/components/start-flow/Start.js +6 -6
- package/dist/cjs/components/start-flow/Start.js.map +1 -1
- package/dist/cjs/components/template/ComplementaryMandateNodeHandler.js +36 -0
- package/dist/cjs/components/template/ComplementaryMandateNodeHandler.js.map +1 -0
- package/dist/cjs/components/template/ExternalVerificationNodeHandler.js +78 -36
- package/dist/cjs/components/template/ExternalVerificationNodeHandler.js.map +1 -1
- package/dist/cjs/components/template/TemplateNodeRenderer.js +3 -0
- package/dist/cjs/components/template/TemplateNodeRenderer.js.map +1 -1
- package/dist/cjs/hooks/useSessionData.js +10 -5
- 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 +27 -6
- package/dist/cjs/hooks/useUserInputForm.js.map +1 -1
- package/dist/cjs/i18n/en.json.js +24 -26
- package/dist/cjs/i18n/en.json.js.map +1 -1
- package/dist/cjs/i18n/es.json.js +24 -26
- package/dist/cjs/i18n/es.json.js.map +1 -1
- package/dist/cjs/i18n/fr.json.js +24 -26
- package/dist/cjs/i18n/fr.json.js.map +1 -1
- package/dist/cjs/services/sessionService.js +33 -6
- package/dist/cjs/services/sessionService.js.map +1 -1
- package/dist/cjs/types/session.js.map +1 -1
- package/dist/cjs/utils/customFieldValidation.js +44 -1
- package/dist/cjs/utils/customFieldValidation.js.map +1 -1
- package/dist/esm/components/session/StartSession.js +5 -30
- package/dist/esm/components/session/StartSession.js.map +1 -1
- package/dist/esm/components/start-flow/Start.js +6 -6
- package/dist/esm/components/start-flow/Start.js.map +1 -1
- package/dist/esm/components/template/ComplementaryMandateNodeHandler.js +32 -0
- package/dist/esm/components/template/ComplementaryMandateNodeHandler.js.map +1 -0
- package/dist/esm/components/template/ExternalVerificationNodeHandler.js +78 -36
- package/dist/esm/components/template/ExternalVerificationNodeHandler.js.map +1 -1
- package/dist/esm/components/template/TemplateNodeRenderer.js +3 -0
- package/dist/esm/components/template/TemplateNodeRenderer.js.map +1 -1
- package/dist/esm/hooks/useSessionData.js +10 -5
- 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 +28 -7
- package/dist/esm/hooks/useUserInputForm.js.map +1 -1
- package/dist/esm/i18n/en.json.js +24 -26
- package/dist/esm/i18n/en.json.js.map +1 -1
- package/dist/esm/i18n/es.json.js +24 -26
- package/dist/esm/i18n/es.json.js.map +1 -1
- package/dist/esm/i18n/fr.json.js +24 -26
- package/dist/esm/i18n/fr.json.js.map +1 -1
- package/dist/esm/services/sessionService.js +33 -7
- package/dist/esm/services/sessionService.js.map +1 -1
- package/dist/esm/types/session.js.map +1 -1
- package/dist/esm/utils/customFieldValidation.js +44 -2
- package/dist/esm/utils/customFieldValidation.js.map +1 -1
- package/docs/COMPLEMENTARY_MANDATE.md +22 -0
- package/docs/JOURNEY_NODE_BUILDER.md +15 -0
- package/package.json +1 -1
- package/dist/cjs/components/start-flow/CGU.js +0 -132
- package/dist/cjs/components/start-flow/CGU.js.map +0 -1
- package/dist/cjs/components/ui/LanguageSelector.js +0 -46
- package/dist/cjs/components/ui/LanguageSelector.js.map +0 -1
- package/dist/cjs/utils/languageFlags.js +0 -46
- package/dist/cjs/utils/languageFlags.js.map +0 -1
- package/dist/esm/components/start-flow/CGU.js +0 -108
- package/dist/esm/components/start-flow/CGU.js.map +0 -1
- package/dist/esm/components/ui/LanguageSelector.js +0 -42
- package/dist/esm/components/ui/LanguageSelector.js.map +0 -1
- package/dist/esm/utils/languageFlags.js +0 -42
- package/dist/esm/utils/languageFlags.js.map +0 -1
|
@@ -3,41 +3,16 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
-
var React = require('react');
|
|
7
6
|
var Start = require('../start-flow/Start.js');
|
|
8
|
-
var CGU = require('../start-flow/CGU.js');
|
|
9
7
|
|
|
8
|
+
// Le consentement est porté par le nœud `legal-consent` du parcours : l'accueil
|
|
9
|
+
// enchaîne directement sur le QR code (si configuré) ou le premier nœud.
|
|
10
10
|
var StartSession = function (_a) {
|
|
11
|
-
var _b, _c
|
|
11
|
+
var _b, _c;
|
|
12
12
|
var stepObject = _a.stepObject, session = _a.session, showQRCodeInstructions = _a.showQRCodeInstructions;
|
|
13
13
|
var setStep = stepObject.setStep;
|
|
14
|
-
var _g = React.useState(0), startStep = _g[0], setStartStep = _g[1];
|
|
15
|
-
// Find the start node from template
|
|
16
14
|
var startNode = (_c = (_b = session === null || session === void 0 ? void 0 : session.template) === null || _b === void 0 ? void 0 : _b.nodes) === null || _c === void 0 ? void 0 : _c.find(function (node) { return node.type === "start"; });
|
|
17
|
-
|
|
18
|
-
// les CGU de la page d'accueil ferait consentir deux fois pour la même chose.
|
|
19
|
-
//
|
|
20
|
-
// Le drapeau `showLegacyCGU` n'existe que pour les parcours antérieurs à ce
|
|
21
|
-
// nœud. Il était posé à `false` par une migration au démarrage, retirée
|
|
22
|
-
// depuis (« remove legacy legal consent migration from bootstrap process ») :
|
|
23
|
-
// un parcours créé ou restauré après ce retrait garde donc le défaut `true`
|
|
24
|
-
// et réaffiche les CGU malgré son nœud de consentement. On déduit le cas du
|
|
25
|
-
// graphe plutôt que du drapeau, ce qui couvre aussi les parcours existants
|
|
26
|
-
// sans toucher aux données.
|
|
27
|
-
var hasLegalConsentNode = ((_e = (_d = session === null || session === void 0 ? void 0 : session.template) === null || _d === void 0 ? void 0 : _d.nodes) === null || _e === void 0 ? void 0 : _e.some(function (node) { return node.type === "legal-consent"; })) === true;
|
|
28
|
-
var showLegacyCGU = !hasLegalConsentNode &&
|
|
29
|
-
(startNode === null || startNode === void 0 ? void 0 : startNode.showLegacyCGU) !== false;
|
|
30
|
-
// If CGU is disabled, clicking "Start" skips CGU.
|
|
31
|
-
// Still honour showQRCodeInstructions so the QR code step is not bypassed.
|
|
32
|
-
var handleStartButtonClick = function (localStep) {
|
|
33
|
-
if (!showLegacyCGU) {
|
|
34
|
-
setStep(showQRCodeInstructions ? 0.5 : 1);
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
setStartStep(localStep);
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
return (jsxRuntime.jsxs("div", { className: "w-full h-full", children: [startStep === 0 && (jsxRuntime.jsx(Start.default, { setStep: handleStartButtonClick, welcomeTitle: startNode === null || startNode === void 0 ? void 0 : startNode.welcomeTitle, welcomeSubtitle: startNode === null || startNode === void 0 ? void 0 : startNode.welcomeSubtitle, welcomeDescription: startNode === null || startNode === void 0 ? void 0 : startNode.welcomeDescription, welcomeImage: startNode === null || startNode === void 0 ? void 0 : startNode.welcomeImage, session: session !== null && session !== void 0 ? session : undefined })), startStep === 1 && showLegacyCGU && (jsxRuntime.jsx(CGU.default, { setStep: setStep, session: session !== null && session !== void 0 ? session : undefined, sessionId: session === null || session === void 0 ? void 0 : session.id, showQRCodeInstructions: showQRCodeInstructions, languages: (_f = session === null || session === void 0 ? void 0 : session.template) === null || _f === void 0 ? void 0 : _f.languages, onBack: function () { return setStartStep(0); } }))] }));
|
|
15
|
+
return (jsxRuntime.jsx("div", { className: "w-full h-full", children: jsxRuntime.jsx(Start.default, { setStep: function () { return setStep(showQRCodeInstructions ? 0.5 : 1); }, welcomeTitle: startNode === null || startNode === void 0 ? void 0 : startNode.welcomeTitle, welcomeSubtitle: startNode === null || startNode === void 0 ? void 0 : startNode.welcomeSubtitle, welcomeDescription: startNode === null || startNode === void 0 ? void 0 : startNode.welcomeDescription, welcomeImage: startNode === null || startNode === void 0 ? void 0 : startNode.welcomeImage, session: session !== null && session !== void 0 ? session : undefined }) }));
|
|
41
16
|
};
|
|
42
17
|
|
|
43
18
|
exports.default = StartSession;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StartSession.js","sources":["../../../../../src/components/session/StartSession.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"StartSession.js","sources":["../../../../../src/components/session/StartSession.tsx"],"sourcesContent":["import type { stepObject } from \"../../types/session\";\nimport { type SessionData } from \"../../types/session\";\nimport Start from \"../start-flow/Start\";\n\ninterface StartSessionProps {\n stepObject: stepObject;\n session: SessionData | null;\n showQRCodeInstructions: boolean;\n}\n\n// Le consentement est porté par le nœud `legal-consent` du parcours : l'accueil\n// enchaîne directement sur le QR code (si configuré) ou le premier nœud.\nconst StartSession = ({ stepObject, session, showQRCodeInstructions }: StartSessionProps) => {\n const { setStep } = stepObject;\n\n const startNode = session?.template?.nodes?.find((node) => node.type === \"start\");\n\n return (\n <div className=\"w-full h-full\">\n <Start\n setStep={() => setStep(showQRCodeInstructions ? 0.5 : 1)}\n welcomeTitle={startNode?.welcomeTitle}\n welcomeSubtitle={startNode?.welcomeSubtitle}\n welcomeDescription={startNode?.welcomeDescription}\n welcomeImage={startNode?.welcomeImage}\n session={session ?? undefined}\n />\n </div>\n );\n};\n\nexport default StartSession;\n"],"names":["_jsx","Start"],"mappings":";;;;;;;AAUA;AACA;AACA,IAAM,YAAY,GAAG,UAAC,EAAkE,EAAA;;AAAhE,IAAA,IAAA,UAAU,gBAAA,EAAE,OAAO,GAAA,EAAA,CAAA,OAAA,EAAE,sBAAsB,GAAA,EAAA,CAAA,sBAAA;AACzD,IAAA,IAAA,OAAO,GAAK,UAAU,CAAA,OAAf;AAEf,IAAA,IAAM,SAAS,GAAG,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,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,CAAC,UAAC,IAAI,EAAA,EAAK,OAAA,IAAI,CAAC,IAAI,KAAK,OAAO,CAAA,CAArB,CAAqB,CAAC;AAEjF,IAAA,QACEA,cAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,eAAe,YAC5BA,cAAA,CAACC,aAAK,EAAA,EACJ,OAAO,EAAE,YAAA,EAAM,OAAA,OAAO,CAAC,sBAAsB,GAAG,GAAG,GAAG,CAAC,CAAC,CAAA,CAAzC,CAAyC,EACxD,YAAY,EAAE,SAAS,aAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,YAAY,EACrC,eAAe,EAAE,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,eAAe,EAC3C,kBAAkB,EAAE,SAAS,KAAA,IAAA,IAAT,SAAS,KAAA,MAAA,GAAA,MAAA,GAAT,SAAS,CAAE,kBAAkB,EACjD,YAAY,EAAE,SAAS,KAAA,IAAA,IAAT,SAAS,uBAAT,SAAS,CAAE,YAAY,EACrC,OAAO,EAAE,OAAO,KAAA,IAAA,IAAP,OAAO,cAAP,OAAO,GAAI,SAAS,EAAA,CAC7B,EAAA,CACE;AAEV;;;;"}
|
|
@@ -13,6 +13,7 @@ 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');
|
|
16
17
|
require('../../services/auditTrailService.js');
|
|
17
18
|
require('ua-parser-js');
|
|
18
19
|
var StartIcon = require('../icons/StartIcon.js');
|
|
@@ -20,10 +21,6 @@ var PageActions = require('../ui/PageActions.js');
|
|
|
20
21
|
var Subtitle = require('../ui/Subtitle.js');
|
|
21
22
|
var Title = require('../ui/Title.js');
|
|
22
23
|
var MobilePageLayout = require('../ui/MobilePageLayout.js');
|
|
23
|
-
require('@radix-ui/react-checkbox');
|
|
24
|
-
require('@radix-ui/react-label');
|
|
25
|
-
require('@radix-ui/react-icons');
|
|
26
|
-
require('react-circle-flags');
|
|
27
24
|
require('qrcode');
|
|
28
25
|
require('lucide-react');
|
|
29
26
|
require('../../assets/check.svg.js');
|
|
@@ -44,12 +41,15 @@ require('../../services/documentEdgeDetectionService.js');
|
|
|
44
41
|
require('../document-video/document-video-flow/DocumentVideoFlow.js');
|
|
45
42
|
require('../document-collection/DocumentProcessing.js');
|
|
46
43
|
require('../../constants/userInputForm.js');
|
|
44
|
+
require('@radix-ui/react-label');
|
|
47
45
|
require('date-fns');
|
|
48
46
|
require('react-day-picker');
|
|
49
47
|
require('@radix-ui/react-popover');
|
|
50
48
|
require('react-i18next');
|
|
51
49
|
require('../../i18n/index.js');
|
|
52
50
|
require('@docuseal/react');
|
|
51
|
+
require('@radix-ui/react-checkbox');
|
|
52
|
+
require('@radix-ui/react-icons');
|
|
53
53
|
require('../../services/professionalImageQuality.js');
|
|
54
54
|
require('../../providers/I18nProvider.js');
|
|
55
55
|
|
|
@@ -60,10 +60,10 @@ var Start = function (_a) {
|
|
|
60
60
|
var displaySubtitle = welcomeSubtitle ||
|
|
61
61
|
t("start.welcome_subtitle", "Nous devons vérifier votre identité");
|
|
62
62
|
var displayDescription = welcomeDescription || t("start.welcome_description");
|
|
63
|
-
var
|
|
63
|
+
var goOnNextStep = function () {
|
|
64
64
|
setStep(1);
|
|
65
65
|
};
|
|
66
|
-
return (jsxRuntime.jsx(MobilePageLayout.default, { footer: jsxRuntime.jsx(PageActions.default, { primary: jsxRuntime.jsx(Button.default, { onClick:
|
|
66
|
+
return (jsxRuntime.jsx(MobilePageLayout.default, { footer: jsxRuntime.jsx(PageActions.default, { primary: jsxRuntime.jsx(Button.default, { onClick: goOnNextStep, children: t("start_verification") }) }), session: session, children: jsxRuntime.jsx("div", { className: "flex flex-col items-center px-4 py-8 md:px-8", children: jsxRuntime.jsxs("div", { className: "w-full max-w-md mx-auto text-center space-y-6 flex flex-col", children: [jsxRuntime.jsx("div", { className: "flex justify-center", children: welcomeImage ? (jsxRuntime.jsx("img", { src: welcomeImage, alt: "Welcome image", className: "max-w-48 w-auto h-auto rounded-lg" })) : (jsxRuntime.jsx(StartIcon.default, { className: "w-48 h-48" })) }), jsxRuntime.jsxs("div", { className: "space-y-4", children: [jsxRuntime.jsx(Title.default, { className: "text-xl md:text-2xl lg:text-3xl", children: displayTitle }), jsxRuntime.jsx(Subtitle.default, { className: "text-sm md:text-base text-gray-600 leading-relaxed whitespace-pre-line", children: displaySubtitle })] }), jsxRuntime.jsx("div", { className: "md:block mt-8", children: jsxRuntime.jsx("p", { className: "text-xs text-gray-500 leading-relaxed max-w-sm mx-auto whitespace-pre-line", children: displayDescription }) })] }) }) }));
|
|
67
67
|
};
|
|
68
68
|
|
|
69
69
|
exports.default = Start;
|
|
@@ -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
|
|
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;;;;"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var React = require('react');
|
|
7
|
+
var useI18n = require('../../hooks/useI18n.js');
|
|
8
|
+
var sessionService = require('../../services/sessionService.js');
|
|
9
|
+
var LoadingState = require('../states/LoadingState.js');
|
|
10
|
+
var Button = require('../ui/Button.js');
|
|
11
|
+
|
|
12
|
+
function ComplementaryMandateNodeHandler(_a) {
|
|
13
|
+
var sessionId = _a.sessionId, nodeId = _a.nodeId, onOutcome = _a.onOutcome;
|
|
14
|
+
var t = useI18n.useI18n().t;
|
|
15
|
+
var _b = React.useState(false), error = _b[0], setError = _b[1];
|
|
16
|
+
var _c = React.useState(0), attempt = _c[0], setAttempt = _c[1];
|
|
17
|
+
var callback = React.useRef(onOutcome);
|
|
18
|
+
callback.current = onOutcome;
|
|
19
|
+
React.useEffect(function () {
|
|
20
|
+
var active = true;
|
|
21
|
+
setError(false);
|
|
22
|
+
sessionService.checkComplementaryMandate(sessionId, nodeId).then(function (_a) {
|
|
23
|
+
var outcome = _a.outcome;
|
|
24
|
+
if (active)
|
|
25
|
+
callback.current(outcome);
|
|
26
|
+
}).catch(function () { if (active)
|
|
27
|
+
setError(true); });
|
|
28
|
+
return function () { active = false; };
|
|
29
|
+
}, [sessionId, nodeId, attempt]);
|
|
30
|
+
if (!error)
|
|
31
|
+
return jsxRuntime.jsx(LoadingState.default, { message: t('complementary_mandate.loading') });
|
|
32
|
+
return jsxRuntime.jsxs("div", { className: "flex flex-col items-center gap-4 p-6", children: [jsxRuntime.jsx("p", { role: "alert", children: t('complementary_mandate.error') }), jsxRuntime.jsx(Button.default, { onClick: function () { return setAttempt(function (value) { return value + 1; }); }, children: t('complementary_mandate.retry') })] });
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
exports.default = ComplementaryMandateNodeHandler;
|
|
36
|
+
//# sourceMappingURL=ComplementaryMandateNodeHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ComplementaryMandateNodeHandler.js","sources":["../../../../../src/components/template/ComplementaryMandateNodeHandler.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { useI18n } from '../../hooks/useI18n';\nimport { checkComplementaryMandate } from '../../services/sessionService';\nimport type { ComplementaryMandateOutcome } from '../../types/session';\nimport LoadingState from '../states/LoadingState';\nimport Button from '../ui/Button';\n\nexport default function ComplementaryMandateNodeHandler({ sessionId, nodeId, onOutcome }: { sessionId: string; nodeId: string; onOutcome: (outcome: ComplementaryMandateOutcome) => void }) {\n const { t } = useI18n();\n const [error, setError] = useState(false);\n const [attempt, setAttempt] = useState(0);\n const callback = useRef(onOutcome);\n callback.current = onOutcome;\n useEffect(() => {\n let active = true;\n setError(false);\n checkComplementaryMandate(sessionId, nodeId).then(({ outcome }) => {\n if (active) callback.current(outcome);\n }).catch(() => { if (active) setError(true); });\n return () => { active = false; };\n }, [sessionId, nodeId, attempt]);\n if (!error) return <LoadingState message={t('complementary_mandate.loading')} />;\n return <div className=\"flex flex-col items-center gap-4 p-6\">\n <p role=\"alert\">{t('complementary_mandate.error')}</p>\n <Button onClick={() => setAttempt(value => value + 1)}>{t('complementary_mandate.retry')}</Button>\n </div>;\n}\n"],"names":["useI18n","useState","useRef","useEffect","checkComplementaryMandate","_jsx","LoadingState","_jsxs","Button"],"mappings":";;;;;;;;;;;AAOc,SAAU,+BAA+B,CAAC,EAAkI,EAAA;AAAhI,IAAA,IAAA,SAAS,eAAA,EAAE,MAAM,GAAA,EAAA,CAAA,MAAA,EAAE,SAAS,GAAA,EAAA,CAAA,SAAA;AAC5E,IAAA,IAAA,CAAC,GAAKA,eAAO,EAAE,EAAd;IACH,IAAA,EAAA,GAAoBC,cAAQ,CAAC,KAAK,CAAC,EAAlC,KAAK,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,QAAQ,GAAA,EAAA,CAAA,CAAA,CAAmB;IACnC,IAAA,EAAA,GAAwBA,cAAQ,CAAC,CAAC,CAAC,EAAlC,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,UAAU,GAAA,EAAA,CAAA,CAAA,CAAe;AACzC,IAAA,IAAM,QAAQ,GAAGC,YAAM,CAAC,SAAS,CAAC;AAClC,IAAA,QAAQ,CAAC,OAAO,GAAG,SAAS;AAC5B,IAAAC,eAAS,CAAC,YAAA;QACR,IAAI,MAAM,GAAG,IAAI;QACjB,QAAQ,CAAC,KAAK,CAAC;QACfC,wCAAyB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,UAAC,EAAW,EAAA;AAAT,YAAA,IAAA,OAAO,GAAA,EAAA,CAAA,OAAA;AAC1D,YAAA,IAAI,MAAM;AAAE,gBAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;AACvC,QAAA,CAAC,CAAC,CAAC,KAAK,CAAC,YAAA,EAAQ,IAAI,MAAM;AAAE,YAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,QAAA,OAAO,cAAQ,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC;IAClC,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAChC,IAAA,IAAI,CAAC,KAAK;QAAE,OAAOC,cAAA,CAACC,oBAAY,EAAA,EAAC,OAAO,EAAE,CAAC,CAAC,+BAA+B,CAAC,EAAA,CAAI;IAChF,OAAOC,eAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,sCAAsC,aAC1DF,cAAA,CAAA,GAAA,EAAA,EAAG,IAAI,EAAC,OAAO,EAAA,QAAA,EAAE,CAAC,CAAC,6BAA6B,CAAC,EAAA,CAAK,EACtDA,eAACG,cAAM,EAAA,EAAC,OAAO,EAAE,YAAA,EAAM,OAAA,UAAU,CAAC,UAAA,KAAK,EAAA,EAAI,OAAA,KAAK,GAAG,CAAC,CAAA,CAAT,CAAS,CAAC,CAAA,CAA9B,CAA8B,YAAG,CAAC,CAAC,6BAA6B,CAAC,EAAA,CAAU,IAC9F;AACR;;;;"}
|
|
@@ -13,6 +13,7 @@ var LoadingState = require('../states/LoadingState.js');
|
|
|
13
13
|
var Title = require('../ui/Title.js');
|
|
14
14
|
var Subtitle = require('../ui/Subtitle.js');
|
|
15
15
|
var Button = require('../ui/Button.js');
|
|
16
|
+
var labelToKey = require('../../utils/labelToKey.js');
|
|
16
17
|
|
|
17
18
|
// ─── Helpers ──────────────────────────────────────────────────────────────────
|
|
18
19
|
var FIELD_ALIASES = {
|
|
@@ -105,6 +106,36 @@ var findValueByKeyName = function (sources, referenceField) {
|
|
|
105
106
|
return undefined;
|
|
106
107
|
};
|
|
107
108
|
var expandFieldKey = function (key) { var _a; return tslib_es6.__spreadArray([key], ((_a = STANDARD_FIELD_ALIASES[key]) !== null && _a !== void 0 ? _a : []), true); };
|
|
109
|
+
/**
|
|
110
|
+
* Clés (clé aplatie dérivée du label + id du champ custom) des champs du nœud
|
|
111
|
+
* `nodeId` — et lui seul — qui correspondent au type recherché (siren/siret).
|
|
112
|
+
*
|
|
113
|
+
* Sans ce filtrage par nœud, la résolution retombe sur une recherche globale
|
|
114
|
+
* par nom de clé canonique (`findValueByKeyName` / repli 9-14 chiffres) qui
|
|
115
|
+
* ne sait pas distinguer deux nœuds ayant chacun un champ SIREN : un nœud
|
|
116
|
+
* "Identification de la société mère" (champ "SIREN" → clé `siren`) a ainsi
|
|
117
|
+
* capté la résolution d'un nœud "Votre entreprise" (champ "N° de SIREN" →
|
|
118
|
+
* clé `n_de_siren`) configuré comme référence, car `siren` matchait en
|
|
119
|
+
* premier la clé canonique — l'appel INPI est parti sur le mauvais SIREN.
|
|
120
|
+
*/
|
|
121
|
+
var getNodeScopedFieldKeys = function (templateNodes, nodeId, referenceField) {
|
|
122
|
+
var _a;
|
|
123
|
+
var node = templateNodes === null || templateNodes === void 0 ? void 0 : templateNodes.find(function (n) { return n.id === nodeId; });
|
|
124
|
+
var keys = [];
|
|
125
|
+
var _loop_2 = function (field) {
|
|
126
|
+
var normalized = normalizeKeyName(labelToKey.labelToKey(field.label));
|
|
127
|
+
if (!normalized.includes(referenceField))
|
|
128
|
+
return "continue";
|
|
129
|
+
if (THIRD_PARTY_KEY_MARKERS.some(function (marker) { return normalized.includes(marker); }))
|
|
130
|
+
return "continue";
|
|
131
|
+
keys.push(labelToKey.labelToKey(field.label), field.id);
|
|
132
|
+
};
|
|
133
|
+
for (var _i = 0, _b = (_a = node === null || node === void 0 ? void 0 : node.customFields) !== null && _a !== void 0 ? _a : []; _i < _b.length; _i++) {
|
|
134
|
+
var field = _b[_i];
|
|
135
|
+
_loop_2(field);
|
|
136
|
+
}
|
|
137
|
+
return keys;
|
|
138
|
+
};
|
|
108
139
|
// ─── Component ────────────────────────────────────────────────────────────────
|
|
109
140
|
var ExternalVerificationNodeHandler = function (_a) {
|
|
110
141
|
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
@@ -162,10 +193,10 @@ var ExternalVerificationNodeHandler = function (_a) {
|
|
|
162
193
|
React.useEffect(function () {
|
|
163
194
|
var abortController = new AbortController();
|
|
164
195
|
var run = function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () {
|
|
165
|
-
var result, referenceField, referenceValueMasked, resolvedReferenceValue, referenceNodeId, referenceVariable, submittedFirstName, submittedLastName, submittedSiren, nodeInput, userInputFlat, lookupKeys, referenceValue, allCustomFields, _i, _a, _b, value, str, comparisonConfig, cfg, personNodeInput, flat, isPersonneMorale, sirenKeys, firstNameKeys, lastNameKeys, birthDateKeys, dateOfBirth, response, res, apiErr_1, apiResult, inpi, cfg, isPersonneMorale_1;
|
|
166
|
-
var _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
|
|
167
|
-
return tslib_es6.__generator(this, function (
|
|
168
|
-
switch (
|
|
196
|
+
var result, referenceField, referenceValueMasked, resolvedReferenceValue, referenceNodeId, referenceVariable, submittedFirstName, submittedLastName, submittedSiren, nodeInput, userInputFlat, nodeScopedKeys, lookupKeys, referenceValue, allCustomFields, _i, _a, _b, value, str, comparisonConfig, cfg, personNodeInput, flat, isPersonneMorale, sirenKeys, firstNameKeys, lastNameKeys, birthDateKeys, dateOfBirth, response, res, apiErr_1, apiResult, inpi, cfg, isPersonneMorale_1;
|
|
197
|
+
var _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v;
|
|
198
|
+
return tslib_es6.__generator(this, function (_w) {
|
|
199
|
+
switch (_w.label) {
|
|
169
200
|
case 0:
|
|
170
201
|
result = {
|
|
171
202
|
isVerified: false,
|
|
@@ -179,9 +210,9 @@ var ExternalVerificationNodeHandler = function (_a) {
|
|
|
179
210
|
submittedFirstName = '';
|
|
180
211
|
submittedLastName = '';
|
|
181
212
|
submittedSiren = '';
|
|
182
|
-
|
|
213
|
+
_w.label = 1;
|
|
183
214
|
case 1:
|
|
184
|
-
|
|
215
|
+
_w.trys.push([1, 9, , 10]);
|
|
185
216
|
if (!(session === null || session === void 0 ? void 0 : session.id))
|
|
186
217
|
throw new Error('Session ID is missing');
|
|
187
218
|
referenceField = normalizeReferenceField(String(nodeData.referenceField || referenceVariable || ''));
|
|
@@ -196,7 +227,8 @@ var ExternalVerificationNodeHandler = function (_a) {
|
|
|
196
227
|
case 2:
|
|
197
228
|
nodeInput = userInput[referenceNodeId];
|
|
198
229
|
userInputFlat = userInput;
|
|
199
|
-
|
|
230
|
+
nodeScopedKeys = getNodeScopedFieldKeys((_c = session === null || session === void 0 ? void 0 : session.template) === null || _c === void 0 ? void 0 : _c.nodes, referenceNodeId, referenceField);
|
|
231
|
+
lookupKeys = Array.from(new Set(tslib_es6.__spreadArray(tslib_es6.__spreadArray(tslib_es6.__spreadArray([], nodeScopedKeys, true), [referenceVariable, referenceField], false), FIELD_ALIASES[referenceField], true).filter(Boolean)));
|
|
200
232
|
referenceValue = resolveFieldValue(nodeInput, userInputFlat, lookupKeys);
|
|
201
233
|
// 2e passe : la clé porte le nom du champ sans être canonique
|
|
202
234
|
// (cas de tout formulaire personnalisé).
|
|
@@ -239,14 +271,14 @@ var ExternalVerificationNodeHandler = function (_a) {
|
|
|
239
271
|
resolvedReferenceValue = referenceValue;
|
|
240
272
|
referenceValueMasked = maskReferenceValue(referenceValue);
|
|
241
273
|
comparisonConfig = void 0;
|
|
242
|
-
if (isInpiRbe && ((
|
|
274
|
+
if (isInpiRbe && ((_d = nodeData.comparisonConfig) === null || _d === void 0 ? void 0 : _d.personReferenceNodeId)) {
|
|
243
275
|
cfg = nodeData.comparisonConfig;
|
|
244
|
-
personNodeInput = (
|
|
276
|
+
personNodeInput = (_e = userInput[cfg.personReferenceNodeId]) !== null && _e !== void 0 ? _e : {};
|
|
245
277
|
flat = userInput;
|
|
246
278
|
isPersonneMorale = cfg.personType === 'MORALE';
|
|
247
279
|
if (isPersonneMorale) {
|
|
248
|
-
sirenKeys = expandFieldKey((
|
|
249
|
-
submittedSiren = (
|
|
280
|
+
sirenKeys = expandFieldKey((_f = cfg.personSirenField) !== null && _f !== void 0 ? _f : '').filter(Boolean);
|
|
281
|
+
submittedSiren = (_g = resolveFieldValue(personNodeInput, flat, sirenKeys)) !== null && _g !== void 0 ? _g : '';
|
|
250
282
|
if (submittedSiren) {
|
|
251
283
|
comparisonConfig = {
|
|
252
284
|
personType: 'MORALE',
|
|
@@ -259,46 +291,46 @@ var ExternalVerificationNodeHandler = function (_a) {
|
|
|
259
291
|
}
|
|
260
292
|
}
|
|
261
293
|
else {
|
|
262
|
-
firstNameKeys = expandFieldKey((
|
|
263
|
-
lastNameKeys = expandFieldKey((
|
|
294
|
+
firstNameKeys = expandFieldKey((_h = cfg.personFirstNameField) !== null && _h !== void 0 ? _h : '').filter(Boolean);
|
|
295
|
+
lastNameKeys = expandFieldKey((_j = cfg.personLastNameField) !== null && _j !== void 0 ? _j : '').filter(Boolean);
|
|
264
296
|
birthDateKeys = cfg.personBirthDateField
|
|
265
297
|
? expandFieldKey(cfg.personBirthDateField).filter(Boolean)
|
|
266
298
|
: [];
|
|
267
|
-
submittedFirstName = (
|
|
268
|
-
submittedLastName = (
|
|
299
|
+
submittedFirstName = (_k = resolveFieldValue(personNodeInput, flat, firstNameKeys)) !== null && _k !== void 0 ? _k : '';
|
|
300
|
+
submittedLastName = (_l = resolveFieldValue(personNodeInput, flat, lastNameKeys)) !== null && _l !== void 0 ? _l : '';
|
|
269
301
|
dateOfBirth = cfg.compareBirthDate && birthDateKeys.length
|
|
270
302
|
? resolveFieldValue(personNodeInput, flat, birthDateKeys)
|
|
271
303
|
: undefined;
|
|
272
304
|
if (submittedFirstName && submittedLastName) {
|
|
273
|
-
comparisonConfig = tslib_es6.__assign({ firstName: submittedFirstName, lastName: submittedLastName, compareTargets: (
|
|
305
|
+
comparisonConfig = tslib_es6.__assign({ firstName: submittedFirstName, lastName: submittedLastName, compareTargets: (_m = cfg.compareTargets) !== null && _m !== void 0 ? _m : ['mandataires'] }, (dateOfBirth ? { dateOfBirth: dateOfBirth } : {}));
|
|
274
306
|
}
|
|
275
307
|
}
|
|
276
308
|
}
|
|
277
309
|
if (isInpiRbe)
|
|
278
310
|
advanceStep(1);
|
|
279
|
-
|
|
311
|
+
_w.label = 4;
|
|
280
312
|
case 4:
|
|
281
|
-
|
|
282
|
-
return [4 /*yield*/, api.apiService.post("/session/sdk/".concat(session.id, "/verify-external/").concat(node.id), tslib_es6.__assign({ apiType: apiType, referenceValue: referenceValue, referenceField: referenceField, enableRnaFallback: isInpiRbe && nodeData.rnaFallbackEnabled === true }, (comparisonConfig ? { comparisonConfig: comparisonConfig } : {})), { signal: abortController.signal })];
|
|
313
|
+
_w.trys.push([4, 7, , 8]);
|
|
314
|
+
return [4 /*yield*/, api.apiService.post("/session/sdk/".concat(session.id, "/verify-external/").concat(node.id), tslib_es6.__assign({ apiType: apiType, referenceValue: referenceValue, referenceField: referenceField, enableRnaFallback: isInpiRbe && nodeData.rnaFallbackEnabled === true, enableInseeFallback: isInpiRbe && nodeData.enableInseeFallback === true }, (comparisonConfig ? { comparisonConfig: comparisonConfig } : {})), { signal: abortController.signal })];
|
|
283
315
|
case 5:
|
|
284
|
-
response =
|
|
316
|
+
response = _w.sent();
|
|
285
317
|
if (isInpiRbe)
|
|
286
318
|
advanceStep(2);
|
|
287
319
|
return [4 /*yield*/, new Promise(function (r) { return setTimeout(r, 600); })];
|
|
288
320
|
case 6:
|
|
289
|
-
|
|
290
|
-
res = (
|
|
321
|
+
_w.sent();
|
|
322
|
+
res = (_o = response.data) === null || _o === void 0 ? void 0 : _o.data;
|
|
291
323
|
if (res && typeof res.isVerified === 'boolean') {
|
|
292
324
|
result = res;
|
|
293
325
|
}
|
|
294
326
|
return [3 /*break*/, 8];
|
|
295
327
|
case 7:
|
|
296
|
-
apiErr_1 =
|
|
328
|
+
apiErr_1 = _w.sent();
|
|
297
329
|
if (abortController.signal.aborted)
|
|
298
330
|
return [2 /*return*/];
|
|
299
331
|
if (isInpiRbe)
|
|
300
332
|
advanceStep(2);
|
|
301
|
-
apiResult = (
|
|
333
|
+
apiResult = (_q = (_p = apiErr_1 === null || apiErr_1 === void 0 ? void 0 : apiErr_1.response) === null || _p === void 0 ? void 0 : _p.data) === null || _q === void 0 ? void 0 : _q.data;
|
|
302
334
|
if (apiResult && typeof apiResult.isVerified === 'boolean') {
|
|
303
335
|
result = apiResult;
|
|
304
336
|
}
|
|
@@ -313,7 +345,7 @@ var ExternalVerificationNodeHandler = function (_a) {
|
|
|
313
345
|
return [3 /*break*/, 8];
|
|
314
346
|
case 8: return [3 /*break*/, 10];
|
|
315
347
|
case 9:
|
|
316
|
-
|
|
348
|
+
_w.sent();
|
|
317
349
|
result = {
|
|
318
350
|
isVerified: false,
|
|
319
351
|
status: 'external_error',
|
|
@@ -351,13 +383,13 @@ var ExternalVerificationNodeHandler = function (_a) {
|
|
|
351
383
|
// En mode personne morale, seuls les mandataires personne morale ont
|
|
352
384
|
// un sens (un RBE est toujours une personne physique) ; en mode
|
|
353
385
|
// physique, comportement inchangé (mandataires individus uniquement).
|
|
354
|
-
mandataires: ((
|
|
386
|
+
mandataires: ((_r = inpi === null || inpi === void 0 ? void 0 : inpi.mandataires) !== null && _r !== void 0 ? _r : []).filter(function (m) {
|
|
355
387
|
return isPersonneMorale_1 ? m.type === 'personne_morale' : m.type === 'individu';
|
|
356
388
|
}),
|
|
357
|
-
beneficiairesEffectifs: (
|
|
358
|
-
compareTargets: isPersonneMorale_1 ? ['mandataires'] : ((
|
|
359
|
-
personNodeId: (
|
|
360
|
-
targetDenomination: (
|
|
389
|
+
beneficiairesEffectifs: (_s = inpi === null || inpi === void 0 ? void 0 : inpi.beneficiairesEffectifs) !== null && _s !== void 0 ? _s : [],
|
|
390
|
+
compareTargets: isPersonneMorale_1 ? ['mandataires'] : ((_t = cfg === null || cfg === void 0 ? void 0 : cfg.compareTargets) !== null && _t !== void 0 ? _t : ['mandataires']),
|
|
391
|
+
personNodeId: (_u = cfg === null || cfg === void 0 ? void 0 : cfg.personReferenceNodeId) !== null && _u !== void 0 ? _u : '',
|
|
392
|
+
targetDenomination: (_v = inpi === null || inpi === void 0 ? void 0 : inpi.identite) === null || _v === void 0 ? void 0 : _v.denomination,
|
|
361
393
|
siren: resolvedReferenceValue,
|
|
362
394
|
sirenNodeId: referenceNodeId,
|
|
363
395
|
source: inpi === null || inpi === void 0 ? void 0 : inpi.source,
|
|
@@ -383,13 +415,16 @@ var ExternalVerificationNodeHandler = function (_a) {
|
|
|
383
415
|
setPhase('success');
|
|
384
416
|
setTimeout(onNext, 1200);
|
|
385
417
|
}
|
|
386
|
-
else if (result.status === 'config_error') {
|
|
387
|
-
setPhase('success');
|
|
388
|
-
setTimeout(onNext, 800);
|
|
389
|
-
}
|
|
390
418
|
else {
|
|
419
|
+
// config_error / external_error / any other non-blocking technical
|
|
420
|
+
// failure (missing API key, registry down…) — never a fault of the
|
|
421
|
+
// end user. The backend already maps these to a 'done' analysisrun,
|
|
422
|
+
// never 'ai_rejected' (reviewed manually in backoffice), so the SDK
|
|
423
|
+
// stays non-blocking here too — but must never claim success
|
|
424
|
+
// (config_error used to show the success screen) and must never
|
|
425
|
+
// leave a blank screen (this phase previously had no render block).
|
|
391
426
|
setPhase('error');
|
|
392
|
-
setTimeout(onNext,
|
|
427
|
+
setTimeout(onNext, 1200);
|
|
393
428
|
}
|
|
394
429
|
return [2 /*return*/];
|
|
395
430
|
}
|
|
@@ -413,12 +448,19 @@ var ExternalVerificationNodeHandler = function (_a) {
|
|
|
413
448
|
};
|
|
414
449
|
// ─── Loading phase ─────────────────────────────────────────────────────────
|
|
415
450
|
if (phase === 'loading') {
|
|
416
|
-
return (jsxRuntime.jsx("div", { className: "flex flex-col justify-between h-full w-full", children: jsxRuntime.jsx("div", { className: "flex-1 px-4 py-6 pt-11 md:px-8 md:py-8", children: jsxRuntime.jsxs("div", { className: "w-full max-w-md mx-auto space-y-6", children: [jsxRuntime.jsxs("div", { className: "text-center space-y-4", children: [jsxRuntime.jsx(Title.default, { className: "text-xl md:text-2xl lg:text-3xl", children: t('verification_node.verifying_title', 'Vérification en cours…') }), jsxRuntime.jsx(Subtitle.default, { className: "text-sm text-gray-600 leading-relaxed", children: t('verification_node.verifying_desc', 'Nous vérifions vos informations. Cela peut prendre quelques instants.') })] }), jsxRuntime.jsx("div", { className: "w-full flex justify-center", children: jsxRuntime.jsx("div", { className: "space-y-5", children: steps.map(function (step, index) { return (jsxRuntime.jsxs("div", { className: "flex items-start", children: [jsxRuntime.jsx("div", { className: "mr-4 mt-1
|
|
451
|
+
return (jsxRuntime.jsx("div", { className: "flex flex-col justify-between h-full w-full", children: jsxRuntime.jsx("div", { className: "flex-1 px-4 py-6 pt-11 md:px-8 md:py-8", children: jsxRuntime.jsxs("div", { className: "w-full max-w-md mx-auto space-y-6", children: [jsxRuntime.jsxs("div", { className: "text-center space-y-4", children: [jsxRuntime.jsx(Title.default, { className: "text-xl md:text-2xl lg:text-3xl", children: t('verification_node.verifying_title', 'Vérification en cours…') }), jsxRuntime.jsx(Subtitle.default, { className: "text-sm text-gray-600 leading-relaxed", children: t('verification_node.verifying_desc', 'Nous vérifions vos informations. Cela peut prendre quelques instants.') })] }), jsxRuntime.jsx("div", { className: "w-full flex justify-center", children: jsxRuntime.jsx("div", { className: "space-y-5", children: steps.map(function (step, index) { return (jsxRuntime.jsxs("div", { className: "flex items-start", children: [jsxRuntime.jsx("div", { className: "mr-4 mt-1 shrink-0", children: step.status === 'done' ? (jsxRuntime.jsx("div", { className: "flex items-center justify-center w-6 h-6 rounded-full bg-[#11E5C5] text-white text-xs", children: "\u2713" })) : step.status === 'active' ? (jsxRuntime.jsx("div", { className: "w-6 h-6 rounded-full border-2 border-t-[#11E5C5] border-r-[#11E5C5] border-b-[#11E5C5] border-l-transparent animate-spin" })) : (jsxRuntime.jsx("div", { className: "w-6 h-6 rounded-full border-2 border-gray-300" })) }), jsxRuntime.jsxs("div", { className: "flex-1 min-w-0", children: [jsxRuntime.jsx("p", { className: "font-medium text-[#3C3C40] text-sm", children: step.title }), jsxRuntime.jsx("p", { className: "text-xs text-gray-500 mt-1", children: step.subtitle })] })] }, index)); }) }) })] }) }) }));
|
|
417
452
|
}
|
|
418
453
|
// ─── Success phase ─────────────────────────────────────────────────────────
|
|
419
454
|
if (phase === 'success') {
|
|
420
455
|
return (jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center h-full px-6 py-8 text-center space-y-4", children: [jsxRuntime.jsx("img", { src: check.default, alt: "success", className: "w-24 h-24" }), jsxRuntime.jsx("h3", { className: "text-[#3C3C40] font-poppins text-xl font-bold", children: t('inpi_verification.success_title', 'Vérification réussie') }), jsxRuntime.jsx("p", { className: "text-gray-500 text-sm", children: t('inpi_verification.success_desc', "Passage à l'étape suivante…") })] }));
|
|
421
456
|
}
|
|
457
|
+
// ─── Technical error phase (config_error / external_error) ────────────────
|
|
458
|
+
//
|
|
459
|
+
// Non-blocking (the flow already auto-advances via the useEffect above) but
|
|
460
|
+
// must never look like a success — neutral wording, no checkmark.
|
|
461
|
+
if (phase === 'error') {
|
|
462
|
+
return (jsxRuntime.jsxs("div", { className: "flex flex-col items-center justify-center h-full px-6 py-8 text-center space-y-4", children: [jsxRuntime.jsx("div", { className: "w-16 h-16 bg-gray-100 rounded-full flex items-center justify-center", children: jsxRuntime.jsx("span", { className: "text-gray-500 text-2xl font-bold", children: "!" }) }), jsxRuntime.jsx("h3", { className: "text-[#3C3C40] font-poppins text-xl font-bold", children: t('inpi_verification.technical_error_title', 'Vérification en cours de traitement') }), jsxRuntime.jsx("p", { className: "text-gray-500 text-sm", children: t('inpi_verification.technical_error_desc', 'Un problème technique est survenu. Votre dossier sera examiné manuellement.') })] }));
|
|
463
|
+
}
|
|
422
464
|
// ─── Mismatch phase ────────────────────────────────────────────────────────
|
|
423
465
|
if (phase === 'mismatch') {
|
|
424
466
|
var d = errorScreenData;
|