datakeen-session-react 1.1.188 → 1.1.190
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/document-video/DocumentVideoCapture.js +2 -2
- package/dist/cjs/components/document-video/DocumentVideoCapture.js.map +1 -1
- package/dist/cjs/components/document-video/document-video-flow/DocumentVideoProcessing.js +10 -11
- package/dist/cjs/components/document-video/document-video-flow/DocumentVideoProcessing.js.map +1 -1
- package/dist/cjs/components/jdi/JDIError.js +8 -4
- package/dist/cjs/components/jdi/JDIError.js.map +1 -1
- package/dist/cjs/components/jdi/JDIProcessing.js +132 -147
- package/dist/cjs/components/jdi/JDIProcessing.js.map +1 -1
- package/dist/cjs/components/session/DocumentCheck.js +36 -11
- package/dist/cjs/components/session/DocumentCheck.js.map +1 -1
- package/dist/cjs/components/session/EndFlow.js +10 -1
- package/dist/cjs/components/session/EndFlow.js.map +1 -1
- package/dist/cjs/components/session/UserInputForm.js +2 -2
- package/dist/cjs/components/session/UserInputForm.js.map +1 -1
- package/dist/cjs/components/session/controleJdiPolicy.js +47 -0
- package/dist/cjs/components/session/controleJdiPolicy.js.map +1 -0
- package/dist/cjs/i18n/en.json.js +8 -3
- package/dist/cjs/i18n/en.json.js.map +1 -1
- package/dist/cjs/i18n/fr.json.js +8 -3
- package/dist/cjs/i18n/fr.json.js.map +1 -1
- package/dist/cjs/index.css.js +1 -1
- package/dist/cjs/services/pollingService.js.map +1 -1
- package/dist/cjs/services/sessionService.js +15 -0
- package/dist/cjs/services/sessionService.js.map +1 -1
- package/dist/cjs/types/session.js.map +1 -1
- package/dist/cjs/utils/apiAnalysis.js.map +1 -1
- package/dist/cjs/utils/jdiCodes.js +58 -0
- package/dist/cjs/utils/jdiCodes.js.map +1 -0
- package/dist/cjs/utils/validationUtils.js +35 -2
- package/dist/cjs/utils/validationUtils.js.map +1 -1
- package/dist/esm/components/document-video/DocumentVideoCapture.js +2 -2
- package/dist/esm/components/document-video/DocumentVideoCapture.js.map +1 -1
- package/dist/esm/components/document-video/document-video-flow/DocumentVideoProcessing.js +10 -11
- package/dist/esm/components/document-video/document-video-flow/DocumentVideoProcessing.js.map +1 -1
- package/dist/esm/components/jdi/JDIError.js +8 -4
- package/dist/esm/components/jdi/JDIError.js.map +1 -1
- package/dist/esm/components/jdi/JDIProcessing.js +132 -147
- package/dist/esm/components/jdi/JDIProcessing.js.map +1 -1
- package/dist/esm/components/session/DocumentCheck.js +37 -12
- package/dist/esm/components/session/DocumentCheck.js.map +1 -1
- package/dist/esm/components/session/EndFlow.js +10 -1
- package/dist/esm/components/session/EndFlow.js.map +1 -1
- package/dist/esm/components/session/UserInputForm.js +2 -2
- package/dist/esm/components/session/UserInputForm.js.map +1 -1
- package/dist/esm/components/session/controleJdiPolicy.js +42 -0
- package/dist/esm/components/session/controleJdiPolicy.js.map +1 -0
- package/dist/esm/i18n/en.json.js +8 -3
- package/dist/esm/i18n/en.json.js.map +1 -1
- package/dist/esm/i18n/fr.json.js +8 -3
- package/dist/esm/i18n/fr.json.js.map +1 -1
- package/dist/esm/index.css.js +1 -1
- package/dist/esm/services/pollingService.js.map +1 -1
- package/dist/esm/services/sessionService.js +15 -1
- package/dist/esm/services/sessionService.js.map +1 -1
- package/dist/esm/types/session.js.map +1 -1
- package/dist/esm/utils/apiAnalysis.js.map +1 -1
- package/dist/esm/utils/jdiCodes.js +54 -0
- package/dist/esm/utils/jdiCodes.js.map +1 -0
- package/dist/esm/utils/validationUtils.js +35 -2
- package/dist/esm/utils/validationUtils.js.map +1 -1
- package/dist/types/utils/apiAnalysis.d.ts +13 -1
- package/package.json +1 -1
package/dist/esm/components/document-video/document-video-flow/DocumentVideoProcessing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocumentVideoProcessing.js","sources":["../../../../../../src/components/document-video/document-video-flow/DocumentVideoProcessing.tsx"],"sourcesContent":["import { useState, useEffect, useRef } from \"react\";\nimport Title from \"../../ui/Title\";\nimport Subtitle from \"../../ui/Subtitle\";\nimport { useI18n } from \"../../../hooks/useI18n\";\nimport type {\n DocumentVideoCaptureBySide,\n DocumentVideoPreviewBySide,\n} from \"../../../types/documentVideo\";\nimport type { Prediction } from \"../../../utils/apiAnalysis\";\nimport { analyzeDocumentVideo } from \"../../../services/analysis\";\n\ninterface DocumentVideoProcessingProps {\n onProcessingComplete: (\n success: boolean,\n predictions?: Prediction[],\n errorCode?: string\n ) => void;\n videoData: DocumentVideoCaptureBySide;\n thumbnail: DocumentVideoPreviewBySide;\n onRetake: () => void;\n sessionId: string;\n nodeId: string;\n documentTemplateId: string;\n documentType: string;\n requiresTwoSides: boolean;\n}\n\nconst processingSteps = [\n {\n key: \"upload\",\n },\n {\n key: \"analysis\",\n },\n {\n key: \"validation\",\n },\n {\n key: \"finalization\",\n },\n];\n\nconst DocumentVideoProcessing = ({\n onProcessingComplete,\n videoData,\n thumbnail,\n onRetake,\n sessionId,\n nodeId,\n documentTemplateId,\n documentType,\n requiresTwoSides,\n}: DocumentVideoProcessingProps) => {\n const { t } = useI18n();\n const [currentStep, setCurrentStep] = useState(0);\n const [hasError, setHasError] = useState(false);\n const [isDone, setIsDone] = useState(false);\n const [analysisErrorCode, setAnalysisErrorCode] = useState<string | null>(null);\n const [analysisPredictions, setAnalysisPredictions] = useState<Prediction[]>([]);\n\n const analysisStartedRef = useRef(false);\n\n useEffect(() => {\n // Prevent multiple analysis runs\n if (analysisStartedRef.current) return;\n if (!videoData.recto || !thumbnail.recto || !sessionId) return;\n\n analysisStartedRef.current = true;\n\n // Timeout: 90 secondes pour la vidéo (plus long que selfie car fichier plus gros)\n const timeoutId = setTimeout(() => {\n if (!isDone) {\n console.error(\"⏰ Document video analysis timeout after 90 seconds\");\n setHasError(true);\n setIsDone(true);\n onProcessingComplete(false);\n }\n }, 90000);\n\n const processFiles = async () => {\n console.log(\"🚀 Starting document video analysis...\");\n\n try {\n if (requiresTwoSides && (!videoData.verso || !thumbnail.verso)) {\n throw new Error(\"Missing verso video or preview\");\n }\n\n console.log(\"📹 Video data:\", videoData);\n console.log(\"📸 Thumbnail:\", thumbnail);\n console.log(\"🔑 Session ID:\", sessionId);\n console.log(\"🆔 Node ID:\", nodeId);\n console.log(\"📄 Document Template ID:\", documentTemplateId);\n\n // Call the analyzeDocumentVideo API\n const response = await analyzeDocumentVideo(\n sessionId,\n nodeId,\n videoData,\n thumbnail,\n documentTemplateId,\n {\n documentType,\n requiresTwoSides,\n }\n );\n\n console.log(\"✅ Analysis response:\", response);\n\n clearTimeout(timeoutId);\n\n const rawCode =\n response?.result?.job_status?.predictions?.[0]?.code ??\n response?.result?.job_status?.code ??\n response?.result?.result?.[0]?.code ??\n response?.job_status?.predictions?.[0]?.code ??\n response?.code;\n const extractedCode = rawCode ? String(rawCode) : \"\";\n // Code 8.x (specimen) is blocking — treated as failure\n const isSuccess = [\"1.\", \"4.\", \"5.\", \"6.\", \"9.\"].some((prefix) =>\n extractedCode.startsWith(prefix)\n );\n const predictionSource =\n response?.result?.job_status?.predictions?.[0] ??\n response?.job_status?.predictions?.[0] ??\n response?.result?.result?.[0]?.predictions?.[0] ??\n null;\n const predictions: Prediction[] =\n predictionSource?.code\n ? [\n {\n code: String(predictionSource.code),\n codeName:\n predictionSource.codeName ||\n predictionSource.code_name ||\n \"\",\n codeDescription:\n predictionSource.codeDescription ||\n predictionSource.code_description ||\n \"\",\n type: predictionSource.type || \"document\",\n },\n ]\n : extractedCode\n ? [\n {\n code: extractedCode,\n codeName: response?.codeName || \"\",\n codeDescription: response?.codeDescription || \"\",\n type: \"document\",\n },\n ]\n : [];\n\n console.log(\"📊 Document video analysis result:\", {\n isSuccess,\n code: extractedCode,\n response,\n });\n\n setAnalysisPredictions(predictions);\n setAnalysisErrorCode(extractedCode);\n setHasError(!isSuccess);\n setIsDone(true);\n\n // Don't call onProcessingComplete here - let the animation effect handle it\n } catch (error) {\n console.error(\"💥 Document video analysis failed:\", error);\n clearTimeout(timeoutId);\n setHasError(true);\n setIsDone(true);\n setAnalysisErrorCode(null);\n setAnalysisPredictions([]);\n }\n };\n\n processFiles();\n\n return () => {\n clearTimeout(timeoutId);\n };\n }, [onProcessingComplete, videoData, thumbnail, sessionId, nodeId, isDone, documentType, requiresTwoSides, documentTemplateId]);\n\n useEffect(() => {\n // While analysis is not finished, stay at step 0\n if (!isDone && !hasError) {\n setCurrentStep(0);\n return;\n }\n\n // When analysis is finished (success or error), start the animation\n const stepToStop = hasError ? 1 : processingSteps.length; // Stop at step 1 if error, otherwise complete all steps\n\n const interval = setInterval(() => {\n setCurrentStep((prev) => {\n if (prev < stepToStop - 1) {\n return prev + 1;\n } else {\n clearInterval(interval);\n onProcessingComplete(!hasError, analysisPredictions, analysisErrorCode || undefined);\n return prev;\n }\n });\n }, 500); // Adjust the speed of the animation\n\n return () => clearInterval(interval);\n }, [onProcessingComplete, hasError, isDone, analysisPredictions, analysisErrorCode]);\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(\n \"document_video.processing.error_title\",\n \"Échec de l'analyse\"\n )\n : t(\"document_video.processing.title\", \"Analyse en cours\")}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed\">\n {hasError\n ? t(\n \"document_video.processing.error_subtitle\",\n \"Une erreur est survenue lors de l'analyse de la vidéo. Veuillez réessayer.\"\n )\n : t(\n \"document_video.processing.subtitle\",\n \"Vérification d'authenticité du document\"\n )}\n </Subtitle>\n </div>\n\n <div className=\"w-full\">\n <div className=\"space-y-5\">\n {processingSteps.map((step, index) => (\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(`document_video.processing.steps.${step.key}.title`)}\n </p>\n <p className=\"text-xs text-gray-500 mt-1\">\n {t(\n `document_video.processing.steps.${step.key}.subtitle`\n )}\n </p>\n </div>\n </div>\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(\"document_video.processing.step_of\", {\n current: currentStep + 1,\n total: processingSteps.length,\n defaultValue: `Étape ${currentStep + 1} sur ${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 <button\n onClick={onRetake}\n className=\"w-full text-[#3C3C40] text-center font-poppins text-sm font-medium hover:underline py-2\"\n >\n {t(\n \"document_video.confirmation.retake\",\n \"Reprendre la vidéo\"\n )}\n </button>\n </div>\n\n {/* Desktop layout - horizontal buttons */}\n <div className=\"hidden md:flex gap-3 justify-between items-center\">\n <button\n onClick={onRetake}\n className=\"px-6 py-3 text-[#3C3C40] text-center font-poppins text-sm font-medium hover:underline border border-gray-300 rounded-lg\"\n >\n {t(\n \"document_video.confirmation.retake\",\n \"Reprendre la vidéo\"\n )}\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default DocumentVideoProcessing;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DocumentVideoProcessing.js","sources":["../../../../../../src/components/document-video/document-video-flow/DocumentVideoProcessing.tsx"],"sourcesContent":["import { useState, useEffect, useRef } from \"react\";\nimport Title from \"../../ui/Title\";\nimport Subtitle from \"../../ui/Subtitle\";\nimport { useI18n } from \"../../../hooks/useI18n\";\nimport type {\n DocumentVideoCaptureBySide,\n DocumentVideoPreviewBySide,\n} from \"../../../types/documentVideo\";\nimport type { Prediction } from \"../../../utils/apiAnalysis\";\nimport { analyzeDocumentVideo } from \"../../../services/analysis\";\nimport { isBlockingCode } from \"../../../utils/jdiCodes\";\n\ninterface DocumentVideoProcessingProps {\n onProcessingComplete: (\n success: boolean,\n predictions?: Prediction[],\n errorCode?: string\n ) => void;\n videoData: DocumentVideoCaptureBySide;\n thumbnail: DocumentVideoPreviewBySide;\n onRetake: () => void;\n sessionId: string;\n nodeId: string;\n documentTemplateId: string;\n documentType: string;\n requiresTwoSides: boolean;\n /** Codes JDI exacts considérés comme bloquants pour ce nœud (cf. node.blockingCodes). Absent = liste par défaut. */\n blockingCodes?: string[];\n}\n\nconst processingSteps = [\n {\n key: \"upload\",\n },\n {\n key: \"analysis\",\n },\n {\n key: \"validation\",\n },\n {\n key: \"finalization\",\n },\n];\n\nconst DocumentVideoProcessing = ({\n onProcessingComplete,\n videoData,\n thumbnail,\n onRetake,\n sessionId,\n nodeId,\n documentTemplateId,\n documentType,\n requiresTwoSides,\n blockingCodes,\n}: DocumentVideoProcessingProps) => {\n const { t } = useI18n();\n const [currentStep, setCurrentStep] = useState(0);\n const [hasError, setHasError] = useState(false);\n const [isDone, setIsDone] = useState(false);\n const [analysisErrorCode, setAnalysisErrorCode] = useState<string | null>(null);\n const [analysisPredictions, setAnalysisPredictions] = useState<Prediction[]>([]);\n\n const analysisStartedRef = useRef(false);\n\n useEffect(() => {\n // Prevent multiple analysis runs\n if (analysisStartedRef.current) return;\n if (!videoData.recto || !thumbnail.recto || !sessionId) return;\n\n analysisStartedRef.current = true;\n\n // Timeout: 90 secondes pour la vidéo (plus long que selfie car fichier plus gros)\n const timeoutId = setTimeout(() => {\n if (!isDone) {\n console.error(\"⏰ Document video analysis timeout after 90 seconds\");\n setHasError(true);\n setIsDone(true);\n onProcessingComplete(false);\n }\n }, 90000);\n\n const processFiles = async () => {\n console.log(\"🚀 Starting document video analysis...\");\n\n try {\n if (requiresTwoSides && (!videoData.verso || !thumbnail.verso)) {\n throw new Error(\"Missing verso video or preview\");\n }\n\n console.log(\"📹 Video data:\", videoData);\n console.log(\"📸 Thumbnail:\", thumbnail);\n console.log(\"🔑 Session ID:\", sessionId);\n console.log(\"🆔 Node ID:\", nodeId);\n console.log(\"📄 Document Template ID:\", documentTemplateId);\n\n // Call the analyzeDocumentVideo API\n const response = await analyzeDocumentVideo(\n sessionId,\n nodeId,\n videoData,\n thumbnail,\n documentTemplateId,\n {\n documentType,\n requiresTwoSides,\n }\n );\n\n console.log(\"✅ Analysis response:\", response);\n\n clearTimeout(timeoutId);\n\n const rawCode =\n response?.result?.job_status?.predictions?.[0]?.code ??\n response?.result?.job_status?.code ??\n response?.result?.result?.[0]?.code ??\n response?.job_status?.predictions?.[0]?.code ??\n response?.code;\n const extractedCode = rawCode ? String(rawCode) : \"\";\n // Determine success from the node's configured blocking codes\n // (blockingCodes absent → DEFAULT_BLOCKING_CODES, legacy behavior\n // unchanged). Code 8.x (specimen) is always blocking.\n const isSuccess = !isBlockingCode(extractedCode, blockingCodes);\n const predictionSource =\n response?.result?.job_status?.predictions?.[0] ??\n response?.job_status?.predictions?.[0] ??\n response?.result?.result?.[0]?.predictions?.[0] ??\n null;\n const predictions: Prediction[] =\n predictionSource?.code\n ? [\n {\n code: String(predictionSource.code),\n codeName:\n predictionSource.codeName ||\n predictionSource.code_name ||\n \"\",\n codeDescription:\n predictionSource.codeDescription ||\n predictionSource.code_description ||\n \"\",\n type: predictionSource.type || \"document\",\n },\n ]\n : extractedCode\n ? [\n {\n code: extractedCode,\n codeName: response?.codeName || \"\",\n codeDescription: response?.codeDescription || \"\",\n type: \"document\",\n },\n ]\n : [];\n\n console.log(\"📊 Document video analysis result:\", {\n isSuccess,\n code: extractedCode,\n response,\n });\n\n setAnalysisPredictions(predictions);\n setAnalysisErrorCode(extractedCode);\n setHasError(!isSuccess);\n setIsDone(true);\n\n // Don't call onProcessingComplete here - let the animation effect handle it\n } catch (error) {\n console.error(\"💥 Document video analysis failed:\", error);\n clearTimeout(timeoutId);\n setHasError(true);\n setIsDone(true);\n setAnalysisErrorCode(null);\n setAnalysisPredictions([]);\n }\n };\n\n processFiles();\n\n return () => {\n clearTimeout(timeoutId);\n };\n }, [onProcessingComplete, videoData, thumbnail, sessionId, nodeId, isDone, documentType, requiresTwoSides, documentTemplateId, blockingCodes]);\n\n useEffect(() => {\n // While analysis is not finished, stay at step 0\n if (!isDone && !hasError) {\n setCurrentStep(0);\n return;\n }\n\n // When analysis is finished (success or error), start the animation\n const stepToStop = hasError ? 1 : processingSteps.length; // Stop at step 1 if error, otherwise complete all steps\n\n const interval = setInterval(() => {\n setCurrentStep((prev) => {\n if (prev < stepToStop - 1) {\n return prev + 1;\n } else {\n clearInterval(interval);\n onProcessingComplete(!hasError, analysisPredictions, analysisErrorCode || undefined);\n return prev;\n }\n });\n }, 500); // Adjust the speed of the animation\n\n return () => clearInterval(interval);\n }, [onProcessingComplete, hasError, isDone, analysisPredictions, analysisErrorCode]);\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(\n \"document_video.processing.error_title\",\n \"Échec de l'analyse\"\n )\n : t(\"document_video.processing.title\", \"Analyse en cours\")}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed\">\n {hasError\n ? t(\n \"document_video.processing.error_subtitle\",\n \"Une erreur est survenue lors de l'analyse de la vidéo. Veuillez réessayer.\"\n )\n : t(\n \"document_video.processing.subtitle\",\n \"Vérification d'authenticité du document\"\n )}\n </Subtitle>\n </div>\n\n <div className=\"w-full\">\n <div className=\"space-y-5\">\n {processingSteps.map((step, index) => (\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(`document_video.processing.steps.${step.key}.title`)}\n </p>\n <p className=\"text-xs text-gray-500 mt-1\">\n {t(\n `document_video.processing.steps.${step.key}.subtitle`\n )}\n </p>\n </div>\n </div>\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(\"document_video.processing.step_of\", {\n current: currentStep + 1,\n total: processingSteps.length,\n defaultValue: `Étape ${currentStep + 1} sur ${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 <button\n onClick={onRetake}\n className=\"w-full text-[#3C3C40] text-center font-poppins text-sm font-medium hover:underline py-2\"\n >\n {t(\n \"document_video.confirmation.retake\",\n \"Reprendre la vidéo\"\n )}\n </button>\n </div>\n\n {/* Desktop layout - horizontal buttons */}\n <div className=\"hidden md:flex gap-3 justify-between items-center\">\n <button\n onClick={onRetake}\n className=\"px-6 py-3 text-[#3C3C40] text-center font-poppins text-sm font-medium hover:underline border border-gray-300 rounded-lg\"\n >\n {t(\n \"document_video.confirmation.retake\",\n \"Reprendre la vidéo\"\n )}\n </button>\n </div>\n </div>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default DocumentVideoProcessing;\n"],"names":["_jsx","_jsxs"],"mappings":";;;;;;;;;AA8BA,IAAM,eAAe,GAAG;AACtB,IAAA;AACE,QAAA,GAAG,EAAE,QAAQ;AACd,KAAA;AACD,IAAA;AACE,QAAA,GAAG,EAAE,UAAU;AAChB,KAAA;AACD,IAAA;AACE,QAAA,GAAG,EAAE,YAAY;AAClB,KAAA;AACD,IAAA;AACE,QAAA,GAAG,EAAE,cAAc;AACpB,KAAA;CACF;AAED,IAAM,uBAAuB,GAAG,UAAC,EAWF,EAAA;QAV7B,oBAAoB,GAAA,EAAA,CAAA,oBAAA,EACpB,SAAS,GAAA,EAAA,CAAA,SAAA,EACT,SAAS,GAAA,EAAA,CAAA,SAAA,EACT,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,SAAS,GAAA,EAAA,CAAA,SAAA,EACT,MAAM,GAAA,EAAA,CAAA,MAAA,EACN,kBAAkB,GAAA,EAAA,CAAA,kBAAA,EAClB,YAAY,GAAA,EAAA,CAAA,YAAA,EACZ,gBAAgB,GAAA,EAAA,CAAA,gBAAA,EAChB,aAAa,GAAA,EAAA,CAAA,aAAA;AAEL,IAAA,IAAA,CAAC,GAAK,OAAO,EAAE,EAAd;IACH,IAAA,EAAA,GAAgC,QAAQ,CAAC,CAAC,CAAC,EAA1C,WAAW,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,cAAc,GAAA,EAAA,CAAA,CAAA,CAAe;IAC3C,IAAA,EAAA,GAA0B,QAAQ,CAAC,KAAK,CAAC,EAAxC,QAAQ,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,WAAW,GAAA,EAAA,CAAA,CAAA,CAAmB;IACzC,IAAA,EAAA,GAAsB,QAAQ,CAAC,KAAK,CAAC,EAApC,MAAM,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,SAAS,GAAA,EAAA,CAAA,CAAA,CAAmB;IACrC,IAAA,EAAA,GAA4C,QAAQ,CAAgB,IAAI,CAAC,EAAxE,iBAAiB,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,oBAAoB,GAAA,EAAA,CAAA,CAAA,CAAiC;IACzE,IAAA,EAAA,GAAgD,QAAQ,CAAe,EAAE,CAAC,EAAzE,mBAAmB,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,sBAAsB,GAAA,EAAA,CAAA,CAAA,CAA8B;AAEhF,IAAA,IAAM,kBAAkB,GAAG,MAAM,CAAC,KAAK,CAAC;AAExC,IAAA,SAAS,CAAC,YAAA;;QAER,IAAI,kBAAkB,CAAC,OAAO;YAAE;QAChC,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS;YAAE;AAExD,QAAA,kBAAkB,CAAC,OAAO,GAAG,IAAI;;QAGjC,IAAM,SAAS,GAAG,UAAU,CAAC,YAAA;YAC3B,IAAI,CAAC,MAAM,EAAE;AACX,gBAAA,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC;gBACnE,WAAW,CAAC,IAAI,CAAC;gBACjB,SAAS,CAAC,IAAI,CAAC;gBACf,oBAAoB,CAAC,KAAK,CAAC;YAC7B;QACF,CAAC,EAAE,KAAK,CAAC;AAET,QAAA,IAAM,YAAY,GAAG,YAAA,EAAA,OAAA,SAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA;;;;;;AACnB,wBAAA,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC;;;;AAGnD,wBAAA,IAAI,gBAAgB,KAAK,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;AAC9D,4BAAA,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC;wBACnD;AAEA,wBAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,CAAC;AACxC,wBAAA,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,SAAS,CAAC;AACvC,wBAAA,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,CAAC;AACxC,wBAAA,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,MAAM,CAAC;AAClC,wBAAA,OAAO,CAAC,GAAG,CAAC,0BAA0B,EAAE,kBAAkB,CAAC;wBAG1C,OAAA,CAAA,CAAA,YAAM,oBAAoB,CACzC,SAAS,EACT,MAAM,EACN,SAAS,EACT,SAAS,EACT,kBAAkB,EAClB;AACE,gCAAA,YAAY,EAAA,YAAA;AACZ,gCAAA,gBAAgB,EAAA,gBAAA;AACjB,6BAAA,CACF,CAAA;;AAVK,wBAAA,QAAQ,GAAG,EAAA,CAAA,IAAA,EAUhB;AAED,wBAAA,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,QAAQ,CAAC;wBAE7C,YAAY,CAAC,SAAS,CAAC;AAEjB,wBAAA,OAAO,GACX,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,QAAQ,aAAR,QAAQ,KAAA,MAAA,GAAA,MAAA,GAAR,QAAQ,CAAE,MAAM,0CAAE,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GACpD,CAAA,EAAA,GAAA,MAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,MAAA,GAAA,MAAA,GAAR,QAAQ,CAAE,MAAM,0CAAE,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAClC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,uBAAR,QAAQ,CAAE,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,mCACnC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,MAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,MAAA,GAAA,MAAA,GAAR,QAAQ,CAAE,UAAU,0CAAE,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAC5C,QAAQ,KAAA,IAAA,IAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI;AACV,wBAAA,aAAa,GAAG,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;wBAI9C,SAAS,GAAG,CAAC,cAAc,CAAC,aAAa,EAAE,aAAa,CAAC;AACzD,wBAAA,gBAAgB,GACpB,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,MAAA,GAAA,MAAA,GAAR,QAAQ,CAAE,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAC9C,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,MAAA,GAAA,MAAA,GAAR,QAAQ,CAAE,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GACtC,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,MAAA,GAAA,MAAA,GAAR,QAAQ,CAAE,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,WAAW,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,CAAC,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GAC/C,IAAI;wBACA,WAAW,GACf,CAAA,gBAAgB,KAAA,IAAA,IAAhB,gBAAgB,KAAA,MAAA,GAAA,MAAA,GAAhB,gBAAgB,CAAE,IAAI;AACpB,8BAAE;AACE,gCAAA;AACE,oCAAA,IAAI,EAAE,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC;oCACnC,QAAQ,EACN,gBAAgB,CAAC,QAAQ;AACzB,wCAAA,gBAAgB,CAAC,SAAS;wCAC1B,EAAE;oCACJ,eAAe,EACb,gBAAgB,CAAC,eAAe;AAChC,wCAAA,gBAAgB,CAAC,gBAAgB;wCACjC,EAAE;AACJ,oCAAA,IAAI,EAAE,gBAAgB,CAAC,IAAI,IAAI,UAAU;AAC1C,iCAAA;AACF;AACH,8BAAE;AACA,kCAAE;AACE,oCAAA;AACE,wCAAA,IAAI,EAAE,aAAa;wCACnB,QAAQ,EAAE,CAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,uBAAR,QAAQ,CAAE,QAAQ,KAAI,EAAE;wCAClC,eAAe,EAAE,CAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,uBAAR,QAAQ,CAAE,eAAe,KAAI,EAAE;AAChD,wCAAA,IAAI,EAAE,UAAU;AACjB,qCAAA;AACF;kCACD,EAAE;AAEV,wBAAA,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE;AAChD,4BAAA,SAAS,EAAA,SAAA;AACT,4BAAA,IAAI,EAAE,aAAa;AACnB,4BAAA,QAAQ,EAAA,QAAA;AACT,yBAAA,CAAC;wBAEF,sBAAsB,CAAC,WAAW,CAAC;wBACnC,oBAAoB,CAAC,aAAa,CAAC;AACnC,wBAAA,WAAW,CAAC,CAAC,SAAS,CAAC;wBACvB,SAAS,CAAC,IAAI,CAAC;;;;AAIf,wBAAA,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,OAAK,CAAC;wBAC1D,YAAY,CAAC,SAAS,CAAC;wBACvB,WAAW,CAAC,IAAI,CAAC;wBACjB,SAAS,CAAC,IAAI,CAAC;wBACf,oBAAoB,CAAC,IAAI,CAAC;wBAC1B,sBAAsB,CAAC,EAAE,CAAC;;;;;aAE7B;AAED,QAAA,YAAY,EAAE;QAEd,OAAO,YAAA;YACL,YAAY,CAAC,SAAS,CAAC;AACzB,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,oBAAoB,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,aAAa,CAAC,CAAC;AAE9I,IAAA,SAAS,CAAC,YAAA;;AAER,QAAA,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE;YACxB,cAAc,CAAC,CAAC,CAAC;YACjB;QACF;;AAGA,QAAA,IAAM,UAAU,GAAG,QAAQ,GAAG,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC;QAEzD,IAAM,QAAQ,GAAG,WAAW,CAAC,YAAA;YAC3B,cAAc,CAAC,UAAC,IAAI,EAAA;AAClB,gBAAA,IAAI,IAAI,GAAG,UAAU,GAAG,CAAC,EAAE;oBACzB,OAAO,IAAI,GAAG,CAAC;gBACjB;qBAAO;oBACL,aAAa,CAAC,QAAQ,CAAC;oBACvB,oBAAoB,CAAC,CAAC,QAAQ,EAAE,mBAAmB,EAAE,iBAAiB,IAAI,SAAS,CAAC;AACpF,oBAAA,OAAO,IAAI;gBACb;AACF,YAAA,CAAC,CAAC;AACJ,QAAA,CAAC,EAAE,GAAG,CAAC,CAAC;QAER,OAAO,YAAA,EAAM,OAAA,aAAa,CAAC,QAAQ,CAAC,CAAA,CAAvB,CAAuB;AACtC,IAAA,CAAC,EAAE,CAAC,oBAAoB,EAAE,QAAQ,EAAE,MAAM,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;AAEpF,IAAA,QACEA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,6CAA6C,EAAA,QAAA,EAC1DA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,wCAAwC,EAAA,QAAA,EACrDC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,CAChDA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,CACpCD,GAAA,CAAC,KAAK,EAAA,EAAC,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAC/C;AACC,sCAAE,CAAC,CACC,uCAAuC,EACvC,oBAAoB;AAExB,sCAAE,CAAC,CAAC,iCAAiC,EAAE,kBAAkB,CAAC,EAAA,CACtD,EACRA,GAAA,CAAC,QAAQ,EAAA,EAAC,SAAS,EAAC,uCAAuC,YACxD;AACC,sCAAE,CAAC,CACC,0CAA0C,EAC1C,4EAA4E;sCAE9E,CAAC,CACC,oCAAoC,EACpC,yCAAyC,CAC1C,EAAA,CACI,CAAA,EAAA,CACP,EAENA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,QAAQ,YACrBA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EACvB,eAAe,CAAC,GAAG,CAAC,UAAC,IAAI,EAAE,KAAK,EAAA,EAAK,QACpCC,IAAA,CAAA,KAAA,EAAA,EAAiB,SAAS,EAAC,kBAAkB,EAAA,QAAA,EAAA,CAC3CD,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,yBAAyB,YACrC,QAAQ,IAAI,KAAK,KAAK,WAAW;;AAEhC,wCAAAA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,+FAA+F,EAAA,QAAA,EAAA,QAAA,EAAA,CAExG,IACJ,KAAK,GAAG,WAAW;;AAErB,wCAAAA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uFAAuF,EAAA,QAAA,EAAA,QAAA,EAAA,CAEhG,IACJ,KAAK,KAAK,WAAW;;AAEvB,wCAAAA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,0HAA0H,GAAO;;AAGhJ,wCAAAA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,+CAA+C,EAAA,CAAO,CACtE,EAAA,CACG,EACNC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gBAAgB,EAAA,QAAA,EAAA,CAC7BD,WAAG,SAAS,EAAC,oCAAoC,EAAA,QAAA,EAC9C,CAAC,CAAC,kCAAA,CAAA,MAAA,CAAmC,IAAI,CAAC,GAAG,EAAA,QAAA,CAAQ,CAAC,EAAA,CACrD,EACJA,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,4BAA4B,EAAA,QAAA,EACtC,CAAC,CACA,kCAAA,CAAA,MAAA,CAAmC,IAAI,CAAC,GAAG,EAAA,WAAA,CAAW,CACvD,EAAA,CACC,CAAA,EAAA,CACA,CAAA,EAAA,EA7BE,KAAK,CA8BT,GA/B8B,CAgCrC,CAAC,EAAA,CACE,EAAA,CACF,EAENC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,QAAQ,EAAA,QAAA,EAAA,CACrBD,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,8BAA8B,EAAA,QAAA,EAC3CA,GAAA,CAAA,KAAA,EAAA,EACE,SAAS,EACP;AACE,0CAAE;AACF,0CAAE,oEAAoE,EAE1E,KAAK,EAAE;AACL,wCAAA,KAAK,EAAE,EAAA,CAAA,MAAA,CACL,CAAC,CAAC,WAAW,GAAG,CAAC,IAAI,eAAe,CAAC,MAAM,IAAI,GAAG,EAAA,GAAA,CACjD;qCACJ,EAAA,CACI,EAAA,CACH,EACNA,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,wCAAwC,EAAA,QAAA,EAClD,CAAC,CAAC,mCAAmC,EAAE;oCACtC,OAAO,EAAE,WAAW,GAAG,CAAC;oCACxB,KAAK,EAAE,eAAe,CAAC,MAAM;oCAC7B,YAAY,EAAE,qBAAS,WAAW,GAAG,CAAC,EAAA,OAAA,CAAA,CAAA,MAAA,CAAQ,eAAe,CAAC,MAAM,CAAE;AACvE,iCAAA,CAAC,EAAA,CACA,CAAA,EAAA,CACA,EAGL,QAAQ,KACPA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,8DAA8D,EAAA,QAAA,EAC3EC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,yBAAyB,EAAA,QAAA,EAAA,CAEtCD,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAChDA,GAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAC,yFAAyF,EAAA,QAAA,EAElG,CAAC,CACA,oCAAoC,EACpC,oBAAoB,CACrB,EAAA,CACM,EAAA,CACL,EAGNA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mDAAmD,EAAA,QAAA,EAChEA,GAAA,CAAA,QAAA,EAAA,EACE,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAC,yHAAyH,EAAA,QAAA,EAElI,CAAC,CACA,oCAAoC,EACpC,oBAAoB,CACrB,EAAA,CACM,EAAA,CACL,CAAA,EAAA,CACF,EAAA,CACF,CACP,CAAA,EAAA,CACG,EAAA,CACF,EAAA,CACF;AAEV;;;;"}
|
|
@@ -10,13 +10,17 @@ import MobilePageLayout from '../ui/MobilePageLayout.js';
|
|
|
10
10
|
|
|
11
11
|
var DEFAULT_PREDICTIONS = [];
|
|
12
12
|
var JDIError = function (_a) {
|
|
13
|
-
|
|
13
|
+
var _b;
|
|
14
|
+
_a.documentType; var onRetry = _a.onRetry, onContinueAnyway = _a.onContinueAnyway, onBackToUserInput = _a.onBackToUserInput, _c = _a.retryCount, retryCount = _c === void 0 ? 0 : _c, _d = _a.predictions, predictions = _d === void 0 ? DEFAULT_PREDICTIONS : _d, errorCode = _a.errorCode; _a.allowResubmission; var maxResubmissionAttempts = _a.maxResubmissionAttempts, _e = _a.isRetryAllowed, isRetryAllowed = _e === void 0 ? true : _e, _f = _a.blockContinue, blockContinue = _f === void 0 ? false : _f;
|
|
14
15
|
var t = useI18n().t;
|
|
15
|
-
var
|
|
16
|
+
var _g = useState([]), validationPoints = _g[0], setValidationPoints = _g[1];
|
|
17
|
+
// Détail de mismatch d'identité (code 7.0), calculé côté backend et porté
|
|
18
|
+
// par la première prédiction. Absent pour tous les autres codes.
|
|
19
|
+
var mismatchDetails = (_b = predictions === null || predictions === void 0 ? void 0 : predictions[0]) === null || _b === void 0 ? void 0 : _b.mismatchDetails;
|
|
16
20
|
useEffect(function () {
|
|
17
21
|
// Use shared utility to get validation points
|
|
18
|
-
setValidationPoints(getValidationPoints(errorCode, predictions, t, "error"));
|
|
19
|
-
}, [predictions, errorCode, t]);
|
|
22
|
+
setValidationPoints(getValidationPoints(errorCode, predictions, t, "error", mismatchDetails));
|
|
23
|
+
}, [predictions, errorCode, t, mismatchDetails]);
|
|
20
24
|
// Get user guidance message if available
|
|
21
25
|
var getUserGuidance = function () {
|
|
22
26
|
if (!errorCode)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JDIError.js","sources":["../../../../../src/components/jdi/JDIError.tsx"],"sourcesContent":["import { 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 { Prediction } from \"../../utils/apiAnalysis\";\nimport { getValidationPoints } from \"../../utils/validationUtils\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\ninterface JDIErrorProps {\n documentType: string;\n onRetry: () => void;\n /** Absent quand node.allowContinueOnFailure est à false : le bouton \"Continuer\n * quand même\" n'est alors jamais rendu, quel que soit isRetryAllowed. */\n onContinueAnyway?: () => void;\n onBackToUserInput?: () => void;\n retryCount?: number;\n predictions?: Prediction[]; // Nouvelles données de l'API\n errorCode?: string; // Error code from API response (e.g., \"2.1\", \"4.0\")\n allowResubmission?: boolean;\n maxResubmissionAttempts?: number;\n isRetryAllowed?: boolean;\n blockContinue?: boolean;\n}\n\nconst DEFAULT_PREDICTIONS: Prediction[] = [];\n\nconst JDIError = ({\n documentType,\n onRetry,\n onContinueAnyway,\n onBackToUserInput,\n retryCount = 0,\n predictions = DEFAULT_PREDICTIONS,\n errorCode,\n allowResubmission,\n maxResubmissionAttempts,\n isRetryAllowed = true,\n blockContinue = false,\n}: JDIErrorProps) => {\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 return (\n <MobilePageLayout\n footer={\n <div className=\"w-full max-w-md mx-auto\">\n <div className=\"flex flex-col space-y-3 md:hidden\">\n {blockContinue ? (\n <Button onClick={onRetry} className=\"w-full py-3\">\n {t(\"errors.retry_verification\")}\n </Button>\n ) : (\n <>\n {onBackToUserInput && (\n <ButtonDesktop\n onClick={onBackToUserInput}\n type=\"back\"\n className=\"w-full text-black text-center font-poppins text-sm font-medium py-2\"\n >\n {t(\"errors.back_to_user_input\")}\n </ButtonDesktop>\n )}\n {retryCount >= 1 && isRetryAllowed && onContinueAnyway && (\n <ButtonDesktop\n onClick={onContinueAnyway}\n type=\"back\"\n className=\"w-full text-black text-center font-poppins text-sm font-medium py-2\"\n >\n {t(\"errors.continue_anyway\")}\n </ButtonDesktop>\n )}\n {isRetryAllowed && (\n <Button onClick={onRetry} className=\"w-full py-3\">\n {t(\"errors.retry_verification\")}\n </Button>\n )}\n {!isRetryAllowed && onContinueAnyway && (\n <Button onClick={onContinueAnyway} className=\"w-full py-3\">\n {t(\"errors.continue_anyway\")}\n </Button>\n )}\n </>\n )}\n </div>\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(\"errors.retry_verification\")}\n </ButtonDesktop>\n ) : (\n <>\n {onBackToUserInput && (\n <ButtonDesktop\n onClick={onBackToUserInput}\n type=\"back\"\n className=\"text-black text-center font-poppins text-sm font-medium py-2\"\n >\n {t(\"errors.back_to_user_input\")}\n </ButtonDesktop>\n )}\n {retryCount >= 1 && isRetryAllowed && onContinueAnyway && (\n <ButtonDesktop\n onClick={onContinueAnyway}\n type=\"back\"\n className=\"text-black text-center font-poppins text-sm font-medium py-2\"\n >\n {t(\"errors.continue_anyway\")}\n </ButtonDesktop>\n )}\n {isRetryAllowed && (\n <ButtonDesktop onClick={onRetry} type=\"continue\">\n {t(\"errors.retry_verification\")}\n </ButtonDesktop>\n )}\n {!isRetryAllowed && onContinueAnyway && (\n <ButtonDesktop\n onClick={onContinueAnyway}\n type=\"continue\"\n >\n {t(\"errors.continue_anyway\")}\n </ButtonDesktop>\n )}\n </>\n )}\n </div>\n </div>\n </div>\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 {/* 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\")}\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: \"document\",\n })\n : t(\"errors.verification_failed_subtitle_no_retry\", {\n documentType: \"document\",\n })}\n </Subtitle>\n </div>\n\n {/* Specimen warning */}\n {!blockContinue && errorCode?.startsWith(\"8\") && (\n <div className=\"bg-orange-50 border border-orange-200 rounded-lg p-4\">\n <p className=\"text-sm text-orange-800\">\n {t(\"errors.specimen_detected\")}\n </p>\n </div>\n )}\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\")}\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(\"errors.resubmission.max_attempts_reached\")}\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\")}\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\")}\n </h3>\n <p className=\"text-sm text-blue-800\">\n {t(\"errors.next_steps_description\")}\n </p>\n </div>\n )}\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default JDIError;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"JDIError.js","sources":["../../../../../src/components/jdi/JDIError.tsx"],"sourcesContent":["import { 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 { Prediction } from \"../../utils/apiAnalysis\";\nimport { getValidationPoints } from \"../../utils/validationUtils\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\ninterface JDIErrorProps {\n documentType: string;\n onRetry: () => void;\n /** Absent quand node.allowContinueOnFailure est à false : le bouton \"Continuer\n * quand même\" n'est alors jamais rendu, quel que soit isRetryAllowed. */\n onContinueAnyway?: () => void;\n onBackToUserInput?: () => void;\n retryCount?: number;\n predictions?: Prediction[]; // Nouvelles données de l'API\n errorCode?: string; // Error code from API response (e.g., \"2.1\", \"4.0\")\n allowResubmission?: boolean;\n maxResubmissionAttempts?: number;\n isRetryAllowed?: boolean;\n blockContinue?: boolean;\n}\n\nconst DEFAULT_PREDICTIONS: Prediction[] = [];\n\nconst JDIError = ({\n documentType,\n onRetry,\n onContinueAnyway,\n onBackToUserInput,\n retryCount = 0,\n predictions = DEFAULT_PREDICTIONS,\n errorCode,\n allowResubmission,\n maxResubmissionAttempts,\n isRetryAllowed = true,\n blockContinue = false,\n}: JDIErrorProps) => {\n const { t } = useI18n();\n const [validationPoints, setValidationPoints] = useState<string[]>([]);\n\n // Détail de mismatch d'identité (code 7.0), calculé côté backend et porté\n // par la première prédiction. Absent pour tous les autres codes.\n const mismatchDetails = predictions?.[0]?.mismatchDetails;\n\n useEffect(() => {\n // Use shared utility to get validation points\n setValidationPoints(\n getValidationPoints(errorCode, predictions, t, \"error\", mismatchDetails),\n );\n }, [predictions, errorCode, t, mismatchDetails]);\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 return (\n <MobilePageLayout\n footer={\n <div className=\"w-full max-w-md mx-auto\">\n <div className=\"flex flex-col space-y-3 md:hidden\">\n {blockContinue ? (\n <Button onClick={onRetry} className=\"w-full py-3\">\n {t(\"errors.retry_verification\")}\n </Button>\n ) : (\n <>\n {onBackToUserInput && (\n <ButtonDesktop\n onClick={onBackToUserInput}\n type=\"back\"\n className=\"w-full text-black text-center font-poppins text-sm font-medium py-2\"\n >\n {t(\"errors.back_to_user_input\")}\n </ButtonDesktop>\n )}\n {retryCount >= 1 && isRetryAllowed && onContinueAnyway && (\n <ButtonDesktop\n onClick={onContinueAnyway}\n type=\"back\"\n className=\"w-full text-black text-center font-poppins text-sm font-medium py-2\"\n >\n {t(\"errors.continue_anyway\")}\n </ButtonDesktop>\n )}\n {isRetryAllowed && (\n <Button onClick={onRetry} className=\"w-full py-3\">\n {t(\"errors.retry_verification\")}\n </Button>\n )}\n {!isRetryAllowed && onContinueAnyway && (\n <Button onClick={onContinueAnyway} className=\"w-full py-3\">\n {t(\"errors.continue_anyway\")}\n </Button>\n )}\n </>\n )}\n </div>\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(\"errors.retry_verification\")}\n </ButtonDesktop>\n ) : (\n <>\n {onBackToUserInput && (\n <ButtonDesktop\n onClick={onBackToUserInput}\n type=\"back\"\n className=\"text-black text-center font-poppins text-sm font-medium py-2\"\n >\n {t(\"errors.back_to_user_input\")}\n </ButtonDesktop>\n )}\n {retryCount >= 1 && isRetryAllowed && onContinueAnyway && (\n <ButtonDesktop\n onClick={onContinueAnyway}\n type=\"back\"\n className=\"text-black text-center font-poppins text-sm font-medium py-2\"\n >\n {t(\"errors.continue_anyway\")}\n </ButtonDesktop>\n )}\n {isRetryAllowed && (\n <ButtonDesktop onClick={onRetry} type=\"continue\">\n {t(\"errors.retry_verification\")}\n </ButtonDesktop>\n )}\n {!isRetryAllowed && onContinueAnyway && (\n <ButtonDesktop\n onClick={onContinueAnyway}\n type=\"continue\"\n >\n {t(\"errors.continue_anyway\")}\n </ButtonDesktop>\n )}\n </>\n )}\n </div>\n </div>\n </div>\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 {/* 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\")}\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: \"document\",\n })\n : t(\"errors.verification_failed_subtitle_no_retry\", {\n documentType: \"document\",\n })}\n </Subtitle>\n </div>\n\n {/* Specimen warning */}\n {!blockContinue && errorCode?.startsWith(\"8\") && (\n <div className=\"bg-orange-50 border border-orange-200 rounded-lg p-4\">\n <p className=\"text-sm text-orange-800\">\n {t(\"errors.specimen_detected\")}\n </p>\n </div>\n )}\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\")}\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(\"errors.resubmission.max_attempts_reached\")}\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\")}\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\")}\n </h3>\n <p className=\"text-sm text-blue-800\">\n {t(\"errors.next_steps_description\")}\n </p>\n </div>\n )}\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default JDIError;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ import { isPng, dataUrlToFile, isJpeg, convertJpegToPng, isPdf, convertPdfToPng
|
|
|
9
9
|
import { useI18n } from '../../hooks/useI18n.js';
|
|
10
10
|
import { requiresTwoSides } from '../../utils/documentLabels.js';
|
|
11
11
|
import { isS3UploadNotConfirmedError } from '../../utils/analysisErrors.js';
|
|
12
|
+
import { isBlockingCode } from '../../utils/jdiCodes.js';
|
|
12
13
|
|
|
13
14
|
// Fonction pour obtenir les étapes de traitement traduites
|
|
14
15
|
var getProcessingSteps = function (t) { return [
|
|
@@ -34,7 +35,7 @@ var getProcessingSteps = function (t) { return [
|
|
|
34
35
|
},
|
|
35
36
|
]; };
|
|
36
37
|
var JDIProcessing = memo(function (_a) {
|
|
37
|
-
var onProcessingComplete = _a.onProcessingComplete, documentType = _a.documentType, fileUploaded = _a.fileUploaded, documentTypeId = _a.documentTypeId, _b = _a.retryCount, retryCount = _b === void 0 ? 0 : _b, documentTemplateId = _a.documentTemplateId, nodeId = _a.nodeId;
|
|
38
|
+
var onProcessingComplete = _a.onProcessingComplete, documentType = _a.documentType, fileUploaded = _a.fileUploaded, documentTypeId = _a.documentTypeId, _b = _a.retryCount, retryCount = _b === void 0 ? 0 : _b, documentTemplateId = _a.documentTemplateId, nodeId = _a.nodeId, blockingCodes = _a.blockingCodes;
|
|
38
39
|
var t = useI18n().t;
|
|
39
40
|
var _c = useState(false), isProcessing = _c[0], setIsProcessing = _c[1];
|
|
40
41
|
var _d = useState(0), currentStep = _d[0], setCurrentStep = _d[1];
|
|
@@ -127,139 +128,87 @@ var JDIProcessing = memo(function (_a) {
|
|
|
127
128
|
});
|
|
128
129
|
}); };
|
|
129
130
|
var processFiles = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
130
|
-
var
|
|
131
|
+
var i, response, extractedCode, codeName, codeDescription, mismatchDetails, predictions, isSuccess, canRetry, error_2, failedStepIndex_1, errorMessage, isNetworkError, isUploadNotConfirmed;
|
|
131
132
|
return __generator(this, function (_a) {
|
|
132
133
|
switch (_a.label) {
|
|
133
134
|
case 0:
|
|
134
|
-
_a.trys.push([0,
|
|
135
|
+
_a.trys.push([0, 9, 10, 11]);
|
|
135
136
|
// Marquer le début du traitement
|
|
136
137
|
setIsProcessing(true);
|
|
137
138
|
processingStartedRef.current = true;
|
|
138
139
|
processedFilesRef.current = filesKey;
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
setCurrentStep(processingSteps.length - 1);
|
|
197
|
-
}
|
|
198
|
-
},
|
|
199
|
-
onComplete: function (status) {
|
|
200
|
-
// Update final progress state
|
|
201
|
-
setAnalysisProgress({
|
|
202
|
-
progress: status.progress,
|
|
203
|
-
currentStep: status.currentStep,
|
|
204
|
-
message: status.message,
|
|
205
|
-
});
|
|
206
|
-
// Ensure we're at the final step
|
|
207
|
-
setCurrentStep(processingSteps.length - 1);
|
|
208
|
-
// Mark the final step based on analysis result
|
|
209
|
-
var isFailed = status.currentStep === "failed" ||
|
|
210
|
-
status.currentStep === "error";
|
|
211
|
-
if (isFailed) {
|
|
212
|
-
setProcessingSteps(function (prev) {
|
|
213
|
-
return prev.map(function (step, index) {
|
|
214
|
-
return index === processingSteps.length - 1
|
|
215
|
-
? __assign(__assign({}, step), { hasError: true }) : step;
|
|
216
|
-
});
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
|
-
},
|
|
220
|
-
onFailed: function (status, error) {
|
|
221
|
-
console.error("❌ [JDIProcessing] Analysis polling failed:", error);
|
|
222
|
-
// Update error state
|
|
223
|
-
setAnalysisProgress({
|
|
224
|
-
progress: 100,
|
|
225
|
-
currentStep: "failed",
|
|
226
|
-
message: "Analysis failed: ".concat(error),
|
|
227
|
-
});
|
|
228
|
-
// Mark current step as error
|
|
229
|
-
setProcessingSteps(function (prev) {
|
|
230
|
-
return prev.map(function (step, index) {
|
|
231
|
-
return index === currentStep
|
|
232
|
-
? __assign(__assign({}, step), { hasError: true }) : step;
|
|
233
|
-
});
|
|
234
|
-
});
|
|
235
|
-
},
|
|
236
|
-
},
|
|
237
|
-
})];
|
|
238
|
-
case 4:
|
|
239
|
-
response = _b.sent();
|
|
240
|
-
extractedCode_1 = String(response.code);
|
|
241
|
-
codeName = response === null || response === void 0 ? void 0 : response.codeName;
|
|
242
|
-
codeDescription = response === null || response === void 0 ? void 0 : response.codeDescription;
|
|
243
|
-
predictions = [];
|
|
244
|
-
if (extractedCode_1 && codeName) {
|
|
245
|
-
predictions.push({
|
|
246
|
-
code: extractedCode_1,
|
|
247
|
-
codeName: codeName,
|
|
248
|
-
codeDescription: codeDescription || "",
|
|
249
|
-
type: "document",
|
|
250
|
-
});
|
|
140
|
+
i = 0;
|
|
141
|
+
_a.label = 1;
|
|
142
|
+
case 1:
|
|
143
|
+
if (!(i < processingSteps.length)) return [3 /*break*/, 8];
|
|
144
|
+
setCurrentStep(i);
|
|
145
|
+
if (!(i < processingSteps.length - 1)) return [3 /*break*/, 3];
|
|
146
|
+
// Délai entre les étapes (sauf la dernière)
|
|
147
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 800); })];
|
|
148
|
+
case 2:
|
|
149
|
+
// Délai entre les étapes (sauf la dernière)
|
|
150
|
+
_a.sent();
|
|
151
|
+
return [3 /*break*/, 7];
|
|
152
|
+
case 3:
|
|
153
|
+
// Dernière étape : conversion et upload si nécessaire, puis appel API réel
|
|
154
|
+
return [4 /*yield*/, handleFileConversionAndUpload(sessionId, fileUploaded)];
|
|
155
|
+
case 4:
|
|
156
|
+
// Dernière étape : conversion et upload si nécessaire, puis appel API réel
|
|
157
|
+
_a.sent();
|
|
158
|
+
return [4 /*yield*/, analyzeFiles(sessionId, nodeId, fileUploaded, documentTemplateId || "", {
|
|
159
|
+
save: false, // don't save to session yet
|
|
160
|
+
incrementAnalysis: false, // don't auto-progress session
|
|
161
|
+
documentTypeKey: documentType,
|
|
162
|
+
requiresTwoSides: requiresTwoSides(documentType),
|
|
163
|
+
enablePolling: true, // Enable polling for progress
|
|
164
|
+
pollingOptions: {
|
|
165
|
+
interval: 2000, // Poll every 2 seconds (backend optimized timing)
|
|
166
|
+
maxAttempts: 30, // 30 * 2s = max 60s polling duration
|
|
167
|
+
timeout: 600000,
|
|
168
|
+
onProgress: function (status) {
|
|
169
|
+
// Update analysis progress state for display
|
|
170
|
+
setAnalysisProgress({
|
|
171
|
+
progress: status.progress,
|
|
172
|
+
currentStep: status.currentStep,
|
|
173
|
+
message: status.message,
|
|
174
|
+
});
|
|
175
|
+
// Update UI based on progress percentage
|
|
176
|
+
// 50% = Analyzing (steps 0-2)
|
|
177
|
+
// 100% = Completed (step 3)
|
|
178
|
+
if (status.progress === 50) {
|
|
179
|
+
// Analysis in progress - show steps 0-2 progressively
|
|
180
|
+
var elapsed = Date.now() -
|
|
181
|
+
(Date.parse(status.startedAt || "") || Date.now());
|
|
182
|
+
var elapsedSeconds = elapsed / 1000;
|
|
183
|
+
// Progress through first 3 steps based on elapsed time
|
|
184
|
+
if (elapsedSeconds < 3) {
|
|
185
|
+
setCurrentStep(function (prev) { return Math.max(prev, 0); });
|
|
186
|
+
}
|
|
187
|
+
else if (elapsedSeconds < 6) {
|
|
188
|
+
setCurrentStep(function (prev) { return Math.max(prev, 1); });
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
setCurrentStep(function (prev) { return Math.max(prev, 2); });
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
else if (status.progress === 100) {
|
|
195
|
+
// Analysis complete - move to final step
|
|
196
|
+
setCurrentStep(processingSteps.length - 1);
|
|
251
197
|
}
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
predictions: predictions,
|
|
198
|
+
},
|
|
199
|
+
onComplete: function (status) {
|
|
200
|
+
// Update final progress state
|
|
201
|
+
setAnalysisProgress({
|
|
202
|
+
progress: status.progress,
|
|
203
|
+
currentStep: status.currentStep,
|
|
204
|
+
message: status.message,
|
|
260
205
|
});
|
|
206
|
+
// Ensure we're at the final step
|
|
207
|
+
setCurrentStep(processingSteps.length - 1);
|
|
261
208
|
// Mark the final step based on analysis result
|
|
262
|
-
|
|
209
|
+
var isFailed = status.currentStep === "failed" ||
|
|
210
|
+
status.currentStep === "error";
|
|
211
|
+
if (isFailed) {
|
|
263
212
|
setProcessingSteps(function (prev) {
|
|
264
213
|
return prev.map(function (step, index) {
|
|
265
214
|
return index === processingSteps.length - 1
|
|
@@ -267,32 +216,67 @@ var JDIProcessing = memo(function (_a) {
|
|
|
267
216
|
});
|
|
268
217
|
});
|
|
269
218
|
}
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
//
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
219
|
+
},
|
|
220
|
+
onFailed: function (status, error) {
|
|
221
|
+
console.error("❌ [JDIProcessing] Analysis polling failed:", error);
|
|
222
|
+
// Update error state
|
|
223
|
+
setAnalysisProgress({
|
|
224
|
+
progress: 100,
|
|
225
|
+
currentStep: "failed",
|
|
226
|
+
message: "Analysis failed: ".concat(error),
|
|
227
|
+
});
|
|
228
|
+
// Mark current step as error
|
|
229
|
+
setProcessingSteps(function (prev) {
|
|
230
|
+
return prev.map(function (step, index) {
|
|
231
|
+
return index === currentStep
|
|
232
|
+
? __assign(__assign({}, step), { hasError: true }) : step;
|
|
233
|
+
});
|
|
234
|
+
});
|
|
235
|
+
},
|
|
236
|
+
},
|
|
237
|
+
})];
|
|
238
|
+
case 5:
|
|
239
|
+
response = _a.sent();
|
|
240
|
+
extractedCode = String(response.code);
|
|
241
|
+
codeName = response === null || response === void 0 ? void 0 : response.codeName;
|
|
242
|
+
codeDescription = response === null || response === void 0 ? void 0 : response.codeDescription;
|
|
243
|
+
mismatchDetails = response === null || response === void 0 ? void 0 : response.mismatchDetails;
|
|
244
|
+
predictions = [];
|
|
245
|
+
if (extractedCode && codeName) {
|
|
246
|
+
predictions.push(__assign({ code: extractedCode, codeName: codeName, codeDescription: codeDescription || "", type: "document" }, (mismatchDetails ? { mismatchDetails: mismatchDetails } : {})));
|
|
247
|
+
}
|
|
248
|
+
isSuccess = !isBlockingCode(extractedCode, blockingCodes);
|
|
249
|
+
canRetry = isSuccess === false;
|
|
250
|
+
setAnalysisResult({
|
|
251
|
+
success: isSuccess,
|
|
252
|
+
code: extractedCode,
|
|
253
|
+
canRetry: canRetry,
|
|
254
|
+
data: response,
|
|
255
|
+
predictions: predictions,
|
|
256
|
+
});
|
|
257
|
+
// Mark the final step based on analysis result
|
|
258
|
+
if (!isSuccess) {
|
|
259
|
+
setProcessingSteps(function (prev) {
|
|
260
|
+
return prev.map(function (step, index) {
|
|
261
|
+
return index === processingSteps.length - 1
|
|
262
|
+
? __assign(__assign({}, step), { hasError: true }) : step;
|
|
263
|
+
});
|
|
278
264
|
});
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
case
|
|
283
|
-
|
|
284
|
-
return [5 /*yield**/, _loop_1(i)];
|
|
285
|
-
case 2:
|
|
265
|
+
}
|
|
266
|
+
// délai pour voir le résultat
|
|
267
|
+
return [4 /*yield*/, new Promise(function (resolve) { return setTimeout(resolve, 500); })];
|
|
268
|
+
case 6:
|
|
269
|
+
// délai pour voir le résultat
|
|
286
270
|
_a.sent();
|
|
287
|
-
_a.label =
|
|
288
|
-
case
|
|
271
|
+
_a.label = 7;
|
|
272
|
+
case 7:
|
|
289
273
|
i++;
|
|
290
274
|
return [3 /*break*/, 1];
|
|
291
|
-
case
|
|
275
|
+
case 8:
|
|
292
276
|
setCurrentStep(processingSteps.length);
|
|
293
277
|
setIsComplete(true);
|
|
294
|
-
return [3 /*break*/,
|
|
295
|
-
case
|
|
278
|
+
return [3 /*break*/, 11];
|
|
279
|
+
case 9:
|
|
296
280
|
error_2 = _a.sent();
|
|
297
281
|
console.error("❌ Erreur lors de l'analyse des fichiers:", error_2);
|
|
298
282
|
failedStepIndex_1 = currentStep;
|
|
@@ -320,11 +304,11 @@ var JDIProcessing = memo(function (_a) {
|
|
|
320
304
|
blockContinue: isUploadNotConfirmed,
|
|
321
305
|
});
|
|
322
306
|
setIsComplete(true);
|
|
323
|
-
return [3 /*break*/,
|
|
324
|
-
case
|
|
307
|
+
return [3 /*break*/, 11];
|
|
308
|
+
case 10:
|
|
325
309
|
setIsProcessing(false);
|
|
326
310
|
return [7 /*endfinally*/];
|
|
327
|
-
case
|
|
311
|
+
case 11: return [2 /*return*/];
|
|
328
312
|
}
|
|
329
313
|
});
|
|
330
314
|
}); };
|
|
@@ -339,6 +323,7 @@ var JDIProcessing = memo(function (_a) {
|
|
|
339
323
|
stableOnProcessingComplete,
|
|
340
324
|
processingSteps.length,
|
|
341
325
|
currentStep,
|
|
326
|
+
blockingCodes,
|
|
342
327
|
]);
|
|
343
328
|
// Auto-complete when analysis is done
|
|
344
329
|
useEffect(function () {
|