datakeen-session-react 1.1.194 → 1.1.195-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +17 -7
- 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 +17 -7
- 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
|
@@ -15,7 +15,9 @@ var DATE_FORMAT_SPECS = {
|
|
|
15
15
|
"yyyy-mm-dd": { re: ISO_DATE_RE, order: ["year", "month", "day"] },
|
|
16
16
|
};
|
|
17
17
|
var isValidDateParts = function (year, month, day) {
|
|
18
|
-
if (!Number.isInteger(year) ||
|
|
18
|
+
if (!Number.isInteger(year) ||
|
|
19
|
+
!Number.isInteger(month) ||
|
|
20
|
+
!Number.isInteger(day)) {
|
|
19
21
|
return false;
|
|
20
22
|
}
|
|
21
23
|
if (year < 1 || month < 1 || month > 12 || day < 1 || day > 31)
|
|
@@ -55,6 +57,46 @@ var isRegexMatch = function (value, source) {
|
|
|
55
57
|
return true;
|
|
56
58
|
}
|
|
57
59
|
};
|
|
60
|
+
/**
|
|
61
|
+
* Resolves the regex for a list cell from another enum cell in the same row.
|
|
62
|
+
* Malformed or incomplete conditional rules deliberately fall back to the
|
|
63
|
+
* column regex so legacy configurations remain usable.
|
|
64
|
+
*/
|
|
65
|
+
var resolveColumnRegex = function (col, row) {
|
|
66
|
+
var fallback = {
|
|
67
|
+
regex: typeof col.regex === "string" ? col.regex : "",
|
|
68
|
+
errorMessage: typeof col.regexErrorMessage === "string"
|
|
69
|
+
? col.regexErrorMessage
|
|
70
|
+
: undefined,
|
|
71
|
+
};
|
|
72
|
+
var rules = col.regexRules;
|
|
73
|
+
if (!rules ||
|
|
74
|
+
typeof rules.sourceColumn !== "string" ||
|
|
75
|
+
!rules.sourceColumn ||
|
|
76
|
+
!Array.isArray(rules.cases) ||
|
|
77
|
+
!row) {
|
|
78
|
+
return fallback;
|
|
79
|
+
}
|
|
80
|
+
var sourceValue = row[rules.sourceColumn];
|
|
81
|
+
if (typeof sourceValue !== "string" || !sourceValue)
|
|
82
|
+
return fallback;
|
|
83
|
+
var matchingCase = rules.cases.find(function (candidate) {
|
|
84
|
+
return candidate &&
|
|
85
|
+
typeof candidate.value === "string" &&
|
|
86
|
+
candidate.value === sourceValue;
|
|
87
|
+
});
|
|
88
|
+
if (!matchingCase || typeof matchingCase.regex !== "string")
|
|
89
|
+
return fallback;
|
|
90
|
+
var regex = matchingCase.regex.trim();
|
|
91
|
+
if (!regex)
|
|
92
|
+
return fallback;
|
|
93
|
+
return {
|
|
94
|
+
regex: regex,
|
|
95
|
+
errorMessage: typeof matchingCase.errorMessage === "string"
|
|
96
|
+
? matchingCase.errorMessage
|
|
97
|
+
: fallback.errorMessage,
|
|
98
|
+
};
|
|
99
|
+
};
|
|
58
100
|
var cellErrorKey = function (rowIndex, columnLabel) {
|
|
59
101
|
return "".concat(rowIndex, "::").concat(columnLabel);
|
|
60
102
|
};
|
|
@@ -64,4 +106,5 @@ exports.cellErrorKey = cellErrorKey;
|
|
|
64
106
|
exports.isDateValid = isDateValid;
|
|
65
107
|
exports.isEmailValid = isEmailValid;
|
|
66
108
|
exports.isRegexMatch = isRegexMatch;
|
|
109
|
+
exports.resolveColumnRegex = resolveColumnRegex;
|
|
67
110
|
//# sourceMappingURL=customFieldValidation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customFieldValidation.js","sources":["../../../../src/utils/customFieldValidation.ts"],"sourcesContent":["import type { DateDisplayFormat } from \"../types/session\";\nimport { DEFAULT_DATE_DISPLAY_FORMAT } from \"../types/session\";\n\nexport const EMAIL_REGEX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\nconst warnedInvalidRegexSources = new Set<string>();\n\nexport const isEmailValid = (value: string): boolean =>\n EMAIL_REGEX.test(String(value).trim());\n\nconst SLASH_DATE_RE = /^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/;\nconst ISO_DATE_RE = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\n\ntype DatePart = \"day\" | \"month\" | \"year\";\n\nconst DATE_FORMAT_SPECS: Record<\n DateDisplayFormat,\n { re: RegExp; order: [DatePart, DatePart, DatePart] }\n> = {\n \"dd/mm/yyyy\": { re: SLASH_DATE_RE, order: [\"day\", \"month\", \"year\"] },\n \"mm/dd/yyyy\": { re: SLASH_DATE_RE, order: [\"month\", \"day\", \"year\"] },\n \"yyyy-mm-dd\": { re: ISO_DATE_RE, order: [\"year\", \"month\", \"day\"] },\n};\n\nconst isValidDateParts = (year: number
|
|
1
|
+
{"version":3,"file":"customFieldValidation.js","sources":["../../../../src/utils/customFieldValidation.ts"],"sourcesContent":["import type { DateDisplayFormat, ListColumn } from \"../types/session\";\nimport { DEFAULT_DATE_DISPLAY_FORMAT } from \"../types/session\";\n\nexport const EMAIL_REGEX = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\nconst warnedInvalidRegexSources = new Set<string>();\n\nexport const isEmailValid = (value: string): boolean =>\n EMAIL_REGEX.test(String(value).trim());\n\nconst SLASH_DATE_RE = /^(\\d{2})\\/(\\d{2})\\/(\\d{4})$/;\nconst ISO_DATE_RE = /^(\\d{4})-(\\d{2})-(\\d{2})$/;\n\ntype DatePart = \"day\" | \"month\" | \"year\";\n\nconst DATE_FORMAT_SPECS: Record<\n DateDisplayFormat,\n { re: RegExp; order: [DatePart, DatePart, DatePart] }\n> = {\n \"dd/mm/yyyy\": { re: SLASH_DATE_RE, order: [\"day\", \"month\", \"year\"] },\n \"mm/dd/yyyy\": { re: SLASH_DATE_RE, order: [\"month\", \"day\", \"year\"] },\n \"yyyy-mm-dd\": { re: ISO_DATE_RE, order: [\"year\", \"month\", \"day\"] },\n};\n\nconst isValidDateParts = (\n year: number,\n month: number,\n day: number,\n): boolean => {\n if (\n !Number.isInteger(year) ||\n !Number.isInteger(month) ||\n !Number.isInteger(day)\n ) {\n return false;\n }\n if (year < 1 || month < 1 || month > 12 || day < 1 || day > 31) return false;\n const d = new Date(Date.UTC(year, month - 1, day));\n return (\n d.getUTCFullYear() === year &&\n d.getUTCMonth() === month - 1 &&\n d.getUTCDate() === day\n );\n};\n\nexport const isDateValid = (\n value: string,\n format: DateDisplayFormat = DEFAULT_DATE_DISPLAY_FORMAT,\n): boolean => {\n const v = String(value || \"\").trim();\n if (!v) return false;\n const spec =\n DATE_FORMAT_SPECS[format] ?? DATE_FORMAT_SPECS[DEFAULT_DATE_DISPLAY_FORMAT];\n const m = v.match(spec.re);\n if (!m) return false;\n const parts: Record<DatePart, number> = { day: 0, month: 0, year: 0 };\n spec.order.forEach((part, i) => {\n parts[part] = Number(m[i + 1]);\n });\n return isValidDateParts(parts.year, parts.month, parts.day);\n};\n\nexport const isRegexMatch = (value: string, source: string): boolean => {\n if (!source) return true;\n try {\n return new RegExp(source).test(String(value));\n } catch (error) {\n if (!warnedInvalidRegexSources.has(source)) {\n warnedInvalidRegexSources.add(source);\n console.warn(\n \"[customFieldValidation] Invalid regex; validation was skipped.\",\n source,\n error,\n );\n }\n return true;\n }\n};\n\n/**\n * Resolves the regex for a list cell from another enum cell in the same row.\n * Malformed or incomplete conditional rules deliberately fall back to the\n * column regex so legacy configurations remain usable.\n */\nexport const resolveColumnRegex = (\n col: ListColumn,\n row: Record<string, string> | undefined,\n): { regex: string; errorMessage?: string } => {\n const fallback = {\n regex: typeof col.regex === \"string\" ? col.regex : \"\",\n errorMessage:\n typeof col.regexErrorMessage === \"string\"\n ? col.regexErrorMessage\n : undefined,\n };\n const rules = col.regexRules;\n\n if (\n !rules ||\n typeof rules.sourceColumn !== \"string\" ||\n !rules.sourceColumn ||\n !Array.isArray(rules.cases) ||\n !row\n ) {\n return fallback;\n }\n\n const sourceValue = row[rules.sourceColumn];\n if (typeof sourceValue !== \"string\" || !sourceValue) return fallback;\n\n const matchingCase = rules.cases.find(\n (candidate) =>\n candidate &&\n typeof candidate.value === \"string\" &&\n candidate.value === sourceValue,\n );\n if (!matchingCase || typeof matchingCase.regex !== \"string\") return fallback;\n\n const regex = matchingCase.regex.trim();\n if (!regex) return fallback;\n\n return {\n regex,\n errorMessage:\n typeof matchingCase.errorMessage === \"string\"\n ? matchingCase.errorMessage\n : fallback.errorMessage,\n };\n};\n\nexport const cellErrorKey = (rowIndex: number, columnLabel: string): string =>\n `${rowIndex}::${columnLabel}`;\n"],"names":["DEFAULT_DATE_DISPLAY_FORMAT"],"mappings":"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"}
|
|
@@ -1,39 +1,14 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { useState } from 'react';
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
3
2
|
import Start from '../start-flow/Start.js';
|
|
4
|
-
import CGU from '../start-flow/CGU.js';
|
|
5
3
|
|
|
4
|
+
// Le consentement est porté par le nœud `legal-consent` du parcours : l'accueil
|
|
5
|
+
// enchaîne directement sur le QR code (si configuré) ou le premier nœud.
|
|
6
6
|
var StartSession = function (_a) {
|
|
7
|
-
var _b, _c
|
|
7
|
+
var _b, _c;
|
|
8
8
|
var stepObject = _a.stepObject, session = _a.session, showQRCodeInstructions = _a.showQRCodeInstructions;
|
|
9
9
|
var setStep = stepObject.setStep;
|
|
10
|
-
var _g = useState(0), startStep = _g[0], setStartStep = _g[1];
|
|
11
|
-
// Find the start node from template
|
|
12
10
|
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"; });
|
|
13
|
-
|
|
14
|
-
// les CGU de la page d'accueil ferait consentir deux fois pour la même chose.
|
|
15
|
-
//
|
|
16
|
-
// Le drapeau `showLegacyCGU` n'existe que pour les parcours antérieurs à ce
|
|
17
|
-
// nœud. Il était posé à `false` par une migration au démarrage, retirée
|
|
18
|
-
// depuis (« remove legacy legal consent migration from bootstrap process ») :
|
|
19
|
-
// un parcours créé ou restauré après ce retrait garde donc le défaut `true`
|
|
20
|
-
// et réaffiche les CGU malgré son nœud de consentement. On déduit le cas du
|
|
21
|
-
// graphe plutôt que du drapeau, ce qui couvre aussi les parcours existants
|
|
22
|
-
// sans toucher aux données.
|
|
23
|
-
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;
|
|
24
|
-
var showLegacyCGU = !hasLegalConsentNode &&
|
|
25
|
-
(startNode === null || startNode === void 0 ? void 0 : startNode.showLegacyCGU) !== false;
|
|
26
|
-
// If CGU is disabled, clicking "Start" skips CGU.
|
|
27
|
-
// Still honour showQRCodeInstructions so the QR code step is not bypassed.
|
|
28
|
-
var handleStartButtonClick = function (localStep) {
|
|
29
|
-
if (!showLegacyCGU) {
|
|
30
|
-
setStep(showQRCodeInstructions ? 0.5 : 1);
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
setStartStep(localStep);
|
|
34
|
-
}
|
|
35
|
-
};
|
|
36
|
-
return (jsxs("div", { className: "w-full h-full", children: [startStep === 0 && (jsx(Start, { 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 && (jsx(CGU, { 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); } }))] }));
|
|
11
|
+
return (jsx("div", { className: "w-full h-full", children: jsx(Start, { 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 }) }));
|
|
37
12
|
};
|
|
38
13
|
|
|
39
14
|
export { StartSession as default };
|
|
@@ -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"],"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,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,eAAe,YAC5BA,GAAA,CAAC,KAAK,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;;;;"}
|
|
@@ -9,6 +9,7 @@ import '../../utils/cssLoader.js';
|
|
|
9
9
|
import '../../context/DocumentContext.js';
|
|
10
10
|
import '../../services/api.js';
|
|
11
11
|
import '../../config/env.js';
|
|
12
|
+
import 'axios';
|
|
12
13
|
import '../../services/auditTrailService.js';
|
|
13
14
|
import 'ua-parser-js';
|
|
14
15
|
import StartIcon from '../icons/StartIcon.js';
|
|
@@ -16,10 +17,6 @@ import PageActions from '../ui/PageActions.js';
|
|
|
16
17
|
import Subtitle from '../ui/Subtitle.js';
|
|
17
18
|
import Title from '../ui/Title.js';
|
|
18
19
|
import MobilePageLayout from '../ui/MobilePageLayout.js';
|
|
19
|
-
import '@radix-ui/react-checkbox';
|
|
20
|
-
import '@radix-ui/react-label';
|
|
21
|
-
import '@radix-ui/react-icons';
|
|
22
|
-
import 'react-circle-flags';
|
|
23
20
|
import 'qrcode';
|
|
24
21
|
import 'lucide-react';
|
|
25
22
|
import '../../assets/check.svg.js';
|
|
@@ -40,12 +37,15 @@ import '../../services/documentEdgeDetectionService.js';
|
|
|
40
37
|
import '../document-video/document-video-flow/DocumentVideoFlow.js';
|
|
41
38
|
import '../document-collection/DocumentProcessing.js';
|
|
42
39
|
import '../../constants/userInputForm.js';
|
|
40
|
+
import '@radix-ui/react-label';
|
|
43
41
|
import 'date-fns';
|
|
44
42
|
import 'react-day-picker';
|
|
45
43
|
import '@radix-ui/react-popover';
|
|
46
44
|
import 'react-i18next';
|
|
47
45
|
import '../../i18n/index.js';
|
|
48
46
|
import '@docuseal/react';
|
|
47
|
+
import '@radix-ui/react-checkbox';
|
|
48
|
+
import '@radix-ui/react-icons';
|
|
49
49
|
import '../../services/professionalImageQuality.js';
|
|
50
50
|
import '../../providers/I18nProvider.js';
|
|
51
51
|
|
|
@@ -56,10 +56,10 @@ var Start = function (_a) {
|
|
|
56
56
|
var displaySubtitle = welcomeSubtitle ||
|
|
57
57
|
t("start.welcome_subtitle", "Nous devons vérifier votre identité");
|
|
58
58
|
var displayDescription = welcomeDescription || t("start.welcome_description");
|
|
59
|
-
var
|
|
59
|
+
var goOnNextStep = function () {
|
|
60
60
|
setStep(1);
|
|
61
61
|
};
|
|
62
|
-
return (jsx(MobilePageLayout, { footer: jsx(PageActions, { primary: jsx(Button, { onClick:
|
|
62
|
+
return (jsx(MobilePageLayout, { footer: jsx(PageActions, { primary: jsx(Button, { onClick: goOnNextStep, children: t("start_verification") }) }), session: session, children: jsx("div", { className: "flex flex-col items-center px-4 py-8 md:px-8", children: jsxs("div", { className: "w-full max-w-md mx-auto text-center space-y-6 flex flex-col", children: [jsx("div", { className: "flex justify-center", children: welcomeImage ? (jsx("img", { src: welcomeImage, alt: "Welcome image", className: "max-w-48 w-auto h-auto rounded-lg" })) : (jsx(StartIcon, { className: "w-48 h-48" })) }), jsxs("div", { className: "space-y-4", children: [jsx(Title, { className: "text-xl md:text-2xl lg:text-3xl", children: displayTitle }), jsx(Subtitle, { className: "text-sm md:text-base text-gray-600 leading-relaxed whitespace-pre-line", children: displaySubtitle })] }), jsx("div", { className: "md:block mt-8", children: jsx("p", { className: "text-xs text-gray-500 leading-relaxed max-w-sm mx-auto whitespace-pre-line", children: displayDescription }) })] }) }) }));
|
|
63
63
|
};
|
|
64
64
|
|
|
65
65
|
export { Start as default };
|
|
@@ -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":["_jsx","_jsxs"],"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,GAAK,OAAO,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,QACEA,GAAA,CAAC,gBAAgB,EAAA,EACf,MAAM,EACJA,GAAA,CAAC,WAAW,EAAA,EACV,OAAO,EACLA,GAAA,CAAC,MAAM,EAAA,EAAC,OAAO,EAAE,YAAY,EAAA,QAAA,EAAG,CAAC,CAAC,oBAAoB,CAAC,EAAA,CAAU,EAAA,CAEnE,EAEJ,OAAO,EAAE,OAAO,EAAA,QAAA,EAEhBA,aAAK,SAAS,EAAC,8CAA8C,EAAA,QAAA,EAC3DC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6DAA6D,EAAA,QAAA,EAAA,CAE1ED,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,qBAAqB,EAAA,QAAA,EACjC,YAAY,IACXA,GAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,YAAY,EACjB,GAAG,EAAC,eAAe,EACnB,SAAS,EAAC,mCAAmC,EAAA,CAC7C,KAEFA,GAAA,CAAC,SAAS,EAAA,EAAC,SAAS,EAAC,WAAW,EAAA,CAAG,CACpC,EAAA,CACG,EAGNC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CACxBD,GAAA,CAAC,KAAK,EAAA,EAAC,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAC/C,YAAY,EAAA,CACP,EACRA,GAAA,CAAC,QAAQ,EAAA,EAAC,SAAS,EAAC,wEAAwE,EAAA,QAAA,EACzF,eAAe,EAAA,CACP,CAAA,EAAA,CACP,EAGNA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,eAAe,EAAA,QAAA,EAC5BA,GAAA,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,32 @@
|
|
|
1
|
+
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
+
import { useState, useRef, useEffect } from 'react';
|
|
3
|
+
import { useI18n } from '../../hooks/useI18n.js';
|
|
4
|
+
import { checkComplementaryMandate } from '../../services/sessionService.js';
|
|
5
|
+
import LoadingState from '../states/LoadingState.js';
|
|
6
|
+
import Button from '../ui/Button.js';
|
|
7
|
+
|
|
8
|
+
function ComplementaryMandateNodeHandler(_a) {
|
|
9
|
+
var sessionId = _a.sessionId, nodeId = _a.nodeId, onOutcome = _a.onOutcome;
|
|
10
|
+
var t = useI18n().t;
|
|
11
|
+
var _b = useState(false), error = _b[0], setError = _b[1];
|
|
12
|
+
var _c = useState(0), attempt = _c[0], setAttempt = _c[1];
|
|
13
|
+
var callback = useRef(onOutcome);
|
|
14
|
+
callback.current = onOutcome;
|
|
15
|
+
useEffect(function () {
|
|
16
|
+
var active = true;
|
|
17
|
+
setError(false);
|
|
18
|
+
checkComplementaryMandate(sessionId, nodeId).then(function (_a) {
|
|
19
|
+
var outcome = _a.outcome;
|
|
20
|
+
if (active)
|
|
21
|
+
callback.current(outcome);
|
|
22
|
+
}).catch(function () { if (active)
|
|
23
|
+
setError(true); });
|
|
24
|
+
return function () { active = false; };
|
|
25
|
+
}, [sessionId, nodeId, attempt]);
|
|
26
|
+
if (!error)
|
|
27
|
+
return jsx(LoadingState, { message: t('complementary_mandate.loading') });
|
|
28
|
+
return jsxs("div", { className: "flex flex-col items-center gap-4 p-6", children: [jsx("p", { role: "alert", children: t('complementary_mandate.error') }), jsx(Button, { onClick: function () { return setAttempt(function (value) { return value + 1; }); }, children: t('complementary_mandate.retry') })] });
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export { ComplementaryMandateNodeHandler as default };
|
|
32
|
+
//# 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":["_jsx","_jsxs"],"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,GAAK,OAAO,EAAE,EAAd;IACH,IAAA,EAAA,GAAoB,QAAQ,CAAC,KAAK,CAAC,EAAlC,KAAK,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,QAAQ,GAAA,EAAA,CAAA,CAAA,CAAmB;IACnC,IAAA,EAAA,GAAwB,QAAQ,CAAC,CAAC,CAAC,EAAlC,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,UAAU,GAAA,EAAA,CAAA,CAAA,CAAe;AACzC,IAAA,IAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC;AAClC,IAAA,QAAQ,CAAC,OAAO,GAAG,SAAS;AAC5B,IAAA,SAAS,CAAC,YAAA;QACR,IAAI,MAAM,GAAG,IAAI;QACjB,QAAQ,CAAC,KAAK,CAAC;QACf,yBAAyB,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,OAAOA,GAAA,CAAC,YAAY,EAAA,EAAC,OAAO,EAAE,CAAC,CAAC,+BAA+B,CAAC,EAAA,CAAI;IAChF,OAAOC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,sCAAsC,aAC1DD,GAAA,CAAA,GAAA,EAAA,EAAG,IAAI,EAAC,OAAO,EAAA,QAAA,EAAE,CAAC,CAAC,6BAA6B,CAAC,EAAA,CAAK,EACtDA,IAAC,MAAM,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;;;;"}
|
|
@@ -275,7 +275,7 @@ var ExternalVerificationNodeHandler = function (_a) {
|
|
|
275
275
|
_v.label = 4;
|
|
276
276
|
case 4:
|
|
277
277
|
_v.trys.push([4, 7, , 8]);
|
|
278
|
-
return [4 /*yield*/, apiService.post("/session/sdk/".concat(session.id, "/verify-external/").concat(node.id), __assign({ apiType: apiType, referenceValue: referenceValue, referenceField: referenceField, enableRnaFallback: isInpiRbe && nodeData.rnaFallbackEnabled === true }, (comparisonConfig ? { comparisonConfig: comparisonConfig } : {})), { signal: abortController.signal })];
|
|
278
|
+
return [4 /*yield*/, apiService.post("/session/sdk/".concat(session.id, "/verify-external/").concat(node.id), __assign({ apiType: apiType, referenceValue: referenceValue, referenceField: referenceField, enableRnaFallback: isInpiRbe && nodeData.rnaFallbackEnabled === true, enableInseeFallback: isInpiRbe && nodeData.enableInseeFallback === true }, (comparisonConfig ? { comparisonConfig: comparisonConfig } : {})), { signal: abortController.signal })];
|
|
279
279
|
case 5:
|
|
280
280
|
response = _v.sent();
|
|
281
281
|
if (isInpiRbe)
|
|
@@ -379,13 +379,16 @@ var ExternalVerificationNodeHandler = function (_a) {
|
|
|
379
379
|
setPhase('success');
|
|
380
380
|
setTimeout(onNext, 1200);
|
|
381
381
|
}
|
|
382
|
-
else if (result.status === 'config_error') {
|
|
383
|
-
setPhase('success');
|
|
384
|
-
setTimeout(onNext, 800);
|
|
385
|
-
}
|
|
386
382
|
else {
|
|
383
|
+
// config_error / external_error / any other non-blocking technical
|
|
384
|
+
// failure (missing API key, registry down…) — never a fault of the
|
|
385
|
+
// end user. The backend already maps these to a 'done' analysisrun,
|
|
386
|
+
// never 'ai_rejected' (reviewed manually in backoffice), so the SDK
|
|
387
|
+
// stays non-blocking here too — but must never claim success
|
|
388
|
+
// (config_error used to show the success screen) and must never
|
|
389
|
+
// leave a blank screen (this phase previously had no render block).
|
|
387
390
|
setPhase('error');
|
|
388
|
-
setTimeout(onNext,
|
|
391
|
+
setTimeout(onNext, 1200);
|
|
389
392
|
}
|
|
390
393
|
return [2 /*return*/];
|
|
391
394
|
}
|
|
@@ -409,12 +412,19 @@ var ExternalVerificationNodeHandler = function (_a) {
|
|
|
409
412
|
};
|
|
410
413
|
// ─── Loading phase ─────────────────────────────────────────────────────────
|
|
411
414
|
if (phase === 'loading') {
|
|
412
|
-
return (jsx("div", { className: "flex flex-col justify-between h-full w-full", children: jsx("div", { className: "flex-1 px-4 py-6 pt-11 md:px-8 md:py-8", children: jsxs("div", { className: "w-full max-w-md mx-auto space-y-6", children: [jsxs("div", { className: "text-center space-y-4", children: [jsx(Title, { className: "text-xl md:text-2xl lg:text-3xl", children: t('verification_node.verifying_title', 'Vérification en cours…') }), jsx(Subtitle, { className: "text-sm text-gray-600 leading-relaxed", children: t('verification_node.verifying_desc', 'Nous vérifions vos informations. Cela peut prendre quelques instants.') })] }), jsx("div", { className: "w-full flex justify-center", children: jsx("div", { className: "space-y-5", children: steps.map(function (step, index) { return (jsxs("div", { className: "flex items-start", children: [jsx("div", { className: "mr-4 mt-1
|
|
415
|
+
return (jsx("div", { className: "flex flex-col justify-between h-full w-full", children: jsx("div", { className: "flex-1 px-4 py-6 pt-11 md:px-8 md:py-8", children: jsxs("div", { className: "w-full max-w-md mx-auto space-y-6", children: [jsxs("div", { className: "text-center space-y-4", children: [jsx(Title, { className: "text-xl md:text-2xl lg:text-3xl", children: t('verification_node.verifying_title', 'Vérification en cours…') }), jsx(Subtitle, { className: "text-sm text-gray-600 leading-relaxed", children: t('verification_node.verifying_desc', 'Nous vérifions vos informations. Cela peut prendre quelques instants.') })] }), jsx("div", { className: "w-full flex justify-center", children: jsx("div", { className: "space-y-5", children: steps.map(function (step, index) { return (jsxs("div", { className: "flex items-start", children: [jsx("div", { className: "mr-4 mt-1 shrink-0", children: step.status === 'done' ? (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' ? (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" })) : (jsx("div", { className: "w-6 h-6 rounded-full border-2 border-gray-300" })) }), jsxs("div", { className: "flex-1 min-w-0", children: [jsx("p", { className: "font-medium text-[#3C3C40] text-sm", children: step.title }), jsx("p", { className: "text-xs text-gray-500 mt-1", children: step.subtitle })] })] }, index)); }) }) })] }) }) }));
|
|
413
416
|
}
|
|
414
417
|
// ─── Success phase ─────────────────────────────────────────────────────────
|
|
415
418
|
if (phase === 'success') {
|
|
416
419
|
return (jsxs("div", { className: "flex flex-col items-center justify-center h-full px-6 py-8 text-center space-y-4", children: [jsx("img", { src: checkIcon, alt: "success", className: "w-24 h-24" }), jsx("h3", { className: "text-[#3C3C40] font-poppins text-xl font-bold", children: t('inpi_verification.success_title', 'Vérification réussie') }), jsx("p", { className: "text-gray-500 text-sm", children: t('inpi_verification.success_desc', "Passage à l'étape suivante…") })] }));
|
|
417
420
|
}
|
|
421
|
+
// ─── Technical error phase (config_error / external_error) ────────────────
|
|
422
|
+
//
|
|
423
|
+
// Non-blocking (the flow already auto-advances via the useEffect above) but
|
|
424
|
+
// must never look like a success — neutral wording, no checkmark.
|
|
425
|
+
if (phase === 'error') {
|
|
426
|
+
return (jsxs("div", { className: "flex flex-col items-center justify-center h-full px-6 py-8 text-center space-y-4", children: [jsx("div", { className: "w-16 h-16 bg-gray-100 rounded-full flex items-center justify-center", children: jsx("span", { className: "text-gray-500 text-2xl font-bold", children: "!" }) }), jsx("h3", { className: "text-[#3C3C40] font-poppins text-xl font-bold", children: t('inpi_verification.technical_error_title', 'Vérification en cours de traitement') }), 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.') })] }));
|
|
427
|
+
}
|
|
418
428
|
// ─── Mismatch phase ────────────────────────────────────────────────────────
|
|
419
429
|
if (phase === 'mismatch') {
|
|
420
430
|
var d = errorScreenData;
|