datakeen-session-react 1.1.181 → 1.1.183
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/.gitlab-ci.yml +115 -46
- package/dist/cjs/components/document-collection/DocumentCollection.js +4 -2
- package/dist/cjs/components/document-collection/DocumentCollection.js.map +1 -1
- package/dist/cjs/components/document-collection/DocumentCollectionIntroduction.js +1 -1
- package/dist/cjs/components/document-collection/DocumentCollectionIntroduction.js.map +1 -1
- package/dist/cjs/components/document-collection/DocumentCollectionMethodSelection.js +1 -1
- package/dist/cjs/components/document-collection/DocumentCollectionMethodSelection.js.map +1 -1
- package/dist/cjs/components/document-collection/DocumentCollectionSelection.js +1 -1
- package/dist/cjs/components/document-collection/DocumentCollectionSelection.js.map +1 -1
- package/dist/cjs/components/document-collection/DocumentCollectionUpload.js +1 -1
- package/dist/cjs/components/document-collection/DocumentCollectionUpload.js.map +1 -1
- package/dist/cjs/components/document-collection/DocumentError.js +1 -1
- package/dist/cjs/components/document-collection/DocumentError.js.map +1 -1
- package/dist/cjs/components/jdi/JDICountrySelection.js +1 -1
- package/dist/cjs/components/jdi/JDICountrySelection.js.map +1 -1
- package/dist/cjs/components/jdi/JDIDocumentSelection.js +1 -1
- package/dist/cjs/components/jdi/JDIDocumentSelection.js.map +1 -1
- package/dist/cjs/components/jdi/JDIDocumentUpload.js +1 -1
- package/dist/cjs/components/jdi/JDIDocumentUpload.js.map +1 -1
- package/dist/cjs/components/jdi/JDIError.js +1 -1
- package/dist/cjs/components/jdi/JDIError.js.map +1 -1
- package/dist/cjs/components/jdi/JDIPreIntroduction.js +1 -1
- package/dist/cjs/components/jdi/JDIPreIntroduction.js.map +1 -1
- package/dist/cjs/components/selfie/Video.js +2 -2
- package/dist/cjs/components/selfie/Video.js.map +1 -1
- package/dist/cjs/components/selfie/selfie-flow/SelfieFlow.js +2 -11
- package/dist/cjs/components/selfie/selfie-flow/SelfieFlow.js.map +1 -1
- package/dist/cjs/components/selfie/selfie-flow/SelfiePreIntroduction.js.map +1 -1
- package/dist/cjs/components/session/DocumentCheck.js +4 -2
- package/dist/cjs/components/session/DocumentCheck.js.map +1 -1
- package/dist/cjs/components/session/Selfie.js +6 -18
- package/dist/cjs/components/session/Selfie.js.map +1 -1
- package/dist/cjs/components/session/UserInputForm/LegalRepFields.js +5 -1
- package/dist/cjs/components/session/UserInputForm/LegalRepFields.js.map +1 -1
- package/dist/cjs/components/session/UserInputForm.js +1 -7
- package/dist/cjs/components/session/UserInputForm.js.map +1 -1
- package/dist/cjs/components/signature-electronic/SignatureElectronic.js +1 -1
- package/dist/cjs/components/signature-electronic/SignatureElectronic.js.map +1 -1
- package/dist/cjs/components/signature-electronic/SignatureElectronicIntroduction.js +2 -2
- package/dist/cjs/components/signature-electronic/SignatureElectronicIntroduction.js.map +1 -1
- package/dist/cjs/components/template/ExternalVerificationNodeHandler.js +74 -36
- package/dist/cjs/components/template/ExternalVerificationNodeHandler.js.map +1 -1
- package/dist/cjs/constants/userInputForm.js.map +1 -1
- package/dist/cjs/hooks/useStepNavigation.js +60 -12
- package/dist/cjs/hooks/useStepNavigation.js.map +1 -1
- package/dist/cjs/hooks/useUserInputForm.js +12 -3
- package/dist/cjs/hooks/useUserInputForm.js.map +1 -1
- package/dist/cjs/types/session.js.map +1 -1
- package/dist/esm/components/document-collection/DocumentCollection.js +4 -2
- package/dist/esm/components/document-collection/DocumentCollection.js.map +1 -1
- package/dist/esm/components/document-collection/DocumentCollectionIntroduction.js +1 -1
- package/dist/esm/components/document-collection/DocumentCollectionIntroduction.js.map +1 -1
- package/dist/esm/components/document-collection/DocumentCollectionMethodSelection.js +1 -1
- package/dist/esm/components/document-collection/DocumentCollectionMethodSelection.js.map +1 -1
- package/dist/esm/components/document-collection/DocumentCollectionSelection.js +1 -1
- package/dist/esm/components/document-collection/DocumentCollectionSelection.js.map +1 -1
- package/dist/esm/components/document-collection/DocumentCollectionUpload.js +1 -1
- package/dist/esm/components/document-collection/DocumentCollectionUpload.js.map +1 -1
- package/dist/esm/components/document-collection/DocumentError.js +1 -1
- package/dist/esm/components/document-collection/DocumentError.js.map +1 -1
- package/dist/esm/components/jdi/JDICountrySelection.js +1 -1
- package/dist/esm/components/jdi/JDICountrySelection.js.map +1 -1
- package/dist/esm/components/jdi/JDIDocumentSelection.js +1 -1
- package/dist/esm/components/jdi/JDIDocumentSelection.js.map +1 -1
- package/dist/esm/components/jdi/JDIDocumentUpload.js +1 -1
- package/dist/esm/components/jdi/JDIDocumentUpload.js.map +1 -1
- package/dist/esm/components/jdi/JDIError.js +1 -1
- package/dist/esm/components/jdi/JDIError.js.map +1 -1
- package/dist/esm/components/jdi/JDIPreIntroduction.js +1 -1
- package/dist/esm/components/jdi/JDIPreIntroduction.js.map +1 -1
- package/dist/esm/components/selfie/Video.js +2 -2
- package/dist/esm/components/selfie/Video.js.map +1 -1
- package/dist/esm/components/selfie/selfie-flow/SelfieFlow.js +2 -11
- package/dist/esm/components/selfie/selfie-flow/SelfieFlow.js.map +1 -1
- package/dist/esm/components/selfie/selfie-flow/SelfiePreIntroduction.js.map +1 -1
- package/dist/esm/components/session/DocumentCheck.js +4 -2
- package/dist/esm/components/session/DocumentCheck.js.map +1 -1
- package/dist/esm/components/session/Selfie.js +6 -18
- package/dist/esm/components/session/Selfie.js.map +1 -1
- package/dist/esm/components/session/UserInputForm/LegalRepFields.js +5 -1
- package/dist/esm/components/session/UserInputForm/LegalRepFields.js.map +1 -1
- package/dist/esm/components/session/UserInputForm.js +1 -7
- package/dist/esm/components/session/UserInputForm.js.map +1 -1
- package/dist/esm/components/signature-electronic/SignatureElectronic.js +1 -1
- package/dist/esm/components/signature-electronic/SignatureElectronic.js.map +1 -1
- package/dist/esm/components/signature-electronic/SignatureElectronicIntroduction.js +2 -2
- package/dist/esm/components/signature-electronic/SignatureElectronicIntroduction.js.map +1 -1
- package/dist/esm/components/template/ExternalVerificationNodeHandler.js +75 -37
- package/dist/esm/components/template/ExternalVerificationNodeHandler.js.map +1 -1
- package/dist/esm/constants/userInputForm.js.map +1 -1
- package/dist/esm/hooks/useStepNavigation.js +60 -12
- package/dist/esm/hooks/useStepNavigation.js.map +1 -1
- package/dist/esm/hooks/useUserInputForm.js +12 -3
- package/dist/esm/hooks/useUserInputForm.js.map +1 -1
- package/dist/esm/types/session.js.map +1 -1
- package/docs/navigation-history.md +18 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocumentCollectionIntroduction.js","sources":["../../../../../src/components/document-collection/DocumentCollectionIntroduction.tsx"],"sourcesContent":["import Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { beforeDocumentIcon } from \"../../assets\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\ninterface DocumentCollectionIntroductionProps {\n onContinue: () => void;\n onBack
|
|
1
|
+
{"version":3,"file":"DocumentCollectionIntroduction.js","sources":["../../../../../src/components/document-collection/DocumentCollectionIntroduction.tsx"],"sourcesContent":["import Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { beforeDocumentIcon } from \"../../assets\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\ninterface DocumentCollectionIntroductionProps {\n onContinue: () => void;\n onBack?: () => void;\n introductionPage?: {\n title?: string;\n description?: string;\n };\n}\n\nconst DocumentCollectionIntroduction = ({\n onContinue,\n onBack,\n introductionPage,\n}: DocumentCollectionIntroductionProps) => {\n // Use provided values or fallback to defaults (use i18n keys)\n const { t } = useI18n();\n const title =\n introductionPage?.title ||\n t(\"document_upload.selection_title\");\n const description =\n introductionPage?.description ||\n t(\"document_upload.selection_description\");\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button onClick={onContinue}>\n {t(\"buttons.continue\")}\n </Button>\n }\n secondary={onBack ? (\n <Button variant=\"secondary\" onClick={onBack}>\n {t(\"buttons.back\")}\n </Button>\n ) : undefined}\n />\n }\n >\n <div className=\"px-4 py-6 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n {/* Header */}\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">{title}</Title>\n <Subtitle className=\"text-sm md:text-base text-gray-600 leading-relaxed whitespace-pre-line\">\n {description}\n </Subtitle>\n </div>\n\n {/* Document collection illustration */}\n <div className=\"flex justify-center py-6\">\n <img\n src={beforeDocumentIcon}\n alt={t(\"document_upload.selection_title\")}\n className=\"max-w-full h-auto object-contain max-h-[25vh]\"\n />\n </div>\n\n {/* Information box */}\n <div className=\"bg-blue-50 border border-blue-200 rounded-lg p-4\">\n <div className=\"flex\">\n <div className=\"flex-shrink-0\">\n <svg\n className=\"h-5 w-5 text-blue-400\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n <div className=\"ml-3\">\n <h3 className=\"text-sm font-medium text-blue-800\">\n {t(\"jdi.document_selection.info_title\")}\n </h3>\n <div className=\"mt-2 text-sm text-blue-700\">\n <ul className=\"list-disc pl-5 space-y-1\">\n <li>{t(\"jdi.document_upload.info_point1\")}</li>\n <li>{t(\"jdi.document_upload.accepted_formats\")}</li>\n <li>{t(\"jdi.document_upload.max_size_label\")} {t(\"jdi.document_upload.max_size\")}</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default DocumentCollectionIntroduction;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ import MobilePageLayout from '../ui/MobilePageLayout.js';
|
|
|
10
10
|
var DocumentCollectionMethodSelection = function (_a) {
|
|
11
11
|
var onMethodSelect = _a.onMethodSelect, onBack = _a.onBack, title = _a.title, description = _a.description;
|
|
12
12
|
var t = useI18n().t;
|
|
13
|
-
return (jsx(MobilePageLayout, { footer: jsx(PageActions, { primary: jsx(Button, { variant: "secondary", onClick: onBack, children: t("buttons.back", "Retour") }) }), children: jsx("div", { className: "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: title || t("document_check.method_selection.title", "Choisissez une méthode") }), jsx(Subtitle, { className: "text-sm text-gray-600 leading-relaxed", children: description || t("document_check.method_selection.subtitle", "Comment souhaitez-vous ajouter votre document ?") })] }), jsxs("div", { className: "grid gap-4", children: [jsxs("button", { onClick: function () { return onMethodSelect("picture"); }, className: "flex items-center p-4 bg-white border-2 border-gray-100 rounded-xl hover:border-teal-500 transition-colors text-left group", children: [jsx("div", { className: "w-12 h-12 bg-teal-50 rounded-lg flex items-center justify-center text-teal-600 group-hover:bg-teal-100 transition-colors mr-4", children: jsx(Camera, { size: 24 }) }), jsxs("div", { children: [jsx("p", { className: "font-semibold text-gray-900", children: t("document_check.method_selection.picture_title", "Prendre une photo") }), jsx("p", { className: "text-sm text-gray-500", children: t("document_check.method_selection.picture_desc", "Utilisez l'appareil photo de votre appareil") })] })] }), jsxs("button", { onClick: function () { return onMethodSelect("download"); }, className: "flex items-center p-4 bg-white border-2 border-gray-100 rounded-xl hover:border-teal-500 transition-colors text-left group", children: [jsx("div", { className: "w-12 h-12 bg-teal-50 rounded-lg flex items-center justify-center text-teal-600 group-hover:bg-teal-100 transition-colors mr-4", children: jsx(Upload, { size: 24 }) }), jsxs("div", { children: [jsx("p", { className: "font-semibold text-gray-900", children: t("document_check.method_selection.download_title", "Téléverser un fichier") }), jsx("p", { className: "text-sm text-gray-500", children: t("document_check.method_selection.download_desc", "Sélectionnez un fichier sur votre appareil") })] })] })] })] }) }) }));
|
|
13
|
+
return (jsx(MobilePageLayout, { footer: jsx(PageActions, { primary: onBack ? (jsx(Button, { variant: "secondary", onClick: onBack, children: t("buttons.back", "Retour") })) : undefined }), children: jsx("div", { className: "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: title || t("document_check.method_selection.title", "Choisissez une méthode") }), jsx(Subtitle, { className: "text-sm text-gray-600 leading-relaxed", children: description || t("document_check.method_selection.subtitle", "Comment souhaitez-vous ajouter votre document ?") })] }), jsxs("div", { className: "grid gap-4", children: [jsxs("button", { onClick: function () { return onMethodSelect("picture"); }, className: "flex items-center p-4 bg-white border-2 border-gray-100 rounded-xl hover:border-teal-500 transition-colors text-left group", children: [jsx("div", { className: "w-12 h-12 bg-teal-50 rounded-lg flex items-center justify-center text-teal-600 group-hover:bg-teal-100 transition-colors mr-4", children: jsx(Camera, { size: 24 }) }), jsxs("div", { children: [jsx("p", { className: "font-semibold text-gray-900", children: t("document_check.method_selection.picture_title", "Prendre une photo") }), jsx("p", { className: "text-sm text-gray-500", children: t("document_check.method_selection.picture_desc", "Utilisez l'appareil photo de votre appareil") })] })] }), jsxs("button", { onClick: function () { return onMethodSelect("download"); }, className: "flex items-center p-4 bg-white border-2 border-gray-100 rounded-xl hover:border-teal-500 transition-colors text-left group", children: [jsx("div", { className: "w-12 h-12 bg-teal-50 rounded-lg flex items-center justify-center text-teal-600 group-hover:bg-teal-100 transition-colors mr-4", children: jsx(Upload, { size: 24 }) }), jsxs("div", { children: [jsx("p", { className: "font-semibold text-gray-900", children: t("document_check.method_selection.download_title", "Téléverser un fichier") }), jsx("p", { className: "text-sm text-gray-500", children: t("document_check.method_selection.download_desc", "Sélectionnez un fichier sur votre appareil") })] })] })] })] }) }) }));
|
|
14
14
|
};
|
|
15
15
|
|
|
16
16
|
export { DocumentCollectionMethodSelection as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocumentCollectionMethodSelection.js","sources":["../../../../../src/components/document-collection/DocumentCollectionMethodSelection.tsx"],"sourcesContent":["import React from \"react\";\nimport { Camera, Upload } from \"lucide-react\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\ninterface DocumentCollectionMethodSelectionProps {\n onMethodSelect: (method: \"download\" | \"picture\") => void;\n onBack
|
|
1
|
+
{"version":3,"file":"DocumentCollectionMethodSelection.js","sources":["../../../../../src/components/document-collection/DocumentCollectionMethodSelection.tsx"],"sourcesContent":["import React from \"react\";\nimport { Camera, Upload } from \"lucide-react\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\ninterface DocumentCollectionMethodSelectionProps {\n onMethodSelect: (method: \"download\" | \"picture\") => void;\n onBack?: () => void;\n title?: string;\n description?: string;\n}\n\nconst DocumentCollectionMethodSelection = ({\n onMethodSelect,\n onBack,\n title,\n description,\n}: DocumentCollectionMethodSelectionProps) => {\n const { t } = useI18n();\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={onBack ? (\n <Button variant=\"secondary\" onClick={onBack}>\n {t(\"buttons.back\", \"Retour\")}\n </Button>\n ) : undefined}\n />\n }\n >\n <div className=\"px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {title || t(\"document_check.method_selection.title\", \"Choisissez une méthode\")}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed\">\n {description || t(\"document_check.method_selection.subtitle\", \"Comment souhaitez-vous ajouter votre document ?\")}\n </Subtitle>\n </div>\n\n <div className=\"grid gap-4\">\n <button\n onClick={() => onMethodSelect(\"picture\")}\n className=\"flex items-center p-4 bg-white border-2 border-gray-100 rounded-xl hover:border-teal-500 transition-colors text-left group\"\n >\n <div className=\"w-12 h-12 bg-teal-50 rounded-lg flex items-center justify-center text-teal-600 group-hover:bg-teal-100 transition-colors mr-4\">\n <Camera size={24} />\n </div>\n <div>\n <p className=\"font-semibold text-gray-900\">\n {t(\"document_check.method_selection.picture_title\", \"Prendre une photo\")}\n </p>\n <p className=\"text-sm text-gray-500\">\n {t(\"document_check.method_selection.picture_desc\", \"Utilisez l'appareil photo de votre appareil\")}\n </p>\n </div>\n </button>\n\n <button\n onClick={() => onMethodSelect(\"download\")}\n className=\"flex items-center p-4 bg-white border-2 border-gray-100 rounded-xl hover:border-teal-500 transition-colors text-left group\"\n >\n <div className=\"w-12 h-12 bg-teal-50 rounded-lg flex items-center justify-center text-teal-600 group-hover:bg-teal-100 transition-colors mr-4\">\n <Upload size={24} />\n </div>\n <div>\n <p className=\"font-semibold text-gray-900\">\n {t(\"document_check.method_selection.download_title\", \"Téléverser un fichier\")}\n </p>\n <p className=\"text-sm text-gray-500\">\n {t(\"document_check.method_selection.download_desc\", \"Sélectionnez un fichier sur votre appareil\")}\n </p>\n </div>\n </button>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default DocumentCollectionMethodSelection;\n"],"names":["_jsx","_jsxs"],"mappings":";;;;;;;;;AAgBA,IAAM,iCAAiC,GAAG,UAAC,EAKF,EAAA;QAJrC,cAAc,GAAA,EAAA,CAAA,cAAA,EACd,MAAM,GAAA,EAAA,CAAA,MAAA,EACN,KAAK,GAAA,EAAA,CAAA,KAAA,EACL,WAAW,GAAA,EAAA,CAAA,WAAA;AAEH,IAAA,IAAA,CAAC,GAAK,OAAO,EAAE,EAAd;IAET,QACIA,IAAC,gBAAgB,EAAA,EACb,MAAM,EACFA,GAAA,CAAC,WAAW,EAAA,EACR,OAAO,EAAE,MAAM,IACXA,GAAA,CAAC,MAAM,IAAC,OAAO,EAAC,WAAW,EAAC,OAAO,EAAE,MAAM,EAAA,QAAA,EACtC,CAAC,CAAC,cAAc,EAAE,QAAQ,CAAC,EAAA,CACvB,IACT,SAAS,GACf,EAAA,QAAA,EAGNA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAC5CC,cAAK,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,CAC9CA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,CAClCD,GAAA,CAAC,KAAK,EAAA,EAAC,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAC7C,KAAK,IAAI,CAAC,CAAC,uCAAuC,EAAE,wBAAwB,CAAC,EAAA,CAC1E,EACRA,GAAA,CAAC,QAAQ,EAAA,EAAC,SAAS,EAAC,uCAAuC,EAAA,QAAA,EACtD,WAAW,IAAI,CAAC,CAAC,0CAA0C,EAAE,iDAAiD,CAAC,GACzG,CAAA,EAAA,CACT,EAENC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,YAAY,aACvBA,IAAA,CAAA,QAAA,EAAA,EACI,OAAO,EAAE,YAAA,EAAM,OAAA,cAAc,CAAC,SAAS,CAAC,CAAA,CAAzB,CAAyB,EACxC,SAAS,EAAC,4HAA4H,EAAA,QAAA,EAAA,CAEtID,aAAK,SAAS,EAAC,+HAA+H,EAAA,QAAA,EAC1IA,GAAA,CAAC,MAAM,EAAA,EAAC,IAAI,EAAE,EAAE,EAAA,CAAI,EAAA,CAClB,EACNC,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACID,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,6BAA6B,EAAA,QAAA,EACrC,CAAC,CAAC,+CAA+C,EAAE,mBAAmB,CAAC,EAAA,CACxE,EACJA,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAC/B,CAAC,CAAC,8CAA8C,EAAE,6CAA6C,CAAC,EAAA,CACjG,CAAA,EAAA,CACF,CAAA,EAAA,CACD,EAETC,IAAA,CAAA,QAAA,EAAA,EACI,OAAO,EAAE,YAAA,EAAM,OAAA,cAAc,CAAC,UAAU,CAAC,EAA1B,CAA0B,EACzC,SAAS,EAAC,4HAA4H,EAAA,QAAA,EAAA,CAEtID,aAAK,SAAS,EAAC,+HAA+H,EAAA,QAAA,EAC1IA,GAAA,CAAC,MAAM,IAAC,IAAI,EAAE,EAAE,EAAA,CAAI,EAAA,CAClB,EACNC,yBACID,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,6BAA6B,EAAA,QAAA,EACrC,CAAC,CAAC,gDAAgD,EAAE,uBAAuB,CAAC,EAAA,CAC7E,EACJA,WAAG,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAC/B,CAAC,CAAC,+CAA+C,EAAE,4CAA4C,CAAC,EAAA,CACjG,CAAA,EAAA,CACF,CAAA,EAAA,CACD,IACP,CAAA,EAAA,CACJ,EAAA,CACJ,EAAA,CACS;AAE3B;;;;"}
|
|
@@ -30,7 +30,7 @@ var DocumentCollectionSelection = function (_a) {
|
|
|
30
30
|
onContinue(selectedDocumentType);
|
|
31
31
|
}
|
|
32
32
|
};
|
|
33
|
-
return (jsx(MobilePageLayout, { footer: jsx(PageActions, { primary: jsx(Button, { onClick: handleContinueAction, disabled: !selectedDocumentType, children: t("buttons.continue") }), secondary: jsx(Button, { variant: "secondary", onClick: onBack, children: t("buttons.back") }) }), children: jsx("div", { className: "flex-1 flex items-start justify-center md:items-center p-4", children: jsxs("div", { className: "w-full max-w-lg", children: [jsxs("div", { className: "text-center mb-8", children: [jsx(Title, { className: "text-2xl md:text-3xl font-bold text-gray-900 mb-2", children: title }), jsx(Subtitle, { className: "text-gray-600 whitespace-pre-line", children: description })] }), jsxs("div", { className: "mb-6", children: [jsx("label", { className: "block text-sm font-medium text-gray-700 mb-2", children: t("jdi.document_selection.label_identity") }), jsx(Select, { options: documentOptions, value: selectedDocumentType, onValueChange: function (value) { return setSelectedDocumentType(value); }, placeholder: t("jdi.document_selection.placeholder_identity") })] }), selectedDocumentType && (jsxs("div", { className: "bg-gray-50 border border-gray-200 rounded-lg p-4 mb-6", children: [jsx("h3", { className: "font-medium text-gray-900 mb-2", children: t("jdi.document_selection.info_title") }), jsxs("div", { className: "text-sm text-gray-700 space-y-1", children: [jsx("p", { children: t("jdi.document_upload.info_point1") }), jsx("p", { children: t("jdi.document_upload.info_point2") }), jsx("p", { children: t("jdi.document_upload.info_point3") })] })] }))] }) }) }));
|
|
33
|
+
return (jsx(MobilePageLayout, { footer: jsx(PageActions, { primary: jsx(Button, { onClick: handleContinueAction, disabled: !selectedDocumentType, children: t("buttons.continue") }), secondary: onBack ? (jsx(Button, { variant: "secondary", onClick: onBack, children: t("buttons.back") })) : undefined }), children: jsx("div", { className: "flex-1 flex items-start justify-center md:items-center p-4", children: jsxs("div", { className: "w-full max-w-lg", children: [jsxs("div", { className: "text-center mb-8", children: [jsx(Title, { className: "text-2xl md:text-3xl font-bold text-gray-900 mb-2", children: title }), jsx(Subtitle, { className: "text-gray-600 whitespace-pre-line", children: description })] }), jsxs("div", { className: "mb-6", children: [jsx("label", { className: "block text-sm font-medium text-gray-700 mb-2", children: t("jdi.document_selection.label_identity") }), jsx(Select, { options: documentOptions, value: selectedDocumentType, onValueChange: function (value) { return setSelectedDocumentType(value); }, placeholder: t("jdi.document_selection.placeholder_identity") })] }), selectedDocumentType && (jsxs("div", { className: "bg-gray-50 border border-gray-200 rounded-lg p-4 mb-6", children: [jsx("h3", { className: "font-medium text-gray-900 mb-2", children: t("jdi.document_selection.info_title") }), jsxs("div", { className: "text-sm text-gray-700 space-y-1", children: [jsx("p", { children: t("jdi.document_upload.info_point1") }), jsx("p", { children: t("jdi.document_upload.info_point2") }), jsx("p", { children: t("jdi.document_upload.info_point3") })] })] }))] }) }) }));
|
|
34
34
|
};
|
|
35
35
|
|
|
36
36
|
export { DocumentCollectionSelection as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocumentCollectionSelection.js","sources":["../../../../../src/components/document-collection/DocumentCollectionSelection.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { Select } from \"../ui/SelectComponent\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport { DocumentTypeSide } from \"./DocumentCollection\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { stepObject } from \"../../types/session\";\nimport { Card } from \"../ui/Card\";\nimport { Upload } from \"lucide-react\";\nimport PDFPreview from \"../ui/PDFPreview\";\nimport type { onUploadFiles } from \"../../types/uploadFiles\";\n\ninterface AllowedDocumentType {\n id: string;\n name: string;\n side?: DocumentTypeSide;\n}\n\ninterface DocumentCollectionSelectionProps {\n onContinue: (selectedDocumentType: string, files?: onUploadFiles) => void;\n onBack
|
|
1
|
+
{"version":3,"file":"DocumentCollectionSelection.js","sources":["../../../../../src/components/document-collection/DocumentCollectionSelection.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { Select } from \"../ui/SelectComponent\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport { DocumentTypeSide } from \"./DocumentCollection\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { stepObject } from \"../../types/session\";\nimport { Card } from \"../ui/Card\";\nimport { Upload } from \"lucide-react\";\nimport PDFPreview from \"../ui/PDFPreview\";\nimport type { onUploadFiles } from \"../../types/uploadFiles\";\n\ninterface AllowedDocumentType {\n id: string;\n name: string;\n side?: DocumentTypeSide;\n}\n\ninterface DocumentCollectionSelectionProps {\n onContinue: (selectedDocumentType: string, files?: onUploadFiles) => void;\n onBack?: () => void;\n allowedDocumentTypes: AllowedDocumentType[];\n allowedAddingMethods: string[];\n stepObject?: stepObject;\n documentSelection?: {\n title?: string;\n description?: string;\n };\n}\n\nconst DocumentCollectionSelection = ({\n onContinue,\n onBack,\n allowedDocumentTypes,\n allowedAddingMethods,\n stepObject,\n documentSelection,\n}: DocumentCollectionSelectionProps) => {\n const { t } = useI18n();\n const [selectedDocumentType, setSelectedDocumentType] = useState<string>(\"\");\n\n useEffect(() => {\n if (allowedDocumentTypes.length > 0 && !selectedDocumentType) {\n setSelectedDocumentType(allowedDocumentTypes[0].id);\n }\n }, [allowedDocumentTypes, selectedDocumentType]);\n\n const title =\n documentSelection?.title ||\n t(\"document_upload.selection_title\");\n const description =\n documentSelection?.description ||\n t(\"document_upload.selection_description\");\n\n const documentOptions = allowedDocumentTypes.map((docType) => ({\n value: docType.id,\n label: t(docType.name) || docType.name,\n }));\n\n const handleContinueAction = () => {\n if (selectedDocumentType) {\n onContinue(selectedDocumentType);\n }\n };\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button onClick={handleContinueAction} disabled={!selectedDocumentType}>\n {t(\"buttons.continue\")}\n </Button>\n }\n secondary={onBack ? (\n <Button variant=\"secondary\" onClick={onBack}>\n {t(\"buttons.back\")}\n </Button>\n ) : undefined}\n />\n }\n >\n <div className=\"flex-1 flex items-start justify-center md:items-center p-4\">\n <div className=\"w-full max-w-lg\">\n <div className=\"text-center mb-8\">\n <Title className=\"text-2xl md:text-3xl font-bold text-gray-900 mb-2\">\n {title}\n </Title>\n <Subtitle className=\"text-gray-600 whitespace-pre-line\">{description}</Subtitle>\n </div>\n\n {/* Document Type Selection */}\n <div className=\"mb-6\">\n <label className=\"block text-sm font-medium text-gray-700 mb-2\">\n {t(\"jdi.document_selection.label_identity\")}\n </label>\n <Select\n options={documentOptions}\n value={selectedDocumentType}\n onValueChange={(value) => setSelectedDocumentType(value)}\n placeholder={t(\"jdi.document_selection.placeholder_identity\")}\n />\n </div>\n\n {/* Information about selected document */}\n {selectedDocumentType && (\n <div className=\"bg-gray-50 border border-gray-200 rounded-lg p-4 mb-6\">\n <h3 className=\"font-medium text-gray-900 mb-2\">\n {t(\"jdi.document_selection.info_title\")}\n </h3>\n <div className=\"text-sm text-gray-700 space-y-1\">\n <p>{t(\"jdi.document_upload.info_point1\")}</p>\n <p>{t(\"jdi.document_upload.info_point2\")}</p>\n <p>{t(\"jdi.document_upload.info_point3\")}</p>\n </div>\n </div>\n )}\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default DocumentCollectionSelection;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
@@ -148,7 +148,7 @@ var DocumentCollectionUpload = function (_a) {
|
|
|
148
148
|
? t("jdi.processing.download")
|
|
149
149
|
: requiresTwoSides()
|
|
150
150
|
? t("jdi.document_upload.validate_multiple")
|
|
151
|
-
: t("jdi.document_upload.validate_single") }), secondary: jsx(Button, { variant: "secondary", onClick: onBack, disabled: isUploading, children: t("buttons.back") }) }), children: jsx("div", { className: "flex-1 flex items-start justify-center md:items-center p-4", children: jsxs("div", { className: "w-full max-w-lg", children: [jsxs("div", { className: "text-center mb-8", children: [jsx("h1", { className: "text-2xl md:text-3xl font-bold text-gray-900 mb-2", children: t("document_upload.upload_title") }), jsx("p", { className: "text-gray-600", children: t("document_upload.upload_description") })] }), error && (jsx("div", { className: "mb-6 p-4 bg-red-50 border border-red-200 rounded-lg text-sm text-red-700", children: error })), jsx(Card, { className: "border-2 border-dashed border-teal-300 bg-teal-50/30 p-8 mb-6 text-center", onDragOver: function (e) { return e.preventDefault(); }, onDrop: function (e) {
|
|
151
|
+
: t("jdi.document_upload.validate_single") }), secondary: onBack ? (jsx(Button, { variant: "secondary", onClick: onBack, disabled: isUploading, children: t("buttons.back") })) : undefined }), children: jsx("div", { className: "flex-1 flex items-start justify-center md:items-center p-4", children: jsxs("div", { className: "w-full max-w-lg", children: [jsxs("div", { className: "text-center mb-8", children: [jsx("h1", { className: "text-2xl md:text-3xl font-bold text-gray-900 mb-2", children: t("document_upload.upload_title") }), jsx("p", { className: "text-gray-600", children: t("document_upload.upload_description") })] }), error && (jsx("div", { className: "mb-6 p-4 bg-red-50 border border-red-200 rounded-lg text-sm text-red-700", children: error })), jsx(Card, { className: "border-2 border-dashed border-teal-300 bg-teal-50/30 p-8 mb-6 text-center", onDragOver: function (e) { return e.preventDefault(); }, onDrop: function (e) {
|
|
152
152
|
e.preventDefault();
|
|
153
153
|
var files = e.dataTransfer.files;
|
|
154
154
|
if (files.length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocumentCollectionUpload.js","sources":["../../../../../src/components/document-collection/DocumentCollectionUpload.tsx"],"sourcesContent":["import React, { useState, useRef } from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { Card } from \"../ui/Card\";\nimport { Upload } from \"lucide-react\";\nimport PDFPreview from \"../ui/PDFPreview\";\nimport type { onUploadFiles } from \"../../types/uploadFiles\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { DocumentTypeSide } from \"./DocumentCollection\";\nimport {\n logDocumentLoaded,\n logDocumentsValidated,\n} from \"../../services/auditTrailService\";\n\ninterface AllowedDocumentType {\n id: string;\n name: string;\n side?: DocumentTypeSide;\n}\n\ninterface DocumentCollectionUploadProps {\n onUpload: (files: onUploadFiles) => void;\n onBack: () => void;\n selectedDocumentType: string;\n allowedDocumentTypes: AllowedDocumentType[];\n documentSelection?: {\n title?: string;\n description?: string;\n };\n sessionId?: string;\n}\n\nconst DocumentCollectionUpload = ({\n onUpload,\n onBack,\n selectedDocumentType,\n allowedDocumentTypes,\n documentSelection,\n sessionId,\n}: DocumentCollectionUploadProps) => {\n const { t } = useI18n();\n const [frontImage, setFrontImage] = useState<string | null>(null);\n const [backImage, setBackImage] = useState<string | null>(null);\n const [frontIsPDF, setFrontIsPDF] = useState<boolean>(false);\n const [backIsPDF, setBackIsPDF] = useState<boolean>(false);\n const [isUploading, setIsUploading] = useState(false);\n const [error, setError] = useState<string>(\"\");\n const [isDragging, setIsDragging] = useState(false);\n\n const frontInputRef = useRef<HTMLInputElement>(null);\n const multipleInputRef = useRef<HTMLInputElement>(null);\n const dropZoneRef = useRef<HTMLDivElement>(null);\n\n const requiresTwoSides = (): boolean => {\n const selected = allowedDocumentTypes.find(\n (d) => d.id === selectedDocumentType,\n );\n return selected?.side === \"RECTO_VERSO\";\n };\n\n const getSelectedDocumentName = () => {\n const selectedDoc = allowedDocumentTypes.find(\n (doc) => doc.id === selectedDocumentType,\n );\n if (!selectedDoc) return \"document\";\n return t(selectedDoc.name) || selectedDoc.name;\n };\n\n const handleFileChange = (\n event: React.ChangeEvent<HTMLInputElement>,\n side: \"front\" | \"back\" = \"front\",\n ) => {\n const file = event.target.files?.[0];\n if (!file) return;\n\n if (\n !file.type.startsWith(\"image/\") &&\n !file.type.startsWith(\"application/pdf\")\n ) {\n setError(t(\"document_upload.errors.invalid_file_type\"));\n return;\n }\n if (file.size > 10 * 1024 * 1024) {\n setError(t(\"document_upload.errors.file_too_large\"));\n return;\n }\n\n setError(\"\");\n const isFilePDF = file.type === \"application/pdf\";\n const reader = new FileReader();\n reader.onload = (e) => {\n const result = e.target?.result as string;\n if (side === \"front\") {\n setFrontImage(result);\n setFrontIsPDF(isFilePDF);\n } else {\n setBackImage(result);\n setBackIsPDF(isFilePDF);\n }\n };\n reader.readAsDataURL(file);\n };\n\n const handleMultipleFileChange = (\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n const files = event.target.files;\n if (!files) return;\n const maxFiles = requiresTwoSides() ? 2 : 1;\n if (files.length > maxFiles) {\n setError(t(\"document_upload.errors.max_files\"));\n return;\n }\n setError(\"\");\n Array.from(files).forEach((file, index) => {\n if (\n !file.type.startsWith(\"image/\") &&\n !file.type.startsWith(\"application/pdf\")\n ) {\n setError(t(\"document_upload.errors.invalid_file_type\"));\n return;\n }\n if (file.size > 10 * 1024 * 1024) {\n setError(t(\"document_upload.errors.file_too_large\"));\n return;\n }\n const isFilePDF = file.type === \"application/pdf\";\n const reader = new FileReader();\n reader.onload = (e) => {\n const result = e.target?.result as string;\n if (index === 0) {\n setFrontImage(result);\n setFrontIsPDF(isFilePDF);\n } else if (index === 1 && requiresTwoSides()) {\n setBackImage(result);\n setBackIsPDF(isFilePDF);\n }\n };\n reader.readAsDataURL(file);\n });\n };\n\n const handleUpload = async () => {\n setError(\"\");\n if (!frontImage) {\n setError(t(\"jdi.document_upload.errors.add_photo_identity\"));\n return;\n }\n\n setIsUploading(true);\n try {\n const files = {\n front: frontImage,\n back: requiresTwoSides() ? backImage : null,\n };\n if (sessionId) {\n logDocumentLoaded(sessionId, \"recto\");\n if (requiresTwoSides() && backImage) {\n logDocumentLoaded(sessionId, \"verso\");\n }\n logDocumentsValidated(sessionId);\n }\n onUpload(files);\n } catch (err) {\n setError(t(\"document_upload.errors.upload_error\"));\n setIsUploading(false);\n }\n };\n\n const removeImage = (side: \"front\" | \"back\" = \"front\") => {\n if (side === \"front\") {\n setFrontImage(null);\n setFrontIsPDF(false);\n } else {\n setBackImage(null);\n setBackIsPDF(false);\n }\n setError(\"\");\n };\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button\n onClick={handleUpload}\n disabled={!frontImage || isUploading}\n >\n {isUploading\n ? t(\"jdi.processing.download\")\n : requiresTwoSides()\n ? t(\"jdi.document_upload.validate_multiple\")\n : t(\"jdi.document_upload.validate_single\")}\n </Button>\n }\n secondary={\n <Button variant=\"secondary\" onClick={onBack} disabled={isUploading}>\n {t(\"buttons.back\")}\n </Button>\n }\n />\n }\n >\n <div className=\"flex-1 flex items-start justify-center md:items-center p-4\">\n <div className=\"w-full max-w-lg\">\n <div className=\"text-center mb-8\">\n <h1 className=\"text-2xl md:text-3xl font-bold text-gray-900 mb-2\">\n {t(\"document_upload.upload_title\")}\n </h1>\n <p className=\"text-gray-600\">\n {t(\"document_upload.upload_description\")}\n </p>\n </div>\n\n {error && (\n <div className=\"mb-6 p-4 bg-red-50 border border-red-200 rounded-lg text-sm text-red-700\">\n {error}\n </div>\n )}\n\n <Card\n className=\"border-2 border-dashed border-teal-300 bg-teal-50/30 p-8 mb-6 text-center\"\n onDragOver={(e) => e.preventDefault()}\n onDrop={(e) => {\n e.preventDefault();\n const files = e.dataTransfer.files;\n if (files.length > 0) {\n const syntheticEvent = { target: { files } } as any;\n requiresTwoSides() ? handleMultipleFileChange(syntheticEvent) : handleFileChange(syntheticEvent);\n }\n }}\n >\n {!frontImage ? (\n <div className=\"space-y-6\">\n <h3 className=\"text-lg font-semibold text-gray-900\">{getSelectedDocumentName()}</h3>\n <Button\n onClick={() => requiresTwoSides() ? multipleInputRef.current?.click() : frontInputRef.current?.click()}\n className=\"bg-teal-600 text-white hover:bg-teal-700 px-6 py-2 rounded-lg font-medium mx-auto flex items-center gap-2\"\n disabled={isUploading}\n >\n <Upload size={18} />\n <span>{t(\"document_upload.browse_files\")}</span>\n </Button>\n <div className=\"text-xs text-gray-500 space-y-1\">\n <p>{t(\"document_upload.accepted_formats\")}</p>\n <p>{requiresTwoSides() ? t(\"document_upload.multiple_files_info\") : t(\"document_upload.single_file_info\")}</p>\n </div>\n </div>\n ) : (\n <div className=\"space-y-4\">\n <div className=\"bg-white border rounded-lg p-4 relative group\">\n <p className=\"text-sm font-medium mb-1\">{frontIsPDF ? t(\"document_upload.pdf_preview\") : t(\"document_upload.image_preview\")}</p>\n {frontIsPDF ? <PDFPreview src={frontImage} /> : <img src={frontImage} alt={t(\"document_upload.front_side\")} className=\"max-h-48 mx-auto\" />}\n <button onClick={() => removeImage(\"front\")} className=\"absolute top-2 right-2 text-red-500 hover:text-red-700\">✕</button>\n </div>\n {requiresTwoSides() && backImage && (\n <div className=\"bg-white border rounded-lg p-4 relative group\">\n <p className=\"text-sm font-medium mb-1\">{t(\"document_upload.back_side\")} {backIsPDF ? \"PDF\" : \"\"}</p>\n {backIsPDF ? <PDFPreview src={backImage} /> : <img src={backImage} alt={t(\"document_upload.back_side\")} className=\"max-h-48 mx-auto\" />}\n <button onClick={() => removeImage(\"back\")} className=\"absolute top-2 right-2 text-red-500 hover:text-red-700\">✕</button>\n </div>\n )}\n {requiresTwoSides() && !backImage && (\n <Button\n onClick={() => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \"image/*,.pdf\";\n input.onchange = (e) => handleFileChange(e as any, \"back\");\n input.click();\n }}\n className=\"text-teal-600 border border-teal-600 bg-transparent hover:bg-teal-50 w-full\"\n >\n {t(\"document_upload.add_back\")}\n </Button>\n )}\n </div>\n )}\n </Card>\n\n <input ref={frontInputRef} type=\"file\" accept=\"image/*,.pdf\" onChange={(e) => handleFileChange(e, \"front\")} className=\"hidden\" />\n <input ref={multipleInputRef} type=\"file\" accept=\"image/*,.pdf\" multiple={true} onChange={handleMultipleFileChange} className=\"hidden\" />\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default DocumentCollectionUpload;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DocumentCollectionUpload.js","sources":["../../../../../src/components/document-collection/DocumentCollectionUpload.tsx"],"sourcesContent":["import React, { useState, useRef } from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { Card } from \"../ui/Card\";\nimport { Upload } from \"lucide-react\";\nimport PDFPreview from \"../ui/PDFPreview\";\nimport type { onUploadFiles } from \"../../types/uploadFiles\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { DocumentTypeSide } from \"./DocumentCollection\";\nimport {\n logDocumentLoaded,\n logDocumentsValidated,\n} from \"../../services/auditTrailService\";\n\ninterface AllowedDocumentType {\n id: string;\n name: string;\n side?: DocumentTypeSide;\n}\n\ninterface DocumentCollectionUploadProps {\n onUpload: (files: onUploadFiles) => void;\n onBack?: () => void;\n selectedDocumentType: string;\n allowedDocumentTypes: AllowedDocumentType[];\n documentSelection?: {\n title?: string;\n description?: string;\n };\n sessionId?: string;\n}\n\nconst DocumentCollectionUpload = ({\n onUpload,\n onBack,\n selectedDocumentType,\n allowedDocumentTypes,\n documentSelection,\n sessionId,\n}: DocumentCollectionUploadProps) => {\n const { t } = useI18n();\n const [frontImage, setFrontImage] = useState<string | null>(null);\n const [backImage, setBackImage] = useState<string | null>(null);\n const [frontIsPDF, setFrontIsPDF] = useState<boolean>(false);\n const [backIsPDF, setBackIsPDF] = useState<boolean>(false);\n const [isUploading, setIsUploading] = useState(false);\n const [error, setError] = useState<string>(\"\");\n const [isDragging, setIsDragging] = useState(false);\n\n const frontInputRef = useRef<HTMLInputElement>(null);\n const multipleInputRef = useRef<HTMLInputElement>(null);\n const dropZoneRef = useRef<HTMLDivElement>(null);\n\n const requiresTwoSides = (): boolean => {\n const selected = allowedDocumentTypes.find(\n (d) => d.id === selectedDocumentType,\n );\n return selected?.side === \"RECTO_VERSO\";\n };\n\n const getSelectedDocumentName = () => {\n const selectedDoc = allowedDocumentTypes.find(\n (doc) => doc.id === selectedDocumentType,\n );\n if (!selectedDoc) return \"document\";\n return t(selectedDoc.name) || selectedDoc.name;\n };\n\n const handleFileChange = (\n event: React.ChangeEvent<HTMLInputElement>,\n side: \"front\" | \"back\" = \"front\",\n ) => {\n const file = event.target.files?.[0];\n if (!file) return;\n\n if (\n !file.type.startsWith(\"image/\") &&\n !file.type.startsWith(\"application/pdf\")\n ) {\n setError(t(\"document_upload.errors.invalid_file_type\"));\n return;\n }\n if (file.size > 10 * 1024 * 1024) {\n setError(t(\"document_upload.errors.file_too_large\"));\n return;\n }\n\n setError(\"\");\n const isFilePDF = file.type === \"application/pdf\";\n const reader = new FileReader();\n reader.onload = (e) => {\n const result = e.target?.result as string;\n if (side === \"front\") {\n setFrontImage(result);\n setFrontIsPDF(isFilePDF);\n } else {\n setBackImage(result);\n setBackIsPDF(isFilePDF);\n }\n };\n reader.readAsDataURL(file);\n };\n\n const handleMultipleFileChange = (\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n const files = event.target.files;\n if (!files) return;\n const maxFiles = requiresTwoSides() ? 2 : 1;\n if (files.length > maxFiles) {\n setError(t(\"document_upload.errors.max_files\"));\n return;\n }\n setError(\"\");\n Array.from(files).forEach((file, index) => {\n if (\n !file.type.startsWith(\"image/\") &&\n !file.type.startsWith(\"application/pdf\")\n ) {\n setError(t(\"document_upload.errors.invalid_file_type\"));\n return;\n }\n if (file.size > 10 * 1024 * 1024) {\n setError(t(\"document_upload.errors.file_too_large\"));\n return;\n }\n const isFilePDF = file.type === \"application/pdf\";\n const reader = new FileReader();\n reader.onload = (e) => {\n const result = e.target?.result as string;\n if (index === 0) {\n setFrontImage(result);\n setFrontIsPDF(isFilePDF);\n } else if (index === 1 && requiresTwoSides()) {\n setBackImage(result);\n setBackIsPDF(isFilePDF);\n }\n };\n reader.readAsDataURL(file);\n });\n };\n\n const handleUpload = async () => {\n setError(\"\");\n if (!frontImage) {\n setError(t(\"jdi.document_upload.errors.add_photo_identity\"));\n return;\n }\n\n setIsUploading(true);\n try {\n const files = {\n front: frontImage,\n back: requiresTwoSides() ? backImage : null,\n };\n if (sessionId) {\n logDocumentLoaded(sessionId, \"recto\");\n if (requiresTwoSides() && backImage) {\n logDocumentLoaded(sessionId, \"verso\");\n }\n logDocumentsValidated(sessionId);\n }\n onUpload(files);\n } catch (err) {\n setError(t(\"document_upload.errors.upload_error\"));\n setIsUploading(false);\n }\n };\n\n const removeImage = (side: \"front\" | \"back\" = \"front\") => {\n if (side === \"front\") {\n setFrontImage(null);\n setFrontIsPDF(false);\n } else {\n setBackImage(null);\n setBackIsPDF(false);\n }\n setError(\"\");\n };\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button\n onClick={handleUpload}\n disabled={!frontImage || isUploading}\n >\n {isUploading\n ? t(\"jdi.processing.download\")\n : requiresTwoSides()\n ? t(\"jdi.document_upload.validate_multiple\")\n : t(\"jdi.document_upload.validate_single\")}\n </Button>\n }\n secondary={onBack ? (\n <Button variant=\"secondary\" onClick={onBack} disabled={isUploading}>\n {t(\"buttons.back\")}\n </Button>\n ) : undefined}\n />\n }\n >\n <div className=\"flex-1 flex items-start justify-center md:items-center p-4\">\n <div className=\"w-full max-w-lg\">\n <div className=\"text-center mb-8\">\n <h1 className=\"text-2xl md:text-3xl font-bold text-gray-900 mb-2\">\n {t(\"document_upload.upload_title\")}\n </h1>\n <p className=\"text-gray-600\">\n {t(\"document_upload.upload_description\")}\n </p>\n </div>\n\n {error && (\n <div className=\"mb-6 p-4 bg-red-50 border border-red-200 rounded-lg text-sm text-red-700\">\n {error}\n </div>\n )}\n\n <Card\n className=\"border-2 border-dashed border-teal-300 bg-teal-50/30 p-8 mb-6 text-center\"\n onDragOver={(e) => e.preventDefault()}\n onDrop={(e) => {\n e.preventDefault();\n const files = e.dataTransfer.files;\n if (files.length > 0) {\n const syntheticEvent = { target: { files } } as any;\n requiresTwoSides() ? handleMultipleFileChange(syntheticEvent) : handleFileChange(syntheticEvent);\n }\n }}\n >\n {!frontImage ? (\n <div className=\"space-y-6\">\n <h3 className=\"text-lg font-semibold text-gray-900\">{getSelectedDocumentName()}</h3>\n <Button\n onClick={() => requiresTwoSides() ? multipleInputRef.current?.click() : frontInputRef.current?.click()}\n className=\"bg-teal-600 text-white hover:bg-teal-700 px-6 py-2 rounded-lg font-medium mx-auto flex items-center gap-2\"\n disabled={isUploading}\n >\n <Upload size={18} />\n <span>{t(\"document_upload.browse_files\")}</span>\n </Button>\n <div className=\"text-xs text-gray-500 space-y-1\">\n <p>{t(\"document_upload.accepted_formats\")}</p>\n <p>{requiresTwoSides() ? t(\"document_upload.multiple_files_info\") : t(\"document_upload.single_file_info\")}</p>\n </div>\n </div>\n ) : (\n <div className=\"space-y-4\">\n <div className=\"bg-white border rounded-lg p-4 relative group\">\n <p className=\"text-sm font-medium mb-1\">{frontIsPDF ? t(\"document_upload.pdf_preview\") : t(\"document_upload.image_preview\")}</p>\n {frontIsPDF ? <PDFPreview src={frontImage} /> : <img src={frontImage} alt={t(\"document_upload.front_side\")} className=\"max-h-48 mx-auto\" />}\n <button onClick={() => removeImage(\"front\")} className=\"absolute top-2 right-2 text-red-500 hover:text-red-700\">✕</button>\n </div>\n {requiresTwoSides() && backImage && (\n <div className=\"bg-white border rounded-lg p-4 relative group\">\n <p className=\"text-sm font-medium mb-1\">{t(\"document_upload.back_side\")} {backIsPDF ? \"PDF\" : \"\"}</p>\n {backIsPDF ? <PDFPreview src={backImage} /> : <img src={backImage} alt={t(\"document_upload.back_side\")} className=\"max-h-48 mx-auto\" />}\n <button onClick={() => removeImage(\"back\")} className=\"absolute top-2 right-2 text-red-500 hover:text-red-700\">✕</button>\n </div>\n )}\n {requiresTwoSides() && !backImage && (\n <Button\n onClick={() => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \"image/*,.pdf\";\n input.onchange = (e) => handleFileChange(e as any, \"back\");\n input.click();\n }}\n className=\"text-teal-600 border border-teal-600 bg-transparent hover:bg-teal-50 w-full\"\n >\n {t(\"document_upload.add_back\")}\n </Button>\n )}\n </div>\n )}\n </Card>\n\n <input ref={frontInputRef} type=\"file\" accept=\"image/*,.pdf\" onChange={(e) => handleFileChange(e, \"front\")} className=\"hidden\" />\n <input ref={multipleInputRef} type=\"file\" accept=\"image/*,.pdf\" multiple={true} onChange={handleMultipleFileChange} className=\"hidden\" />\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default DocumentCollectionUpload;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
@@ -54,7 +54,7 @@ var DocumentError = function (_a) {
|
|
|
54
54
|
defaultValue: "Nous n'avons pas pu valider votre {{documentType}}. Veuillez vérifier les points ci-dessous.",
|
|
55
55
|
}) })] }), !blockContinue && (jsxs("div", { className: "bg-red-50 border border-red-200 rounded-lg p-4", children: [jsx("h3", { className: "font-medium text-red-900 mb-2", children: t("errors.problems_detected", "Problèmes détectés") }), jsx("div", { className: "text-sm text-red-800 space-y-1", children: validationPoints.map(function (point, index) { return (jsx("p", { children: point }, index)); }) })] })), !blockContinue && !isRetryAllowed && (jsxs("div", { className: "bg-orange-50 border border-orange-200 rounded-lg p-4", children: [jsx("h3", { className: "font-medium text-orange-900 mb-2", children: t("errors.resubmission.max_attempts_reached", "Nombre maximum de tentatives atteint") }), jsx("p", { className: "text-sm text-orange-800", children: maxResubmissionAttempts !== undefined
|
|
56
56
|
? t("errors.resubmission.max_attempts_reached_description")
|
|
57
|
-
: t("errors.resubmission.no_resubmission_allowed") })] })), !blockContinue && getUserGuidance() && (jsxs("div", { className: "bg-yellow-50 border border-yellow-200 rounded-lg p-4", children: [jsxs("h3", { className: "font-medium text-yellow-900 mb-2", children: ["\uD83D\uDCA1 ", t("errors.improvement_tips", "Conseils d'amélioration")] }), jsx("p", { className: "text-sm text-yellow-800", children: getUserGuidance() })] })), !blockContinue && isRetryAllowed && (jsxs("div", { className: "bg-blue-50 border border-blue-200 rounded-lg p-4", children: [jsx("h3", { className: "font-medium text-blue-900 mb-2", children: t("errors.next_steps", "Prochaines étapes") }), jsx("p", { className: "text-sm text-blue-800", children: t("errors.next_steps_description", "Veuillez reprendre les photos de votre document en suivant les conseils d'amélioration pour une meilleure qualité.") })] }))] }) }), jsx("div", { className: "sticky bottom-0 md:static bg-white border-t md:border-t-0 p-4 md:p-0 md:pb-8", children: jsxs("div", { className: "w-full max-w-md mx-auto", children: [jsx("div", { className: "flex flex-col space-y-3 md:hidden", children: blockContinue ? (jsx(ButtonDesktop, { onClick: onRetry, type: "continue", children: t("errors.retry_verification", "Recommencer la vérification") })) : (jsxs(Fragment, { children: [onBackToUserInput && (jsx(ButtonDesktop, { onClick: onBackToUserInput, type: "back", children: t("errors.back_to_user_input", "Retour aux informations d'identité") })), retryCount >= 1 && isRetryAllowed && (jsx(ButtonDesktop, { onClick: onContinueAnyway, type: "back", children: t("errors.continue_anyway", "Poursuivre tout de même") })), isRetryAllowed && (jsx(ButtonDesktop, { onClick: onRetry, type: "continue", children: t("errors.retry_verification", "Recommencer la vérification") })), !isRetryAllowed && (jsx(ButtonDesktop, { onClick: onContinueAnyway, type: "back", children: t("errors.continue_anyway", "Poursuivre tout de même") }))] })) }), jsx("div", { className: "hidden md:flex flex-col space-y-3", children: jsx("div", { className: "flex justify-center space-x-3", children: blockContinue ? (jsx(ButtonDesktop, { onClick: onRetry, type: "continue", children: t("errors.retry_verification", "Recommencer la vérification") })) : (jsxs(Fragment, { children: [onBackToUserInput && (jsx(ButtonDesktop, { onClick: onBackToUserInput, type: "back", children: t("errors.back_to_user_input", "Retour aux informations d'identité") })), retryCount >= 1 && isRetryAllowed && (jsx(ButtonDesktop, { onClick: onContinueAnyway, type: "back", children: t("errors.continue_anyway", "Poursuivre tout de même") })), isRetryAllowed && (jsx(ButtonDesktop, { onClick: onRetry, type: "continue", children: t("errors.retry_verification", "Recommencer la vérification") })), !isRetryAllowed && (jsx(ButtonDesktop, { onClick: onContinueAnyway, type: "continue", children: t("errors.continue_anyway", "Poursuivre tout de même") }))] })) }) })] }) })] }));
|
|
57
|
+
: t("errors.resubmission.no_resubmission_allowed") })] })), !blockContinue && getUserGuidance() && (jsxs("div", { className: "bg-yellow-50 border border-yellow-200 rounded-lg p-4", children: [jsxs("h3", { className: "font-medium text-yellow-900 mb-2", children: ["\uD83D\uDCA1 ", t("errors.improvement_tips", "Conseils d'amélioration")] }), jsx("p", { className: "text-sm text-yellow-800", children: getUserGuidance() })] })), !blockContinue && isRetryAllowed && (jsxs("div", { className: "bg-blue-50 border border-blue-200 rounded-lg p-4", children: [jsx("h3", { className: "font-medium text-blue-900 mb-2", children: t("errors.next_steps", "Prochaines étapes") }), jsx("p", { className: "text-sm text-blue-800", children: t("errors.next_steps_description", "Veuillez reprendre les photos de votre document en suivant les conseils d'amélioration pour une meilleure qualité.") })] }))] }) }), jsx("div", { className: "sticky bottom-0 md:static bg-white border-t md:border-t-0 p-4 md:p-0 md:pb-8", children: jsxs("div", { className: "w-full max-w-md mx-auto", children: [jsx("div", { className: "flex flex-col space-y-3 md:hidden", children: blockContinue ? (jsx(ButtonDesktop, { onClick: onRetry, type: "continue", children: t("errors.retry_verification", "Recommencer la vérification") })) : (jsxs(Fragment, { children: [onBackToUserInput && (jsx(ButtonDesktop, { onClick: onBackToUserInput, type: "back", children: t("errors.back_to_user_input", "Retour aux informations d'identité") })), retryCount >= 1 && isRetryAllowed && onContinueAnyway && (jsx(ButtonDesktop, { onClick: onContinueAnyway, type: "back", children: t("errors.continue_anyway", "Poursuivre tout de même") })), isRetryAllowed && (jsx(ButtonDesktop, { onClick: onRetry, type: "continue", children: t("errors.retry_verification", "Recommencer la vérification") })), !isRetryAllowed && onContinueAnyway && (jsx(ButtonDesktop, { onClick: onContinueAnyway, type: "back", children: t("errors.continue_anyway", "Poursuivre tout de même") }))] })) }), jsx("div", { className: "hidden md:flex flex-col space-y-3", children: jsx("div", { className: "flex justify-center space-x-3", children: blockContinue ? (jsx(ButtonDesktop, { onClick: onRetry, type: "continue", children: t("errors.retry_verification", "Recommencer la vérification") })) : (jsxs(Fragment, { children: [onBackToUserInput && (jsx(ButtonDesktop, { onClick: onBackToUserInput, type: "back", children: t("errors.back_to_user_input", "Retour aux informations d'identité") })), retryCount >= 1 && isRetryAllowed && onContinueAnyway && (jsx(ButtonDesktop, { onClick: onContinueAnyway, type: "back", children: t("errors.continue_anyway", "Poursuivre tout de même") })), isRetryAllowed && (jsx(ButtonDesktop, { onClick: onRetry, type: "continue", children: t("errors.retry_verification", "Recommencer la vérification") })), !isRetryAllowed && onContinueAnyway && (jsx(ButtonDesktop, { onClick: onContinueAnyway, type: "continue", children: t("errors.continue_anyway", "Poursuivre tout de même") }))] })) }) })] }) })] }));
|
|
58
58
|
};
|
|
59
59
|
|
|
60
60
|
export { DocumentError as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocumentError.js","sources":["../../../../../src/components/document-collection/DocumentError.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport ButtonDesktop from \"../ui/ButtonDesktop\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport { getValidationPoints } from \"../../utils/validationUtils\";\nimport type { DocumentErrorProps } from \"./types\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\nconst DocumentError: React.FC<DocumentErrorProps> = ({\n documentType,\n documentTypeLabel,\n onRetry,\n onContinueAnyway,\n onBackToUserInput,\n retryCount = 0,\n predictions = [],\n errorDetails,\n allowResubmission,\n maxResubmissionAttempts,\n isRetryAllowed = true,\n errorCode,\n blockContinue = false,\n}) => {\n const { t } = useI18n();\n const [validationPoints, setValidationPoints] = useState<string[]>([]);\n\n useEffect(() => {\n // Use shared utility to get validation points\n setValidationPoints(\n getValidationPoints(errorCode, predictions, t, \"error\"),\n );\n }, [predictions, errorCode, t]);\n\n // Get user guidance message if available\n const getUserGuidance = (): string | null => {\n if (!errorCode) return null;\n const guidance = t(`user_guidance.${errorCode}`, \"\");\n return guidance || null;\n };\n\n const getDocumentLabel = (documentType: string): string => {\n if (documentTypeLabel) return documentTypeLabel;\n\n const translated = t(documentType);\n // If no translation, use default fallbacks\n if (translated === documentType) {\n switch (documentType) {\n case \"national_id\":\n return t(\"documentTypes.idCard\", \"carte nationale d'identité\");\n case \"passport\":\n return t(\"documentTypes.passport\", \"passeport\");\n case \"driving_license\":\n return t(\"documentTypes.driving_license\", \"permis de conduire\");\n default:\n return t(\"documentTypes.document\", \"document\");\n }\n }\n return translated;\n };\n\n return (\n <div className=\"flex flex-col justify-between h-full w-full\">\n {/* Main content area */}\n <div className=\"flex-1 px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n {/* Error icon */}\n <div className=\"text-center\">\n <div className=\"mx-auto w-16 h-16 bg-red-100 rounded-full flex items-center justify-center mb-4\">\n <div className=\"w-8 h-8 bg-red-500 rounded-full flex items-center justify-center\">\n <span className=\"text-white text-lg\">✕</span>\n </div>\n </div>\n </div>\n\n {/* Header */}\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl text-red-600\">\n {blockContinue\n ? t(\"errors.upload_not_confirmed.title\")\n : t(\"errors.verification_failed\", \"Vérification échouée\")}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed\">\n {blockContinue\n ? t(\"errors.upload_not_confirmed.subtitle\")\n : isRetryAllowed\n ? t(\"errors.verification_failed_subtitle\", {\n documentType: getDocumentLabel(documentType),\n defaultValue:\n \"Nous n'avons pas pu valider votre {{documentType}}. Veuillez vérifier les points ci-dessous et réessayer.\",\n })\n : t(\"errors.verification_failed_subtitle_no_retry\", {\n documentType: getDocumentLabel(documentType),\n defaultValue:\n \"Nous n'avons pas pu valider votre {{documentType}}. Veuillez vérifier les points ci-dessous.\",\n })}\n </Subtitle>\n </div>\n\n {/* Error details - Validation Points */}\n {!blockContinue && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-4\">\n <h3 className=\"font-medium text-red-900 mb-2\">\n {t(\"errors.problems_detected\", \"Problèmes détectés\")}\n </h3>\n <div className=\"text-sm text-red-800 space-y-1\">\n {validationPoints.map((point, index) => (\n <p key={index}>{point}</p>\n ))}\n </div>\n </div>\n )}\n\n {/* Resubmission limit message */}\n {!blockContinue && !isRetryAllowed && (\n <div className=\"bg-orange-50 border border-orange-200 rounded-lg p-4\">\n <h3 className=\"font-medium text-orange-900 mb-2\">\n {t(\n \"errors.resubmission.max_attempts_reached\",\n \"Nombre maximum de tentatives atteint\",\n )}\n </h3>\n <p className=\"text-sm text-orange-800\">\n {maxResubmissionAttempts !== undefined\n ? t(\"errors.resubmission.max_attempts_reached_description\")\n : t(\"errors.resubmission.no_resubmission_allowed\")}\n </p>\n </div>\n )}\n\n {/* User guidance - specific advice based on error code */}\n {!blockContinue && getUserGuidance() && (\n <div className=\"bg-yellow-50 border border-yellow-200 rounded-lg p-4\">\n <h3 className=\"font-medium text-yellow-900 mb-2\">\n 💡 {t(\"errors.improvement_tips\", \"Conseils d'amélioration\")}\n </h3>\n <p className=\"text-sm text-yellow-800\">{getUserGuidance()}</p>\n </div>\n )}\n\n {/* Next steps */}\n {!blockContinue && isRetryAllowed && (\n <div className=\"bg-blue-50 border border-blue-200 rounded-lg p-4\">\n <h3 className=\"font-medium text-blue-900 mb-2\">\n {t(\"errors.next_steps\", \"Prochaines étapes\")}\n </h3>\n <p className=\"text-sm text-blue-800\">\n {t(\n \"errors.next_steps_description\",\n \"Veuillez reprendre les photos de votre document en suivant les conseils d'amélioration pour une meilleure qualité.\",\n )}\n </p>\n </div>\n )}\n </div>\n </div>\n\n {/* Footer with buttons */}\n <div className=\"sticky bottom-0 md:static bg-white border-t md:border-t-0 p-4 md:p-0 md:pb-8\">\n <div className=\"w-full max-w-md mx-auto\">\n {/* Mobile layout */}\n <div className=\"flex flex-col space-y-3 md:hidden\">\n {blockContinue ? (\n <ButtonDesktop onClick={onRetry} type=\"continue\">\n {t(\"errors.retry_verification\", \"Recommencer la vérification\")}\n </ButtonDesktop>\n ) : (\n <>\n {onBackToUserInput && (\n <ButtonDesktop onClick={onBackToUserInput} type=\"back\">\n {t(\n \"errors.back_to_user_input\",\n \"Retour aux informations d'identité\",\n )}\n </ButtonDesktop>\n )}\n {retryCount >= 1 && isRetryAllowed && (\n <ButtonDesktop onClick={onContinueAnyway} type=\"back\">\n {t(\"errors.continue_anyway\", \"Poursuivre tout de même\")}\n </ButtonDesktop>\n )}\n {isRetryAllowed && (\n <ButtonDesktop onClick={onRetry} type=\"continue\">\n {t(\n \"errors.retry_verification\",\n \"Recommencer la vérification\",\n )}\n </ButtonDesktop>\n )}\n {!isRetryAllowed && (\n <ButtonDesktop onClick={onContinueAnyway} type=\"back\">\n {t(\"errors.continue_anyway\", \"Poursuivre tout de même\")}\n </ButtonDesktop>\n )}\n </>\n )}\n </div>\n\n {/* Desktop layout */}\n <div className=\"hidden md:flex flex-col space-y-3\">\n <div className=\"flex justify-center space-x-3\">\n {blockContinue ? (\n <ButtonDesktop onClick={onRetry} type=\"continue\">\n {t(\n \"errors.retry_verification\",\n \"Recommencer la vérification\",\n )}\n </ButtonDesktop>\n ) : (\n <>\n {onBackToUserInput && (\n <ButtonDesktop onClick={onBackToUserInput} type=\"back\">\n {t(\n \"errors.back_to_user_input\",\n \"Retour aux informations d'identité\",\n )}\n </ButtonDesktop>\n )}\n {retryCount >= 1 && isRetryAllowed && (\n <ButtonDesktop onClick={onContinueAnyway} type=\"back\">\n {t(\"errors.continue_anyway\", \"Poursuivre tout de même\")}\n </ButtonDesktop>\n )}\n {isRetryAllowed && (\n <ButtonDesktop onClick={onRetry} type=\"continue\">\n {t(\n \"errors.retry_verification\",\n \"Recommencer la vérification\",\n )}\n </ButtonDesktop>\n )}\n {!isRetryAllowed && (\n <ButtonDesktop onClick={onContinueAnyway} type=\"continue\">\n {t(\"errors.continue_anyway\", \"Poursuivre tout de même\")}\n </ButtonDesktop>\n )}\n </>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default DocumentError;\nexport type { DocumentErrorProps };\n"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DocumentError.js","sources":["../../../../../src/components/document-collection/DocumentError.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport ButtonDesktop from \"../ui/ButtonDesktop\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport { getValidationPoints } from \"../../utils/validationUtils\";\nimport type { DocumentErrorProps } from \"./types\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\nconst DocumentError: React.FC<DocumentErrorProps> = ({\n documentType,\n documentTypeLabel,\n onRetry,\n onContinueAnyway,\n onBackToUserInput,\n retryCount = 0,\n predictions = [],\n errorDetails,\n allowResubmission,\n maxResubmissionAttempts,\n isRetryAllowed = true,\n errorCode,\n blockContinue = false,\n}) => {\n const { t } = useI18n();\n const [validationPoints, setValidationPoints] = useState<string[]>([]);\n\n useEffect(() => {\n // Use shared utility to get validation points\n setValidationPoints(\n getValidationPoints(errorCode, predictions, t, \"error\"),\n );\n }, [predictions, errorCode, t]);\n\n // Get user guidance message if available\n const getUserGuidance = (): string | null => {\n if (!errorCode) return null;\n const guidance = t(`user_guidance.${errorCode}`, \"\");\n return guidance || null;\n };\n\n const getDocumentLabel = (documentType: string): string => {\n if (documentTypeLabel) return documentTypeLabel;\n\n const translated = t(documentType);\n // If no translation, use default fallbacks\n if (translated === documentType) {\n switch (documentType) {\n case \"national_id\":\n return t(\"documentTypes.idCard\", \"carte nationale d'identité\");\n case \"passport\":\n return t(\"documentTypes.passport\", \"passeport\");\n case \"driving_license\":\n return t(\"documentTypes.driving_license\", \"permis de conduire\");\n default:\n return t(\"documentTypes.document\", \"document\");\n }\n }\n return translated;\n };\n\n return (\n <div className=\"flex flex-col justify-between h-full w-full\">\n {/* Main content area */}\n <div className=\"flex-1 px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n {/* Error icon */}\n <div className=\"text-center\">\n <div className=\"mx-auto w-16 h-16 bg-red-100 rounded-full flex items-center justify-center mb-4\">\n <div className=\"w-8 h-8 bg-red-500 rounded-full flex items-center justify-center\">\n <span className=\"text-white text-lg\">✕</span>\n </div>\n </div>\n </div>\n\n {/* Header */}\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl text-red-600\">\n {blockContinue\n ? t(\"errors.upload_not_confirmed.title\")\n : t(\"errors.verification_failed\", \"Vérification échouée\")}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed\">\n {blockContinue\n ? t(\"errors.upload_not_confirmed.subtitle\")\n : isRetryAllowed\n ? t(\"errors.verification_failed_subtitle\", {\n documentType: getDocumentLabel(documentType),\n defaultValue:\n \"Nous n'avons pas pu valider votre {{documentType}}. Veuillez vérifier les points ci-dessous et réessayer.\",\n })\n : t(\"errors.verification_failed_subtitle_no_retry\", {\n documentType: getDocumentLabel(documentType),\n defaultValue:\n \"Nous n'avons pas pu valider votre {{documentType}}. Veuillez vérifier les points ci-dessous.\",\n })}\n </Subtitle>\n </div>\n\n {/* Error details - Validation Points */}\n {!blockContinue && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-4\">\n <h3 className=\"font-medium text-red-900 mb-2\">\n {t(\"errors.problems_detected\", \"Problèmes détectés\")}\n </h3>\n <div className=\"text-sm text-red-800 space-y-1\">\n {validationPoints.map((point, index) => (\n <p key={index}>{point}</p>\n ))}\n </div>\n </div>\n )}\n\n {/* Resubmission limit message */}\n {!blockContinue && !isRetryAllowed && (\n <div className=\"bg-orange-50 border border-orange-200 rounded-lg p-4\">\n <h3 className=\"font-medium text-orange-900 mb-2\">\n {t(\n \"errors.resubmission.max_attempts_reached\",\n \"Nombre maximum de tentatives atteint\",\n )}\n </h3>\n <p className=\"text-sm text-orange-800\">\n {maxResubmissionAttempts !== undefined\n ? t(\"errors.resubmission.max_attempts_reached_description\")\n : t(\"errors.resubmission.no_resubmission_allowed\")}\n </p>\n </div>\n )}\n\n {/* User guidance - specific advice based on error code */}\n {!blockContinue && getUserGuidance() && (\n <div className=\"bg-yellow-50 border border-yellow-200 rounded-lg p-4\">\n <h3 className=\"font-medium text-yellow-900 mb-2\">\n 💡 {t(\"errors.improvement_tips\", \"Conseils d'amélioration\")}\n </h3>\n <p className=\"text-sm text-yellow-800\">{getUserGuidance()}</p>\n </div>\n )}\n\n {/* Next steps */}\n {!blockContinue && isRetryAllowed && (\n <div className=\"bg-blue-50 border border-blue-200 rounded-lg p-4\">\n <h3 className=\"font-medium text-blue-900 mb-2\">\n {t(\"errors.next_steps\", \"Prochaines étapes\")}\n </h3>\n <p className=\"text-sm text-blue-800\">\n {t(\n \"errors.next_steps_description\",\n \"Veuillez reprendre les photos de votre document en suivant les conseils d'amélioration pour une meilleure qualité.\",\n )}\n </p>\n </div>\n )}\n </div>\n </div>\n\n {/* Footer with buttons */}\n <div className=\"sticky bottom-0 md:static bg-white border-t md:border-t-0 p-4 md:p-0 md:pb-8\">\n <div className=\"w-full max-w-md mx-auto\">\n {/* Mobile layout */}\n <div className=\"flex flex-col space-y-3 md:hidden\">\n {blockContinue ? (\n <ButtonDesktop onClick={onRetry} type=\"continue\">\n {t(\"errors.retry_verification\", \"Recommencer la vérification\")}\n </ButtonDesktop>\n ) : (\n <>\n {onBackToUserInput && (\n <ButtonDesktop onClick={onBackToUserInput} type=\"back\">\n {t(\n \"errors.back_to_user_input\",\n \"Retour aux informations d'identité\",\n )}\n </ButtonDesktop>\n )}\n {retryCount >= 1 && isRetryAllowed && onContinueAnyway && (\n <ButtonDesktop onClick={onContinueAnyway} type=\"back\">\n {t(\"errors.continue_anyway\", \"Poursuivre tout de même\")}\n </ButtonDesktop>\n )}\n {isRetryAllowed && (\n <ButtonDesktop onClick={onRetry} type=\"continue\">\n {t(\n \"errors.retry_verification\",\n \"Recommencer la vérification\",\n )}\n </ButtonDesktop>\n )}\n {!isRetryAllowed && onContinueAnyway && (\n <ButtonDesktop onClick={onContinueAnyway} type=\"back\">\n {t(\"errors.continue_anyway\", \"Poursuivre tout de même\")}\n </ButtonDesktop>\n )}\n </>\n )}\n </div>\n\n {/* Desktop layout */}\n <div className=\"hidden md:flex flex-col space-y-3\">\n <div className=\"flex justify-center space-x-3\">\n {blockContinue ? (\n <ButtonDesktop onClick={onRetry} type=\"continue\">\n {t(\n \"errors.retry_verification\",\n \"Recommencer la vérification\",\n )}\n </ButtonDesktop>\n ) : (\n <>\n {onBackToUserInput && (\n <ButtonDesktop onClick={onBackToUserInput} type=\"back\">\n {t(\n \"errors.back_to_user_input\",\n \"Retour aux informations d'identité\",\n )}\n </ButtonDesktop>\n )}\n {retryCount >= 1 && isRetryAllowed && onContinueAnyway && (\n <ButtonDesktop onClick={onContinueAnyway} type=\"back\">\n {t(\"errors.continue_anyway\", \"Poursuivre tout de même\")}\n </ButtonDesktop>\n )}\n {isRetryAllowed && (\n <ButtonDesktop onClick={onRetry} type=\"continue\">\n {t(\n \"errors.retry_verification\",\n \"Recommencer la vérification\",\n )}\n </ButtonDesktop>\n )}\n {!isRetryAllowed && onContinueAnyway && (\n <ButtonDesktop onClick={onContinueAnyway} type=\"continue\">\n {t(\"errors.continue_anyway\", \"Poursuivre tout de même\")}\n </ButtonDesktop>\n )}\n </>\n )}\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default DocumentError;\nexport type { DocumentErrorProps };\n"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}
|
|
@@ -67,7 +67,7 @@ var JDICountrySelection = function (_a) {
|
|
|
67
67
|
return t("jdi.country_selection.subtitle_identity");
|
|
68
68
|
}
|
|
69
69
|
};
|
|
70
|
-
return (jsx(MobilePageLayout, { footer: jsx(PageActions, { primary: jsx(Button, { onClick: handleContinue, disabled: !selectedCountry, children: t("jdi.country_selection.continue") }), secondary: jsx(Button, { variant: "secondary", onClick: onBack, children: t("jdi.country_selection.back") }) }), children: jsx("div", { className: "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: countryIntroText || getTitle() }), jsx(Subtitle, { className: "text-sm text-gray-600 leading-relaxed", children: countryDescText || getSubtitle() })] }), jsxs("div", { className: "space-y-4", children: [jsxs("div", { className: "space-y-2", children: [jsx("label", { className: "block text-sm font-medium text-gray-700", children: t("jdi.country_selection.country_label") }), jsx(Select, { value: selectedCountry, onValueChange: function (value) {
|
|
70
|
+
return (jsx(MobilePageLayout, { footer: jsx(PageActions, { primary: jsx(Button, { onClick: handleContinue, disabled: !selectedCountry, children: t("jdi.country_selection.continue") }), secondary: onBack ? (jsx(Button, { variant: "secondary", onClick: onBack, children: t("jdi.country_selection.back") })) : undefined }), children: jsx("div", { className: "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: countryIntroText || getTitle() }), jsx(Subtitle, { className: "text-sm text-gray-600 leading-relaxed", children: countryDescText || getSubtitle() })] }), jsxs("div", { className: "space-y-4", children: [jsxs("div", { className: "space-y-2", children: [jsx("label", { className: "block text-sm font-medium text-gray-700", children: t("jdi.country_selection.country_label") }), jsx(Select, { value: selectedCountry, onValueChange: function (value) {
|
|
71
71
|
setSelectedCountry(value);
|
|
72
72
|
setError("");
|
|
73
73
|
}, placeholder: t("jdi.country_selection.country_placeholder"), options: countries ? countries : [], allowCustomValue: true }), error && jsx("p", { className: "text-sm text-red-600 mt-1", children: error })] }), jsxs("div", { className: "bg-blue-50 border border-blue-200 rounded-lg p-4", children: [jsx("h3", { className: "font-medium text-blue-900 mb-2", children: t("jdi.country_selection.info_title") }), jsx("p", { className: "text-sm text-blue-800", children: t("jdi.country_selection.info_description") })] })] })] }) }) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JDICountrySelection.js","sources":["../../../../../src/components/jdi/JDICountrySelection.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { Select } from \"../ui/SelectComponent\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport { AcceptedCountry } from \"../../types/session\";\nimport { getCountryInfo } from \"../../utils/jdiCountry\";\nimport { ISO_COUNTRY_CODES } from \"../../utils/isoCountryCodes\";\nimport { getCountryFlag } from \"../../utils/countryFlags\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\nconst DEFAULT_COUNTRIES = [\n { value: \"FR\", label: \"France\" },\n { value: \"ES\", label: \"Espagne\" },\n { value: \"PT\", label: \"Portugal\" },\n { value: \"DE\", label: \"Allemagne\" },\n { value: \"IT\", label: \"Italie\" },\n { value: \"BE\", label: \"Belgique\" },\n { value: \"NL\", label: \"Pays-Bas\" },\n { value: \"CH\", label: \"Suisse\" },\n { value: \"LU\", label: \"Luxembourg\" },\n { value: \"AT\", label: \"Autriche\" },\n];\n\nconst INTERNATIONAL_COUNTRY = {\n value: \"INT\",\n labelKey: \"jdi.countrySelection.international\",\n fallbackLabel: \"International\",\n};\n\ninterface JDICountrySelectionProps {\n onCountrySelect: (countryId: string) => void;\n onBack
|
|
1
|
+
{"version":3,"file":"JDICountrySelection.js","sources":["../../../../../src/components/jdi/JDICountrySelection.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { Select } from \"../ui/SelectComponent\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport { AcceptedCountry } from \"../../types/session\";\nimport { getCountryInfo } from \"../../utils/jdiCountry\";\nimport { ISO_COUNTRY_CODES } from \"../../utils/isoCountryCodes\";\nimport { getCountryFlag } from \"../../utils/countryFlags\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\nconst DEFAULT_COUNTRIES = [\n { value: \"FR\", label: \"France\" },\n { value: \"ES\", label: \"Espagne\" },\n { value: \"PT\", label: \"Portugal\" },\n { value: \"DE\", label: \"Allemagne\" },\n { value: \"IT\", label: \"Italie\" },\n { value: \"BE\", label: \"Belgique\" },\n { value: \"NL\", label: \"Pays-Bas\" },\n { value: \"CH\", label: \"Suisse\" },\n { value: \"LU\", label: \"Luxembourg\" },\n { value: \"AT\", label: \"Autriche\" },\n];\n\nconst INTERNATIONAL_COUNTRY = {\n value: \"INT\",\n labelKey: \"jdi.countrySelection.international\",\n fallbackLabel: \"International\",\n};\n\ninterface JDICountrySelectionProps {\n onCountrySelect: (countryId: string) => void;\n onBack?: () => void;\n documentTypeId?: string;\n acceptedCountries?: AcceptedCountry[];\n countryIntroText?: string;\n countryDescText?: string;\n}\n\nconst JDICountrySelection = ({\n onCountrySelect,\n onBack,\n documentTypeId,\n acceptedCountries,\n countryIntroText,\n countryDescText,\n}: JDICountrySelectionProps) => {\n const [selectedCountry, setSelectedCountry] = useState<string>(\"\");\n const [error, setError] = useState<string>(\"\");\n const { t } = useI18n();\n\n const countries = useMemo(() => {\n if (acceptedCountries && acceptedCountries.length > 0) {\n const countries = acceptedCountries\n .filter((country) => country.code)\n .map((country) => ({\n value: country.code,\n label: t(country.code),\n flag: getCountryFlag(country.code),\n }))\n .sort((a, b) => a.label.localeCompare(b.label));\n return countries;\n }\n }, [acceptedCountries, t]);\n\n useEffect(() => {\n if (!countries?.length) {\n return;\n }\n\n const hasSelectedCountry = countries.some(\n (country) => country.value === selectedCountry\n );\n\n if (!hasSelectedCountry) {\n const initialCountry = countries.length === 1 ? countries[0].value : \"\";\n setSelectedCountry(initialCountry);\n setError(\"\");\n }\n }, [countries, selectedCountry]);\n\n const handleContinue = () => {\n if (!selectedCountry) {\n setError(t(\"jdi.country_selection.error_select_country\"));\n return;\n }\n setError(\"\");\n onCountrySelect(selectedCountry);\n };\n\n // Déterminer le titre en fonction du type de document\n const getTitle = () => {\n switch (documentTypeId) {\n case \"jdd\":\n return t(\"jdi.country_selection.title_jdd\");\n case \"income-proof\":\n return t(\"jdi.country_selection.title_income_proof\");\n default:\n return t(\"jdi.country_selection.title_identity\");\n }\n };\n\n const getSubtitle = () => {\n switch (documentTypeId) {\n case \"jdd\":\n return t(\"jdi.country_selection.subtitle_jdd\");\n case \"income-proof\":\n return t(\"jdi.country_selection.subtitle_income_proof\");\n default:\n return t(\"jdi.country_selection.subtitle_identity\");\n }\n };\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button onClick={handleContinue} disabled={!selectedCountry}>\n {t(\"jdi.country_selection.continue\")}\n </Button>\n }\n secondary={onBack ? (\n <Button variant=\"secondary\" onClick={onBack}>\n {t(\"jdi.country_selection.back\")}\n </Button>\n ) : undefined}\n />\n }\n >\n <div className=\"px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n {/* Header */}\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {countryIntroText || getTitle()}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed\">\n {countryDescText || getSubtitle()}\n </Subtitle>\n </div>\n\n {/* Country selection */}\n <div className=\"space-y-4\">\n <div className=\"space-y-2\">\n <label className=\"block text-sm font-medium text-gray-700\">\n {t(\"jdi.country_selection.country_label\")}\n </label>\n <Select\n value={selectedCountry}\n onValueChange={(value: string) => {\n setSelectedCountry(value);\n setError(\"\");\n }}\n placeholder={t(\"jdi.country_selection.country_placeholder\")}\n options={countries ? countries : []}\n allowCustomValue={true}\n />\n {error && <p className=\"text-sm text-red-600 mt-1\">{error}</p>}\n </div>\n\n {/* Information card */}\n <div className=\"bg-blue-50 border border-blue-200 rounded-lg p-4\">\n <h3 className=\"font-medium text-blue-900 mb-2\">\n {t(\"jdi.country_selection.info_title\")}\n </h3>\n <p className=\"text-sm text-blue-800\">\n {t(\"jdi.country_selection.info_description\")}\n </p>\n </div>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default JDICountrySelection;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
@@ -169,7 +169,7 @@ var JDIDocumentSelection = function (_a) {
|
|
|
169
169
|
];
|
|
170
170
|
}
|
|
171
171
|
};
|
|
172
|
-
return (jsx(MobilePageLayout, { contentClassName: "h-full", footer: jsx(PageActions, { primary: jsx(Button, { onClick: handleContinue, disabled: !selectedDocument, children: t("jdi.document_selection.continue") }), secondary: jsx(Button, { variant: "secondary", onClick: onBack, children: t("jdi.document_selection.back") }) }), children: jsx("div", { className: "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: documentSelectionTitle || getTitle() }), jsx(Subtitle, { className: "text-sm text-gray-600 leading-relaxed whitespace-pre-line", children: documentSelectionDescription || getSubtitle() })] }), jsxs("div", { className: "space-y-4", children: [jsxs("div", { children: [jsxs("label", { className: "block text-sm font-medium text-gray-700 mb-2", children: [getLabel(), " *"] }), jsx(Select, { options: documentOptions, value: selectedDocument, onValueChange: function (value) {
|
|
172
|
+
return (jsx(MobilePageLayout, { contentClassName: "h-full", footer: jsx(PageActions, { primary: jsx(Button, { onClick: handleContinue, disabled: !selectedDocument, children: t("jdi.document_selection.continue") }), secondary: onBack ? (jsx(Button, { variant: "secondary", onClick: onBack, children: t("jdi.document_selection.back") })) : undefined }), children: jsx("div", { className: "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: documentSelectionTitle || getTitle() }), jsx(Subtitle, { className: "text-sm text-gray-600 leading-relaxed whitespace-pre-line", children: documentSelectionDescription || getSubtitle() })] }), jsxs("div", { className: "space-y-4", children: [jsxs("div", { children: [jsxs("label", { className: "block text-sm font-medium text-gray-700 mb-2", children: [getLabel(), " *"] }), jsx(Select, { options: documentOptions, value: selectedDocument, onValueChange: function (value) {
|
|
173
173
|
setSelectedDocument(value);
|
|
174
174
|
setError("");
|
|
175
175
|
}, placeholder: getPlaceholder() }), error && (jsxs("p", { className: "mt-1 text-sm text-red-600 flex items-center", children: [jsx("span", { className: "mr-1", children: "\u26A0" }), error] }))] }), selectedDocument && !nfcEnabled && (jsxs("div", { className: "bg-gray-50 border border-gray-200 rounded-lg p-4", children: [jsx("h3", { className: "font-medium text-gray-900 mb-2", children: t("jdi.document_selection.info_title") }), jsx("div", { className: "text-sm text-gray-700 space-y-1", children: getInstructions().map(function (instruction, index) { return (jsx("p", { children: instruction }, index)); }) })] })), nfcEnabled && jsx(NfcOnboardingNotice, {})] })] }) }) }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JDIDocumentSelection.js","sources":["../../../../../src/components/jdi/JDIDocumentSelection.tsx"],"sourcesContent":["import { useState, useEffect } from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { Select } from \"../ui/SelectComponent\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport { AcceptedCountry } from \"../../types/session\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport NfcOnboardingNotice from \"../nfc-scan/NfcOnboardingNotice\";\n\nconst DOCUMENT_KEYS: Array<{\n key: keyof AcceptedCountry[\"documents\"];\n value: string;\n translationKey: string;\n fallbackLabel: string;\n}> = [\n {\n key: \"passport\",\n value: \"passport\",\n translationKey: \"documentTypes.Passport\",\n fallbackLabel: \"Passeport\",\n },\n {\n key: \"idCard\",\n value: \"idCard\",\n translationKey: \"documentTypes.IdCard\",\n fallbackLabel: \"Carte nationale d'identité\",\n },\n {\n key: \"driverLicense\",\n value: \"driverLicense\",\n translationKey: \"documentTypes.Driving_license\",\n fallbackLabel: \"Permis de conduire\",\n },\n {\n key: \"residencePermit\",\n value: \"residencePermit\",\n translationKey: \"documentTypes.Residence_permit\",\n fallbackLabel: \"Titre de séjour\",\n },\n {\n key: \"pinkDriverLicense\",\n value: \"pinkDriverLicense\",\n translationKey: \"documentTypes.Pink_driving_license\",\n fallbackLabel: \"Permis de conduire rose (ancien format)\",\n },\n ];\n\ninterface JDIDocumentSelectionProps {\n onDocumentSelect: (documentType: string) => void;\n onBack: () => void;\n documentTypeId?: string; // ID du type de document (jdd, income-proof, etc.)\n sessionId?: string; // Session ID pour récupérer les options stockées\n chosenCountry?: AcceptedCountry; // Pays choisi par l'utilisateur\n documentSelectionTitle?: string;\n documentSelectionDescription?: string;\n nfcEnabled?: boolean; // Affiche l'onboarding NFC quand le parcours utilise la lecture sans contact\n}\n\nconst JDIDocumentSelection = ({\n onDocumentSelect,\n onBack,\n documentTypeId,\n sessionId,\n chosenCountry,\n documentSelectionTitle,\n documentSelectionDescription,\n nfcEnabled = false,\n}: JDIDocumentSelectionProps) => {\n const [selectedDocument, setSelectedDocument] = useState<string>(\"\");\n const [error, setError] = useState<string>(\"\");\n const [documentOptions, setDocumentOptions] = useState<\n { value: string; label: string }[]\n >([]);\n\n const { t } = useI18n();\n\n // Récupérer les options de documents spécifiques à la session\n useEffect(() => {\n console.log(\"Retrieving document options for session:\", sessionId);\n console.log(\"Chosen country:\", chosenCountry);\n if (chosenCountry?.documents) {\n const options = DOCUMENT_KEYS.filter(({ key }) => {\n const docs = chosenCountry.documents[key];\n return Array.isArray(docs) && docs.length > 0;\n }).map(({ value, translationKey, fallbackLabel }) => ({\n value,\n label: t(translationKey, fallbackLabel),\n }));\n console.log(\"Available document options:\", options);\n setDocumentOptions(options);\n } else {\n setDocumentOptions([]);\n }\n }, []);\n\n // SKIPPED if only one option, select it by default and skip to next step\n // useEffect(() => {\n // if (documentOptions.length === 1) {\n // setSelectedDocument(documentOptions[0].value);\n // setError(\"\");\n // onDocumentSelect(documentOptions[0].value);\n // }\n // }, [documentOptions, onDocumentSelect]);\n\n const handleContinue = () => {\n if (!selectedDocument) {\n setError(t(\"jdi.document_selection.error_select_document\"));\n return;\n }\n setError(\"\");\n\n onDocumentSelect(selectedDocument);\n };\n\n // Déterminer le titre en fonction du type de document\n const getTitle = () => {\n switch (documentTypeId) {\n case \"jdd\":\n return t(\"jdi.document_selection.title_jdd\");\n case \"income-proof\":\n return t(\"jdi.document_selection.title_income_proof\");\n default:\n return t(\"jdi.document_selection.title_identity\");\n }\n };\n\n const getSubtitle = () => {\n switch (documentTypeId) {\n case \"jdd\":\n return t(\"jdi.document_selection.subtitle_jdd\");\n case \"income-proof\":\n return t(\"jdi.document_selection.subtitle_income_proof\");\n default:\n return nfcEnabled\n ? t(\"jdi.document_selection.subtitle_identity_nfc\")\n : t(\"jdi.document_selection.subtitle_identity\");\n }\n };\n\n const getLabel = () => {\n switch (documentTypeId) {\n case \"jdd\":\n return t(\"jdi.document_selection.label_jdd\");\n case \"income-proof\":\n return t(\"jdi.document_selection.label_income_proof\");\n default:\n return t(\"jdi.document_selection.label_identity\");\n }\n };\n\n const getPlaceholder = () => {\n switch (documentTypeId) {\n case \"jdd\":\n return t(\"jdi.document_selection.placeholder_jdd\");\n case \"income-proof\":\n return t(\"jdi.document_selection.placeholder_income_proof\");\n default:\n return t(\"jdi.document_selection.placeholder_identity\");\n }\n };\n\n const getInstructions = () => {\n // Identity documents\n switch (selectedDocument) {\n case \"idCard\":\n return [\n t(\"jdi.document_selection.instructions.idCard.recto_verso\"),\n t(\"jdi.document_selection.instructions.idCard.readable\"),\n t(\"jdi.document_selection.instructions.idCard.valid\"),\n ];\n case \"passport\":\n return [\n t(\"jdi.document_selection.instructions.passport.photo_page\"),\n t(\"jdi.document_selection.instructions.passport.valid\"),\n t(\"jdi.document_selection.instructions.passport.readable\"),\n ];\n case \"driverLicense\":\n return [\n t(\"jdi.document_selection.instructions.driverLicense.recto_verso\"),\n t(\"jdi.document_selection.instructions.driverLicense.not_expired\"),\n t(\"jdi.document_selection.instructions.driverLicense.all_visible\"),\n ];\n case \"pinkDriverLicense\":\n return [\n t(\n \"jdi.document_selection.instructions.pinkDriverLicense.recto_verso\",\n \"Assurez-vous que le document soit visible\",\n ),\n t(\n \"jdi.document_selection.instructions.pinkDriverLicense.not_expired\",\n \"Vérifiez que le permis n'est pas expiré\",\n ),\n t(\n \"jdi.document_selection.instructions.pinkDriverLicense.all_visible\",\n \"Toutes les informations doivent être lisibles\",\n ),\n ];\n case \"residencePermit\":\n return [\n t(\"jdi.document_selection.instructions.residencePermit.recto_verso\"),\n t(\"jdi.document_selection.instructions.residencePermit.valid\"),\n t(\"jdi.document_selection.instructions.residencePermit.readable\"),\n ];\n default:\n return [\n t(\"jdi.document_selection.instructions.default.valid\"),\n t(\"jdi.document_selection.instructions.default.readable\"),\n ];\n }\n };\n\n return (\n <MobilePageLayout\n contentClassName=\"h-full\"\n footer={\n <PageActions\n primary={\n <Button onClick={handleContinue} disabled={!selectedDocument}>\n {t(\"jdi.document_selection.continue\")}\n </Button>\n }\n secondary={\n <Button variant=\"secondary\" onClick={onBack}>\n {t(\"jdi.document_selection.back\")}\n </Button>\n }\n />\n }\n >\n <div className=\"px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n {/* Header */}\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {documentSelectionTitle || getTitle()}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed whitespace-pre-line\">\n {documentSelectionDescription || getSubtitle()}\n </Subtitle>\n </div>\n\n {/* Document selection */}\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-2\">\n {getLabel()} *\n </label>\n <Select\n options={documentOptions}\n value={selectedDocument}\n onValueChange={(value) => {\n setSelectedDocument(value);\n setError(\"\");\n }}\n placeholder={getPlaceholder()}\n />\n {error && (\n <p className=\"mt-1 text-sm text-red-600 flex items-center\">\n <span className=\"mr-1\">⚠</span>\n {error}\n </p>\n )}\n </div>\n\n {/* Information about selected document — masqué en NFC (les instructions\n de téléversement ne s'appliquent pas, l'onboarding NFC les remplace) */}\n {selectedDocument && !nfcEnabled && (\n <div className=\"bg-gray-50 border border-gray-200 rounded-lg p-4\">\n <h3 className=\"font-medium text-gray-900 mb-2\">\n {t(\"jdi.document_selection.info_title\")}\n </h3>\n <div className=\"text-sm text-gray-700 space-y-1\">\n {getInstructions().map((instruction, index) => (\n <p key={index}>{instruction}</p>\n ))}\n </div>\n </div>\n )}\n\n {/* NFC onboarding — affiché uniquement quand le parcours utilise la lecture sans contact */}\n {nfcEnabled && <NfcOnboardingNotice />}\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default JDIDocumentSelection;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"JDIDocumentSelection.js","sources":["../../../../../src/components/jdi/JDIDocumentSelection.tsx"],"sourcesContent":["import { useState, useEffect } from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { Select } from \"../ui/SelectComponent\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport { AcceptedCountry } from \"../../types/session\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport NfcOnboardingNotice from \"../nfc-scan/NfcOnboardingNotice\";\n\nconst DOCUMENT_KEYS: Array<{\n key: keyof AcceptedCountry[\"documents\"];\n value: string;\n translationKey: string;\n fallbackLabel: string;\n}> = [\n {\n key: \"passport\",\n value: \"passport\",\n translationKey: \"documentTypes.Passport\",\n fallbackLabel: \"Passeport\",\n },\n {\n key: \"idCard\",\n value: \"idCard\",\n translationKey: \"documentTypes.IdCard\",\n fallbackLabel: \"Carte nationale d'identité\",\n },\n {\n key: \"driverLicense\",\n value: \"driverLicense\",\n translationKey: \"documentTypes.Driving_license\",\n fallbackLabel: \"Permis de conduire\",\n },\n {\n key: \"residencePermit\",\n value: \"residencePermit\",\n translationKey: \"documentTypes.Residence_permit\",\n fallbackLabel: \"Titre de séjour\",\n },\n {\n key: \"pinkDriverLicense\",\n value: \"pinkDriverLicense\",\n translationKey: \"documentTypes.Pink_driving_license\",\n fallbackLabel: \"Permis de conduire rose (ancien format)\",\n },\n ];\n\ninterface JDIDocumentSelectionProps {\n onDocumentSelect: (documentType: string) => void;\n onBack?: () => void;\n documentTypeId?: string; // ID du type de document (jdd, income-proof, etc.)\n sessionId?: string; // Session ID pour récupérer les options stockées\n chosenCountry?: AcceptedCountry; // Pays choisi par l'utilisateur\n documentSelectionTitle?: string;\n documentSelectionDescription?: string;\n nfcEnabled?: boolean; // Affiche l'onboarding NFC quand le parcours utilise la lecture sans contact\n}\n\nconst JDIDocumentSelection = ({\n onDocumentSelect,\n onBack,\n documentTypeId,\n sessionId,\n chosenCountry,\n documentSelectionTitle,\n documentSelectionDescription,\n nfcEnabled = false,\n}: JDIDocumentSelectionProps) => {\n const [selectedDocument, setSelectedDocument] = useState<string>(\"\");\n const [error, setError] = useState<string>(\"\");\n const [documentOptions, setDocumentOptions] = useState<\n { value: string; label: string }[]\n >([]);\n\n const { t } = useI18n();\n\n // Récupérer les options de documents spécifiques à la session\n useEffect(() => {\n console.log(\"Retrieving document options for session:\", sessionId);\n console.log(\"Chosen country:\", chosenCountry);\n if (chosenCountry?.documents) {\n const options = DOCUMENT_KEYS.filter(({ key }) => {\n const docs = chosenCountry.documents[key];\n return Array.isArray(docs) && docs.length > 0;\n }).map(({ value, translationKey, fallbackLabel }) => ({\n value,\n label: t(translationKey, fallbackLabel),\n }));\n console.log(\"Available document options:\", options);\n setDocumentOptions(options);\n } else {\n setDocumentOptions([]);\n }\n }, []);\n\n // SKIPPED if only one option, select it by default and skip to next step\n // useEffect(() => {\n // if (documentOptions.length === 1) {\n // setSelectedDocument(documentOptions[0].value);\n // setError(\"\");\n // onDocumentSelect(documentOptions[0].value);\n // }\n // }, [documentOptions, onDocumentSelect]);\n\n const handleContinue = () => {\n if (!selectedDocument) {\n setError(t(\"jdi.document_selection.error_select_document\"));\n return;\n }\n setError(\"\");\n\n onDocumentSelect(selectedDocument);\n };\n\n // Déterminer le titre en fonction du type de document\n const getTitle = () => {\n switch (documentTypeId) {\n case \"jdd\":\n return t(\"jdi.document_selection.title_jdd\");\n case \"income-proof\":\n return t(\"jdi.document_selection.title_income_proof\");\n default:\n return t(\"jdi.document_selection.title_identity\");\n }\n };\n\n const getSubtitle = () => {\n switch (documentTypeId) {\n case \"jdd\":\n return t(\"jdi.document_selection.subtitle_jdd\");\n case \"income-proof\":\n return t(\"jdi.document_selection.subtitle_income_proof\");\n default:\n return nfcEnabled\n ? t(\"jdi.document_selection.subtitle_identity_nfc\")\n : t(\"jdi.document_selection.subtitle_identity\");\n }\n };\n\n const getLabel = () => {\n switch (documentTypeId) {\n case \"jdd\":\n return t(\"jdi.document_selection.label_jdd\");\n case \"income-proof\":\n return t(\"jdi.document_selection.label_income_proof\");\n default:\n return t(\"jdi.document_selection.label_identity\");\n }\n };\n\n const getPlaceholder = () => {\n switch (documentTypeId) {\n case \"jdd\":\n return t(\"jdi.document_selection.placeholder_jdd\");\n case \"income-proof\":\n return t(\"jdi.document_selection.placeholder_income_proof\");\n default:\n return t(\"jdi.document_selection.placeholder_identity\");\n }\n };\n\n const getInstructions = () => {\n // Identity documents\n switch (selectedDocument) {\n case \"idCard\":\n return [\n t(\"jdi.document_selection.instructions.idCard.recto_verso\"),\n t(\"jdi.document_selection.instructions.idCard.readable\"),\n t(\"jdi.document_selection.instructions.idCard.valid\"),\n ];\n case \"passport\":\n return [\n t(\"jdi.document_selection.instructions.passport.photo_page\"),\n t(\"jdi.document_selection.instructions.passport.valid\"),\n t(\"jdi.document_selection.instructions.passport.readable\"),\n ];\n case \"driverLicense\":\n return [\n t(\"jdi.document_selection.instructions.driverLicense.recto_verso\"),\n t(\"jdi.document_selection.instructions.driverLicense.not_expired\"),\n t(\"jdi.document_selection.instructions.driverLicense.all_visible\"),\n ];\n case \"pinkDriverLicense\":\n return [\n t(\n \"jdi.document_selection.instructions.pinkDriverLicense.recto_verso\",\n \"Assurez-vous que le document soit visible\",\n ),\n t(\n \"jdi.document_selection.instructions.pinkDriverLicense.not_expired\",\n \"Vérifiez que le permis n'est pas expiré\",\n ),\n t(\n \"jdi.document_selection.instructions.pinkDriverLicense.all_visible\",\n \"Toutes les informations doivent être lisibles\",\n ),\n ];\n case \"residencePermit\":\n return [\n t(\"jdi.document_selection.instructions.residencePermit.recto_verso\"),\n t(\"jdi.document_selection.instructions.residencePermit.valid\"),\n t(\"jdi.document_selection.instructions.residencePermit.readable\"),\n ];\n default:\n return [\n t(\"jdi.document_selection.instructions.default.valid\"),\n t(\"jdi.document_selection.instructions.default.readable\"),\n ];\n }\n };\n\n return (\n <MobilePageLayout\n contentClassName=\"h-full\"\n footer={\n <PageActions\n primary={\n <Button onClick={handleContinue} disabled={!selectedDocument}>\n {t(\"jdi.document_selection.continue\")}\n </Button>\n }\n secondary={onBack ? (\n <Button variant=\"secondary\" onClick={onBack}>\n {t(\"jdi.document_selection.back\")}\n </Button>\n ) : undefined}\n />\n }\n >\n <div className=\"px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n {/* Header */}\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {documentSelectionTitle || getTitle()}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed whitespace-pre-line\">\n {documentSelectionDescription || getSubtitle()}\n </Subtitle>\n </div>\n\n {/* Document selection */}\n <div className=\"space-y-4\">\n <div>\n <label className=\"block text-sm font-medium text-gray-700 mb-2\">\n {getLabel()} *\n </label>\n <Select\n options={documentOptions}\n value={selectedDocument}\n onValueChange={(value) => {\n setSelectedDocument(value);\n setError(\"\");\n }}\n placeholder={getPlaceholder()}\n />\n {error && (\n <p className=\"mt-1 text-sm text-red-600 flex items-center\">\n <span className=\"mr-1\">⚠</span>\n {error}\n </p>\n )}\n </div>\n\n {/* Information about selected document — masqué en NFC (les instructions\n de téléversement ne s'appliquent pas, l'onboarding NFC les remplace) */}\n {selectedDocument && !nfcEnabled && (\n <div className=\"bg-gray-50 border border-gray-200 rounded-lg p-4\">\n <h3 className=\"font-medium text-gray-900 mb-2\">\n {t(\"jdi.document_selection.info_title\")}\n </h3>\n <div className=\"text-sm text-gray-700 space-y-1\">\n {getInstructions().map((instruction, index) => (\n <p key={index}>{instruction}</p>\n ))}\n </div>\n </div>\n )}\n\n {/* NFC onboarding — affiché uniquement quand le parcours utilise la lecture sans contact */}\n {nfcEnabled && <NfcOnboardingNotice />}\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default JDIDocumentSelection;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|