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.
Files changed (69) hide show
  1. package/dist/cjs/components/session/StartSession.js +4 -29
  2. package/dist/cjs/components/session/StartSession.js.map +1 -1
  3. package/dist/cjs/components/start-flow/Start.js +6 -6
  4. package/dist/cjs/components/start-flow/Start.js.map +1 -1
  5. package/dist/cjs/components/template/ComplementaryMandateNodeHandler.js +36 -0
  6. package/dist/cjs/components/template/ComplementaryMandateNodeHandler.js.map +1 -0
  7. package/dist/cjs/components/template/ExternalVerificationNodeHandler.js +78 -36
  8. package/dist/cjs/components/template/ExternalVerificationNodeHandler.js.map +1 -1
  9. package/dist/cjs/components/template/TemplateNodeRenderer.js +3 -0
  10. package/dist/cjs/components/template/TemplateNodeRenderer.js.map +1 -1
  11. package/dist/cjs/hooks/useSessionData.js +10 -5
  12. package/dist/cjs/hooks/useSessionData.js.map +1 -1
  13. package/dist/cjs/hooks/useStepNavigation.js +1 -1
  14. package/dist/cjs/hooks/useStepNavigation.js.map +1 -1
  15. package/dist/cjs/hooks/useUserInputForm.js +27 -6
  16. package/dist/cjs/hooks/useUserInputForm.js.map +1 -1
  17. package/dist/cjs/i18n/en.json.js +24 -26
  18. package/dist/cjs/i18n/en.json.js.map +1 -1
  19. package/dist/cjs/i18n/es.json.js +24 -26
  20. package/dist/cjs/i18n/es.json.js.map +1 -1
  21. package/dist/cjs/i18n/fr.json.js +24 -26
  22. package/dist/cjs/i18n/fr.json.js.map +1 -1
  23. package/dist/cjs/services/sessionService.js +33 -6
  24. package/dist/cjs/services/sessionService.js.map +1 -1
  25. package/dist/cjs/types/session.js.map +1 -1
  26. package/dist/cjs/utils/customFieldValidation.js +44 -1
  27. package/dist/cjs/utils/customFieldValidation.js.map +1 -1
  28. package/dist/esm/components/session/StartSession.js +5 -30
  29. package/dist/esm/components/session/StartSession.js.map +1 -1
  30. package/dist/esm/components/start-flow/Start.js +6 -6
  31. package/dist/esm/components/start-flow/Start.js.map +1 -1
  32. package/dist/esm/components/template/ComplementaryMandateNodeHandler.js +32 -0
  33. package/dist/esm/components/template/ComplementaryMandateNodeHandler.js.map +1 -0
  34. package/dist/esm/components/template/ExternalVerificationNodeHandler.js +78 -36
  35. package/dist/esm/components/template/ExternalVerificationNodeHandler.js.map +1 -1
  36. package/dist/esm/components/template/TemplateNodeRenderer.js +3 -0
  37. package/dist/esm/components/template/TemplateNodeRenderer.js.map +1 -1
  38. package/dist/esm/hooks/useSessionData.js +10 -5
  39. package/dist/esm/hooks/useSessionData.js.map +1 -1
  40. package/dist/esm/hooks/useStepNavigation.js +1 -1
  41. package/dist/esm/hooks/useStepNavigation.js.map +1 -1
  42. package/dist/esm/hooks/useUserInputForm.js +28 -7
  43. package/dist/esm/hooks/useUserInputForm.js.map +1 -1
  44. package/dist/esm/i18n/en.json.js +24 -26
  45. package/dist/esm/i18n/en.json.js.map +1 -1
  46. package/dist/esm/i18n/es.json.js +24 -26
  47. package/dist/esm/i18n/es.json.js.map +1 -1
  48. package/dist/esm/i18n/fr.json.js +24 -26
  49. package/dist/esm/i18n/fr.json.js.map +1 -1
  50. package/dist/esm/services/sessionService.js +33 -7
  51. package/dist/esm/services/sessionService.js.map +1 -1
  52. package/dist/esm/types/session.js.map +1 -1
  53. package/dist/esm/utils/customFieldValidation.js +44 -2
  54. package/dist/esm/utils/customFieldValidation.js.map +1 -1
  55. package/docs/COMPLEMENTARY_MANDATE.md +22 -0
  56. package/docs/JOURNEY_NODE_BUILDER.md +15 -0
  57. package/package.json +1 -1
  58. package/dist/cjs/components/start-flow/CGU.js +0 -132
  59. package/dist/cjs/components/start-flow/CGU.js.map +0 -1
  60. package/dist/cjs/components/ui/LanguageSelector.js +0 -46
  61. package/dist/cjs/components/ui/LanguageSelector.js.map +0 -1
  62. package/dist/cjs/utils/languageFlags.js +0 -46
  63. package/dist/cjs/utils/languageFlags.js.map +0 -1
  64. package/dist/esm/components/start-flow/CGU.js +0 -108
  65. package/dist/esm/components/start-flow/CGU.js.map +0 -1
  66. package/dist/esm/components/ui/LanguageSelector.js +0 -42
  67. package/dist/esm/components/ui/LanguageSelector.js.map +0 -1
  68. package/dist/esm/utils/languageFlags.js +0 -42
  69. package/dist/esm/utils/languageFlags.js.map +0 -1
@@ -13,7 +13,9 @@ var DATE_FORMAT_SPECS = {
13
13
  "yyyy-mm-dd": { re: ISO_DATE_RE, order: ["year", "month", "day"] },
14
14
  };
15
15
  var isValidDateParts = function (year, month, day) {
16
- if (!Number.isInteger(year) || !Number.isInteger(month) || !Number.isInteger(day)) {
16
+ if (!Number.isInteger(year) ||
17
+ !Number.isInteger(month) ||
18
+ !Number.isInteger(day)) {
17
19
  return false;
18
20
  }
19
21
  if (year < 1 || month < 1 || month > 12 || day < 1 || day > 31)
@@ -53,9 +55,49 @@ var isRegexMatch = function (value, source) {
53
55
  return true;
54
56
  }
55
57
  };
58
+ /**
59
+ * Resolves the regex for a list cell from another enum cell in the same row.
60
+ * Malformed or incomplete conditional rules deliberately fall back to the
61
+ * column regex so legacy configurations remain usable.
62
+ */
63
+ var resolveColumnRegex = function (col, row) {
64
+ var fallback = {
65
+ regex: typeof col.regex === "string" ? col.regex : "",
66
+ errorMessage: typeof col.regexErrorMessage === "string"
67
+ ? col.regexErrorMessage
68
+ : undefined,
69
+ };
70
+ var rules = col.regexRules;
71
+ if (!rules ||
72
+ typeof rules.sourceColumn !== "string" ||
73
+ !rules.sourceColumn ||
74
+ !Array.isArray(rules.cases) ||
75
+ !row) {
76
+ return fallback;
77
+ }
78
+ var sourceValue = row[rules.sourceColumn];
79
+ if (typeof sourceValue !== "string" || !sourceValue)
80
+ return fallback;
81
+ var matchingCase = rules.cases.find(function (candidate) {
82
+ return candidate &&
83
+ typeof candidate.value === "string" &&
84
+ candidate.value === sourceValue;
85
+ });
86
+ if (!matchingCase || typeof matchingCase.regex !== "string")
87
+ return fallback;
88
+ var regex = matchingCase.regex.trim();
89
+ if (!regex)
90
+ return fallback;
91
+ return {
92
+ regex: regex,
93
+ errorMessage: typeof matchingCase.errorMessage === "string"
94
+ ? matchingCase.errorMessage
95
+ : fallback.errorMessage,
96
+ };
97
+ };
56
98
  var cellErrorKey = function (rowIndex, columnLabel) {
57
99
  return "".concat(rowIndex, "::").concat(columnLabel);
58
100
  };
59
101
 
60
- export { EMAIL_REGEX, cellErrorKey, isDateValid, isEmailValid, isRegexMatch };
102
+ export { EMAIL_REGEX, cellErrorKey, isDateValid, isEmailValid, isRegexMatch, resolveColumnRegex };
61
103
  //# 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, month: number, day: number): boolean => {\n if (!Number.isInteger(year) || !Number.isInteger(month) || !Number.isInteger(day)) {\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 = 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\nexport const cellErrorKey = (rowIndex: number, columnLabel: string): string =>\n `${rowIndex}::${columnLabel}`;\n"],"names":[],"mappings":"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"}
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":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ # Nœud mandat complémentaire
2
+
3
+ `ComplementaryMandateNodeHandler` exécute un POST sans corps vers
4
+ `/session/sdk/:id/complementary-mandate/:nodeId`. L'identité doit avoir été
5
+ persistée par le formulaire précédent. L'authentification réutilise l'intercepteur
6
+ de credentials du SDK. Seuls `same_signer`, `new_signer`, `no_mandate` sont acceptés
7
+ comme réponse. Le handler appelle `goToNextStep(node.id, template, outcome)`.
8
+
9
+ Le nœud affiche un chargement FR/EN/ES, puis suit le verdict serveur. Une erreur
10
+ réseau, serveur ou réponse inconnue affiche un message et un bouton réessayer :
11
+ aucun fallback de routage. Les réponses arrivant après démontage sont ignorées.
12
+ Le nœud est auto-exécutant et sauté par `goBack()`.
13
+
14
+ Ce nœud exige une version SDK contenant ce handler. Le numéro de publication sera
15
+ fixé lors de la livraison, pas dans cette implémentation locale. Les anciennes
16
+ versions ne connaissent pas les trois issues. La reconstruction de l'historique
17
+ au rechargement garde sa limite existante (première arête).
18
+
19
+ Le backend scelle la première décision ; le retry ne change pas l'identité évaluée.
20
+ Le SDK ne reçoit ni `sourceSessionId` ni l'identité historique. Le matching nom +
21
+ prénom sans OTP présente le risque décrit dans
22
+ [le contrat backend](../../backend/docs/COMPLEMENTARY_MANDATE.md).
@@ -196,3 +196,18 @@ L’absence signifie donnée personnelle côté backoffice/backend. Seul `false`
196
196
  permet un affichage restreint des champs métier ; une liste est classée en bloc.
197
197
  La version mineure `1.2.0-dev.0` est préparée localement, sans publication.
198
198
  Le backend doit conserver exactement la conversion `labelToKey` du SDK.
199
+
200
+ ## Regex conditionnelle des colonnes email
201
+
202
+ Les colonnes `email` d'un champ `list` contrôlent d'abord le format email, puis la
203
+ regex résolue selon la colonne enum de la même ligne (cas, regex par défaut, aucune
204
+ regex). Message : cas, colonne, traduction générique. `allowUnconstrained` est un
205
+ choix du builder et n'affecte pas la résolution runtime.
206
+ Le serveur peut refuser une liste configurée avec HTTP 400 et le code
207
+ `CUSTOM_FIELD_VALIDATION_FAILED` ; `useSessionData` journalise ce code sans modifier
208
+ le comportement de synchronisation.
209
+
210
+
211
+ ## Mandat complémentaire
212
+
213
+ Le nœud auto-exécutant `complementary-mandate` route sur le verdict serveur (`same_signer`, `new_signer`, `no_mandate`). Toute erreur bloque le routage et propose de réessayer. Voir [COMPLEMENTARY_MANDATE.md](COMPLEMENTARY_MANDATE.md).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "datakeen-session-react",
3
- "version": "1.1.194",
3
+ "version": "1.1.195-dev.2",
4
4
  "description": "React SDK component to manage and render Datakeen session experiences easily.",
5
5
  "publishConfig": {
6
6
  "access": "public",
@@ -1,132 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var tslib_es6 = require('../../node_modules/tslib/tslib.es6.js');
6
- var jsxRuntime = require('react/jsx-runtime');
7
- var Body = require('../ui/Body.js');
8
- var Title = require('../ui/Title.js');
9
- var React = require('react');
10
- var sessionService = require('../../services/sessionService.js');
11
- var CheckboxPrimitive = require('@radix-ui/react-checkbox');
12
- var Label = require('@radix-ui/react-label');
13
- var reactIcons = require('@radix-ui/react-icons');
14
- var Button = require('../ui/Button.js');
15
- var PageActions = require('../ui/PageActions.js');
16
- require('../../index.css.js');
17
- var useI18n = require('../../hooks/useI18n.js');
18
- require('../../assets/icons/shield_magic_link.svg.js');
19
- require('../../utils/cssLoader.js');
20
- require('../../context/DocumentContext.js');
21
- require('../../services/api.js');
22
- require('../../config/env.js');
23
- require('../../services/auditTrailService.js');
24
- require('ua-parser-js');
25
- var MobilePageLayout = require('../ui/MobilePageLayout.js');
26
- var LanguageSelector = require('../ui/LanguageSelector.js');
27
- require('qrcode');
28
- require('lucide-react');
29
- require('../../assets/check.svg.js');
30
- require('../selfie/Video.css.js');
31
- require('../selfie/VideoFixes.css.js');
32
- require('../selfie/selfie-flow/SelfieFlow.js');
33
- require('../ui/SelectComponent.js');
34
- require('clsx');
35
- require('tailwind-merge');
36
- require('../jdi/JDIProcessing.js');
37
- require('../../assets/before-photo.png.js');
38
- require('../../assets/before-verso.png.js');
39
- require('../../assets/before-document.png.js');
40
- require('../../assets/selfietake.svg.js');
41
- require('../../assets/before-passport.png.js');
42
- require('../../services/cameraService.js');
43
- require('../../services/documentEdgeDetectionService.js');
44
- require('../document-video/document-video-flow/DocumentVideoFlow.js');
45
- require('../document-collection/DocumentProcessing.js');
46
- require('../../constants/userInputForm.js');
47
- require('date-fns');
48
- require('react-day-picker');
49
- require('@radix-ui/react-popover');
50
- require('react-i18next');
51
- require('../../i18n/index.js');
52
- require('@docuseal/react');
53
- require('../../services/professionalImageQuality.js');
54
- require('../../providers/I18nProvider.js');
55
-
56
- function _interopNamespaceDefault(e) {
57
- var n = Object.create(null);
58
- if (e) {
59
- Object.keys(e).forEach(function (k) {
60
- if (k !== 'default') {
61
- var d = Object.getOwnPropertyDescriptor(e, k);
62
- Object.defineProperty(n, k, d.get ? d : {
63
- enumerable: true,
64
- get: function () { return e[k]; }
65
- });
66
- }
67
- });
68
- }
69
- n.default = e;
70
- return Object.freeze(n);
71
- }
72
-
73
- var CheckboxPrimitive__namespace = /*#__PURE__*/_interopNamespaceDefault(CheckboxPrimitive);
74
- var Label__namespace = /*#__PURE__*/_interopNamespaceDefault(Label);
75
-
76
- var CGU = function (_a) {
77
- var setStep = _a.setStep, sessionId = _a.sessionId, showQRCodeInstructions = _a.showQRCodeInstructions, languages = _a.languages, session = _a.session, onBack = _a.onBack;
78
- var _b = useI18n.useI18n(), t = _b.t; _b.setLanguage;
79
- var _c = React.useState(languages ? languages[0] : "fr"); _c[0]; _c[1];
80
- var _d = React.useState(false), checked = _d[0], setChecked = _d[1];
81
- var _e = React.useState(false), error = _e[0], setError = _e[1];
82
- var _f = React.useState(null), submitError = _f[0], setSubmitError = _f[1];
83
- var _g = React.useState(false), isSubmitting = _g[0], setIsSubmitting = _g[1];
84
- var handleCheckboxChange = function (value) {
85
- setChecked(value);
86
- setError(false);
87
- setSubmitError(null);
88
- };
89
- var goOnNextStep = function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () {
90
- var nextStep, statusError_1;
91
- return tslib_es6.__generator(this, function (_a) {
92
- switch (_a.label) {
93
- case 0:
94
- if (!checked) {
95
- setError(true);
96
- return [2 /*return*/];
97
- }
98
- nextStep = showQRCodeInstructions ? 0.5 : 1;
99
- if (!sessionId) {
100
- setStep(nextStep);
101
- return [2 /*return*/];
102
- }
103
- setIsSubmitting(true);
104
- _a.label = 1;
105
- case 1:
106
- _a.trys.push([1, 3, 4, 5]);
107
- return [4 /*yield*/, sessionService.updateSessionStatus(sessionId, "started")];
108
- case 2:
109
- _a.sent();
110
- setStep(nextStep);
111
- return [3 /*break*/, 5];
112
- case 3:
113
- statusError_1 = _a.sent();
114
- console.error(t("CGU.error.console_update_status"), statusError_1);
115
- setSubmitError(t("CGU.error.general"));
116
- return [3 /*break*/, 5];
117
- case 4:
118
- setIsSubmitting(false);
119
- return [7 /*endfinally*/];
120
- case 5: return [2 /*return*/];
121
- }
122
- });
123
- }); };
124
- return (jsxRuntime.jsx(MobilePageLayout.default, { session: session !== null && session !== void 0 ? session : undefined, footer: jsxRuntime.jsxs("div", { className: "w-full space-y-4", children: [(error || submitError) && (jsxRuntime.jsx("div", { className: "bg-red-50 border border-red-200 rounded-lg p-3", children: jsxRuntime.jsx(Body.default, { className: "text-red-600 text-sm text-center", children: submitError ? submitError : t("CGU.error.required") }) })), jsxRuntime.jsxs("div", { className: "flex items-start gap-3 p-3 bg-gray-50 rounded-lg", children: [jsxRuntime.jsx(CheckboxPrimitive__namespace.Root, { id: "checkbox", checked: checked, onCheckedChange: function (value) { return handleCheckboxChange(!!value); }, className: "mt-1 h-5 w-5 shrink-0 rounded border bg-white transition-colors\n data-[state=checked]:bg-[var(--dk-btn-bg)] data-[state=checked]:border-[var(--dk-btn-bg)]\n ".concat(error
125
- ? "border-red-500"
126
- : "border-gray-300 hover:border-gray-400", "\n "), children: jsxRuntime.jsx(CheckboxPrimitive__namespace.Indicator, { className: "flex items-center justify-center text-white", children: jsxRuntime.jsx(reactIcons.CheckIcon, { className: "h-4 w-4" }) }) }), jsxRuntime.jsx(Label__namespace.Root, { htmlFor: "checkbox", className: "cursor-pointer", children: jsxRuntime.jsx(Body.default, { className: "text-left text-sm leading-relaxed ".concat(error ? "text-red-600" : "text-gray-700"), children: t("CGU.checkbox_text") }) })] }), jsxRuntime.jsx(PageActions.default, { primary: jsxRuntime.jsx(Button.default, { onClick: goOnNextStep, disabled: !checked || isSubmitting, children: isSubmitting
127
- ? t("CGU.button.loading")
128
- : t("CGU.button.continue") }), secondary: onBack ? (jsxRuntime.jsx(Button.default, { variant: "secondary", onClick: onBack, children: t("jdi.country_selection.back") })) : undefined })] }), children: jsxRuntime.jsx("div", { className: "px-4 py-8 md:px-8 flex flex-col", children: jsxRuntime.jsxs("div", { className: "w-full max-w-2xl mx-auto space-y-6", children: [jsxRuntime.jsxs("div", { className: "text-center justify-center items-center", children: [jsxRuntime.jsx(Title.default, { className: "text-xl md:text-2xl lg:text-3xl mb-6", children: t("CGU.terms_of_use") }), languages && languages.length > 1 && (jsxRuntime.jsx("div", { className: "flex justify-center items-center mb-6", children: jsxRuntime.jsx(LanguageSelector.default, { className: "w-64 mx-auto", languages: languages }) }))] }), jsxRuntime.jsx("div", { className: "bg-gray-50 rounded-lg p-4 md:p-6", children: jsxRuntime.jsxs(Body.default, { className: "text-left text-sm md:text-base leading-relaxed space-y-4", children: [jsxRuntime.jsx("p", { children: t("CGU.title") }), jsxRuntime.jsx("p", { children: t("CGU.description") }), jsxRuntime.jsxs("p", { children: [t("CGU.description2_before"), " ", jsxRuntime.jsx("a", { href: t("CGU.privacy_url"), target: "_blank", rel: "noopener noreferrer", className: "underline text-blue-600 hover:text-blue-800", children: t("CGU.privacy_link_label") }), t("CGU.description2_after")] }), jsxRuntime.jsxs("p", { children: [t("CGU.by_proceeding_before"), " ", jsxRuntime.jsx("a", { href: t("CGU.cgu_url"), target: "_blank", rel: "noopener noreferrer", className: "underline text-blue-600 hover:text-blue-800", children: t("CGU.cgu_link_label") }), t("CGU.by_proceeding_after")] })] }) })] }) }) }));
129
- };
130
-
131
- exports.default = CGU;
132
- //# sourceMappingURL=CGU.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CGU.js","sources":["../../../../../src/components/start-flow/CGU.tsx"],"sourcesContent":["import Body from \"../ui/Body\";\nimport Title from \"../ui/Title\";\nimport { useState } from \"react\";\nimport { updateSessionStatus } from \"../../services/sessionService\";\n\n// For checkbox\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { CheckIcon } from \"@radix-ui/react-icons\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { useI18n } from \"../..\";\nimport LanguageSelector from \"../ui/LanguageSelector\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { SessionData } from \"../../types/session\";\n\ninterface CGUProps {\n setStep: (nubr: number) => void;\n sessionId?: string;\n showQRCodeInstructions: boolean;\n languages?: string[];\n session?: SessionData;\n onBack?: () => void;\n}\n\nconst CGU = ({\n setStep,\n sessionId,\n showQRCodeInstructions,\n languages,\n session,\n onBack,\n}: CGUProps) => {\n const { t, setLanguage } = useI18n();\n const [selectedLanguage, setSelectedLanguage] = useState(\n languages ? languages[0] : \"fr\"\n );\n const [checked, setChecked] = useState(false);\n const [error, setError] = useState(false);\n const [submitError, setSubmitError] = useState<string | null>(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const handleCheckboxChange = (value: boolean) => {\n setChecked(value);\n setError(false);\n setSubmitError(null);\n };\n\n const goOnNextStep = async () => {\n if (!checked) {\n setError(true);\n return;\n }\n\n const nextStep = showQRCodeInstructions ? 0.5 : 1;\n\n if (!sessionId) {\n setStep(nextStep);\n return;\n }\n\n setIsSubmitting(true);\n try {\n await updateSessionStatus(sessionId, \"started\");\n setStep(nextStep);\n } catch (statusError) {\n console.error(t(\"CGU.error.console_update_status\"), statusError);\n setSubmitError(t(\"CGU.error.general\"));\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const handleLanguageChange = (langId: string) => {\n const lang = languages?.find((l) => l === langId);\n if (lang) {\n setLanguage(lang);\n setSelectedLanguage(lang);\n }\n };\n\n return (\n <MobilePageLayout\n session={session ?? undefined}\n footer={\n <div className=\"w-full space-y-4\">\n {/* Error message */}\n {(error || submitError) && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-3\">\n <Body className=\"text-red-600 text-sm text-center\">\n {submitError ? submitError : t(\"CGU.error.required\")}\n </Body>\n </div>\n )}\n\n {/* Consent checkbox */}\n <div className=\"flex items-start gap-3 p-3 bg-gray-50 rounded-lg\">\n <CheckboxPrimitive.Root\n id=\"checkbox\"\n checked={checked}\n onCheckedChange={(value) => handleCheckboxChange(!!value)}\n className={`mt-1 h-5 w-5 shrink-0 rounded border bg-white transition-colors\n data-[state=checked]:bg-[var(--dk-btn-bg)] data-[state=checked]:border-[var(--dk-btn-bg)]\n ${error\n ? \"border-red-500\"\n : \"border-gray-300 hover:border-gray-400\"\n }\n `}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center text-white\">\n <CheckIcon className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n\n <LabelPrimitive.Root htmlFor=\"checkbox\" className=\"cursor-pointer\">\n <Body\n className={`text-left text-sm leading-relaxed ${error ? \"text-red-600\" : \"text-gray-700\"\n }`}\n >\n {t(\"CGU.checkbox_text\")}\n </Body>\n </LabelPrimitive.Root>\n </div>\n\n {/* Buttons */}\n <PageActions\n primary={\n <Button\n onClick={goOnNextStep}\n disabled={!checked || isSubmitting}\n >\n {isSubmitting\n ? t(\"CGU.button.loading\")\n : t(\"CGU.button.continue\")}\n </Button>\n }\n secondary={\n onBack ? (\n <Button variant=\"secondary\" onClick={onBack}>\n {t(\"jdi.country_selection.back\")}\n </Button>\n ) : undefined\n }\n />\n </div>\n }\n >\n <div className=\"px-4 py-8 md:px-8 flex flex-col\">\n <div className=\"w-full max-w-2xl mx-auto space-y-6\">\n <div className=\"text-center justify-center items-center\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl mb-6\">\n {t(\"CGU.terms_of_use\")}\n </Title>\n\n {/* Language selector */}\n {languages && languages.length > 1 && (\n <div className=\"flex justify-center items-center mb-6\">\n <LanguageSelector\n className=\"w-64 mx-auto\"\n languages={languages}\n />\n </div>\n )}\n </div>\n\n {/* Terms content */}\n <div className=\"bg-gray-50 rounded-lg p-4 md:p-6\">\n <Body className=\"text-left text-sm md:text-base leading-relaxed space-y-4\">\n <p>{t(\"CGU.title\")}</p>\n <p>{t(\"CGU.description\")}</p>\n <p>\n {t(\"CGU.description2_before\")}{\" \"}\n <a\n href={t(\"CGU.privacy_url\")}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"underline text-blue-600 hover:text-blue-800\"\n >\n {t(\"CGU.privacy_link_label\")}\n </a>\n {t(\"CGU.description2_after\")}\n </p>\n <p>\n {t(\"CGU.by_proceeding_before\")}{\" \"}\n <a\n href={t(\"CGU.cgu_url\")}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"underline text-blue-600 hover:text-blue-800\"\n >\n {t(\"CGU.cgu_link_label\")}\n </a>\n {t(\"CGU.by_proceeding_after\")}\n </p>\n </Body>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default CGU;\n"],"names":["useI18n","useState","__awaiter","updateSessionStatus","_jsx","MobilePageLayout","_jsxs","Body","CheckboxPrimitive","CheckIcon","LabelPrimitive","PageActions","Button","Title","LanguageSelector"],"mappings":"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"}
@@ -1,46 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var tslib_es6 = require('../../node_modules/tslib/tslib.es6.js');
6
- var jsxRuntime = require('react/jsx-runtime');
7
- var React = require('react');
8
- var useI18n = require('../../hooks/useI18n.js');
9
- var languageFlags = require('../../utils/languageFlags.js');
10
- var reactCircleFlags = require('react-circle-flags');
11
-
12
- var LanguageSelector = function (_a) {
13
- var _b = _a.className, className = _b === void 0 ? '' : _b, languages = _a.languages;
14
- var _c = useI18n.useI18n(), currentLanguage = _c.currentLanguage, setLanguage = _c.setLanguage; _c.t;
15
- var _d = React.useState(false), isOpen = _d[0], setIsOpen = _d[1];
16
- var dropdownRef = React.useRef(null);
17
- var languageFormat = languages
18
- ? languages.map(function (code) { return languageFlags.getSupportedLanguages().find(function (lang) { return lang.code === code; }); }).filter(Boolean)
19
- : languageFlags.getSupportedLanguages();
20
- var currentLangInfo = languageFormat.find(function (lang) { return lang.code === currentLanguage; }) || languageFormat[0];
21
- var handleLanguageChange = function (languageCode) { return tslib_es6.__awaiter(void 0, void 0, void 0, function () {
22
- return tslib_es6.__generator(this, function (_a) {
23
- switch (_a.label) {
24
- case 0: return [4 /*yield*/, setLanguage(languageCode)];
25
- case 1:
26
- _a.sent();
27
- setIsOpen(false);
28
- return [2 /*return*/];
29
- }
30
- });
31
- }); };
32
- // Close dropdown when clicking outside
33
- React.useEffect(function () {
34
- var handleClickOutside = function (event) {
35
- if (dropdownRef.current && !dropdownRef.current.contains(event.target)) {
36
- setIsOpen(false);
37
- }
38
- };
39
- document.addEventListener('mousedown', handleClickOutside);
40
- return function () { return document.removeEventListener('mousedown', handleClickOutside); };
41
- }, []);
42
- return (jsxRuntime.jsxs("div", { className: "relative ".concat(className), ref: dropdownRef, children: [jsxRuntime.jsxs("button", { onClick: function () { return setIsOpen(!isOpen); }, className: "flex items-center space-x-2 px-3 py-2 text-sm border border-gray-300 rounded bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 min-w-[120px] mx-auto", children: [jsxRuntime.jsx("span", { className: "inline-flex items-center justify-center w-5 h-5 shrink-0 overflow-hidden rounded-full", children: jsxRuntime.jsx(reactCircleFlags.CircleFlag, { countryCode: languageFlags.getLanguageAlpha2(currentLangInfo.code) || 'UN', height: 20 }) }), jsxRuntime.jsx("span", { className: "overflow-hidden text-ellipsis whitespace-nowrap", children: currentLangInfo.nativeName }), jsxRuntime.jsx("svg", { className: "w-4 h-4 transition-transform ".concat(isOpen ? 'rotate-180' : ''), fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: jsxRuntime.jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 9l-7 7-7-7" }) })] }), isOpen && (jsxRuntime.jsx("div", { className: "absolute top-full left-1/2 transform -translate-x-1/2 mt-1 bg-white border border-gray-300 rounded shadow-lg z-50 max-h-48 overflow-y-auto min-w-[120px]", children: languageFormat.map(function (lang) { return (jsxRuntime.jsxs("button", { onClick: function () { return handleLanguageChange(lang.code); }, className: "w-full flex items-center space-x-2 px-3 py-2 text-sm hover:bg-gray-100 focus:outline-none focus:bg-gray-100 ".concat(lang.code === currentLanguage ? 'bg-blue-50 text-blue-600' : 'text-gray-700'), children: [jsxRuntime.jsx("span", { className: "inline-flex items-center justify-center w-5 h-5 shrink-0 overflow-hidden rounded-full", children: jsxRuntime.jsx(reactCircleFlags.CircleFlag, { countryCode: languageFlags.getLanguageAlpha2(lang.code) || 'fr', height: 20 }) }), jsxRuntime.jsx("span", { className: "overflow-hidden text-ellipsis whitespace-nowrap", children: lang.nativeName })] }, lang.code)); }) }))] }));
43
- };
44
-
45
- exports.default = LanguageSelector;
46
- //# sourceMappingURL=LanguageSelector.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LanguageSelector.js","sources":["../../../../../src/components/ui/LanguageSelector.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect } from 'react';\nimport { useI18n } from '../../hooks/useI18n';\nimport { getLanguageAlpha2, getSupportedLanguages, LanguageFlag } from '../../utils/languageFlags';\nimport { CircleFlag } from 'react-circle-flags';\n\ninterface LanguageSelectorProps {\n className?: string;\n languages?: string[];\n}\n\nconst LanguageSelector: React.FC<LanguageSelectorProps> = ({ className = '', languages }) => {\n const { currentLanguage, setLanguage, t } = useI18n();\n const [isOpen, setIsOpen] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n const languageFormat: LanguageFlag[] = languages\n ? languages.map(code => getSupportedLanguages().find(lang => lang.code === code)!).filter(Boolean)\n : getSupportedLanguages();\n\n const currentLangInfo = languageFormat.find(lang => lang.code === currentLanguage) || languageFormat[0];\n\n const handleLanguageChange = async (languageCode: string) => {\n await setLanguage(languageCode);\n setIsOpen(false);\n };\n\n // Close dropdown when clicking outside\n useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n setIsOpen(false);\n }\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, []);\n\n return (\n <div className={`relative ${className}`} ref={dropdownRef}>\n {/* Selected language display */}\n <button\n onClick={() => setIsOpen(!isOpen)}\n className=\"flex items-center space-x-2 px-3 py-2 text-sm border border-gray-300 rounded bg-white hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-blue-500 min-w-[120px] mx-auto\"\n >\n <span className=\"inline-flex items-center justify-center w-5 h-5 shrink-0 overflow-hidden rounded-full\">\n <CircleFlag\n countryCode={getLanguageAlpha2(currentLangInfo.code) || 'UN'}\n height={20}\n />\n </span>\n <span className=\"overflow-hidden text-ellipsis whitespace-nowrap\">\n {currentLangInfo.nativeName}\n </span>\n <svg\n className={`w-4 h-4 transition-transform ${isOpen ? 'rotate-180' : ''}`}\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </button>\n\n {/* Dropdown options */}\n {isOpen && (\n <div className=\"absolute top-full left-1/2 transform -translate-x-1/2 mt-1 bg-white border border-gray-300 rounded shadow-lg z-50 max-h-48 overflow-y-auto min-w-[120px]\">\n {languageFormat.map((lang) => (\n <button\n key={lang.code}\n onClick={() => handleLanguageChange(lang.code)}\n className={`w-full flex items-center space-x-2 px-3 py-2 text-sm hover:bg-gray-100 focus:outline-none focus:bg-gray-100 ${lang.code === currentLanguage ? 'bg-blue-50 text-blue-600' : 'text-gray-700'\n }`}\n >\n <span className=\"inline-flex items-center justify-center w-5 h-5 shrink-0 overflow-hidden rounded-full\">\n <CircleFlag\n countryCode={getLanguageAlpha2(lang.code) || 'fr'}\n height={20}\n />\n </span>\n <span className=\"overflow-hidden text-ellipsis whitespace-nowrap\">\n {lang.nativeName}\n </span>\n </button>\n ))}\n </div>\n )}\n </div>\n );\n};\n\nexport default LanguageSelector;"],"names":["useI18n","useState","useRef","getSupportedLanguages","__awaiter","useEffect","_jsxs","_jsx","CircleFlag","getLanguageAlpha2"],"mappings":"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"}
@@ -1,46 +0,0 @@
1
- 'use strict';
2
-
3
- /**
4
- * Mapping of language codes to country flags and names
5
- */
6
- var LANGUAGE_FLAGS = {
7
- fr: {
8
- code: 'fr',
9
- name: 'French',
10
- alpha2: 'fr',
11
- nativeName: 'Français'
12
- },
13
- en: {
14
- code: 'en',
15
- name: 'English',
16
- alpha2: 'gb',
17
- nativeName: 'English'
18
- },
19
- es: {
20
- code: 'es',
21
- name: 'Spanish',
22
- alpha2: 'es',
23
- nativeName: 'Español'
24
- }
25
- };
26
- /**
27
- * Get flag for a language code
28
- * @param languageCode - The language code (e.g., 'fr', 'en')
29
- * @returns The flag emoji or empty string if not found
30
- */
31
- var getLanguageAlpha2 = function (languageCode) {
32
- var _a;
33
- return (_a = LANGUAGE_FLAGS[languageCode]) === null || _a === void 0 ? void 0 : _a.alpha2;
34
- };
35
- /**
36
- * Get all supported languages with their flags
37
- * @returns Array of all supported language flags
38
- */
39
- var getSupportedLanguages = function () {
40
- return Object.values(LANGUAGE_FLAGS);
41
- };
42
-
43
- exports.LANGUAGE_FLAGS = LANGUAGE_FLAGS;
44
- exports.getLanguageAlpha2 = getLanguageAlpha2;
45
- exports.getSupportedLanguages = getSupportedLanguages;
46
- //# sourceMappingURL=languageFlags.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"languageFlags.js","sources":["../../../../src/utils/languageFlags.ts"],"sourcesContent":["/**\n * Language flag mapping utility\n * Maps language codes to their corresponding country flags\n */\nexport interface LanguageFlag {\n code: string;\n name: string;\n alpha2: string;\n nativeName: string;\n}\n\n/**\n * Mapping of language codes to country flags and names\n */\nexport const LANGUAGE_FLAGS: Record<string, LanguageFlag> = {\n fr: {\n code: 'fr',\n name: 'French',\n alpha2: 'fr',\n nativeName: 'Français'\n },\n en: {\n code: 'en',\n name: 'English',\n alpha2: 'gb',\n nativeName: 'English'\n },\n es: {\n code: 'es',\n name: 'Spanish',\n alpha2: 'es',\n nativeName: 'Español'\n }\n};\n\n/**\n * Get flag for a language code\n * @param languageCode - The language code (e.g., 'fr', 'en')\n * @returns The flag emoji or empty string if not found\n*/\nexport const getLanguageAlpha2 = (languageCode: string): string | null => {\n return LANGUAGE_FLAGS[languageCode]?.alpha2;\n};\n\n/**\n * Get language info for a language code\n * @param languageCode - The language code (e.g., 'fr', 'en')\n * @returns The language flag info or null if not found\n */\nexport const getLanguageInfo = (languageCode: string): LanguageFlag | null => {\n return LANGUAGE_FLAGS[languageCode] || null;\n};\n\n/**\n * Get all supported languages with their flags\n * @returns Array of all supported language flags\n */\nexport const getSupportedLanguages = (): LanguageFlag[] => {\n return Object.values(LANGUAGE_FLAGS);\n};\n\n/**\n * Check if a language code is supported\n * @param languageCode - The language code to check\n * @returns True if the language is supported\n */\nexport const isLanguageSupported = (languageCode: string): boolean => {\n return languageCode in LANGUAGE_FLAGS;\n};\n"],"names":[],"mappings":";;AAWA;;AAEG;AACI,IAAM,cAAc,GAAiC;AAC1D,IAAA,EAAE,EAAE;AACF,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,QAAQ;AACd,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,UAAU,EAAE;AACb,KAAA;AACD,IAAA,EAAE,EAAE;AACF,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,UAAU,EAAE;AACb,KAAA;AACD,IAAA,EAAE,EAAE;AACF,QAAA,IAAI,EAAE,IAAI;AACV,QAAA,IAAI,EAAE,SAAS;AACf,QAAA,MAAM,EAAE,IAAI;AACZ,QAAA,UAAU,EAAE;AACb;;AAGH;;;;AAIE;AACK,IAAM,iBAAiB,GAAG,UAAC,YAAoB,EAAA;;AAClD,IAAA,OAAO,MAAA,cAAc,CAAC,YAAY,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM;AAC/C;AAWA;;;AAGG;AACI,IAAM,qBAAqB,GAAG,YAAA;AACnC,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;AACtC;;;;;;"}
@@ -1,108 +0,0 @@
1
- import { __awaiter, __generator } from '../../node_modules/tslib/tslib.es6.js';
2
- import { jsx, jsxs } from 'react/jsx-runtime';
3
- import Body from '../ui/Body.js';
4
- import Title from '../ui/Title.js';
5
- import { useState } from 'react';
6
- import { updateSessionStatus } from '../../services/sessionService.js';
7
- import * as CheckboxPrimitive from '@radix-ui/react-checkbox';
8
- import * as Label from '@radix-ui/react-label';
9
- import { CheckIcon } from '@radix-ui/react-icons';
10
- import Button from '../ui/Button.js';
11
- import PageActions from '../ui/PageActions.js';
12
- import '../../index.css.js';
13
- import { useI18n } from '../../hooks/useI18n.js';
14
- import '../../assets/icons/shield_magic_link.svg.js';
15
- import '../../utils/cssLoader.js';
16
- import '../../context/DocumentContext.js';
17
- import '../../services/api.js';
18
- import '../../config/env.js';
19
- import '../../services/auditTrailService.js';
20
- import 'ua-parser-js';
21
- import MobilePageLayout from '../ui/MobilePageLayout.js';
22
- import LanguageSelector from '../ui/LanguageSelector.js';
23
- import 'qrcode';
24
- import 'lucide-react';
25
- import '../../assets/check.svg.js';
26
- import '../selfie/Video.css.js';
27
- import '../selfie/VideoFixes.css.js';
28
- import '../selfie/selfie-flow/SelfieFlow.js';
29
- import '../ui/SelectComponent.js';
30
- import 'clsx';
31
- import 'tailwind-merge';
32
- import '../jdi/JDIProcessing.js';
33
- import '../../assets/before-photo.png.js';
34
- import '../../assets/before-verso.png.js';
35
- import '../../assets/before-document.png.js';
36
- import '../../assets/selfietake.svg.js';
37
- import '../../assets/before-passport.png.js';
38
- import '../../services/cameraService.js';
39
- import '../../services/documentEdgeDetectionService.js';
40
- import '../document-video/document-video-flow/DocumentVideoFlow.js';
41
- import '../document-collection/DocumentProcessing.js';
42
- import '../../constants/userInputForm.js';
43
- import 'date-fns';
44
- import 'react-day-picker';
45
- import '@radix-ui/react-popover';
46
- import 'react-i18next';
47
- import '../../i18n/index.js';
48
- import '@docuseal/react';
49
- import '../../services/professionalImageQuality.js';
50
- import '../../providers/I18nProvider.js';
51
-
52
- var CGU = function (_a) {
53
- var setStep = _a.setStep, sessionId = _a.sessionId, showQRCodeInstructions = _a.showQRCodeInstructions, languages = _a.languages, session = _a.session, onBack = _a.onBack;
54
- var _b = useI18n(), t = _b.t; _b.setLanguage;
55
- var _c = useState(languages ? languages[0] : "fr"); _c[0]; _c[1];
56
- var _d = useState(false), checked = _d[0], setChecked = _d[1];
57
- var _e = useState(false), error = _e[0], setError = _e[1];
58
- var _f = useState(null), submitError = _f[0], setSubmitError = _f[1];
59
- var _g = useState(false), isSubmitting = _g[0], setIsSubmitting = _g[1];
60
- var handleCheckboxChange = function (value) {
61
- setChecked(value);
62
- setError(false);
63
- setSubmitError(null);
64
- };
65
- var goOnNextStep = function () { return __awaiter(void 0, void 0, void 0, function () {
66
- var nextStep, statusError_1;
67
- return __generator(this, function (_a) {
68
- switch (_a.label) {
69
- case 0:
70
- if (!checked) {
71
- setError(true);
72
- return [2 /*return*/];
73
- }
74
- nextStep = showQRCodeInstructions ? 0.5 : 1;
75
- if (!sessionId) {
76
- setStep(nextStep);
77
- return [2 /*return*/];
78
- }
79
- setIsSubmitting(true);
80
- _a.label = 1;
81
- case 1:
82
- _a.trys.push([1, 3, 4, 5]);
83
- return [4 /*yield*/, updateSessionStatus(sessionId, "started")];
84
- case 2:
85
- _a.sent();
86
- setStep(nextStep);
87
- return [3 /*break*/, 5];
88
- case 3:
89
- statusError_1 = _a.sent();
90
- console.error(t("CGU.error.console_update_status"), statusError_1);
91
- setSubmitError(t("CGU.error.general"));
92
- return [3 /*break*/, 5];
93
- case 4:
94
- setIsSubmitting(false);
95
- return [7 /*endfinally*/];
96
- case 5: return [2 /*return*/];
97
- }
98
- });
99
- }); };
100
- return (jsx(MobilePageLayout, { session: session !== null && session !== void 0 ? session : undefined, footer: jsxs("div", { className: "w-full space-y-4", children: [(error || submitError) && (jsx("div", { className: "bg-red-50 border border-red-200 rounded-lg p-3", children: jsx(Body, { className: "text-red-600 text-sm text-center", children: submitError ? submitError : t("CGU.error.required") }) })), jsxs("div", { className: "flex items-start gap-3 p-3 bg-gray-50 rounded-lg", children: [jsx(CheckboxPrimitive.Root, { id: "checkbox", checked: checked, onCheckedChange: function (value) { return handleCheckboxChange(!!value); }, className: "mt-1 h-5 w-5 shrink-0 rounded border bg-white transition-colors\n data-[state=checked]:bg-[var(--dk-btn-bg)] data-[state=checked]:border-[var(--dk-btn-bg)]\n ".concat(error
101
- ? "border-red-500"
102
- : "border-gray-300 hover:border-gray-400", "\n "), children: jsx(CheckboxPrimitive.Indicator, { className: "flex items-center justify-center text-white", children: jsx(CheckIcon, { className: "h-4 w-4" }) }) }), jsx(Label.Root, { htmlFor: "checkbox", className: "cursor-pointer", children: jsx(Body, { className: "text-left text-sm leading-relaxed ".concat(error ? "text-red-600" : "text-gray-700"), children: t("CGU.checkbox_text") }) })] }), jsx(PageActions, { primary: jsx(Button, { onClick: goOnNextStep, disabled: !checked || isSubmitting, children: isSubmitting
103
- ? t("CGU.button.loading")
104
- : t("CGU.button.continue") }), secondary: onBack ? (jsx(Button, { variant: "secondary", onClick: onBack, children: t("jdi.country_selection.back") })) : undefined })] }), children: jsx("div", { className: "px-4 py-8 md:px-8 flex flex-col", children: jsxs("div", { className: "w-full max-w-2xl mx-auto space-y-6", children: [jsxs("div", { className: "text-center justify-center items-center", children: [jsx(Title, { className: "text-xl md:text-2xl lg:text-3xl mb-6", children: t("CGU.terms_of_use") }), languages && languages.length > 1 && (jsx("div", { className: "flex justify-center items-center mb-6", children: jsx(LanguageSelector, { className: "w-64 mx-auto", languages: languages }) }))] }), jsx("div", { className: "bg-gray-50 rounded-lg p-4 md:p-6", children: jsxs(Body, { className: "text-left text-sm md:text-base leading-relaxed space-y-4", children: [jsx("p", { children: t("CGU.title") }), jsx("p", { children: t("CGU.description") }), jsxs("p", { children: [t("CGU.description2_before"), " ", jsx("a", { href: t("CGU.privacy_url"), target: "_blank", rel: "noopener noreferrer", className: "underline text-blue-600 hover:text-blue-800", children: t("CGU.privacy_link_label") }), t("CGU.description2_after")] }), jsxs("p", { children: [t("CGU.by_proceeding_before"), " ", jsx("a", { href: t("CGU.cgu_url"), target: "_blank", rel: "noopener noreferrer", className: "underline text-blue-600 hover:text-blue-800", children: t("CGU.cgu_link_label") }), t("CGU.by_proceeding_after")] })] }) })] }) }) }));
105
- };
106
-
107
- export { CGU as default };
108
- //# sourceMappingURL=CGU.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CGU.js","sources":["../../../../../src/components/start-flow/CGU.tsx"],"sourcesContent":["import Body from \"../ui/Body\";\nimport Title from \"../ui/Title\";\nimport { useState } from \"react\";\nimport { updateSessionStatus } from \"../../services/sessionService\";\n\n// For checkbox\nimport * as CheckboxPrimitive from \"@radix-ui/react-checkbox\";\nimport * as LabelPrimitive from \"@radix-ui/react-label\";\nimport { CheckIcon } from \"@radix-ui/react-icons\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { useI18n } from \"../..\";\nimport LanguageSelector from \"../ui/LanguageSelector\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { SessionData } from \"../../types/session\";\n\ninterface CGUProps {\n setStep: (nubr: number) => void;\n sessionId?: string;\n showQRCodeInstructions: boolean;\n languages?: string[];\n session?: SessionData;\n onBack?: () => void;\n}\n\nconst CGU = ({\n setStep,\n sessionId,\n showQRCodeInstructions,\n languages,\n session,\n onBack,\n}: CGUProps) => {\n const { t, setLanguage } = useI18n();\n const [selectedLanguage, setSelectedLanguage] = useState(\n languages ? languages[0] : \"fr\"\n );\n const [checked, setChecked] = useState(false);\n const [error, setError] = useState(false);\n const [submitError, setSubmitError] = useState<string | null>(null);\n const [isSubmitting, setIsSubmitting] = useState(false);\n\n const handleCheckboxChange = (value: boolean) => {\n setChecked(value);\n setError(false);\n setSubmitError(null);\n };\n\n const goOnNextStep = async () => {\n if (!checked) {\n setError(true);\n return;\n }\n\n const nextStep = showQRCodeInstructions ? 0.5 : 1;\n\n if (!sessionId) {\n setStep(nextStep);\n return;\n }\n\n setIsSubmitting(true);\n try {\n await updateSessionStatus(sessionId, \"started\");\n setStep(nextStep);\n } catch (statusError) {\n console.error(t(\"CGU.error.console_update_status\"), statusError);\n setSubmitError(t(\"CGU.error.general\"));\n } finally {\n setIsSubmitting(false);\n }\n };\n\n const handleLanguageChange = (langId: string) => {\n const lang = languages?.find((l) => l === langId);\n if (lang) {\n setLanguage(lang);\n setSelectedLanguage(lang);\n }\n };\n\n return (\n <MobilePageLayout\n session={session ?? undefined}\n footer={\n <div className=\"w-full space-y-4\">\n {/* Error message */}\n {(error || submitError) && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-3\">\n <Body className=\"text-red-600 text-sm text-center\">\n {submitError ? submitError : t(\"CGU.error.required\")}\n </Body>\n </div>\n )}\n\n {/* Consent checkbox */}\n <div className=\"flex items-start gap-3 p-3 bg-gray-50 rounded-lg\">\n <CheckboxPrimitive.Root\n id=\"checkbox\"\n checked={checked}\n onCheckedChange={(value) => handleCheckboxChange(!!value)}\n className={`mt-1 h-5 w-5 shrink-0 rounded border bg-white transition-colors\n data-[state=checked]:bg-[var(--dk-btn-bg)] data-[state=checked]:border-[var(--dk-btn-bg)]\n ${error\n ? \"border-red-500\"\n : \"border-gray-300 hover:border-gray-400\"\n }\n `}\n >\n <CheckboxPrimitive.Indicator className=\"flex items-center justify-center text-white\">\n <CheckIcon className=\"h-4 w-4\" />\n </CheckboxPrimitive.Indicator>\n </CheckboxPrimitive.Root>\n\n <LabelPrimitive.Root htmlFor=\"checkbox\" className=\"cursor-pointer\">\n <Body\n className={`text-left text-sm leading-relaxed ${error ? \"text-red-600\" : \"text-gray-700\"\n }`}\n >\n {t(\"CGU.checkbox_text\")}\n </Body>\n </LabelPrimitive.Root>\n </div>\n\n {/* Buttons */}\n <PageActions\n primary={\n <Button\n onClick={goOnNextStep}\n disabled={!checked || isSubmitting}\n >\n {isSubmitting\n ? t(\"CGU.button.loading\")\n : t(\"CGU.button.continue\")}\n </Button>\n }\n secondary={\n onBack ? (\n <Button variant=\"secondary\" onClick={onBack}>\n {t(\"jdi.country_selection.back\")}\n </Button>\n ) : undefined\n }\n />\n </div>\n }\n >\n <div className=\"px-4 py-8 md:px-8 flex flex-col\">\n <div className=\"w-full max-w-2xl mx-auto space-y-6\">\n <div className=\"text-center justify-center items-center\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl mb-6\">\n {t(\"CGU.terms_of_use\")}\n </Title>\n\n {/* Language selector */}\n {languages && languages.length > 1 && (\n <div className=\"flex justify-center items-center mb-6\">\n <LanguageSelector\n className=\"w-64 mx-auto\"\n languages={languages}\n />\n </div>\n )}\n </div>\n\n {/* Terms content */}\n <div className=\"bg-gray-50 rounded-lg p-4 md:p-6\">\n <Body className=\"text-left text-sm md:text-base leading-relaxed space-y-4\">\n <p>{t(\"CGU.title\")}</p>\n <p>{t(\"CGU.description\")}</p>\n <p>\n {t(\"CGU.description2_before\")}{\" \"}\n <a\n href={t(\"CGU.privacy_url\")}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"underline text-blue-600 hover:text-blue-800\"\n >\n {t(\"CGU.privacy_link_label\")}\n </a>\n {t(\"CGU.description2_after\")}\n </p>\n <p>\n {t(\"CGU.by_proceeding_before\")}{\" \"}\n <a\n href={t(\"CGU.cgu_url\")}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"underline text-blue-600 hover:text-blue-800\"\n >\n {t(\"CGU.cgu_link_label\")}\n </a>\n {t(\"CGU.by_proceeding_after\")}\n </p>\n </Body>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default CGU;\n"],"names":["_jsx","_jsxs","LabelPrimitive"],"mappings":"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"}