datakeen-session-react 1.1.140-dev.129 → 1.1.140-dev.130
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/JDIProcessing.js +136 -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/controleJdiPolicy.js +47 -0
- package/dist/cjs/components/session/controleJdiPolicy.js.map +1 -0
- package/dist/cjs/index.css.js +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/jdiCodes.js +57 -0
- package/dist/cjs/utils/jdiCodes.js.map +1 -0
- 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/JDIProcessing.js +136 -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/controleJdiPolicy.js +42 -0
- package/dist/esm/components/session/controleJdiPolicy.js.map +1 -0
- package/dist/esm/index.css.js +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/jdiCodes.js +53 -0
- package/dist/esm/utils/jdiCodes.js.map +1 -0
- package/package.json +1 -1
|
@@ -14,7 +14,7 @@ var DocumentVideoProcessing = require('./document-video-flow/DocumentVideoProces
|
|
|
14
14
|
* Gère les étapes internes de capture, confirmation et traitement de la vidéo.
|
|
15
15
|
*/
|
|
16
16
|
var DocumentVideoCapture = function (_a) {
|
|
17
|
-
var selectedDocumentType = _a.selectedDocumentType, onComplete = _a.onComplete, onBack = _a.onBack, nodeId = _a.nodeId, sessionId = _a.sessionId, previewOverrides = _a.previewOverrides;
|
|
17
|
+
var selectedDocumentType = _a.selectedDocumentType, onComplete = _a.onComplete, onBack = _a.onBack, nodeId = _a.nodeId, sessionId = _a.sessionId, previewOverrides = _a.previewOverrides, blockingCodes = _a.blockingCodes;
|
|
18
18
|
var _b = React.useState(0), internalStep = _b[0], setInternalStep = _b[1];
|
|
19
19
|
var _c = React.useState({}), videoData = _c[0], setVideoData = _c[1];
|
|
20
20
|
var _d = React.useState({}), thumbnail = _d[0], setThumbnail = _d[1];
|
|
@@ -75,7 +75,7 @@ var DocumentVideoCapture = function (_a) {
|
|
|
75
75
|
(thumbnail[currentSide] || (previewOverrides === null || previewOverrides === void 0 ? void 0 : previewOverrides[currentSide])) && (jsxRuntime.jsx(DocumentVideoConfirmation.default, { videoData: videoData[currentSide], thumbnail: ((previewOverrides === null || previewOverrides === void 0 ? void 0 : previewOverrides[currentSide]) ||
|
|
76
76
|
thumbnail[currentSide]), documentType: (selectedDocumentType === null || selectedDocumentType === void 0 ? void 0 : selectedDocumentType.label) || "document", side: currentSide, onConfirm: handleConfirmVideo, onRetake: handleRetakeVideo })), internalStep === 2 &&
|
|
77
77
|
videoData.recto &&
|
|
78
|
-
(thumbnail.recto || (previewOverrides === null || previewOverrides === void 0 ? void 0 : previewOverrides.recto)) && (jsxRuntime.jsx(DocumentVideoProcessing.default, { onProcessingComplete: videoProcessed, videoData: videoData, thumbnail: previewOverrides !== null && previewOverrides !== void 0 ? previewOverrides : thumbnail, onRetake: onRetake, sessionId: sessionId, nodeId: nodeId, documentTemplateId: (selectedDocumentType === null || selectedDocumentType === void 0 ? void 0 : selectedDocumentType.documentTemplateId) || "", documentType: (selectedDocumentType === null || selectedDocumentType === void 0 ? void 0 : selectedDocumentType.id) || "document", requiresTwoSides: requiresTwoSides }))] }));
|
|
78
|
+
(thumbnail.recto || (previewOverrides === null || previewOverrides === void 0 ? void 0 : previewOverrides.recto)) && (jsxRuntime.jsx(DocumentVideoProcessing.default, { onProcessingComplete: videoProcessed, videoData: videoData, thumbnail: previewOverrides !== null && previewOverrides !== void 0 ? previewOverrides : thumbnail, onRetake: onRetake, sessionId: sessionId, nodeId: nodeId, documentTemplateId: (selectedDocumentType === null || selectedDocumentType === void 0 ? void 0 : selectedDocumentType.documentTemplateId) || "", documentType: (selectedDocumentType === null || selectedDocumentType === void 0 ? void 0 : selectedDocumentType.id) || "document", requiresTwoSides: requiresTwoSides, blockingCodes: blockingCodes }))] }));
|
|
79
79
|
};
|
|
80
80
|
|
|
81
81
|
exports.default = DocumentVideoCapture;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DocumentVideoCapture.js","sources":["../../../../../src/components/document-video/DocumentVideoCapture.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport DocumentVideoFlow from \"./document-video-flow/DocumentVideoFlow\";\nimport DocumentVideoConfirmation from \"./DocumentVideoConfirmation\";\nimport DocumentVideoProcessing from \"./document-video-flow/DocumentVideoProcessing\";\nimport type {\n DocumentVideoCaptureBySide,\n DocumentVideoPreviewBySide,\n DocumentVideoSide,\n DocumentVideoCaptureData,\n} from \"../../types/documentVideo\";\nimport type { Prediction } from \"../../utils/apiAnalysis\";\n\ninterface DocumentVideoCaptureProps {\n selectedDocumentType: {\n id: string;\n label: string;\n hasTwoSides?: boolean;\n documentTemplateId?: string;\n } | null;\n onComplete: (\n success: boolean,\n predictions?: Prediction[],\n errorCode?: string,\n ) => void;\n onBack: () => void;\n nodeId: string;\n sessionId: string;\n previewOverrides?: DocumentVideoPreviewBySide;\n}\n\n/**\n * Composant de gestion du flux de capture vidéo de documents.\n * Gère les étapes internes de capture, confirmation et traitement de la vidéo.\n */\nconst DocumentVideoCapture = ({\n selectedDocumentType,\n onComplete,\n onBack,\n nodeId,\n sessionId,\n previewOverrides,\n}: DocumentVideoCaptureProps) => {\n const [internalStep, setInternalStep] = useState(0);\n const [videoData, setVideoData] = useState<DocumentVideoCaptureBySide>({});\n const [thumbnail, setThumbnail] = useState<DocumentVideoPreviewBySide>({});\n const [isTransitioning, setIsTransitioning] = useState(false);\n const [currentSide, setCurrentSide] = useState<DocumentVideoSide>(\"recto\");\n\n const requiresTwoSides = !!selectedDocumentType?.hasTwoSides;\n\n const handleConfirmVideo = () => {\n // Ajouter une transition visuelle avant de passer à l'étape suivante\n setIsTransitioning(true);\n\n // Attendre un peu pour l'animation avant de passer à l'étape suivante\n setTimeout(() => {\n if (requiresTwoSides && currentSide === \"recto\") {\n setCurrentSide(\"verso\");\n setInternalStep(0);\n } else {\n setInternalStep(2); // Passer à l'étape de traitement de la vidéo\n }\n setIsTransitioning(false);\n }, 500);\n };\n\n const videoProcessed = (\n processed: boolean,\n predictions?: Prediction[],\n errorCode?: string,\n ) => {\n // Callback pour indiquer que la vidéo a été traitée\n onComplete(processed, predictions, errorCode);\n };\n\n const onRetake = () => {\n setCurrentSide(\"recto\");\n setVideoData({});\n setThumbnail({});\n setInternalStep(0);\n };\n\n const handleRetakeVideo = () => {\n setVideoData((prev) => ({ ...prev, [currentSide]: undefined }));\n setThumbnail((prev) => ({ ...prev, [currentSide]: undefined }));\n setInternalStep(0);\n };\n\n return (\n <div\n className={`h-full w-full transition-opacity duration-500 ${\n isTransitioning ? \"opacity-50\" : \"opacity-100\"\n }`}\n >\n {internalStep === 0 && (\n <DocumentVideoFlow\n setVideoData={(\n side: DocumentVideoSide,\n data: DocumentVideoCaptureData,\n ) => setVideoData((prev) => ({ ...prev, [side]: data }))}\n setThumbnail={(side: DocumentVideoSide, data: string) =>\n setThumbnail((prev) => ({ ...prev, [side]: data }))\n }\n setStep={setInternalStep}\n onBack={\n currentSide === \"verso\"\n ? () => {\n setCurrentSide(\"recto\");\n setInternalStep(1);\n }\n : onBack\n }\n documentType={selectedDocumentType?.label || \"document\"}\n side={currentSide}\n />\n )}\n {internalStep === 1 &&\n videoData[currentSide] &&\n (thumbnail[currentSide] || previewOverrides?.[currentSide]) && (\n <DocumentVideoConfirmation\n videoData={videoData[currentSide] as DocumentVideoCaptureData}\n thumbnail={\n (previewOverrides?.[currentSide] ||\n thumbnail[currentSide]) as string\n }\n documentType={selectedDocumentType?.label || \"document\"}\n side={currentSide}\n onConfirm={handleConfirmVideo}\n onRetake={handleRetakeVideo}\n />\n )}\n {internalStep === 2 &&\n videoData.recto &&\n (thumbnail.recto || previewOverrides?.recto) && (\n <DocumentVideoProcessing\n onProcessingComplete={videoProcessed}\n videoData={videoData}\n thumbnail={previewOverrides ?? thumbnail}\n onRetake={onRetake}\n sessionId={sessionId}\n nodeId={nodeId}\n documentTemplateId={selectedDocumentType?.documentTemplateId || \"\"}\n documentType={selectedDocumentType?.id || \"document\"}\n requiresTwoSides={requiresTwoSides}\n />\n )}\n </div>\n );\n};\n\nexport default DocumentVideoCapture;\n"],"names":["useState","_jsxs","_jsx","DocumentVideoFlow","DocumentVideoConfirmation","DocumentVideoProcessing"],"mappings":";;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"DocumentVideoCapture.js","sources":["../../../../../src/components/document-video/DocumentVideoCapture.tsx"],"sourcesContent":["import { useState } from \"react\";\nimport DocumentVideoFlow from \"./document-video-flow/DocumentVideoFlow\";\nimport DocumentVideoConfirmation from \"./DocumentVideoConfirmation\";\nimport DocumentVideoProcessing from \"./document-video-flow/DocumentVideoProcessing\";\nimport type {\n DocumentVideoCaptureBySide,\n DocumentVideoPreviewBySide,\n DocumentVideoSide,\n DocumentVideoCaptureData,\n} from \"../../types/documentVideo\";\nimport type { Prediction } from \"../../utils/apiAnalysis\";\n\ninterface DocumentVideoCaptureProps {\n selectedDocumentType: {\n id: string;\n label: string;\n hasTwoSides?: boolean;\n documentTemplateId?: string;\n } | null;\n onComplete: (\n success: boolean,\n predictions?: Prediction[],\n errorCode?: string,\n ) => void;\n onBack: () => void;\n nodeId: string;\n sessionId: string;\n previewOverrides?: DocumentVideoPreviewBySide;\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\n/**\n * Composant de gestion du flux de capture vidéo de documents.\n * Gère les étapes internes de capture, confirmation et traitement de la vidéo.\n */\nconst DocumentVideoCapture = ({\n selectedDocumentType,\n onComplete,\n onBack,\n nodeId,\n sessionId,\n previewOverrides,\n blockingCodes,\n}: DocumentVideoCaptureProps) => {\n const [internalStep, setInternalStep] = useState(0);\n const [videoData, setVideoData] = useState<DocumentVideoCaptureBySide>({});\n const [thumbnail, setThumbnail] = useState<DocumentVideoPreviewBySide>({});\n const [isTransitioning, setIsTransitioning] = useState(false);\n const [currentSide, setCurrentSide] = useState<DocumentVideoSide>(\"recto\");\n\n const requiresTwoSides = !!selectedDocumentType?.hasTwoSides;\n\n const handleConfirmVideo = () => {\n // Ajouter une transition visuelle avant de passer à l'étape suivante\n setIsTransitioning(true);\n\n // Attendre un peu pour l'animation avant de passer à l'étape suivante\n setTimeout(() => {\n if (requiresTwoSides && currentSide === \"recto\") {\n setCurrentSide(\"verso\");\n setInternalStep(0);\n } else {\n setInternalStep(2); // Passer à l'étape de traitement de la vidéo\n }\n setIsTransitioning(false);\n }, 500);\n };\n\n const videoProcessed = (\n processed: boolean,\n predictions?: Prediction[],\n errorCode?: string,\n ) => {\n // Callback pour indiquer que la vidéo a été traitée\n onComplete(processed, predictions, errorCode);\n };\n\n const onRetake = () => {\n setCurrentSide(\"recto\");\n setVideoData({});\n setThumbnail({});\n setInternalStep(0);\n };\n\n const handleRetakeVideo = () => {\n setVideoData((prev) => ({ ...prev, [currentSide]: undefined }));\n setThumbnail((prev) => ({ ...prev, [currentSide]: undefined }));\n setInternalStep(0);\n };\n\n return (\n <div\n className={`h-full w-full transition-opacity duration-500 ${\n isTransitioning ? \"opacity-50\" : \"opacity-100\"\n }`}\n >\n {internalStep === 0 && (\n <DocumentVideoFlow\n setVideoData={(\n side: DocumentVideoSide,\n data: DocumentVideoCaptureData,\n ) => setVideoData((prev) => ({ ...prev, [side]: data }))}\n setThumbnail={(side: DocumentVideoSide, data: string) =>\n setThumbnail((prev) => ({ ...prev, [side]: data }))\n }\n setStep={setInternalStep}\n onBack={\n currentSide === \"verso\"\n ? () => {\n setCurrentSide(\"recto\");\n setInternalStep(1);\n }\n : onBack\n }\n documentType={selectedDocumentType?.label || \"document\"}\n side={currentSide}\n />\n )}\n {internalStep === 1 &&\n videoData[currentSide] &&\n (thumbnail[currentSide] || previewOverrides?.[currentSide]) && (\n <DocumentVideoConfirmation\n videoData={videoData[currentSide] as DocumentVideoCaptureData}\n thumbnail={\n (previewOverrides?.[currentSide] ||\n thumbnail[currentSide]) as string\n }\n documentType={selectedDocumentType?.label || \"document\"}\n side={currentSide}\n onConfirm={handleConfirmVideo}\n onRetake={handleRetakeVideo}\n />\n )}\n {internalStep === 2 &&\n videoData.recto &&\n (thumbnail.recto || previewOverrides?.recto) && (\n <DocumentVideoProcessing\n onProcessingComplete={videoProcessed}\n videoData={videoData}\n thumbnail={previewOverrides ?? thumbnail}\n onRetake={onRetake}\n sessionId={sessionId}\n nodeId={nodeId}\n documentTemplateId={selectedDocumentType?.documentTemplateId || \"\"}\n documentType={selectedDocumentType?.id || \"document\"}\n requiresTwoSides={requiresTwoSides}\n blockingCodes={blockingCodes}\n />\n )}\n </div>\n );\n};\n\nexport default DocumentVideoCapture;\n"],"names":["useState","_jsxs","_jsx","DocumentVideoFlow","DocumentVideoConfirmation","DocumentVideoProcessing"],"mappings":"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"}
|
|
@@ -9,6 +9,7 @@ var Title = require('../../ui/Title.js');
|
|
|
9
9
|
var Subtitle = require('../../ui/Subtitle.js');
|
|
10
10
|
var useI18n = require('../../../hooks/useI18n.js');
|
|
11
11
|
var analysis = require('../../../services/analysis.js');
|
|
12
|
+
var jdiCodes = require('../../../utils/jdiCodes.js');
|
|
12
13
|
|
|
13
14
|
var processingSteps = [
|
|
14
15
|
{
|
|
@@ -25,7 +26,7 @@ var processingSteps = [
|
|
|
25
26
|
},
|
|
26
27
|
];
|
|
27
28
|
var DocumentVideoProcessing = function (_a) {
|
|
28
|
-
var onProcessingComplete = _a.onProcessingComplete, videoData = _a.videoData, thumbnail = _a.thumbnail, onRetake = _a.onRetake, sessionId = _a.sessionId, nodeId = _a.nodeId, documentTemplateId = _a.documentTemplateId, documentType = _a.documentType, requiresTwoSides = _a.requiresTwoSides;
|
|
29
|
+
var onProcessingComplete = _a.onProcessingComplete, videoData = _a.videoData, thumbnail = _a.thumbnail, onRetake = _a.onRetake, sessionId = _a.sessionId, nodeId = _a.nodeId, documentTemplateId = _a.documentTemplateId, documentType = _a.documentType, requiresTwoSides = _a.requiresTwoSides, blockingCodes = _a.blockingCodes;
|
|
29
30
|
var t = useI18n.useI18n().t;
|
|
30
31
|
var _b = React.useState(0), currentStep = _b[0], setCurrentStep = _b[1];
|
|
31
32
|
var _c = React.useState(false), hasError = _c[0], setHasError = _c[1];
|
|
@@ -50,7 +51,7 @@ var DocumentVideoProcessing = function (_a) {
|
|
|
50
51
|
}
|
|
51
52
|
}, 90000);
|
|
52
53
|
var processFiles = function () { return tslib_es6.__awaiter(void 0, void 0, void 0, function () {
|
|
53
|
-
var response, rawCode,
|
|
54
|
+
var response, rawCode, extractedCode, isSuccess, predictionSource, predictions, error_1;
|
|
54
55
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3;
|
|
55
56
|
return tslib_es6.__generator(this, function (_4) {
|
|
56
57
|
switch (_4.label) {
|
|
@@ -76,10 +77,8 @@ var DocumentVideoProcessing = function (_a) {
|
|
|
76
77
|
console.log("✅ Analysis response:", response);
|
|
77
78
|
clearTimeout(timeoutId);
|
|
78
79
|
rawCode = (_r = (_m = (_h = (_e = (_d = (_c = (_b = (_a = response === null || response === void 0 ? void 0 : response.result) === null || _a === void 0 ? void 0 : _a.job_status) === null || _b === void 0 ? void 0 : _b.predictions) === null || _c === void 0 ? void 0 : _c[0]) === null || _d === void 0 ? void 0 : _d.code) !== null && _e !== void 0 ? _e : (_g = (_f = response === null || response === void 0 ? void 0 : response.result) === null || _f === void 0 ? void 0 : _f.job_status) === null || _g === void 0 ? void 0 : _g.code) !== null && _h !== void 0 ? _h : (_l = (_k = (_j = response === null || response === void 0 ? void 0 : response.result) === null || _j === void 0 ? void 0 : _j.result) === null || _k === void 0 ? void 0 : _k[0]) === null || _l === void 0 ? void 0 : _l.code) !== null && _m !== void 0 ? _m : (_q = (_p = (_o = response === null || response === void 0 ? void 0 : response.job_status) === null || _o === void 0 ? void 0 : _o.predictions) === null || _p === void 0 ? void 0 : _p[0]) === null || _q === void 0 ? void 0 : _q.code) !== null && _r !== void 0 ? _r : response === null || response === void 0 ? void 0 : response.code;
|
|
79
|
-
|
|
80
|
-
isSuccess =
|
|
81
|
-
return extractedCode_1.startsWith(prefix);
|
|
82
|
-
});
|
|
80
|
+
extractedCode = rawCode ? String(rawCode) : "";
|
|
81
|
+
isSuccess = !jdiCodes.isBlockingCode(extractedCode, blockingCodes);
|
|
83
82
|
predictionSource = (_3 = (_y = (_v = (_u = (_t = (_s = response === null || response === void 0 ? void 0 : response.result) === null || _s === void 0 ? void 0 : _s.job_status) === null || _t === void 0 ? void 0 : _t.predictions) === null || _u === void 0 ? void 0 : _u[0]) !== null && _v !== void 0 ? _v : (_x = (_w = response === null || response === void 0 ? void 0 : response.job_status) === null || _w === void 0 ? void 0 : _w.predictions) === null || _x === void 0 ? void 0 : _x[0]) !== null && _y !== void 0 ? _y : (_2 = (_1 = (_0 = (_z = response === null || response === void 0 ? void 0 : response.result) === null || _z === void 0 ? void 0 : _z.result) === null || _0 === void 0 ? void 0 : _0[0]) === null || _1 === void 0 ? void 0 : _1.predictions) === null || _2 === void 0 ? void 0 : _2[0]) !== null && _3 !== void 0 ? _3 : null;
|
|
84
83
|
predictions = (predictionSource === null || predictionSource === void 0 ? void 0 : predictionSource.code)
|
|
85
84
|
? [
|
|
@@ -94,10 +93,10 @@ var DocumentVideoProcessing = function (_a) {
|
|
|
94
93
|
type: predictionSource.type || "document",
|
|
95
94
|
},
|
|
96
95
|
]
|
|
97
|
-
:
|
|
96
|
+
: extractedCode
|
|
98
97
|
? [
|
|
99
98
|
{
|
|
100
|
-
code:
|
|
99
|
+
code: extractedCode,
|
|
101
100
|
codeName: (response === null || response === void 0 ? void 0 : response.codeName) || "",
|
|
102
101
|
codeDescription: (response === null || response === void 0 ? void 0 : response.codeDescription) || "",
|
|
103
102
|
type: "document",
|
|
@@ -106,11 +105,11 @@ var DocumentVideoProcessing = function (_a) {
|
|
|
106
105
|
: [];
|
|
107
106
|
console.log("📊 Document video analysis result:", {
|
|
108
107
|
isSuccess: isSuccess,
|
|
109
|
-
code:
|
|
108
|
+
code: extractedCode,
|
|
110
109
|
response: response,
|
|
111
110
|
});
|
|
112
111
|
setAnalysisPredictions(predictions);
|
|
113
|
-
setAnalysisErrorCode(
|
|
112
|
+
setAnalysisErrorCode(extractedCode);
|
|
114
113
|
setHasError(!isSuccess);
|
|
115
114
|
setIsDone(true);
|
|
116
115
|
return [3 /*break*/, 4];
|
|
@@ -131,7 +130,7 @@ var DocumentVideoProcessing = function (_a) {
|
|
|
131
130
|
return function () {
|
|
132
131
|
clearTimeout(timeoutId);
|
|
133
132
|
};
|
|
134
|
-
}, [onProcessingComplete, videoData, thumbnail, sessionId, nodeId, isDone, documentType, requiresTwoSides, documentTemplateId]);
|
|
133
|
+
}, [onProcessingComplete, videoData, thumbnail, sessionId, nodeId, isDone, documentType, requiresTwoSides, documentTemplateId, blockingCodes]);
|
|
135
134
|
React.useEffect(function () {
|
|
136
135
|
// While analysis is not finished, stay at step 0
|
|
137
136
|
if (!isDone && !hasError) {
|
package/dist/cjs/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":["useI18n","useState","useRef","useEffect","__awaiter","analyzeDocumentVideo","_jsx","_jsxs","Title","Subtitle"],"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":["useI18n","useState","useRef","useEffect","__awaiter","analyzeDocumentVideo","isBlockingCode","_jsx","_jsxs","Title","Subtitle"],"mappings":"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"}
|