datakeen-session-react 1.1.140-rc.24 → 1.1.140-rc.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/jdi/JDIDocumentUpload.js +2 -0
- package/dist/cjs/components/jdi/JDIDocumentUpload.js.map +1 -1
- package/dist/cjs/components/selfie/selfie-flow/SelfieProcessing.js +2 -2
- package/dist/cjs/components/selfie/selfie-flow/SelfieProcessing.js.map +1 -1
- package/dist/cjs/components/session/DocumentCheck.js +10 -20
- package/dist/cjs/components/session/DocumentCheck.js.map +1 -1
- package/dist/cjs/components/session/Selfie.js +7 -1
- package/dist/cjs/components/session/Selfie.js.map +1 -1
- package/dist/cjs/components/session/StartSession.js +3 -2
- package/dist/cjs/components/session/StartSession.js.map +1 -1
- package/dist/esm/components/jdi/JDIDocumentUpload.js +2 -0
- package/dist/esm/components/jdi/JDIDocumentUpload.js.map +1 -1
- package/dist/esm/components/selfie/selfie-flow/SelfieProcessing.js +2 -2
- package/dist/esm/components/selfie/selfie-flow/SelfieProcessing.js.map +1 -1
- package/dist/esm/components/session/DocumentCheck.js +10 -20
- package/dist/esm/components/session/DocumentCheck.js.map +1 -1
- package/dist/esm/components/session/Selfie.js +7 -1
- package/dist/esm/components/session/Selfie.js.map +1 -1
- package/dist/esm/components/session/StartSession.js +3 -2
- package/dist/esm/components/session/StartSession.js.map +1 -1
- package/package.json +1 -1
|
@@ -379,6 +379,8 @@ var JDIDocumentUpload = function (_a) {
|
|
|
379
379
|
setBackFile(null);
|
|
380
380
|
setFrontPreview(null);
|
|
381
381
|
setBackPreview(null);
|
|
382
|
+
setIsFrontFromInitial(false);
|
|
383
|
+
setIsBackFromInitial(false);
|
|
382
384
|
_loop_2 = function (index) {
|
|
383
385
|
var currentFile, conversionError_3, reader;
|
|
384
386
|
return tslib_es6.__generator(this, function (_b) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JDIDocumentUpload.js","sources":["../../../../../src/components/jdi/JDIDocumentUpload.tsx"],"sourcesContent":["import { useState, useRef, useEffect } from \"react\";\n\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { Card } from \"../ui/Card\";\nimport PDFPreview from \"../ui/PDFPreview\";\nimport type { onUploadFiles } from \"../../types/uploadFiles\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport {\n convertFileToSupportedFormat,\n fileToBase64,\n isPDF,\n isValidFileType,\n isValidFileSize,\n isValidBase64Data,\n} from \"../../utils/fileConverter\";\nimport { requiresTwoSides } from \"../../utils/documentLabels\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\ninterface JDIDocumentUploadProps {\n documentType: string;\n onUpload: (files: onUploadFiles) => void;\n onBack: () => void;\n documentTypeId?: string; // Pour identifier des types spécifiques comme jdd ou income-proof\n documentLabel?: string; // Le label lisible du document sélectionné (ex: \"Carte nationale d'identité\")\n initialFront?: string | null; // Base64 du recto déjà déposé (ex: après erreur 2.5)\n initialBack?: string | null; // Base64 du verso déjà déposé (ex: après erreur 2.5)\n}\n\nconst JDIDocumentUpload = ({\n documentType,\n onUpload,\n onBack,\n documentTypeId,\n documentLabel,\n initialFront = null,\n initialBack = null,\n}: JDIDocumentUploadProps) => {\n const { t } = useI18n();\n\n // Helper functions for conditional text\n const getDropZoneText = () => {\n return t(\"jdi.document_upload.drop_zone\", {\n document: t(\"documentTypes.\" + documentType),\n });\n };\n\n const getUploadInstruction = () => {\n switch (documentTypeId) {\n case \"jdd\":\n return t(\"jdi.document_upload.upload_jdd\");\n case \"income-proof\":\n return t(\"jdi.document_upload.upload_income_proof\");\n default:\n return t(\"jdi.document_upload.upload_identity\", {\n document: t(\"documentTypes.\" + documentType),\n });\n }\n };\n\n const getValidateButtonText = () => {\n if (isUploading) {\n return t(\"jdi.document_upload.uploading\");\n }\n return documentTypeId === \"jdd\" || documentTypeId === \"income-proof\"\n ? t(\"jdi.document_upload.validate_single\")\n : t(\"jdi.document_upload.validate_multiple\");\n };\n // Ajout de logs pour le débogage\n useEffect(() => {\n // Vérifier si le document type est valide\n if (!documentType) {\n console.error(\"JDIDocumentUpload: documentType is missing or invalid\", {\n documentType,\n documentTypeId,\n });\n }\n }, [documentType, documentTypeId, documentLabel]);\n\n // Store File objects instead of base64 strings\n // initialFront/initialBack permettent de pré-remplir en cas de retry (ex: erreur 2.5)\n const [frontFile, setFrontFile] = useState<File | null>(null);\n const [backFile, setBackFile] = useState<File | null>(null);\n const [frontPreview, setFrontPreview] = useState<string | null>(initialFront ?? null);\n const [backPreview, setBackPreview] = useState<string | null>(initialBack ?? null);\n // Indique que le recto/verso vient d'un dépôt précédent (pas un File local)\n const [isFrontFromInitial, setIsFrontFromInitial] = useState<boolean>(!!initialFront);\n const [isBackFromInitial, setIsBackFromInitial] = useState<boolean>(!!initialBack);\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 const twoSidesRequired = requiresTwoSides(documentType);\n\n // Nouvelle fonction pour gérer la sélection multiple de fichiers\n const handleMultipleFileChange = async (\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n const files = event.target.files;\n if (!files) return;\n\n // Vérifier le nombre de fichiers - maximum 2 fichiers\n if (files.length > 2) {\n setError(t(\"jdi.document_upload.errors.max_files\"));\n return;\n } else if (files.length === 0) {\n setError(t(\"jdi.document_upload.errors.min_files\"));\n return;\n }\n\n setError(\"\");\n setFrontFile(null);\n setBackFile(null);\n setFrontPreview(null);\n setBackPreview(null);\n\n // Traiter chaque fichier\n for (let index = 0; index < files.length; index++) {\n let currentFile = files[index];\n\n try {\n currentFile = await convertFileToSupportedFormat(currentFile);\n } catch (conversionError) {\n console.error(\n \"handleMultipleFileChange: HEIC conversion failed\",\n conversionError,\n );\n setError(\n conversionError instanceof Error\n ? conversionError.message\n : t(\"jdi.document_upload.errors.heic_unsupported\"),\n );\n event.target.value = \"\";\n if (multipleInputRef.current) {\n multipleInputRef.current.value = \"\";\n }\n return;\n }\n\n // Valider le type de fichier\n if (!isValidFileType(currentFile)) {\n setError(\n t(\"jdi.document_upload.errors.invalid_file_type_indexed\", {\n index: index + 1,\n }),\n );\n event.target.value = \"\";\n if (multipleInputRef.current) {\n multipleInputRef.current.value = \"\";\n }\n return;\n }\n\n // Valider la taille du fichier\n if (!isValidFileSize(currentFile)) {\n setError(\n t(\"jdi.document_upload.errors.file_too_large_indexed\", {\n index: index + 1,\n }),\n );\n event.target.value = \"\";\n if (multipleInputRef.current) {\n multipleInputRef.current.value = \"\";\n }\n return;\n }\n\n if (index === 0) {\n // Premier fichier = recto\n setFrontFile(currentFile);\n } else if (index === 1 && twoSidesRequired) {\n // Deuxième fichier = verso (seulement si nécessaire)\n setBackFile(currentFile);\n }\n\n // Store File object and create preview\n const reader = new FileReader();\n reader.onload = (e) => {\n const result = e.target?.result as string;\n\n if (index === 0) {\n setFrontPreview(result);\n } else if (index === 1 && twoSidesRequired) {\n setBackPreview(result);\n }\n };\n reader.readAsDataURL(currentFile);\n }\n };\n\n const handleFileChange = async (\n event: React.ChangeEvent<HTMLInputElement>,\n side: \"front\" | \"back\",\n ) => {\n const file = event.target.files?.[0];\n if (!file) return;\n\n let processedFile = file;\n try {\n processedFile = await convertFileToSupportedFormat(file);\n } catch (conversionError) {\n console.error(\n \"handleFileChange: HEIC conversion failed\",\n conversionError,\n );\n setError(\n conversionError instanceof Error\n ? conversionError.message\n : t(\"jdi.document_upload.errors.heic_unsupported\"),\n );\n event.target.value = \"\";\n if (side === \"front\" && frontInputRef.current) {\n frontInputRef.current.value = \"\";\n }\n return;\n }\n\n // Validate file type\n if (!isValidFileType(processedFile)) {\n setError(t(\"jdi.document_upload.errors.invalid_file_type\"));\n event.target.value = \"\";\n return;\n }\n\n // Validate file size (max 10MB)\n if (!isValidFileSize(processedFile)) {\n setError(t(\"jdi.document_upload.errors.file_too_large\"));\n event.target.value = \"\";\n return;\n }\n\n setError(\"\");\n\n // Store File object and create preview\n const reader = new FileReader();\n reader.onload = (e) => {\n const result = e.target?.result as string;\n\n if (side === \"front\") {\n setFrontFile(processedFile);\n setFrontPreview(result);\n setIsFrontFromInitial(false);\n } else {\n setBackFile(processedFile);\n setBackPreview(result);\n setIsBackFromInitial(false);\n }\n };\n reader.readAsDataURL(processedFile);\n };\n\n const handleUpload = async () => {\n // Clear previous errors\n setError(\"\");\n\n // Validation : recto obligatoire (soit un File local, soit une valeur initiale)\n if (!frontFile && !isFrontFromInitial) {\n const errorKey =\n documentTypeId === \"jdd\"\n ? \"jdi.document_upload.errors.add_photo_jdd\"\n : documentTypeId === \"income-proof\"\n ? \"jdi.document_upload.errors.add_photo_income_proof\"\n : \"jdi.document_upload.errors.add_photo_identity\";\n\n setError(t(errorKey));\n return;\n }\n\n // Note: For two-sided documents, the back side is no longer mandatory\n // The user can choose to upload only the front side\n\n setIsUploading(true);\n\n try {\n // Recto : soit conversion d'un File, soit réutilisation de la base64 initiale\n let frontBase64: string;\n if (frontFile) {\n frontBase64 = await fileToBase64(frontFile);\n if (!isValidBase64Data(frontBase64)) {\n setError(t(\"jdi.document_upload.errors.front_corrupted\"));\n setIsUploading(false);\n return;\n }\n } else {\n // isFrontFromInitial === true : on réutilise la valeur initiale\n frontBase64 = initialFront!;\n }\n\n let backBase64: string | null = null;\n if (twoSidesRequired) {\n if (backFile) {\n backBase64 = await fileToBase64(backFile);\n if (!isValidBase64Data(backBase64)) {\n setError(t(\"jdi.document_upload.errors.back_corrupted\"));\n setIsUploading(false);\n return;\n }\n } else if (isBackFromInitial) {\n // On réutilise le verso initial\n backBase64 = initialBack!;\n }\n }\n\n const files = {\n front: frontBase64,\n back: twoSidesRequired ? backBase64 : null,\n };\n\n onUpload(files);\n } catch (err) {\n console.error(\"JDIDocumentUpload: Upload error:\", err);\n setError(t(\"jdi.document_upload.errors.upload_error\"));\n setIsUploading(false);\n }\n };\n\n const removeImage = (side: \"front\" | \"back\") => {\n if (side === \"front\") {\n setFrontFile(null);\n setFrontPreview(null);\n setIsFrontFromInitial(false);\n if (frontInputRef.current) frontInputRef.current.value = \"\";\n } else {\n setBackFile(null);\n setBackPreview(null);\n setIsBackFromInitial(false);\n }\n setError(\"\");\n };\n\n const removeAllImages = () => {\n setFrontFile(null);\n setBackFile(null);\n setFrontPreview(null);\n setBackPreview(null);\n setIsFrontFromInitial(false);\n setIsBackFromInitial(false);\n if (frontInputRef.current) frontInputRef.current.value = \"\";\n if (multipleInputRef.current) multipleInputRef.current.value = \"\";\n setError(\"\");\n };\n\n // Drag and Drop handlers\n const handleDragEnter = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(true);\n };\n\n const handleDragLeave = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n // Only set isDragging to false if we're leaving the drop zone entirely\n if (\n dropZoneRef.current &&\n !dropZoneRef.current.contains(e.relatedTarget as Node)\n ) {\n setIsDragging(false);\n }\n };\n\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n };\n\n const handleDrop = async (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n\n const droppedFiles = e.dataTransfer.files;\n if (!droppedFiles || droppedFiles.length === 0) return;\n\n // Vérifier le nombre de fichiers\n if (droppedFiles.length > 2) {\n setError(t(\"jdi.document_upload.errors.max_files\"));\n return;\n }\n\n setError(\"\");\n setFrontFile(null);\n setBackFile(null);\n setFrontPreview(null);\n setBackPreview(null);\n\n // Traiter chaque fichier\n for (let index = 0; index < droppedFiles.length; index++) {\n let currentFile = droppedFiles[index];\n\n try {\n currentFile = await convertFileToSupportedFormat(currentFile);\n } catch (conversionError) {\n console.error(\"handleDrop: HEIC conversion failed\", conversionError);\n setError(\n conversionError instanceof Error\n ? conversionError.message\n : t(\"jdi.document_upload.errors.heic_unsupported\"),\n );\n return;\n }\n\n // Valider le type de fichier\n if (!isValidFileType(currentFile)) {\n setError(\n t(\"jdi.document_upload.errors.invalid_file_type_indexed\", {\n index: index + 1,\n }),\n );\n return;\n }\n\n // Valider la taille du fichier\n if (!isValidFileSize(currentFile)) {\n setError(\n t(\"jdi.document_upload.errors.file_too_large_indexed\", {\n index: index + 1,\n }),\n );\n return;\n }\n\n if (index === 0) {\n // Premier fichier = recto\n setFrontFile(currentFile);\n } else if (index === 1 && twoSidesRequired) {\n // Deuxième fichier = verso (seulement si nécessaire)\n setBackFile(currentFile);\n }\n\n // Store File object and create preview\n const reader = new FileReader();\n reader.onload = (e) => {\n const result = e.target?.result as string;\n\n if (index === 0) {\n setFrontPreview(result);\n } else if (index === 1 && twoSidesRequired) {\n setBackPreview(result);\n }\n };\n reader.readAsDataURL(currentFile);\n }\n };\n\n return (\n <MobilePageLayout\n contentClassName=\"h-full\"\n footer={\n <PageActions\n primary={\n <Button\n onClick={handleUpload}\n disabled={(!frontFile && !isFrontFromInitial) || isUploading}\n >\n {getValidateButtonText()}\n </Button>\n }\n secondary={\n <Button variant=\"secondary\" onClick={onBack} disabled={isUploading}>\n {t(\"jdi.document_upload.back\")}\n </Button>\n }\n />\n }\n >\n {/* Main content */}\n <div className=\"flex-1 flex items-center justify-center p-4\">\n <div className=\"w-full max-w-lg\">\n {/* Header */}\n <div className=\"text-center mb-8\">\n <h1 className=\"text-2xl md:text-3xl font-bold text-gray-900 mb-2\">\n {getDropZoneText()}\n </h1>\n <p className=\"text-gray-600\">{getUploadInstruction()}</p>\n </div>\n\n {/* Upload Card */}\n <Card\n ref={dropZoneRef}\n className={`border-2 border-dashed ${\n isDragging\n ? \"border-teal-500 bg-teal-100/50\"\n : \"border-teal-300 bg-teal-50/30\"\n } p-8 mb-6 transition-colors`}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n <div className=\"text-center space-y-6\">\n {!frontPreview ? (\n <>\n <h3 className=\"text-lg font-semibold text-gray-900 mb-4\">\n {t(\"documentTypes.\" + documentType)}\n </h3>\n\n <div className=\"flex justify-center w-full\">\n <Button\n onClick={() => frontInputRef.current?.click()}\n className=\"border border-teal-300 text-teal-600 bg-transparent hover:bg-teal-50 px-4 py-2 rounded-lg font-medium text-sm mx-auto flex items-center\"\n disabled={isUploading}\n >\n <span>{t(\"jdi.document_upload.add_file\")}</span>\n </Button>\n </div>\n\n <p className=\"text-sm text-gray-500 italic\">\n {t(\n \"jdi.document_upload.drag_drop_hint\",\n \"ou glissez-déposez vos fichiers ici\",\n )}\n </p>\n\n <div className=\"text-sm text-gray-600 space-y-1\">\n <p>{t(\"jdi.document_upload.accepted_formats\")}</p>\n <p>\n {twoSidesRequired\n ? frontPreview\n ? t(\"jdi.document_upload.add_back_side\")\n : t(\"jdi.document_upload.multiple_files_info\")\n : t(\"jdi.document_upload.single_file_info\")}\n </p>\n </div>\n </>\n ) : (\n <div className=\"space-y-4\">\n <h3 className=\"text-lg font-semibold text-gray-900\">\n {twoSidesRequired && frontPreview && backPreview\n ? t(\"jdi.document_upload.documents_added\")\n : t(\"jdi.document_upload.document_added\")}\n </h3>\n\n {/* Preview du document recto */}\n <div className=\"bg-white border border-gray-200 rounded-lg p-4\">\n <div className=\"mb-3\">\n <p className=\"text-sm font-medium text-gray-900 mb-1\">\n {twoSidesRequired && backPreview\n ? t(\"jdi.document_upload.front_side\")\n : t(\"documentTypes.\" + documentType)}\n </p>\n <p className=\"text-xs text-gray-500\">\n {isPDF(frontFile)\n ? t(\"jdi.document_upload.pdf_preview\")\n : t(\"jdi.document_upload.image_preview\")}\n </p>\n </div>\n {isPDF(frontFile) ? (\n <PDFPreview src={frontPreview} className=\"mb-3\" />\n ) : (\n <img\n src={frontPreview || \"/placeholder.svg\"}\n alt=\"Document\"\n className=\"w-full h-48 object-contain bg-gray-50 rounded-lg border mb-3\"\n />\n )}\n <div className=\"flex justify-end gap-2\">\n {twoSidesRequired && frontPreview && backPreview ? (\n <button\n onClick={removeAllImages}\n className=\"text-red-500 hover:text-red-700 p-1 text-sm\"\n disabled={isUploading}\n >\n {t(\"jdi.document_upload.restart\")}\n </button>\n ) : (\n <>\n <button\n onClick={() => frontInputRef.current?.click()}\n className=\"text-teal-600 hover:text-teal-700 p-1 text-sm\"\n disabled={isUploading}\n title=\"Changer le document\"\n >\n {t(\"jdi.document_upload.change\")}\n </button>\n <button\n onClick={() => removeImage(\"front\")}\n className=\"text-red-500 hover:text-red-700 p-1\"\n disabled={isUploading}\n title=\"Supprimer le document\"\n >\n <svg\n className=\"h-5 w-5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\"\n />\n </svg>\n </button>\n </>\n )}\n </div>\n </div>\n\n {/* Preview du document verso (si présent) */}\n {twoSidesRequired && backPreview && (\n <div className=\"bg-white border border-gray-200 rounded-lg p-4\">\n <div className=\"mb-3\">\n <p className=\"text-sm font-medium text-gray-900 mb-1\">\n {t(\"jdi.document_upload.back_side\")}\n </p>\n <p className=\"text-xs text-gray-500\">\n {isPDF(frontFile)\n ? t(\"jdi.document_upload.pdf_preview\")\n : t(\"jdi.document_upload.image_preview\")}\n </p>\n </div>\n {isPDF(backFile) ? (\n <PDFPreview src={backPreview || \"\"} className=\"mb-3\" />\n ) : (\n <img\n src={backPreview || \"\"}\n alt=\"Verso\"\n className=\"w-full h-48 object-contain bg-gray-50 rounded-lg border mb-3\"\n />\n )}\n </div>\n )}\n\n {/* Bouton pour ajouter le verso si c'est un document recto/verso et qu'on n'a pas encore le verso */}\n {twoSidesRequired && !backPreview && (\n <div className=\"flex justify-center mt-4\">\n <Button\n onClick={() => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \"image/*,.pdf\";\n input.onchange = (e) =>\n handleFileChange(e as any, \"back\");\n input.click();\n }}\n className=\"border border-teal-300 text-teal-600 bg-transparent hover:bg-teal-50 px-4 py-2 rounded-lg font-medium text-sm flex items-center\"\n disabled={isUploading}\n >\n <span>{t(\"jdi.document_upload.add_back\")}</span>\n </Button>\n </div>\n )}\n\n <div className=\"text-sm text-gray-600\">\n <p>\n {twoSidesRequired && backPreview\n ? t(\"jdi.document_upload.documents_ready\")\n : t(\"jdi.document_upload.document_ready\")}\n </p>\n </div>\n </div>\n )}\n </div>\n </Card>\n\n {/* Input pour un seul fichier */}\n <input\n ref={frontInputRef}\n type=\"file\"\n accept=\"image/*,.pdf\"\n onChange={(e) => handleFileChange(e, \"front\")}\n className=\"hidden\"\n />\n\n {/* Input pour plusieurs fichiers (recto/verso) */}\n <input\n ref={multipleInputRef}\n type=\"file\"\n accept=\"image/*,.pdf\"\n multiple={twoSidesRequired}\n onChange={handleMultipleFileChange}\n className=\"hidden\"\n />\n\n {/* Error message */}\n {error && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-4 mb-6\">\n <p className=\"text-sm text-red-600 flex items-center\">\n <span className=\"mr-2\">⚠</span>\n {error}\n </p>\n </div>\n )}\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default JDIDocumentUpload;\n"],"names":["useI18n","useEffect","useState","useRef","requiresTwoSides","__awaiter","convertFileToSupportedFormat","isValidFileType","isValidFileSize","fileToBase64","isValidBase64Data","_jsx","MobilePageLayout","PageActions","Button","_jsxs","Card","_Fragment","isPDF","PDFPreview"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"JDIDocumentUpload.js","sources":["../../../../../src/components/jdi/JDIDocumentUpload.tsx"],"sourcesContent":["import { useState, useRef, useEffect } from \"react\";\n\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { Card } from \"../ui/Card\";\nimport PDFPreview from \"../ui/PDFPreview\";\nimport type { onUploadFiles } from \"../../types/uploadFiles\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport {\n convertFileToSupportedFormat,\n fileToBase64,\n isPDF,\n isValidFileType,\n isValidFileSize,\n isValidBase64Data,\n} from \"../../utils/fileConverter\";\nimport { requiresTwoSides } from \"../../utils/documentLabels\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\ninterface JDIDocumentUploadProps {\n documentType: string;\n onUpload: (files: onUploadFiles) => void;\n onBack: () => void;\n documentTypeId?: string; // Pour identifier des types spécifiques comme jdd ou income-proof\n documentLabel?: string; // Le label lisible du document sélectionné (ex: \"Carte nationale d'identité\")\n initialFront?: string | null; // Base64 du recto déjà déposé (ex: après erreur 2.5)\n initialBack?: string | null; // Base64 du verso déjà déposé (ex: après erreur 2.5)\n}\n\nconst JDIDocumentUpload = ({\n documentType,\n onUpload,\n onBack,\n documentTypeId,\n documentLabel,\n initialFront = null,\n initialBack = null,\n}: JDIDocumentUploadProps) => {\n const { t } = useI18n();\n\n // Helper functions for conditional text\n const getDropZoneText = () => {\n return t(\"jdi.document_upload.drop_zone\", {\n document: t(\"documentTypes.\" + documentType),\n });\n };\n\n const getUploadInstruction = () => {\n switch (documentTypeId) {\n case \"jdd\":\n return t(\"jdi.document_upload.upload_jdd\");\n case \"income-proof\":\n return t(\"jdi.document_upload.upload_income_proof\");\n default:\n return t(\"jdi.document_upload.upload_identity\", {\n document: t(\"documentTypes.\" + documentType),\n });\n }\n };\n\n const getValidateButtonText = () => {\n if (isUploading) {\n return t(\"jdi.document_upload.uploading\");\n }\n return documentTypeId === \"jdd\" || documentTypeId === \"income-proof\"\n ? t(\"jdi.document_upload.validate_single\")\n : t(\"jdi.document_upload.validate_multiple\");\n };\n // Ajout de logs pour le débogage\n useEffect(() => {\n // Vérifier si le document type est valide\n if (!documentType) {\n console.error(\"JDIDocumentUpload: documentType is missing or invalid\", {\n documentType,\n documentTypeId,\n });\n }\n }, [documentType, documentTypeId, documentLabel]);\n\n // Store File objects instead of base64 strings\n // initialFront/initialBack permettent de pré-remplir en cas de retry (ex: erreur 2.5)\n const [frontFile, setFrontFile] = useState<File | null>(null);\n const [backFile, setBackFile] = useState<File | null>(null);\n const [frontPreview, setFrontPreview] = useState<string | null>(initialFront ?? null);\n const [backPreview, setBackPreview] = useState<string | null>(initialBack ?? null);\n // Indique que le recto/verso vient d'un dépôt précédent (pas un File local)\n const [isFrontFromInitial, setIsFrontFromInitial] = useState<boolean>(!!initialFront);\n const [isBackFromInitial, setIsBackFromInitial] = useState<boolean>(!!initialBack);\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 const twoSidesRequired = requiresTwoSides(documentType);\n\n // Nouvelle fonction pour gérer la sélection multiple de fichiers\n const handleMultipleFileChange = async (\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n const files = event.target.files;\n if (!files) return;\n\n // Vérifier le nombre de fichiers - maximum 2 fichiers\n if (files.length > 2) {\n setError(t(\"jdi.document_upload.errors.max_files\"));\n return;\n } else if (files.length === 0) {\n setError(t(\"jdi.document_upload.errors.min_files\"));\n return;\n }\n\n setError(\"\");\n setFrontFile(null);\n setBackFile(null);\n setFrontPreview(null);\n setBackPreview(null);\n\n // Traiter chaque fichier\n for (let index = 0; index < files.length; index++) {\n let currentFile = files[index];\n\n try {\n currentFile = await convertFileToSupportedFormat(currentFile);\n } catch (conversionError) {\n console.error(\n \"handleMultipleFileChange: HEIC conversion failed\",\n conversionError,\n );\n setError(\n conversionError instanceof Error\n ? conversionError.message\n : t(\"jdi.document_upload.errors.heic_unsupported\"),\n );\n event.target.value = \"\";\n if (multipleInputRef.current) {\n multipleInputRef.current.value = \"\";\n }\n return;\n }\n\n // Valider le type de fichier\n if (!isValidFileType(currentFile)) {\n setError(\n t(\"jdi.document_upload.errors.invalid_file_type_indexed\", {\n index: index + 1,\n }),\n );\n event.target.value = \"\";\n if (multipleInputRef.current) {\n multipleInputRef.current.value = \"\";\n }\n return;\n }\n\n // Valider la taille du fichier\n if (!isValidFileSize(currentFile)) {\n setError(\n t(\"jdi.document_upload.errors.file_too_large_indexed\", {\n index: index + 1,\n }),\n );\n event.target.value = \"\";\n if (multipleInputRef.current) {\n multipleInputRef.current.value = \"\";\n }\n return;\n }\n\n if (index === 0) {\n // Premier fichier = recto\n setFrontFile(currentFile);\n } else if (index === 1 && twoSidesRequired) {\n // Deuxième fichier = verso (seulement si nécessaire)\n setBackFile(currentFile);\n }\n\n // Store File object and create preview\n const reader = new FileReader();\n reader.onload = (e) => {\n const result = e.target?.result as string;\n\n if (index === 0) {\n setFrontPreview(result);\n } else if (index === 1 && twoSidesRequired) {\n setBackPreview(result);\n }\n };\n reader.readAsDataURL(currentFile);\n }\n };\n\n const handleFileChange = async (\n event: React.ChangeEvent<HTMLInputElement>,\n side: \"front\" | \"back\",\n ) => {\n const file = event.target.files?.[0];\n if (!file) return;\n\n let processedFile = file;\n try {\n processedFile = await convertFileToSupportedFormat(file);\n } catch (conversionError) {\n console.error(\n \"handleFileChange: HEIC conversion failed\",\n conversionError,\n );\n setError(\n conversionError instanceof Error\n ? conversionError.message\n : t(\"jdi.document_upload.errors.heic_unsupported\"),\n );\n event.target.value = \"\";\n if (side === \"front\" && frontInputRef.current) {\n frontInputRef.current.value = \"\";\n }\n return;\n }\n\n // Validate file type\n if (!isValidFileType(processedFile)) {\n setError(t(\"jdi.document_upload.errors.invalid_file_type\"));\n event.target.value = \"\";\n return;\n }\n\n // Validate file size (max 10MB)\n if (!isValidFileSize(processedFile)) {\n setError(t(\"jdi.document_upload.errors.file_too_large\"));\n event.target.value = \"\";\n return;\n }\n\n setError(\"\");\n\n // Store File object and create preview\n const reader = new FileReader();\n reader.onload = (e) => {\n const result = e.target?.result as string;\n\n if (side === \"front\") {\n setFrontFile(processedFile);\n setFrontPreview(result);\n setIsFrontFromInitial(false);\n } else {\n setBackFile(processedFile);\n setBackPreview(result);\n setIsBackFromInitial(false);\n }\n };\n reader.readAsDataURL(processedFile);\n };\n\n const handleUpload = async () => {\n // Clear previous errors\n setError(\"\");\n\n // Validation : recto obligatoire (soit un File local, soit une valeur initiale)\n if (!frontFile && !isFrontFromInitial) {\n const errorKey =\n documentTypeId === \"jdd\"\n ? \"jdi.document_upload.errors.add_photo_jdd\"\n : documentTypeId === \"income-proof\"\n ? \"jdi.document_upload.errors.add_photo_income_proof\"\n : \"jdi.document_upload.errors.add_photo_identity\";\n\n setError(t(errorKey));\n return;\n }\n\n // Note: For two-sided documents, the back side is no longer mandatory\n // The user can choose to upload only the front side\n\n setIsUploading(true);\n\n try {\n // Recto : soit conversion d'un File, soit réutilisation de la base64 initiale\n let frontBase64: string;\n if (frontFile) {\n frontBase64 = await fileToBase64(frontFile);\n if (!isValidBase64Data(frontBase64)) {\n setError(t(\"jdi.document_upload.errors.front_corrupted\"));\n setIsUploading(false);\n return;\n }\n } else {\n // isFrontFromInitial === true : on réutilise la valeur initiale\n frontBase64 = initialFront!;\n }\n\n let backBase64: string | null = null;\n if (twoSidesRequired) {\n if (backFile) {\n backBase64 = await fileToBase64(backFile);\n if (!isValidBase64Data(backBase64)) {\n setError(t(\"jdi.document_upload.errors.back_corrupted\"));\n setIsUploading(false);\n return;\n }\n } else if (isBackFromInitial) {\n // On réutilise le verso initial\n backBase64 = initialBack!;\n }\n }\n\n const files = {\n front: frontBase64,\n back: twoSidesRequired ? backBase64 : null,\n };\n\n onUpload(files);\n } catch (err) {\n console.error(\"JDIDocumentUpload: Upload error:\", err);\n setError(t(\"jdi.document_upload.errors.upload_error\"));\n setIsUploading(false);\n }\n };\n\n const removeImage = (side: \"front\" | \"back\") => {\n if (side === \"front\") {\n setFrontFile(null);\n setFrontPreview(null);\n setIsFrontFromInitial(false);\n if (frontInputRef.current) frontInputRef.current.value = \"\";\n } else {\n setBackFile(null);\n setBackPreview(null);\n setIsBackFromInitial(false);\n }\n setError(\"\");\n };\n\n const removeAllImages = () => {\n setFrontFile(null);\n setBackFile(null);\n setFrontPreview(null);\n setBackPreview(null);\n setIsFrontFromInitial(false);\n setIsBackFromInitial(false);\n if (frontInputRef.current) frontInputRef.current.value = \"\";\n if (multipleInputRef.current) multipleInputRef.current.value = \"\";\n setError(\"\");\n };\n\n // Drag and Drop handlers\n const handleDragEnter = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(true);\n };\n\n const handleDragLeave = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n\n // Only set isDragging to false if we're leaving the drop zone entirely\n if (\n dropZoneRef.current &&\n !dropZoneRef.current.contains(e.relatedTarget as Node)\n ) {\n setIsDragging(false);\n }\n };\n\n const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n };\n\n const handleDrop = async (e: React.DragEvent<HTMLDivElement>) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragging(false);\n\n const droppedFiles = e.dataTransfer.files;\n if (!droppedFiles || droppedFiles.length === 0) return;\n\n // Vérifier le nombre de fichiers\n if (droppedFiles.length > 2) {\n setError(t(\"jdi.document_upload.errors.max_files\"));\n return;\n }\n\n setError(\"\");\n setFrontFile(null);\n setBackFile(null);\n setFrontPreview(null);\n setBackPreview(null);\n setIsFrontFromInitial(false);\n setIsBackFromInitial(false);\n\n // Traiter chaque fichier\n for (let index = 0; index < droppedFiles.length; index++) {\n let currentFile = droppedFiles[index];\n\n try {\n currentFile = await convertFileToSupportedFormat(currentFile);\n } catch (conversionError) {\n console.error(\"handleDrop: HEIC conversion failed\", conversionError);\n setError(\n conversionError instanceof Error\n ? conversionError.message\n : t(\"jdi.document_upload.errors.heic_unsupported\"),\n );\n return;\n }\n\n // Valider le type de fichier\n if (!isValidFileType(currentFile)) {\n setError(\n t(\"jdi.document_upload.errors.invalid_file_type_indexed\", {\n index: index + 1,\n }),\n );\n return;\n }\n\n // Valider la taille du fichier\n if (!isValidFileSize(currentFile)) {\n setError(\n t(\"jdi.document_upload.errors.file_too_large_indexed\", {\n index: index + 1,\n }),\n );\n return;\n }\n\n if (index === 0) {\n // Premier fichier = recto\n setFrontFile(currentFile);\n } else if (index === 1 && twoSidesRequired) {\n // Deuxième fichier = verso (seulement si nécessaire)\n setBackFile(currentFile);\n }\n\n // Store File object and create preview\n const reader = new FileReader();\n reader.onload = (e) => {\n const result = e.target?.result as string;\n\n if (index === 0) {\n setFrontPreview(result);\n } else if (index === 1 && twoSidesRequired) {\n setBackPreview(result);\n }\n };\n reader.readAsDataURL(currentFile);\n }\n };\n\n return (\n <MobilePageLayout\n contentClassName=\"h-full\"\n footer={\n <PageActions\n primary={\n <Button\n onClick={handleUpload}\n disabled={(!frontFile && !isFrontFromInitial) || isUploading}\n >\n {getValidateButtonText()}\n </Button>\n }\n secondary={\n <Button variant=\"secondary\" onClick={onBack} disabled={isUploading}>\n {t(\"jdi.document_upload.back\")}\n </Button>\n }\n />\n }\n >\n {/* Main content */}\n <div className=\"flex-1 flex items-center justify-center p-4\">\n <div className=\"w-full max-w-lg\">\n {/* Header */}\n <div className=\"text-center mb-8\">\n <h1 className=\"text-2xl md:text-3xl font-bold text-gray-900 mb-2\">\n {getDropZoneText()}\n </h1>\n <p className=\"text-gray-600\">{getUploadInstruction()}</p>\n </div>\n\n {/* Upload Card */}\n <Card\n ref={dropZoneRef}\n className={`border-2 border-dashed ${\n isDragging\n ? \"border-teal-500 bg-teal-100/50\"\n : \"border-teal-300 bg-teal-50/30\"\n } p-8 mb-6 transition-colors`}\n onDragEnter={handleDragEnter}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n >\n <div className=\"text-center space-y-6\">\n {!frontPreview ? (\n <>\n <h3 className=\"text-lg font-semibold text-gray-900 mb-4\">\n {t(\"documentTypes.\" + documentType)}\n </h3>\n\n <div className=\"flex justify-center w-full\">\n <Button\n onClick={() => frontInputRef.current?.click()}\n className=\"border border-teal-300 text-teal-600 bg-transparent hover:bg-teal-50 px-4 py-2 rounded-lg font-medium text-sm mx-auto flex items-center\"\n disabled={isUploading}\n >\n <span>{t(\"jdi.document_upload.add_file\")}</span>\n </Button>\n </div>\n\n <p className=\"text-sm text-gray-500 italic\">\n {t(\n \"jdi.document_upload.drag_drop_hint\",\n \"ou glissez-déposez vos fichiers ici\",\n )}\n </p>\n\n <div className=\"text-sm text-gray-600 space-y-1\">\n <p>{t(\"jdi.document_upload.accepted_formats\")}</p>\n <p>\n {twoSidesRequired\n ? frontPreview\n ? t(\"jdi.document_upload.add_back_side\")\n : t(\"jdi.document_upload.multiple_files_info\")\n : t(\"jdi.document_upload.single_file_info\")}\n </p>\n </div>\n </>\n ) : (\n <div className=\"space-y-4\">\n <h3 className=\"text-lg font-semibold text-gray-900\">\n {twoSidesRequired && frontPreview && backPreview\n ? t(\"jdi.document_upload.documents_added\")\n : t(\"jdi.document_upload.document_added\")}\n </h3>\n\n {/* Preview du document recto */}\n <div className=\"bg-white border border-gray-200 rounded-lg p-4\">\n <div className=\"mb-3\">\n <p className=\"text-sm font-medium text-gray-900 mb-1\">\n {twoSidesRequired && backPreview\n ? t(\"jdi.document_upload.front_side\")\n : t(\"documentTypes.\" + documentType)}\n </p>\n <p className=\"text-xs text-gray-500\">\n {isPDF(frontFile)\n ? t(\"jdi.document_upload.pdf_preview\")\n : t(\"jdi.document_upload.image_preview\")}\n </p>\n </div>\n {isPDF(frontFile) ? (\n <PDFPreview src={frontPreview} className=\"mb-3\" />\n ) : (\n <img\n src={frontPreview || \"/placeholder.svg\"}\n alt=\"Document\"\n className=\"w-full h-48 object-contain bg-gray-50 rounded-lg border mb-3\"\n />\n )}\n <div className=\"flex justify-end gap-2\">\n {twoSidesRequired && frontPreview && backPreview ? (\n <button\n onClick={removeAllImages}\n className=\"text-red-500 hover:text-red-700 p-1 text-sm\"\n disabled={isUploading}\n >\n {t(\"jdi.document_upload.restart\")}\n </button>\n ) : (\n <>\n <button\n onClick={() => frontInputRef.current?.click()}\n className=\"text-teal-600 hover:text-teal-700 p-1 text-sm\"\n disabled={isUploading}\n title=\"Changer le document\"\n >\n {t(\"jdi.document_upload.change\")}\n </button>\n <button\n onClick={() => removeImage(\"front\")}\n className=\"text-red-500 hover:text-red-700 p-1\"\n disabled={isUploading}\n title=\"Supprimer le document\"\n >\n <svg\n className=\"h-5 w-5\"\n fill=\"none\"\n stroke=\"currentColor\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16\"\n />\n </svg>\n </button>\n </>\n )}\n </div>\n </div>\n\n {/* Preview du document verso (si présent) */}\n {twoSidesRequired && backPreview && (\n <div className=\"bg-white border border-gray-200 rounded-lg p-4\">\n <div className=\"mb-3\">\n <p className=\"text-sm font-medium text-gray-900 mb-1\">\n {t(\"jdi.document_upload.back_side\")}\n </p>\n <p className=\"text-xs text-gray-500\">\n {isPDF(frontFile)\n ? t(\"jdi.document_upload.pdf_preview\")\n : t(\"jdi.document_upload.image_preview\")}\n </p>\n </div>\n {isPDF(backFile) ? (\n <PDFPreview src={backPreview || \"\"} className=\"mb-3\" />\n ) : (\n <img\n src={backPreview || \"\"}\n alt=\"Verso\"\n className=\"w-full h-48 object-contain bg-gray-50 rounded-lg border mb-3\"\n />\n )}\n </div>\n )}\n\n {/* Bouton pour ajouter le verso si c'est un document recto/verso et qu'on n'a pas encore le verso */}\n {twoSidesRequired && !backPreview && (\n <div className=\"flex justify-center mt-4\">\n <Button\n onClick={() => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \"image/*,.pdf\";\n input.onchange = (e) =>\n handleFileChange(e as any, \"back\");\n input.click();\n }}\n className=\"border border-teal-300 text-teal-600 bg-transparent hover:bg-teal-50 px-4 py-2 rounded-lg font-medium text-sm flex items-center\"\n disabled={isUploading}\n >\n <span>{t(\"jdi.document_upload.add_back\")}</span>\n </Button>\n </div>\n )}\n\n <div className=\"text-sm text-gray-600\">\n <p>\n {twoSidesRequired && backPreview\n ? t(\"jdi.document_upload.documents_ready\")\n : t(\"jdi.document_upload.document_ready\")}\n </p>\n </div>\n </div>\n )}\n </div>\n </Card>\n\n {/* Input pour un seul fichier */}\n <input\n ref={frontInputRef}\n type=\"file\"\n accept=\"image/*,.pdf\"\n onChange={(e) => handleFileChange(e, \"front\")}\n className=\"hidden\"\n />\n\n {/* Input pour plusieurs fichiers (recto/verso) */}\n <input\n ref={multipleInputRef}\n type=\"file\"\n accept=\"image/*,.pdf\"\n multiple={twoSidesRequired}\n onChange={handleMultipleFileChange}\n className=\"hidden\"\n />\n\n {/* Error message */}\n {error && (\n <div className=\"bg-red-50 border border-red-200 rounded-lg p-4 mb-6\">\n <p className=\"text-sm text-red-600 flex items-center\">\n <span className=\"mr-2\">⚠</span>\n {error}\n </p>\n </div>\n )}\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default JDIDocumentUpload;\n"],"names":["useI18n","useEffect","useState","useRef","requiresTwoSides","__awaiter","convertFileToSupportedFormat","isValidFileType","isValidFileSize","fileToBase64","isValidBase64Data","_jsx","MobilePageLayout","PageActions","Button","_jsxs","Card","_Fragment","isPDF","PDFPreview"],"mappings":"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"}
|
|
@@ -25,7 +25,7 @@ var processingSteps = [
|
|
|
25
25
|
{ key: "finalization" },
|
|
26
26
|
];
|
|
27
27
|
var SelfieProcessing = function (_a) {
|
|
28
|
-
var onProcessingComplete = _a.onProcessingComplete, selfieVideo = _a.selfieVideo, selfiePhoto = _a.selfiePhoto, onRetake = _a.onRetake;
|
|
28
|
+
var onProcessingComplete = _a.onProcessingComplete, selfieVideo = _a.selfieVideo, selfiePhoto = _a.selfiePhoto, onRetake = _a.onRetake, onContinueAnyway = _a.onContinueAnyway;
|
|
29
29
|
var t = useI18n.useI18n().t;
|
|
30
30
|
var _b = React.useState(0), currentStep = _b[0], setCurrentStep = _b[1];
|
|
31
31
|
var _c = React.useState(false), hasError = _c[0], setHasError = _c[1];
|
|
@@ -179,7 +179,7 @@ var SelfieProcessing = function (_a) {
|
|
|
179
179
|
} }) }), jsxRuntime.jsx("p", { className: "text-xs text-gray-500 mt-2 text-center", children: t("selfie.processing.step_of", {
|
|
180
180
|
current: currentStep + 1,
|
|
181
181
|
total: processingSteps.length,
|
|
182
|
-
}) })] }), hasError && (jsxRuntime.jsx("div", { className: "sticky bottom-0 bg-white border-t border-gray-100 p-4 md:p-6", children: jsxRuntime.jsxs("div", { className: "w-full max-w-md mx-auto", children: [jsxRuntime.
|
|
182
|
+
}) })] }), hasError && (jsxRuntime.jsx("div", { className: "sticky bottom-0 bg-white border-t border-gray-100 p-4 md:p-6", children: jsxRuntime.jsxs("div", { className: "w-full max-w-md mx-auto", children: [jsxRuntime.jsxs("div", { className: "flex flex-col space-y-3 md:hidden", children: [jsxRuntime.jsx(ButtonDesktop.default, { type: "back", onClick: onRetake, children: t("selfie.confirmation.retake", "Reprendre le selfie") }), onContinueAnyway && (jsxRuntime.jsx(ButtonDesktop.default, { type: "continue", onClick: onContinueAnyway, children: t("errors.continue_anyway", "Poursuivre tout de même") }))] }), jsxRuntime.jsxs("div", { className: "hidden md:flex gap-3 justify-between items-center", children: [jsxRuntime.jsx(ButtonDesktop.default, { type: "back", onClick: onRetake, children: t("selfie.confirmation.retake", "Reprendre le selfie") }), onContinueAnyway && (jsxRuntime.jsx(ButtonDesktop.default, { type: "continue", onClick: onContinueAnyway, children: t("errors.continue_anyway", "Poursuivre tout de même") }))] })] }) }))] }) }) }));
|
|
183
183
|
};
|
|
184
184
|
|
|
185
185
|
exports.default = SelfieProcessing;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelfieProcessing.js","sources":["../../../../../../src/components/selfie/selfie-flow/SelfieProcessing.tsx"],"sourcesContent":["import { useState, useEffect, useRef } from \"react\";\nimport Title from \"../../ui/Title\";\nimport Subtitle from \"../../ui/Subtitle\";\nimport { useI18n } from \"../../../hooks/useI18n\";\nimport { codeToStep } from \"../../../services/utils\";\nimport type { SelfieCaptureData } from \"../../../types/selfie\";\nimport { analyzeSelfie } from \"../../../services/analysis\";\nimport { getActiveSessionId } from \"../../../services/sessionMemoryStore\";\nimport ButtonDesktop from \"../../ui/ButtonDesktop\";\n\ninterface SelfieProcessingProps {\n onProcessingComplete: (success: boolean) => void;\n selfieVideo: SelfieCaptureData | null;\n selfiePhoto: string | null;\n onRetake: () => void;\n}\n\nconst processingSteps = [\n {\n key: \"analysis\",\n },\n {\n key: \"face_detection\",\n },\n { title: \"Vérification de sécurité\", subtitle: \"Contrôle de vivacité\" },\n { key: \"liveness\" },\n { key: \"finalization\" },\n];\nconst SelfieProcessing = ({\n onProcessingComplete,\n selfieVideo,\n selfiePhoto,\n onRetake,\n}: SelfieProcessingProps) => {\n const { t } = useI18n();\n const [currentStep, setCurrentStep] = useState(0);\n const [hasError, setHasError] = useState(false);\n const [isDone, setIsDone] = useState(false);\n const [conformityCode, setConformityCode] = useState<string | null>(null);\n\n const analysisStartedRef = useRef(false);\n useEffect(() => {\n // Prevent multiple analysis runs\n if (analysisStartedRef.current) return;\n if (!selfieVideo || !selfiePhoto) return;\n\n analysisStartedRef.current = true;\n\n // Timeout simple : 60 secondes pour tous\n const timeoutId = setTimeout(() => {\n if (!isDone) {\n console.error(\"⏰ Selfie analysis timeout after 60 seconds\");\n setHasError(true);\n setIsDone(true);\n onProcessingComplete(false);\n }\n }, 60000);\n\n const processFiles = async () => {\n const sessionId = getActiveSessionId();\n if (!sessionId) {\n console.error(\"❌ No session ID found\");\n setHasError(true);\n onProcessingComplete(false);\n setIsDone(true);\n clearTimeout(timeoutId);\n return;\n }\n\n console.log(\"🚀 Starting selfie analysis...\");\n\n try {\n // Délai minimum simple : 2 secondes\n const [response] = await Promise.all([\n analyzeSelfie(sessionId, selfieVideo, selfiePhoto),\n new Promise((resolve) => setTimeout(resolve, 2000)),\n ]);\n\n console.log(\"✅ Analysis response:\", response);\n clearTimeout(timeoutId);\n\n // Handle Unissey response format\n let isSuccess = false;\n let conformityCodeToSet = \"4\"; // Default to error\n\n if (response && response.data) {\n // Check if analysis was successful based on real Unissey response structure\n const data = response.data;\n const details = data.details;\n const faceComparison = details?.face_comparison;\n\n // Success: face match with high confidence\n if (\n data.is_match &&\n faceComparison?.result === \"match\"\n // faceComparison?.confidence_level === \"high\" Pas assez explicit\n ) {\n isSuccess = true;\n conformityCodeToSet = \"1.0\"; // Success code\n } else if (details) {\n // Check specific failure reasons\n if (faceComparison?.result !== \"match\") {\n conformityCodeToSet = \"2.0\"; // Face comparison failed\n } else if (faceComparison?.confidence_level !== \"high\") {\n conformityCodeToSet = \"3.0\"; // Low confidence\n } else {\n conformityCodeToSet = \"4.0\"; // Generic error\n }\n }\n }\n\n console.log(\"📊 Selfie analysis result:\", {\n isSuccess,\n conformityCode: conformityCodeToSet,\n isMatch: response?.data?.is_match,\n confidenceLevel:\n response?.data?.details?.face_comparison?.confidence_level,\n comparisonResult: response?.data?.details?.face_comparison?.result,\n });\n\n setConformityCode(conformityCodeToSet);\n setIsDone(true);\n\n // Don't call onProcessingComplete here - let the animation effect handle it\n } catch (error) {\n console.error(\"💥 Selfie analysis failed:\", error);\n clearTimeout(timeoutId);\n setHasError(true);\n setIsDone(true);\n onProcessingComplete(false);\n }\n };\n\n processFiles();\n\n return () => {\n clearTimeout(timeoutId);\n };\n }, [onProcessingComplete, selfieVideo, selfiePhoto, isDone]);\n\n useEffect(() => {\n // While analysis is not finished, stay at step 0\n if (!isDone && !hasError) {\n setCurrentStep(0);\n return;\n }\n // We want stepToStop to be the step in error (the one corresponding to conformityCode)\n let stepToStop = codeToStep(conformityCode || \"4\");\n // If codeToStep returns 0 (generic error), stop at the first step\n if (stepToStop === 0) stepToStop = 1;\n console.log(\"Step to stop (error):\", stepToStop);\n\n // When analysis is finished (success or error), start the animation\n const interval = setInterval(() => {\n setCurrentStep((prev) => {\n if (prev < stepToStop - 1) {\n return prev + 1;\n } else {\n clearInterval(interval);\n if (stepToStop < 4) setHasError(true);\n onProcessingComplete(stepToStop === 4);\n return prev; // Stop at the step in error\n }\n });\n }, 500); // Adjust the speed of the animation\n return () => clearInterval(interval);\n }, [onProcessingComplete, hasError, isDone, conformityCode]);\n\n return (\n <div className=\"flex flex-col justify-between h-full w-full\">\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 <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {hasError\n ? t(\"selfie.processing.error_title\", \"Échec de l'analyse\")\n : t(\"selfie.processing.title\", \"Analyse en cours\")}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed\">\n {hasError\n ? t(\n \"selfie.processing.error_subtitle\",\n \"Une erreur est survenue lors de l'analyse du selfie. Veuillez réessayer.\",\n )\n : t(\n \"selfie.processing.subtitle\",\n \"Nous analysons votre selfie. Cela peut prendre quelques instants.\",\n )}\n </Subtitle>\n </div>\n\n <div className=\"w-full\">\n <div className=\"space-y-5\">\n {processingSteps.map(\n (step, index) =>\n step.key && (\n <div key={index} className=\"flex items-start\">\n <div className=\"mr-4 mt-1 flex-shrink-0\">\n {hasError && index === currentStep ? (\n // Step in error - red cross\n <div className=\"flex items-center justify-center w-6 h-6 rounded-full bg-red-500 text-white text-xs font-bold\">\n ×\n </div>\n ) : index < currentStep ? (\n // Completed step - green check\n <div className=\"flex items-center justify-center w-6 h-6 rounded-full bg-[#11E5C5] text-white text-xs\">\n ✓\n </div>\n ) : index === currentStep ? (\n // Current step - spinner\n <div className=\"w-6 h-6 rounded-full border-2 border-t-[#11E5C5] border-r-[#11E5C5] border-b-[#11E5C5] border-l-transparent animate-spin\"></div>\n ) : (\n // Upcoming step - gray circle\n <div className=\"w-6 h-6 rounded-full border-2 border-gray-300\"></div>\n )}\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"font-medium text-[#3C3C40] text-sm\">\n {t(`selfie.processing.steps.${step.key}.title`)}\n </p>\n <p className=\"text-xs text-gray-500 mt-1\">\n {t(`selfie.processing.steps.${step.key}.subtitle`)}\n </p>\n </div>\n </div>\n ),\n )}\n </div>\n </div>\n\n <div className=\"w-full\">\n <div className=\"bg-gray-200 rounded-full h-2\">\n <div\n className={\n hasError\n ? \"bg-red-500 h-2 rounded-full transition-all duration-500 ease-out\"\n : \"bg-[#11E5C5] h-2 rounded-full transition-all duration-500 ease-out\"\n }\n style={{\n width: `${\n ((currentStep + 1) / processingSteps.length) * 100\n }%`,\n }}\n ></div>\n </div>\n <p className=\"text-xs text-gray-500 mt-2 text-center\">\n {t(\"selfie.processing.step_of\", {\n current: currentStep + 1,\n total: processingSteps.length,\n })}\n </p>\n </div>\n\n {/* Footer with buttons */}\n {hasError && (\n <div className=\"sticky bottom-0 bg-white border-t border-gray-100 p-4 md:p-6\">\n <div className=\"w-full max-w-md mx-auto\">\n {/* Mobile layout - stacked buttons */}\n <div className=\"flex flex-col space-y-3 md:hidden\">\n <ButtonDesktop type=\"back\" onClick={onRetake}>\n {t(\"selfie.confirmation.retake\", \"Reprendre le selfie\")}\n </ButtonDesktop>\n </div>\n\n {/* Desktop layout - horizontal buttons */}\n <div className=\"hidden md:flex gap-3 justify-between items-center\">\n <ButtonDesktop type=\"back\" onClick={onRetake}>\n {t(\"selfie.confirmation.retake\", \"Reprendre le selfie\")}\n </ButtonDesktop>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default SelfieProcessing;\n"],"names":["useI18n","useState","useRef","useEffect","__awaiter","getActiveSessionId","analyzeSelfie","codeToStep","_jsx","_jsxs","Title","Subtitle","ButtonDesktop"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SelfieProcessing.js","sources":["../../../../../../src/components/selfie/selfie-flow/SelfieProcessing.tsx"],"sourcesContent":["import { useState, useEffect, useRef } from \"react\";\nimport Title from \"../../ui/Title\";\nimport Subtitle from \"../../ui/Subtitle\";\nimport { useI18n } from \"../../../hooks/useI18n\";\nimport { codeToStep } from \"../../../services/utils\";\nimport type { SelfieCaptureData } from \"../../../types/selfie\";\nimport { analyzeSelfie } from \"../../../services/analysis\";\nimport { getActiveSessionId } from \"../../../services/sessionMemoryStore\";\nimport ButtonDesktop from \"../../ui/ButtonDesktop\";\n\ninterface SelfieProcessingProps {\n onProcessingComplete: (success: boolean) => void;\n selfieVideo: SelfieCaptureData | null;\n selfiePhoto: string | null;\n onRetake: () => void;\n onContinueAnyway?: () => void;\n}\n\nconst processingSteps = [\n {\n key: \"analysis\",\n },\n {\n key: \"face_detection\",\n },\n { title: \"Vérification de sécurité\", subtitle: \"Contrôle de vivacité\" },\n { key: \"liveness\" },\n { key: \"finalization\" },\n];\nconst SelfieProcessing = ({\n onProcessingComplete,\n selfieVideo,\n selfiePhoto,\n onRetake,\n onContinueAnyway,\n}: SelfieProcessingProps) => {\n const { t } = useI18n();\n const [currentStep, setCurrentStep] = useState(0);\n const [hasError, setHasError] = useState(false);\n const [isDone, setIsDone] = useState(false);\n const [conformityCode, setConformityCode] = useState<string | null>(null);\n\n const analysisStartedRef = useRef(false);\n useEffect(() => {\n // Prevent multiple analysis runs\n if (analysisStartedRef.current) return;\n if (!selfieVideo || !selfiePhoto) return;\n\n analysisStartedRef.current = true;\n\n // Timeout simple : 60 secondes pour tous\n const timeoutId = setTimeout(() => {\n if (!isDone) {\n console.error(\"⏰ Selfie analysis timeout after 60 seconds\");\n setHasError(true);\n setIsDone(true);\n onProcessingComplete(false);\n }\n }, 60000);\n\n const processFiles = async () => {\n const sessionId = getActiveSessionId();\n if (!sessionId) {\n console.error(\"❌ No session ID found\");\n setHasError(true);\n onProcessingComplete(false);\n setIsDone(true);\n clearTimeout(timeoutId);\n return;\n }\n\n console.log(\"🚀 Starting selfie analysis...\");\n\n try {\n // Délai minimum simple : 2 secondes\n const [response] = await Promise.all([\n analyzeSelfie(sessionId, selfieVideo, selfiePhoto),\n new Promise((resolve) => setTimeout(resolve, 2000)),\n ]);\n\n console.log(\"✅ Analysis response:\", response);\n clearTimeout(timeoutId);\n\n // Handle Unissey response format\n let isSuccess = false;\n let conformityCodeToSet = \"4\"; // Default to error\n\n if (response && response.data) {\n // Check if analysis was successful based on real Unissey response structure\n const data = response.data;\n const details = data.details;\n const faceComparison = details?.face_comparison;\n\n // Success: face match with high confidence\n if (\n data.is_match &&\n faceComparison?.result === \"match\"\n // faceComparison?.confidence_level === \"high\" Pas assez explicit\n ) {\n isSuccess = true;\n conformityCodeToSet = \"1.0\"; // Success code\n } else if (details) {\n // Check specific failure reasons\n if (faceComparison?.result !== \"match\") {\n conformityCodeToSet = \"2.0\"; // Face comparison failed\n } else if (faceComparison?.confidence_level !== \"high\") {\n conformityCodeToSet = \"3.0\"; // Low confidence\n } else {\n conformityCodeToSet = \"4.0\"; // Generic error\n }\n }\n }\n\n console.log(\"📊 Selfie analysis result:\", {\n isSuccess,\n conformityCode: conformityCodeToSet,\n isMatch: response?.data?.is_match,\n confidenceLevel:\n response?.data?.details?.face_comparison?.confidence_level,\n comparisonResult: response?.data?.details?.face_comparison?.result,\n });\n\n setConformityCode(conformityCodeToSet);\n setIsDone(true);\n\n // Don't call onProcessingComplete here - let the animation effect handle it\n } catch (error) {\n console.error(\"💥 Selfie analysis failed:\", error);\n clearTimeout(timeoutId);\n setHasError(true);\n setIsDone(true);\n onProcessingComplete(false);\n }\n };\n\n processFiles();\n\n return () => {\n clearTimeout(timeoutId);\n };\n }, [onProcessingComplete, selfieVideo, selfiePhoto, isDone]);\n\n useEffect(() => {\n // While analysis is not finished, stay at step 0\n if (!isDone && !hasError) {\n setCurrentStep(0);\n return;\n }\n // We want stepToStop to be the step in error (the one corresponding to conformityCode)\n let stepToStop = codeToStep(conformityCode || \"4\");\n // If codeToStep returns 0 (generic error), stop at the first step\n if (stepToStop === 0) stepToStop = 1;\n console.log(\"Step to stop (error):\", stepToStop);\n\n // When analysis is finished (success or error), start the animation\n const interval = setInterval(() => {\n setCurrentStep((prev) => {\n if (prev < stepToStop - 1) {\n return prev + 1;\n } else {\n clearInterval(interval);\n if (stepToStop < 4) setHasError(true);\n onProcessingComplete(stepToStop === 4);\n return prev; // Stop at the step in error\n }\n });\n }, 500); // Adjust the speed of the animation\n return () => clearInterval(interval);\n }, [onProcessingComplete, hasError, isDone, conformityCode]);\n\n return (\n <div className=\"flex flex-col justify-between h-full w-full\">\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 <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {hasError\n ? t(\"selfie.processing.error_title\", \"Échec de l'analyse\")\n : t(\"selfie.processing.title\", \"Analyse en cours\")}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed\">\n {hasError\n ? t(\n \"selfie.processing.error_subtitle\",\n \"Une erreur est survenue lors de l'analyse du selfie. Veuillez réessayer.\",\n )\n : t(\n \"selfie.processing.subtitle\",\n \"Nous analysons votre selfie. Cela peut prendre quelques instants.\",\n )}\n </Subtitle>\n </div>\n\n <div className=\"w-full\">\n <div className=\"space-y-5\">\n {processingSteps.map(\n (step, index) =>\n step.key && (\n <div key={index} className=\"flex items-start\">\n <div className=\"mr-4 mt-1 flex-shrink-0\">\n {hasError && index === currentStep ? (\n // Step in error - red cross\n <div className=\"flex items-center justify-center w-6 h-6 rounded-full bg-red-500 text-white text-xs font-bold\">\n ×\n </div>\n ) : index < currentStep ? (\n // Completed step - green check\n <div className=\"flex items-center justify-center w-6 h-6 rounded-full bg-[#11E5C5] text-white text-xs\">\n ✓\n </div>\n ) : index === currentStep ? (\n // Current step - spinner\n <div className=\"w-6 h-6 rounded-full border-2 border-t-[#11E5C5] border-r-[#11E5C5] border-b-[#11E5C5] border-l-transparent animate-spin\"></div>\n ) : (\n // Upcoming step - gray circle\n <div className=\"w-6 h-6 rounded-full border-2 border-gray-300\"></div>\n )}\n </div>\n <div className=\"flex-1 min-w-0\">\n <p className=\"font-medium text-[#3C3C40] text-sm\">\n {t(`selfie.processing.steps.${step.key}.title`)}\n </p>\n <p className=\"text-xs text-gray-500 mt-1\">\n {t(`selfie.processing.steps.${step.key}.subtitle`)}\n </p>\n </div>\n </div>\n ),\n )}\n </div>\n </div>\n\n <div className=\"w-full\">\n <div className=\"bg-gray-200 rounded-full h-2\">\n <div\n className={\n hasError\n ? \"bg-red-500 h-2 rounded-full transition-all duration-500 ease-out\"\n : \"bg-[#11E5C5] h-2 rounded-full transition-all duration-500 ease-out\"\n }\n style={{\n width: `${\n ((currentStep + 1) / processingSteps.length) * 100\n }%`,\n }}\n ></div>\n </div>\n <p className=\"text-xs text-gray-500 mt-2 text-center\">\n {t(\"selfie.processing.step_of\", {\n current: currentStep + 1,\n total: processingSteps.length,\n })}\n </p>\n </div>\n\n {/* Footer with buttons */}\n {hasError && (\n <div className=\"sticky bottom-0 bg-white border-t border-gray-100 p-4 md:p-6\">\n <div className=\"w-full max-w-md mx-auto\">\n {/* Mobile layout - stacked buttons */}\n <div className=\"flex flex-col space-y-3 md:hidden\">\n <ButtonDesktop type=\"back\" onClick={onRetake}>\n {t(\"selfie.confirmation.retake\", \"Reprendre le selfie\")}\n </ButtonDesktop>\n {onContinueAnyway && (\n <ButtonDesktop type=\"continue\" onClick={onContinueAnyway}>\n {t(\"errors.continue_anyway\", \"Poursuivre tout de même\")}\n </ButtonDesktop>\n )}\n </div>\n\n {/* Desktop layout - horizontal buttons */}\n <div className=\"hidden md:flex gap-3 justify-between items-center\">\n <ButtonDesktop type=\"back\" onClick={onRetake}>\n {t(\"selfie.confirmation.retake\", \"Reprendre le selfie\")}\n </ButtonDesktop>\n {onContinueAnyway && (\n <ButtonDesktop type=\"continue\" onClick={onContinueAnyway}>\n {t(\"errors.continue_anyway\", \"Poursuivre tout de même\")}\n </ButtonDesktop>\n )}\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default SelfieProcessing;\n"],"names":["useI18n","useState","useRef","useEffect","__awaiter","getActiveSessionId","analyzeSelfie","codeToStep","_jsx","_jsxs","Title","Subtitle","ButtonDesktop"],"mappings":"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"}
|
|
@@ -57,7 +57,7 @@ var europeanCountries = require('../../utils/europeanCountries.js');
|
|
|
57
57
|
*/
|
|
58
58
|
var DocumentCheck = function (_a) {
|
|
59
59
|
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l;
|
|
60
|
-
var stepObject = _a.stepObject, sessionId = _a.sessionId, node = _a.node
|
|
60
|
+
var stepObject = _a.stepObject, sessionId = _a.sessionId, node = _a.node; _a.onContinueOnPC; var documentTypeId = _a.documentTypeId, acceptedCountries = _a.acceptedCountries, _m = _a.isMobileCapture, isMobileCapture = _m === void 0 ? false : _m, allowedAddingMethods = _a.allowedAddingMethods, template = _a.template, setUserInput = _a.setUserInput;
|
|
61
61
|
var t = reactI18next.useTranslation().t;
|
|
62
62
|
var session = SessionContext.getSession().session;
|
|
63
63
|
var _o = React.useState(), documentTemplates = _o[0], setDocumentTemplates = _o[1];
|
|
@@ -372,7 +372,7 @@ var DocumentCheck = function (_a) {
|
|
|
372
372
|
setDocStep(4);
|
|
373
373
|
}
|
|
374
374
|
};
|
|
375
|
-
var handleProcessingComplete = function (success,
|
|
375
|
+
var handleProcessingComplete = function (success, _retryCount, apiAnalysisData) {
|
|
376
376
|
if (apiAnalysisData) {
|
|
377
377
|
setAnalysisData(apiAnalysisData);
|
|
378
378
|
// Extract and store the error code
|
|
@@ -447,32 +447,22 @@ var DocumentCheck = function (_a) {
|
|
|
447
447
|
return true;
|
|
448
448
|
};
|
|
449
449
|
var handleContinueAnyway = function () {
|
|
450
|
-
if (
|
|
451
|
-
|
|
450
|
+
if (template) {
|
|
451
|
+
stepObject.goToNextStep(node.id, template);
|
|
452
452
|
}
|
|
453
453
|
else {
|
|
454
|
-
|
|
455
|
-
stepObject.goToNextStep(node.id, template);
|
|
456
|
-
}
|
|
457
|
-
else {
|
|
458
|
-
stepObject.setStep(stepObject.step + 1);
|
|
459
|
-
}
|
|
460
|
-
setDocStep(0);
|
|
454
|
+
stepObject.setStep(stepObject.step + 1);
|
|
461
455
|
}
|
|
456
|
+
setDocStep(0);
|
|
462
457
|
};
|
|
463
458
|
var handleSuccessContinue = function () {
|
|
464
|
-
if (
|
|
465
|
-
|
|
459
|
+
if (template) {
|
|
460
|
+
stepObject.goToNextStep(node.id, template);
|
|
466
461
|
}
|
|
467
462
|
else {
|
|
468
|
-
|
|
469
|
-
stepObject.goToNextStep(node.id, template);
|
|
470
|
-
}
|
|
471
|
-
else {
|
|
472
|
-
stepObject.setStep(stepObject.step + 1);
|
|
473
|
-
}
|
|
474
|
-
setDocStep(0);
|
|
463
|
+
stepObject.setStep(stepObject.step + 1);
|
|
475
464
|
}
|
|
465
|
+
setDocStep(0);
|
|
476
466
|
};
|
|
477
467
|
var handleBack = function () {
|
|
478
468
|
if (docStep === 0) {
|