datakeen-session-react 1.1.168 → 1.1.170

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/cjs/components/document-collection/DocumentCollection.js +1 -1
  2. package/dist/cjs/components/document-collection/DocumentCollection.js.map +1 -1
  3. package/dist/cjs/components/document-collection/DocumentCollectionUpload.js +9 -1
  4. package/dist/cjs/components/document-collection/DocumentCollectionUpload.js.map +1 -1
  5. package/dist/cjs/components/jdi/JDIDocumentUpload.js +1 -1
  6. package/dist/cjs/components/jdi/JDIDocumentUpload.js.map +1 -1
  7. package/dist/cjs/components/session/DocumentCheck.js +13 -2
  8. package/dist/cjs/components/session/DocumentCheck.js.map +1 -1
  9. package/dist/cjs/components/template/TemplateNodeRenderer.js +1 -1
  10. package/dist/cjs/components/template/TemplateNodeRenderer.js.map +1 -1
  11. package/dist/cjs/hooks/useUserInputForm.js +18 -5
  12. package/dist/cjs/hooks/useUserInputForm.js.map +1 -1
  13. package/dist/cjs/services/analysis.js +1 -5
  14. package/dist/cjs/services/analysis.js.map +1 -1
  15. package/dist/cjs/services/auditTrailService.js +73 -0
  16. package/dist/cjs/services/auditTrailService.js.map +1 -1
  17. package/dist/cjs/utils/labelToKey.js +28 -0
  18. package/dist/cjs/utils/labelToKey.js.map +1 -0
  19. package/dist/esm/components/document-collection/DocumentCollection.js +1 -1
  20. package/dist/esm/components/document-collection/DocumentCollection.js.map +1 -1
  21. package/dist/esm/components/document-collection/DocumentCollectionUpload.js +9 -1
  22. package/dist/esm/components/document-collection/DocumentCollectionUpload.js.map +1 -1
  23. package/dist/esm/components/jdi/JDIDocumentUpload.js +1 -1
  24. package/dist/esm/components/jdi/JDIDocumentUpload.js.map +1 -1
  25. package/dist/esm/components/session/DocumentCheck.js +13 -2
  26. package/dist/esm/components/session/DocumentCheck.js.map +1 -1
  27. package/dist/esm/components/template/TemplateNodeRenderer.js +1 -1
  28. package/dist/esm/components/template/TemplateNodeRenderer.js.map +1 -1
  29. package/dist/esm/hooks/useUserInputForm.js +18 -5
  30. package/dist/esm/hooks/useUserInputForm.js.map +1 -1
  31. package/dist/esm/services/analysis.js +1 -5
  32. package/dist/esm/services/analysis.js.map +1 -1
  33. package/dist/esm/services/auditTrailService.js +67 -1
  34. package/dist/esm/services/auditTrailService.js.map +1 -1
  35. package/dist/esm/utils/labelToKey.js +26 -0
  36. package/dist/esm/utils/labelToKey.js.map +1 -0
  37. package/examples/sdk-configuration.ts +8 -4
  38. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"auditTrailService.js","sources":["../../../../src/services/auditTrailService.ts"],"sourcesContent":["/**\n * Audit Trail Service\n *\n * Service for interacting with the Datakeen Audit Trail API.\n * Handles creating and retrieving audit trail entries.\n */\n\nimport { apiService } from \"./api\";\nimport { fetchSessionById } from \"./sessionService\";\n\n/**\n * Event types for audit trail entries.\n * These must match the backend AuditTrailEventType enum.\n */\nexport enum AuditTrailEventType {\n STATUS_MODIFIED = \"STATUS_MODIFIED\",\n INFORMATION_MODIFIED = \"INFORMATION_MODIFIED\",\n AI_CONTROLED = \"AI_CONTROLED\",\n SESSION_STARTED = \"SESSION_STARTED\",\n SESSION_ENDED = \"SESSION_ENDED\",\n DOCUMENT_UPLOADED = \"DOCUMENT_UPLOADED\",\n SELFIE_CAPTURED = \"SELFIE_CAPTURED\",\n FORM_SENDED_LINK = \"FORM_SENDED_LINK\",\n SIGNATURE_DOCUMENT_OPENED = \"SIGNATURE_DOCUMENT_OPENED\",\n DOCUMENT_SIGNED = \"DOCUMENT_SIGNED\",\n}\n\n/**\n * Interface for audit trail entry creation request data\n */\nexport interface CreateAuditTrailRequest {\n eventType: AuditTrailEventType;\n analysisId: string;\n documentsName?: Record<string, any>;\n userInputs?: Record<string, any>;\n clientInfoId?: string;\n userId?: string;\n}\n\n/**\n * Interface for audit trail entry response data\n */\nexport interface AuditTrailEntry {\n id: string;\n eventType: AuditTrailEventType;\n documentsName?: Record<string, any>;\n userInputs?: Record<string, any>;\n analysisId: string;\n clientInfoId?: string;\n userId?: string;\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Creates an audit trail entry and associates it with an analysis\n *\n * @param auditTrailData - The audit trail data to create\n * @returns The created audit trail entry\n */\nexport const createAuditTrailEntry = async (\n auditTrailData: CreateAuditTrailRequest\n): Promise<AuditTrailEntry> => {\n try {\n const payload = {\n ...auditTrailData,\n toSession: true,\n };\n const response = await apiService.post(\n \"/session/audit-trail\",\n payload\n );\n return response.data;\n } catch (error) {\n throw error;\n }\n};\n\n/**\n * Fetches all audit trail entries for a specific analysis\n *\n * @param analysisId - The ID of the analysis\n * @returns Array of audit trail entries\n */\nexport const getAuditTrailsByAnalysisId = async (\n analysisId: string\n): Promise<AuditTrailEntry[]> => {\n try {\n const response = await apiService.get(\n `/session/audit-trail/analysis/${analysisId}`\n );\n return response.data;\n } catch (error) {\n throw error;\n }\n};\n\n/**\n * Fetches all audit trail entries for a specific session\n *\n * @param sessionId - The ID of the session\n * @returns Array of audit trail entries\n */\nexport const getAuditTrailsBySessionId = async (\n sessionId: string\n): Promise<AuditTrailEntry[]> => {\n try {\n const response = await apiService.get(\n `/session/audit-trail/session/${sessionId}`\n );\n return response.data;\n } catch (error) {\n throw error;\n }\n};\n\n/**\n * Creates an audit trail entry when a session is started\n *\n * @param analysisId - The ID of the analysis associated with the session\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logSessionStarted = async (\n analysisId: string,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.SESSION_STARTED,\n analysisId,\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when a session is ended\n *\n * @param analysisId - The ID of the analysis associated with the session\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logSessionEnded = async (\n analysisId: string,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.SESSION_ENDED,\n analysisId,\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when a document is uploaded\n *\n * @param analysisId - The ID of the analysis\n * @param documentName - The name or details of the document\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logDocumentUploaded = async (\n analysisId: string,\n documentName: Record<string, any>,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.DOCUMENT_UPLOADED,\n analysisId,\n documentsName: documentName,\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when a selfie is captured\n *\n * @param analysisId - The ID of the analysis\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logSelfieCaptured = async (\n analysisId: string,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.SELFIE_CAPTURED,\n analysisId,\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when user information is modified\n *\n * @param analysisId - The ID of the analysis\n * @param userInputs - The user inputs that were modified\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logInformationModified = async (\n analysisId: string,\n userInputs: Record<string, any>,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.INFORMATION_MODIFIED,\n analysisId,\n userInputs,\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when a session status is modified\n *\n * @param analysisId - The ID of the analysis\n * @param status - The new status value\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logStatusModified = async (\n analysisId: string,\n status: any,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.STATUS_MODIFIED,\n analysisId,\n userInputs: { status },\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when an AI control is performed\n *\n * @param analysisId - The ID of the analysis\n * @param aiResults - The results of the AI control\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logAiControlled = async (\n analysisId: string,\n aiResults: Record<string, any>,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.AI_CONTROLED,\n analysisId,\n userInputs: aiResults,\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when a form link is sent\n *\n * @param analysisId - The ID of the analysis\n * @param recipientInfo - Information about the link recipient\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logFormSendedLink = async (\n analysisId: string,\n recipientInfo: Record<string, any>,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.FORM_SENDED_LINK,\n analysisId,\n userInputs: recipientInfo,\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when a signature document is opened\n *\n * @param analysisId - The ID of the analysis\n * @param documentInfo - Information about the document being signed\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logSignatureDocumentOpened = async (\n analysisId: string,\n documentInfo?: Record<string, any>,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.SIGNATURE_DOCUMENT_OPENED,\n analysisId,\n userInputs: documentInfo || {},\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when a document is signed\n *\n * @param analysisId - The ID of the analysis\n * @param signatureInfo - Information about the signature\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logDocumentSigned = async (\n analysisId: string,\n signatureInfo?: Record<string, any>,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.DOCUMENT_SIGNED,\n analysisId,\n userInputs: signatureInfo || {},\n clientInfoId,\n });\n};\n"],"names":["AuditTrailEventType","__awaiter","apiService"],"mappings":"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"}
1
+ {"version":3,"file":"auditTrailService.js","sources":["../../../../src/services/auditTrailService.ts"],"sourcesContent":["/**\n * Audit Trail Service\n *\n * Service for interacting with the Datakeen Audit Trail API.\n * Handles creating and retrieving audit trail entries.\n */\n\nimport { apiService } from \"./api\";\nimport { fetchSessionById } from \"./sessionService\";\n\n/**\n * Event types for audit trail entries.\n * These must match the backend AuditTrailEventType enum.\n */\nexport enum AuditTrailEventType {\n STATUS_MODIFIED = \"STATUS_MODIFIED\",\n INFORMATION_MODIFIED = \"INFORMATION_MODIFIED\",\n AI_CONTROLED = \"AI_CONTROLED\",\n SESSION_STARTED = \"SESSION_STARTED\",\n SESSION_ENDED = \"SESSION_ENDED\",\n SESSION_ABANDONED = \"SESSION_ABANDONED\",\n DOCUMENT_UPLOADED = \"DOCUMENT_UPLOADED\",\n SELFIE_CAPTURED = \"SELFIE_CAPTURED\",\n FORM_SENDED_LINK = \"FORM_SENDED_LINK\",\n SIGNATURE_DOCUMENT_OPENED = \"SIGNATURE_DOCUMENT_OPENED\",\n DOCUMENT_SIGNED = \"DOCUMENT_SIGNED\",\n FORM_VALIDATED = \"FORM_VALIDATED\",\n DOCUMENT_TYPE_SELECTED = \"DOCUMENT_TYPE_SELECTED\",\n CAPTURE_MODE_SELECTED = \"CAPTURE_MODE_SELECTED\",\n PHOTO_CAPTURED = \"PHOTO_CAPTURED\",\n PHOTOS_VALIDATED = \"PHOTOS_VALIDATED\",\n DOCUMENT_LOADED = \"DOCUMENT_LOADED\",\n DOCUMENTS_VALIDATED = \"DOCUMENTS_VALIDATED\",\n VERIFICATION_COMPLETED = \"VERIFICATION_COMPLETED\",\n}\n\n/**\n * Interface for audit trail entry creation request data\n */\nexport interface CreateAuditTrailRequest {\n eventType: AuditTrailEventType;\n analysisId: string;\n documentsName?: Record<string, any>;\n userInputs?: Record<string, any>;\n metadata?: Record<string, any>;\n clientInfoId?: string;\n userId?: string;\n}\n\n/**\n * Interface for audit trail entry response data\n */\nexport interface AuditTrailEntry {\n id: string;\n eventType: AuditTrailEventType;\n documentsName?: Record<string, any>;\n userInputs?: Record<string, any>;\n analysisId: string;\n clientInfoId?: string;\n userId?: string;\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * Creates an audit trail entry and associates it with an analysis\n *\n * @param auditTrailData - The audit trail data to create\n * @returns The created audit trail entry\n */\nexport const createAuditTrailEntry = async (\n auditTrailData: CreateAuditTrailRequest\n): Promise<AuditTrailEntry> => {\n try {\n const payload = {\n ...auditTrailData,\n toSession: true,\n };\n const response = await apiService.post(\n \"/session/audit-trail\",\n payload\n );\n return response.data;\n } catch (error) {\n throw error;\n }\n};\n\n/**\n * Fetches all audit trail entries for a specific analysis\n *\n * @param analysisId - The ID of the analysis\n * @returns Array of audit trail entries\n */\nexport const getAuditTrailsByAnalysisId = async (\n analysisId: string\n): Promise<AuditTrailEntry[]> => {\n try {\n const response = await apiService.get(\n `/session/audit-trail/analysis/${analysisId}`\n );\n return response.data;\n } catch (error) {\n throw error;\n }\n};\n\n/**\n * Fetches all audit trail entries for a specific session\n *\n * @param sessionId - The ID of the session\n * @returns Array of audit trail entries\n */\nexport const getAuditTrailsBySessionId = async (\n sessionId: string\n): Promise<AuditTrailEntry[]> => {\n try {\n const response = await apiService.get(\n `/session/audit-trail/session/${sessionId}`\n );\n return response.data;\n } catch (error) {\n throw error;\n }\n};\n\n/**\n * Creates an audit trail entry when a session is started\n *\n * @param analysisId - The ID of the analysis associated with the session\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logSessionStarted = async (\n analysisId: string,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.SESSION_STARTED,\n analysisId,\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when a session is ended\n *\n * @param analysisId - The ID of the analysis associated with the session\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logSessionEnded = async (\n analysisId: string,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.SESSION_ENDED,\n analysisId,\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when a document is uploaded\n *\n * @param analysisId - The ID of the analysis\n * @param documentName - The name or details of the document\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logDocumentUploaded = async (\n analysisId: string,\n documentName: Record<string, any>,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.DOCUMENT_UPLOADED,\n analysisId,\n documentsName: documentName,\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when a selfie is captured\n *\n * @param analysisId - The ID of the analysis\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logSelfieCaptured = async (\n analysisId: string,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.SELFIE_CAPTURED,\n analysisId,\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when user information is modified\n *\n * @param analysisId - The ID of the analysis\n * @param userInputs - The user inputs that were modified\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logInformationModified = async (\n analysisId: string,\n userInputs: Record<string, any>,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.INFORMATION_MODIFIED,\n analysisId,\n userInputs,\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when a session status is modified\n *\n * @param analysisId - The ID of the analysis\n * @param status - The new status value\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logStatusModified = async (\n analysisId: string,\n status: any,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.STATUS_MODIFIED,\n analysisId,\n userInputs: { status },\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when an AI control is performed\n *\n * @param analysisId - The ID of the analysis\n * @param aiResults - The results of the AI control\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logAiControlled = async (\n analysisId: string,\n aiResults: Record<string, any>,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.AI_CONTROLED,\n analysisId,\n userInputs: aiResults,\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when a form link is sent\n *\n * @param analysisId - The ID of the analysis\n * @param recipientInfo - Information about the link recipient\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logFormSendedLink = async (\n analysisId: string,\n recipientInfo: Record<string, any>,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.FORM_SENDED_LINK,\n analysisId,\n userInputs: recipientInfo,\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when a signature document is opened\n *\n * @param analysisId - The ID of the analysis\n * @param documentInfo - Information about the document being signed\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logSignatureDocumentOpened = async (\n analysisId: string,\n documentInfo?: Record<string, any>,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.SIGNATURE_DOCUMENT_OPENED,\n analysisId,\n userInputs: documentInfo || {},\n clientInfoId,\n });\n};\n\n/**\n * Creates an audit trail entry when a document is signed\n *\n * @param analysisId - The ID of the analysis\n * @param signatureInfo - Information about the signature\n * @param clientInfoId - Optional client info ID\n * @returns The created audit trail entry\n */\nexport const logDocumentSigned = async (\n analysisId: string,\n signatureInfo?: Record<string, any>,\n clientInfoId?: string\n): Promise<AuditTrailEntry> => {\n return createAuditTrailEntry({\n eventType: AuditTrailEventType.DOCUMENT_SIGNED,\n analysisId,\n userInputs: signatureInfo || {},\n clientInfoId,\n });\n};\n\n// ─── APP3-1763 — Nouveaux events de parcours ─────────────────────────────────\n// Convention : sessionId est passé dans le champ analysisId (backend route via toSession:true).\n// Tous les appels sont fire-and-forget — les callers ne doivent PAS await ces fonctions.\n\nexport const logFormValidated = (\n sessionId: string,\n userInputs?: Record<string, any>,\n clientInfoId?: string\n): void => {\n createAuditTrailEntry({\n eventType: AuditTrailEventType.FORM_VALIDATED,\n analysisId: sessionId,\n userInputs: userInputs || {},\n clientInfoId,\n }).catch(() => {});\n};\n\nexport const logDocumentTypeSelected = (\n sessionId: string,\n documentType: string,\n documentLabel?: string,\n clientInfoId?: string\n): void => {\n createAuditTrailEntry({\n eventType: AuditTrailEventType.DOCUMENT_TYPE_SELECTED,\n analysisId: sessionId,\n metadata: { documentType, documentLabel: documentLabel ?? documentType },\n clientInfoId,\n }).catch(() => {});\n};\n\nexport const logCaptureModeSelected = (\n sessionId: string,\n captureMode: \"picture\" | \"upload\",\n clientInfoId?: string\n): void => {\n createAuditTrailEntry({\n eventType: AuditTrailEventType.CAPTURE_MODE_SELECTED,\n analysisId: sessionId,\n metadata: { captureMode },\n clientInfoId,\n }).catch(() => {});\n};\n\nexport const logPhotoCaptured = (\n sessionId: string,\n side: \"recto\" | \"verso\",\n clientInfoId?: string\n): void => {\n createAuditTrailEntry({\n eventType: AuditTrailEventType.PHOTO_CAPTURED,\n analysisId: sessionId,\n metadata: { side },\n clientInfoId,\n }).catch(() => {});\n};\n\nexport const logPhotosValidated = (\n sessionId: string,\n clientInfoId?: string\n): void => {\n createAuditTrailEntry({\n eventType: AuditTrailEventType.PHOTOS_VALIDATED,\n analysisId: sessionId,\n clientInfoId,\n }).catch(() => {});\n};\n\nexport const logDocumentLoaded = (\n sessionId: string,\n side: \"recto\" | \"verso\",\n documentType?: string,\n clientInfoId?: string\n): void => {\n createAuditTrailEntry({\n eventType: AuditTrailEventType.DOCUMENT_LOADED,\n analysisId: sessionId,\n metadata: { side, ...(documentType ? { documentType } : {}) },\n clientInfoId,\n }).catch(() => {});\n};\n\nexport const logDocumentsValidated = (\n sessionId: string,\n clientInfoId?: string\n): void => {\n createAuditTrailEntry({\n eventType: AuditTrailEventType.DOCUMENTS_VALIDATED,\n analysisId: sessionId,\n clientInfoId,\n }).catch(() => {});\n};\n"],"names":["AuditTrailEventType","__awaiter","apiService"],"mappings":";;;;;AAAA;;;;;AAKG;AAKH;;;AAGG;AACSA;AAAZ,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,mBAAA,CAAA,sBAAA,CAAA,GAAA,sBAA6C;AAC7C,IAAA,mBAAA,CAAA,cAAA,CAAA,GAAA,cAA6B;AAC7B,IAAA,mBAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,mBAAA,CAAA,eAAA,CAAA,GAAA,eAA+B;AAC/B,IAAA,mBAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC;AACvC,IAAA,mBAAA,CAAA,mBAAA,CAAA,GAAA,mBAAuC;AACvC,IAAA,mBAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,mBAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,mBAAA,CAAA,2BAAA,CAAA,GAAA,2BAAuD;AACvD,IAAA,mBAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,mBAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,mBAAA,CAAA,wBAAA,CAAA,GAAA,wBAAiD;AACjD,IAAA,mBAAA,CAAA,uBAAA,CAAA,GAAA,uBAA+C;AAC/C,IAAA,mBAAA,CAAA,gBAAA,CAAA,GAAA,gBAAiC;AACjC,IAAA,mBAAA,CAAA,kBAAA,CAAA,GAAA,kBAAqC;AACrC,IAAA,mBAAA,CAAA,iBAAA,CAAA,GAAA,iBAAmC;AACnC,IAAA,mBAAA,CAAA,qBAAA,CAAA,GAAA,qBAA2C;AAC3C,IAAA,mBAAA,CAAA,wBAAA,CAAA,GAAA,wBAAiD;AACnD,CAAC,EApBWA,2BAAmB,KAAnBA,2BAAmB,GAAA,EAAA,CAAA,CAAA;AAkD/B;;;;;AAKG;AACI,IAAM,qBAAqB,GAAG,UACnC,cAAuC,EAAA,EAAA,OAAAC,mBAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA;;;;;;AAG/B,gBAAA,OAAO,6CACR,cAAc,CAAA,EAAA,EACjB,SAAS,EAAE,IAAI,GAChB;gBACgB,OAAA,CAAA,CAAA,YAAMC,cAAU,CAAC,IAAI,CACpC,sBAAsB,EACtB,OAAO,CACR,CAAA;;AAHK,gBAAA,QAAQ,GAAG,EAAA,CAAA,IAAA,EAGhB;gBACD,OAAA,CAAA,CAAA,aAAO,QAAQ,CAAC,IAAI,CAAA;;;AAEpB,gBAAA,MAAM,OAAK;;;;;AA0Cf;;;;;;AAMG;AACI,IAAM,iBAAiB,GAAG,UAC/B,UAAkB,EAClB,YAAqB,EAAA,EAAA,OAAAD,mBAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA;;AAErB,QAAA,OAAA,CAAA,CAAA,aAAO,qBAAqB,CAAC;gBAC3B,SAAS,EAAED,2BAAmB,CAAC,eAAe;AAC9C,gBAAA,UAAU,EAAA,UAAA;AACV,gBAAA,YAAY,EAAA,YAAA;AACb,aAAA,CAAC,CAAA;;;AAGJ;;;;;;AAMG;AACI,IAAM,eAAe,GAAG,UAC7B,UAAkB,EAClB,YAAqB,EAAA,EAAA,OAAAC,mBAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA;;AAErB,QAAA,OAAA,CAAA,CAAA,aAAO,qBAAqB,CAAC;gBAC3B,SAAS,EAAED,2BAAmB,CAAC,aAAa;AAC5C,gBAAA,UAAU,EAAA,UAAA;AACV,gBAAA,YAAY,EAAA,YAAA;AACb,aAAA,CAAC,CAAA;;;AAGJ;;;;;;;AAOG;IACU,mBAAmB,GAAG,UACjC,UAAkB,EAClB,YAAiC,EACjC,YAAqB,EAAA,EAAA,OAAAC,mBAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA;;AAErB,QAAA,OAAA,CAAA,CAAA,aAAO,qBAAqB,CAAC;gBAC3B,SAAS,EAAED,2BAAmB,CAAC,iBAAiB;AAChD,gBAAA,UAAU,EAAA,UAAA;AACV,gBAAA,aAAa,EAAE,YAAY;AAC3B,gBAAA,YAAY,EAAA,YAAA;AACb,aAAA,CAAC,CAAA;;;AAGJ;;;;;;AAMG;AACI,IAAM,iBAAiB,GAAG,UAC/B,UAAkB,EAClB,YAAqB,EAAA,EAAA,OAAAC,mBAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA;;AAErB,QAAA,OAAA,CAAA,CAAA,aAAO,qBAAqB,CAAC;gBAC3B,SAAS,EAAED,2BAAmB,CAAC,eAAe;AAC9C,gBAAA,UAAU,EAAA,UAAA;AACV,gBAAA,YAAY,EAAA,YAAA;AACb,aAAA,CAAC,CAAA;;;AAwBJ;;;;;;;AAOG;IACU,iBAAiB,GAAG,UAC/B,UAAkB,EAClB,MAAW,EACX,YAAqB,EAAA,EAAA,OAAAC,mBAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA;;AAErB,QAAA,OAAA,CAAA,CAAA,aAAO,qBAAqB,CAAC;gBAC3B,SAAS,EAAED,2BAAmB,CAAC,eAAe;AAC9C,gBAAA,UAAU,EAAA,UAAA;AACV,gBAAA,UAAU,EAAE,EAAE,MAAM,EAAA,MAAA,EAAE;AACtB,gBAAA,YAAY,EAAA,YAAA;AACb,aAAA,CAAC,CAAA;;;AAGJ;;;;;;;AAOG;IACU,eAAe,GAAG,UAC7B,UAAkB,EAClB,SAA8B,EAC9B,YAAqB,EAAA,EAAA,OAAAC,mBAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA;;AAErB,QAAA,OAAA,CAAA,CAAA,aAAO,qBAAqB,CAAC;gBAC3B,SAAS,EAAED,2BAAmB,CAAC,YAAY;AAC3C,gBAAA,UAAU,EAAA,UAAA;AACV,gBAAA,UAAU,EAAE,SAAS;AACrB,gBAAA,YAAY,EAAA,YAAA;AACb,aAAA,CAAC,CAAA;;;AAwBJ;;;;;;;AAOG;IACU,0BAA0B,GAAG,UACxC,UAAkB,EAClB,YAAkC,EAClC,YAAqB,EAAA,EAAA,OAAAC,mBAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA;;AAErB,QAAA,OAAA,CAAA,CAAA,aAAO,qBAAqB,CAAC;gBAC3B,SAAS,EAAED,2BAAmB,CAAC,yBAAyB;AACxD,gBAAA,UAAU,EAAA,UAAA;gBACV,UAAU,EAAE,YAAY,IAAI,EAAE;AAC9B,gBAAA,YAAY,EAAA,YAAA;AACb,aAAA,CAAC,CAAA;;;AAGJ;;;;;;;AAOG;IACU,iBAAiB,GAAG,UAC/B,UAAkB,EAClB,aAAmC,EACnC,YAAqB,EAAA,EAAA,OAAAC,mBAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA;;AAErB,QAAA,OAAA,CAAA,CAAA,aAAO,qBAAqB,CAAC;gBAC3B,SAAS,EAAED,2BAAmB,CAAC,eAAe;AAC9C,gBAAA,UAAU,EAAA,UAAA;gBACV,UAAU,EAAE,aAAa,IAAI,EAAE;AAC/B,gBAAA,YAAY,EAAA,YAAA;AACb,aAAA,CAAC,CAAA;;;AAGJ;AACA;AACA;IAEa,gBAAgB,GAAG,UAC9B,SAAiB,EACjB,UAAgC,EAChC,YAAqB,EAAA;AAErB,IAAA,qBAAqB,CAAC;QACpB,SAAS,EAAEA,2BAAmB,CAAC,cAAc;AAC7C,QAAA,UAAU,EAAE,SAAS;QACrB,UAAU,EAAgB,EAAE;AAC5B,QAAA,YAAY,EAAA,YAAA;AACb,KAAA,CAAC,CAAC,KAAK,CAAC,YAAA,EAAO,CAAC,CAAC;AACpB;AAEO,IAAM,uBAAuB,GAAG,UACrC,SAAiB,EACjB,YAAoB,EACpB,aAAsB,EACtB,YAAqB,EAAA;AAErB,IAAA,qBAAqB,CAAC;QACpB,SAAS,EAAEA,2BAAmB,CAAC,sBAAsB;AACrD,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,QAAQ,EAAE,EAAE,YAAY,EAAA,YAAA,EAAE,aAAa,EAAE,aAAa,KAAA,IAAA,IAAb,aAAa,KAAA,MAAA,GAAb,aAAa,GAAI,YAAY,EAAE;AACxE,QAAA,YAAY,EAAA,YAAA;AACb,KAAA,CAAC,CAAC,KAAK,CAAC,YAAA,EAAO,CAAC,CAAC;AACpB;IAEa,sBAAsB,GAAG,UACpC,SAAiB,EACjB,WAAiC,EACjC,YAAqB,EAAA;AAErB,IAAA,qBAAqB,CAAC;QACpB,SAAS,EAAEA,2BAAmB,CAAC,qBAAqB;AACpD,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,QAAQ,EAAE,EAAE,WAAW,EAAA,WAAA,EAAE;AACzB,QAAA,YAAY,EAAA,YAAA;AACb,KAAA,CAAC,CAAC,KAAK,CAAC,YAAA,EAAO,CAAC,CAAC;AACpB;IAEa,gBAAgB,GAAG,UAC9B,SAAiB,EACjB,IAAuB,EACvB,YAAqB,EAAA;AAErB,IAAA,qBAAqB,CAAC;QACpB,SAAS,EAAEA,2BAAmB,CAAC,cAAc;AAC7C,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,QAAQ,EAAE,EAAE,IAAI,EAAA,IAAA,EAAE;AAClB,QAAA,YAAY,EAAA,YAAA;AACb,KAAA,CAAC,CAAC,KAAK,CAAC,YAAA,EAAO,CAAC,CAAC;AACpB;AAEO,IAAM,kBAAkB,GAAG,UAChC,SAAiB,EACjB,YAAqB,EAAA;AAErB,IAAA,qBAAqB,CAAC;QACpB,SAAS,EAAEA,2BAAmB,CAAC,gBAAgB;AAC/C,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,YAAY,EAAA,YAAA;AACb,KAAA,CAAC,CAAC,KAAK,CAAC,YAAA,EAAO,CAAC,CAAC;AACpB;AAEO,IAAM,iBAAiB,GAAG,UAC/B,SAAiB,EACjB,IAAuB,EACvB,YAAqB,EACrB,YAAqB,EAAA;AAErB,IAAA,qBAAqB,CAAC;QACpB,SAAS,EAAEA,2BAAmB,CAAC,eAAe;AAC9C,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,QAAQ,uBAAI,IAAI,EAAA,IAAA,KAAwC,EAAE,EAAG;AAC7D,QAAA,YAAY,EAAA,YAAA;AACb,KAAA,CAAC,CAAC,KAAK,CAAC,YAAA,EAAO,CAAC,CAAC;AACpB;AAEO,IAAM,qBAAqB,GAAG,UACnC,SAAiB,EACjB,YAAqB,EAAA;AAErB,IAAA,qBAAqB,CAAC;QACpB,SAAS,EAAEA,2BAAmB,CAAC,mBAAmB;AAClD,QAAA,UAAU,EAAE,SAAS;AACrB,QAAA,YAAY,EAAA,YAAA;AACb,KAAA,CAAC,CAAC,KAAK,CAAC,YAAA,EAAO,CAAC,CAAC;AACpB;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Converts a human-readable label into a snake_case key suitable for top-level
5
+ * storage in userInput.
6
+ *
7
+ * Rules:
8
+ * - Strip diacritical marks (accents)
9
+ * - Lowercase everything
10
+ * - Replace any sequence of non-alphanumeric characters with a single underscore
11
+ * - Trim leading/trailing underscores
12
+ *
13
+ * Examples:
14
+ * "Dénomination sociale" → "denomination_sociale"
15
+ * "N° de SIREN / SIRET" → "n_de_siren_siret"
16
+ * " E-mail " → "e_mail"
17
+ */
18
+ function labelToKey(label) {
19
+ return label
20
+ .normalize("NFD")
21
+ .replace(/[̀-ͯ]/g, "")
22
+ .toLowerCase()
23
+ .replace(/[^a-z0-9]+/g, "_")
24
+ .replace(/^_+|_+$/g, "");
25
+ }
26
+
27
+ exports.labelToKey = labelToKey;
28
+ //# sourceMappingURL=labelToKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"labelToKey.js","sources":["../../../../src/utils/labelToKey.ts"],"sourcesContent":["/**\n * Converts a human-readable label into a snake_case key suitable for top-level\n * storage in userInput.\n *\n * Rules:\n * - Strip diacritical marks (accents)\n * - Lowercase everything\n * - Replace any sequence of non-alphanumeric characters with a single underscore\n * - Trim leading/trailing underscores\n *\n * Examples:\n * \"Dénomination sociale\" → \"denomination_sociale\"\n * \"N° de SIREN / SIRET\" → \"n_de_siren_siret\"\n * \" E-mail \" → \"e_mail\"\n */\nexport function labelToKey(label: string): string {\n return label\n .normalize(\"NFD\")\n .replace(/[̀-ͯ]/g, \"\")\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"_\")\n .replace(/^_+|_+$/g, \"\");\n}\n"],"names":[],"mappings":";;AAAA;;;;;;;;;;;;;;AAcG;AACG,SAAU,UAAU,CAAC,KAAa,EAAA;AACtC,IAAA,OAAO;SACJ,SAAS,CAAC,KAAK;AACf,SAAA,OAAO,CAAC,QAAQ,EAAE,EAAE;AACpB,SAAA,WAAW;AACX,SAAA,OAAO,CAAC,aAAa,EAAE,GAAG;AAC1B,SAAA,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;AAC5B;;;;"}
@@ -290,7 +290,7 @@ var DocumentCollection = function (_a) {
290
290
  return (jsx(DocumentCollectionMethodSelection, { onMethodSelect: handleMethodSelect, onBack: handleBack, title: documentSelection === null || documentSelection === void 0 ? void 0 : documentSelection.title, description: documentSelection === null || documentSelection === void 0 ? void 0 : documentSelection.description }));
291
291
  case 3:
292
292
  if (selectedMethod === "download") {
293
- return (jsx(DocumentCollectionUpload, { selectedDocumentType: selectedDocumentType, allowedDocumentTypes: allowedDocumentTypes, onUpload: handleDocumentUpload, onBack: handleBack, documentSelection: documentSelection }));
293
+ return (jsx(DocumentCollectionUpload, { selectedDocumentType: selectedDocumentType, allowedDocumentTypes: allowedDocumentTypes, onUpload: handleDocumentUpload, onBack: handleBack, documentSelection: documentSelection, sessionId: sessionId }));
294
294
  }
295
295
  else {
296
296
  // Photo flow
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentCollection.js","sources":["../../../../../src/components/document-collection/DocumentCollection.tsx"],"sourcesContent":["import { useState, useEffect } from \"react\";\nimport {\n SessionTemplate,\n SessionTemplateNode,\n stepObject,\n} from \"../../types/session\";\nimport type { onUploadFiles } from \"../../types/uploadFiles\";\nimport type { Prediction } from \"../../utils/apiAnalysis\";\nimport DocumentCollectionIntroduction from \"./DocumentCollectionIntroduction\";\nimport DocumentCollectionSelection from \"./DocumentCollectionSelection\";\nimport DocumentCollectionUpload from \"./DocumentCollectionUpload\";\nimport DocumentCollectionMethodSelection from \"./DocumentCollectionMethodSelection\";\nimport { DocumentError, DocumentProcessing, DocumentSuccess } from \".\";\nimport JDIProcessing from \"../jdi/JDIProcessing\";\nimport JDISuccess from \"../jdi/JDISuccess\";\nimport JDIError from \"../jdi/JDIError\";\nimport BeforePhoto from \"../id-check/BeforePhoto\";\nimport BeforeVersoPhoto from \"../id-check/BeforeVersoPhoto\";\nimport Photo from \"../id-check/Photo\";\nimport PhotoConfirmation from \"../id-check/PhotoConfirmation\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport ButtonDesktop from \"../ui/ButtonDesktop\";\nimport { updateSessionCurrentStep } from \"../../services/sessionService\";\nimport { analyzeFiles } from \"../../services/analysis\";\nimport {\n getNodeRetryCount,\n incrementNodeRetryCount,\n} from \"../../services/retryService\";\nimport { getSession } from \"../../context/SessionContext\";\nimport {\n resizeAfterCapture,\n dataUrlToBlob,\n blobToDataUrl,\n} from \"../../utils/imageProcessing\";\n\nexport type DocumentTypeSide = \"ONE_FILE\" | \"RECTO_VERSO\";\n\nexport interface NodeDocumentCollection {\n id: string;\n allowedDocumentTypes: Array<{\n name: string;\n id: string;\n collectOnly?: boolean;\n }>;\n allowedAddingMethods: Array<'download' | 'picture'>;\n introductionPage: {\n title: string;\n description: string;\n };\n documentSelection: {\n title: string;\n description: string;\n };\n allowResubmission: boolean;\n maxResubmissionAttempts?: number;\n}\n\ninterface AllowedDocumentType {\n id: string;\n name: string;\n side?: DocumentTypeSide;\n collectOnly?: boolean;\n}\n\ninterface DocumentCollectionProps {\n stepObject: stepObject;\n sessionId: string;\n node: NodeDocumentCollection;\n onContinueOnPC?: () => void;\n allowedDocumentTypes: AllowedDocumentType[];\n allowedAddingMethods: string[];\n template?: SessionTemplate;\n introductionPage?: {\n title?: string;\n description?: string;\n };\n documentSelection?: {\n title?: string;\n description?: string;\n };\n allowResubmission?: boolean;\n maxResubmissionAttempts?: number;\n}\n\n/**\n * DocumentCollection component manages the multi-step document collection flow.\n * It handles document type selection, document upload, processing, and error/success handling.\n *\n * @component\n * @param {Object} props - Component props.\n * @param {stepObject} props.stepObject - Object managing the current step in the parent flow, with setStep and step properties.\n * @param {string} props.sessionId - Unique identifier for the current session.\n * @param {NodeDocumentCollection} props.node - Node configuration containing allowed document types and page content.\n * @param {() => void} [props.onContinueOnPC] - Optional callback to continue the process on a PC.\n * @param {AllowedDocumentType[]} props.allowedDocumentTypes - List of document types accepted for collection.\n * @param {string[]} props.allowedAddingMethods - List of allowed methods for adding documents (download, picture, etc.).\n * @param {Object} [props.introductionPage] - Optional introduction page configuration with title and description.\n * @param {Object} [props.documentSelection] - Optional document selection page configuration with title and description.\n *\n * @returns {JSX.Element} Multi-step document collection UI, rendering different subcomponents based on the current step.\n *\n * @remarks\n * - Manages internal state for step navigation, document selection, file uploads, and error handling.\n * - Displays error messages and fallback UI for invalid navigation.\n * - Uses translation hooks for internationalization support.\n */\nconst DocumentCollection = ({\n stepObject,\n sessionId,\n node,\n template,\n onContinueOnPC,\n allowedDocumentTypes,\n allowedAddingMethods,\n introductionPage,\n documentSelection,\n allowResubmission,\n maxResubmissionAttempts,\n}: DocumentCollectionProps) => {\n const { t } = useI18n();\n const { session } = getSession();\n\n const [currentStep, setCurrentStep] = useState(introductionPage?.title ? 0 : 1);\n const [fileUploaded, setFileUploaded] = useState<onUploadFiles | null>(null);\n const [selectedDocumentType, setSelectedDocumentType] = useState<string>(\"\");\n const [analysisData, setAnalysisData] = useState<Prediction[] | null>(null);\n const [errorCode, setErrorCode] = useState<string | null>(null);\n const [selectedMethod, setSelectedMethod] = useState<\"download\" | \"picture\" | null>(null);\n const [photoSubStep, setPhotoSubStep] = useState<\"before-recto\" | \"recto\" | \"before-verso\" | \"verso\" | \"confirmation\">(\"before-recto\");\n const [capturedImages, setCapturedImages] = useState<Record<string, string>>({});\n\n // Initialize retry count from session data\n const [retryCount, setRetryCount] = useState(() => {\n return getNodeRetryCount(session, node.id);\n });\n\n // Update retry count when session loads/changes\n useEffect(() => {\n if (session) {\n const sessionRetryCount = getNodeRetryCount(session, node.id);\n setRetryCount(sessionRetryCount);\n }\n }, [session, node.id]);\n\n // Check retry limits on mount/reload - if retries exhausted, show error page\n useEffect(() => {\n // Special case: if allowResubmission is false and retryCount > 0, show error immediately\n if (allowResubmission === false && retryCount > 0) {\n setCurrentStep(6);\n return;\n }\n\n // Normal case: check against maxResubmissionAttempts\n if (retryCount > 0 && !isRetryAllowed()) {\n // User has exhausted retries, redirect to error page\n setCurrentStep(6);\n }\n }, [retryCount, allowResubmission]);\n\n const handleContinueFromIntroduction = () => {\n setCurrentStep(1);\n };\n\n const handleDocumentTypeSelect = (docType: string, files?: onUploadFiles) => {\n setSelectedDocumentType(docType);\n\n if (files) {\n handleDocumentUpload(files);\n return;\n }\n\n const isPictureAllowed = allowedAddingMethods.includes(\"picture\");\n const isDownloadAllowed = allowedAddingMethods.includes(\"download\");\n\n if (isPictureAllowed && isDownloadAllowed) {\n setCurrentStep(2); // Method selection\n } else {\n const method = isPictureAllowed ? \"picture\" : \"download\";\n handleMethodSelect(method);\n }\n };\n\n const handleMethodSelect = (method: \"download\" | \"picture\") => {\n setSelectedMethod(method);\n if (method === \"picture\") {\n setPhotoSubStep(\"before-recto\");\n setCapturedImages({});\n }\n setCurrentStep(3); // Go to action (Upload screen or Photo flow)\n };\n\n const handlePhotoCapture = async (imageData: string, side: \"recto\" | \"verso\") => {\n try {\n const imageBlob = dataUrlToBlob(imageData);\n const processedBlob = await resizeAfterCapture(imageBlob);\n const processedDataUrl = await blobToDataUrl(processedBlob);\n\n setCapturedImages((prev) => ({ ...prev, [side]: processedDataUrl }));\n\n if (side === \"recto\") {\n const selected = allowedDocumentTypes.find((d) => d.id === selectedDocumentType);\n const requiresTwoSides = selected?.side === \"RECTO_VERSO\";\n setPhotoSubStep(requiresTwoSides ? \"before-verso\" : \"confirmation\");\n } else {\n setPhotoSubStep(\"confirmation\");\n }\n } catch (error) {\n console.error(`[DocumentCollection] Failed to process photo for ${side}:`, error);\n setCapturedImages((prev) => ({ ...prev, [side]: imageData }));\n if (side === \"recto\") {\n const selected = allowedDocumentTypes.find((d) => d.id === selectedDocumentType);\n const requiresTwoSides = selected?.side === \"RECTO_VERSO\";\n setPhotoSubStep(requiresTwoSides ? \"before-verso\" : \"confirmation\");\n } else {\n setPhotoSubStep(\"confirmation\");\n }\n }\n };\n\n const handlePhotoConfirmation = () => {\n if (capturedImages.recto) {\n const files: onUploadFiles = {\n front: capturedImages.recto,\n back: capturedImages.verso || null,\n };\n setFileUploaded(files);\n setCurrentStep(4);\n }\n };\n\n const handleDocumentUpload = (files: onUploadFiles) => {\n setFileUploaded(files);\n\n // Check if the selected document type is collectOnly — skip processing step\n const selectedDoc = allowedDocumentTypes.find((d) => d.id === selectedDocumentType);\n if (selectedDoc?.collectOnly) {\n handleCollectOnlyUpload(files);\n return;\n }\n\n // Check if retry limit is reached before processing\n if (!isRetryAllowed() && retryCount > 0) {\n // Skip processing and go directly to error page\n setCurrentStep(6);\n } else {\n // Proceed to processing\n setCurrentStep(4);\n }\n };\n\n const handleProcessingComplete = (\n success: boolean,\n currentRetryCount?: number,\n apiAnalysisData?: Prediction[] | null\n ) => {\n if (apiAnalysisData) {\n setAnalysisData(apiAnalysisData);\n if (apiAnalysisData.length > 0) {\n setErrorCode(apiAnalysisData[0].code);\n }\n }\n\n if (success) {\n if (template) {\n stepObject.goToNextStep(node.id, template);\n } else {\n stepObject.setStep(stepObject.step + 1);\n }\n setCurrentStep(5);\n } else {\n setRetryCount((prev) => {\n const newCount = prev + 1;\n incrementNodeRetryCount(sessionId, node.id, prev).catch((error) => {\n console.error(\"Failed to update retry count in session:\", error);\n });\n return newCount;\n });\n setCurrentStep(6);\n }\n };\n\n const handleCollectOnlyUpload = async (files: onUploadFiles) => {\n try {\n await analyzeFiles(sessionId, node.id, files, selectedDocumentType, {\n documentTypeKey: selectedDocumentType,\n collectOnly: true,\n enablePolling: false,\n });\n handleProcessingComplete(true, retryCount, null);\n } catch (error) {\n console.error(\"[DocumentCollection] collectOnly upload failed:\", error);\n handleProcessingComplete(false, retryCount, null);\n }\n };\n\n const handleRetryFromError = () => {\n setCurrentStep(1);\n setSelectedMethod(null);\n setCapturedImages({});\n setFileUploaded(null);\n };\n\n // Check if retry is allowed based on configuration\n const isRetryAllowed = () => {\n if (allowResubmission === undefined) return true;\n if (!allowResubmission) return false;\n if (maxResubmissionAttempts !== undefined) {\n return retryCount <= maxResubmissionAttempts;\n }\n return true;\n };\n\n const handleContinueAnyway = () => {\n if (onContinueOnPC) {\n onContinueOnPC();\n } else {\n if (template) {\n stepObject.goToNextStep(node.id, template);\n } else {\n stepObject.setStep(stepObject.step + 1);\n }\n }\n };\n\n const handleSuccessContinue = () => {\n if (onContinueOnPC) {\n onContinueOnPC();\n } else {\n if (template) {\n stepObject.goToNextStep(node.id, template);\n } else {\n stepObject.setStep(stepObject.step + 1);\n }\n }\n };\n\n const handleBack = () => {\n if (currentStep === 0) {\n stepObject.setStep(stepObject.step - 1);\n } else {\n setCurrentStep(currentStep - 1);\n }\n };\n\n switch (currentStep) {\n case 0:\n return (\n <DocumentCollectionIntroduction\n onContinue={handleContinueFromIntroduction}\n onBack={handleBack}\n introductionPage={introductionPage}\n />\n );\n case 1:\n return (\n <DocumentCollectionSelection\n onContinue={handleDocumentTypeSelect}\n onBack={handleBack}\n allowedDocumentTypes={allowedDocumentTypes}\n allowedAddingMethods={allowedAddingMethods}\n stepObject={stepObject}\n documentSelection={documentSelection}\n />\n );\n case 2:\n return (\n <DocumentCollectionMethodSelection\n onMethodSelect={handleMethodSelect}\n onBack={handleBack}\n title={documentSelection?.title}\n description={documentSelection?.description}\n />\n );\n case 3:\n if (selectedMethod === \"download\") {\n return (\n <DocumentCollectionUpload\n selectedDocumentType={selectedDocumentType}\n allowedDocumentTypes={allowedDocumentTypes}\n onUpload={handleDocumentUpload}\n onBack={handleBack}\n documentSelection={documentSelection}\n />\n );\n } else {\n // Photo flow\n const requiresTwoSides = allowedDocumentTypes.find((dt) => dt.id === selectedDocumentType)?.side === \"RECTO_VERSO\";\n\n switch (photoSubStep) {\n case \"before-recto\":\n return <BeforePhoto setStep={() => setPhotoSubStep(\"recto\")} isSingleSided={!requiresTwoSides} onBack={handleBack} />;\n case \"recto\":\n return <Photo onCapture={(img) => handlePhotoCapture(img, \"recto\")} automaticCapture={false} maskType=\"document\" />;\n case \"before-verso\":\n return <BeforeVersoPhoto setStep={() => setPhotoSubStep(\"verso\")} />;\n case \"verso\":\n return <Photo onCapture={(img) => handlePhotoCapture(img, \"verso\")} automaticCapture={false} maskType=\"document\" />;\n case \"confirmation\":\n return (\n <PhotoConfirmation\n imageUrl={capturedImages.recto}\n versoImageUrl={capturedImages.verso}\n requiresTwoSides={requiresTwoSides}\n onConfirm={handlePhotoConfirmation}\n onRetry={() => {\n setPhotoSubStep(\"before-recto\");\n setCapturedImages({});\n }}\n onRetryAfterProcessing={() => {\n setCurrentStep(1);\n setPhotoSubStep(\"before-recto\");\n setCapturedImages({});\n }}\n fileUploaded={fileUploaded}\n isSingleSided={!requiresTwoSides}\n />\n );\n }\n }\n return null;\n\n case 4:\n return (\n <DocumentProcessing\n documentType={selectedDocumentType}\n onProcessingComplete={handleProcessingComplete}\n fileUploaded={fileUploaded}\n documentTypeId={selectedDocumentType}\n retryCount={retryCount}\n nodeId={node.id}\n />\n );\n case 5:\n return (\n <DocumentSuccess\n documentType={selectedDocumentType}\n documentTypeLabel={t(allowedDocumentTypes.find((dt) => dt.id === selectedDocumentType)?.name || \"\")}\n onContinue={handleSuccessContinue}\n errorCode={errorCode || undefined}\n successDetails={{\n nextSteps: {\n title: t(\"success.next_steps\", \"Prochaines étapes\"),\n description: t(\n \"success.next_steps_description\",\n \"Vous pouvez maintenant continuer le processus de vérification en suivant les instructions à l'écran.\"\n ),\n },\n }}\n />\n );\n case 6:\n return (\n <DocumentError\n documentType={selectedDocumentType}\n onRetry={handleRetryFromError}\n onContinueAnyway={handleContinueAnyway}\n retryCount={retryCount}\n predictions={analysisData || undefined}\n errorCode={errorCode || undefined}\n allowResubmission={allowResubmission}\n maxResubmissionAttempts={maxResubmissionAttempts}\n isRetryAllowed={isRetryAllowed()}\n />\n );\n\n default:\n console.error(`Invalid document collection step: ${currentStep} `);\n return (\n <div className=\"flex flex-col items-center justify-center h-full p-4 text-center\">\n <div className=\"text-red-500 text-4xl mb-4\">⚠️</div>\n <h2 className=\"text-xl font-bold text-red-600 mb-2\">\n {t(\"document_collection.navigation_error.title\", \"Erreur de navigation\")}\n </h2>\n <p className=\"text-gray-600 mb-4\">\n {t(\"document_collection.navigation_error.description\", \"Étape non valide. Veuillez recommencer.\")}\n </p>\n <ButtonDesktop\n type=\"back\"\n className=\"w-full\"\n onClick={() => setCurrentStep(0)}\n >\n {t(\"document_collection.navigation_error.back\", \"Retour au début\")}\n </ButtonDesktop>\n </div>\n );\n }\n};\n\nexport default DocumentCollection;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"DocumentCollection.js","sources":["../../../../../src/components/document-collection/DocumentCollection.tsx"],"sourcesContent":["import { useState, useEffect } from \"react\";\nimport {\n SessionTemplate,\n SessionTemplateNode,\n stepObject,\n} from \"../../types/session\";\nimport type { onUploadFiles } from \"../../types/uploadFiles\";\nimport type { Prediction } from \"../../utils/apiAnalysis\";\nimport DocumentCollectionIntroduction from \"./DocumentCollectionIntroduction\";\nimport DocumentCollectionSelection from \"./DocumentCollectionSelection\";\nimport DocumentCollectionUpload from \"./DocumentCollectionUpload\";\nimport DocumentCollectionMethodSelection from \"./DocumentCollectionMethodSelection\";\nimport { DocumentError, DocumentProcessing, DocumentSuccess } from \".\";\nimport JDIProcessing from \"../jdi/JDIProcessing\";\nimport JDISuccess from \"../jdi/JDISuccess\";\nimport JDIError from \"../jdi/JDIError\";\nimport BeforePhoto from \"../id-check/BeforePhoto\";\nimport BeforeVersoPhoto from \"../id-check/BeforeVersoPhoto\";\nimport Photo from \"../id-check/Photo\";\nimport PhotoConfirmation from \"../id-check/PhotoConfirmation\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport ButtonDesktop from \"../ui/ButtonDesktop\";\nimport { updateSessionCurrentStep } from \"../../services/sessionService\";\nimport { analyzeFiles } from \"../../services/analysis\";\nimport {\n getNodeRetryCount,\n incrementNodeRetryCount,\n} from \"../../services/retryService\";\nimport { getSession } from \"../../context/SessionContext\";\nimport {\n resizeAfterCapture,\n dataUrlToBlob,\n blobToDataUrl,\n} from \"../../utils/imageProcessing\";\n\nexport type DocumentTypeSide = \"ONE_FILE\" | \"RECTO_VERSO\";\n\nexport interface NodeDocumentCollection {\n id: string;\n allowedDocumentTypes: Array<{\n name: string;\n id: string;\n collectOnly?: boolean;\n }>;\n allowedAddingMethods: Array<'download' | 'picture'>;\n introductionPage: {\n title: string;\n description: string;\n };\n documentSelection: {\n title: string;\n description: string;\n };\n allowResubmission: boolean;\n maxResubmissionAttempts?: number;\n}\n\ninterface AllowedDocumentType {\n id: string;\n name: string;\n side?: DocumentTypeSide;\n collectOnly?: boolean;\n}\n\ninterface DocumentCollectionProps {\n stepObject: stepObject;\n sessionId: string;\n node: NodeDocumentCollection;\n onContinueOnPC?: () => void;\n allowedDocumentTypes: AllowedDocumentType[];\n allowedAddingMethods: string[];\n template?: SessionTemplate;\n introductionPage?: {\n title?: string;\n description?: string;\n };\n documentSelection?: {\n title?: string;\n description?: string;\n };\n allowResubmission?: boolean;\n maxResubmissionAttempts?: number;\n}\n\n/**\n * DocumentCollection component manages the multi-step document collection flow.\n * It handles document type selection, document upload, processing, and error/success handling.\n *\n * @component\n * @param {Object} props - Component props.\n * @param {stepObject} props.stepObject - Object managing the current step in the parent flow, with setStep and step properties.\n * @param {string} props.sessionId - Unique identifier for the current session.\n * @param {NodeDocumentCollection} props.node - Node configuration containing allowed document types and page content.\n * @param {() => void} [props.onContinueOnPC] - Optional callback to continue the process on a PC.\n * @param {AllowedDocumentType[]} props.allowedDocumentTypes - List of document types accepted for collection.\n * @param {string[]} props.allowedAddingMethods - List of allowed methods for adding documents (download, picture, etc.).\n * @param {Object} [props.introductionPage] - Optional introduction page configuration with title and description.\n * @param {Object} [props.documentSelection] - Optional document selection page configuration with title and description.\n *\n * @returns {JSX.Element} Multi-step document collection UI, rendering different subcomponents based on the current step.\n *\n * @remarks\n * - Manages internal state for step navigation, document selection, file uploads, and error handling.\n * - Displays error messages and fallback UI for invalid navigation.\n * - Uses translation hooks for internationalization support.\n */\nconst DocumentCollection = ({\n stepObject,\n sessionId,\n node,\n template,\n onContinueOnPC,\n allowedDocumentTypes,\n allowedAddingMethods,\n introductionPage,\n documentSelection,\n allowResubmission,\n maxResubmissionAttempts,\n}: DocumentCollectionProps) => {\n const { t } = useI18n();\n const { session } = getSession();\n\n const [currentStep, setCurrentStep] = useState(introductionPage?.title ? 0 : 1);\n const [fileUploaded, setFileUploaded] = useState<onUploadFiles | null>(null);\n const [selectedDocumentType, setSelectedDocumentType] = useState<string>(\"\");\n const [analysisData, setAnalysisData] = useState<Prediction[] | null>(null);\n const [errorCode, setErrorCode] = useState<string | null>(null);\n const [selectedMethod, setSelectedMethod] = useState<\"download\" | \"picture\" | null>(null);\n const [photoSubStep, setPhotoSubStep] = useState<\"before-recto\" | \"recto\" | \"before-verso\" | \"verso\" | \"confirmation\">(\"before-recto\");\n const [capturedImages, setCapturedImages] = useState<Record<string, string>>({});\n\n // Initialize retry count from session data\n const [retryCount, setRetryCount] = useState(() => {\n return getNodeRetryCount(session, node.id);\n });\n\n // Update retry count when session loads/changes\n useEffect(() => {\n if (session) {\n const sessionRetryCount = getNodeRetryCount(session, node.id);\n setRetryCount(sessionRetryCount);\n }\n }, [session, node.id]);\n\n // Check retry limits on mount/reload - if retries exhausted, show error page\n useEffect(() => {\n // Special case: if allowResubmission is false and retryCount > 0, show error immediately\n if (allowResubmission === false && retryCount > 0) {\n setCurrentStep(6);\n return;\n }\n\n // Normal case: check against maxResubmissionAttempts\n if (retryCount > 0 && !isRetryAllowed()) {\n // User has exhausted retries, redirect to error page\n setCurrentStep(6);\n }\n }, [retryCount, allowResubmission]);\n\n const handleContinueFromIntroduction = () => {\n setCurrentStep(1);\n };\n\n const handleDocumentTypeSelect = (docType: string, files?: onUploadFiles) => {\n setSelectedDocumentType(docType);\n\n if (files) {\n handleDocumentUpload(files);\n return;\n }\n\n const isPictureAllowed = allowedAddingMethods.includes(\"picture\");\n const isDownloadAllowed = allowedAddingMethods.includes(\"download\");\n\n if (isPictureAllowed && isDownloadAllowed) {\n setCurrentStep(2); // Method selection\n } else {\n const method = isPictureAllowed ? \"picture\" : \"download\";\n handleMethodSelect(method);\n }\n };\n\n const handleMethodSelect = (method: \"download\" | \"picture\") => {\n setSelectedMethod(method);\n if (method === \"picture\") {\n setPhotoSubStep(\"before-recto\");\n setCapturedImages({});\n }\n setCurrentStep(3); // Go to action (Upload screen or Photo flow)\n };\n\n const handlePhotoCapture = async (imageData: string, side: \"recto\" | \"verso\") => {\n try {\n const imageBlob = dataUrlToBlob(imageData);\n const processedBlob = await resizeAfterCapture(imageBlob);\n const processedDataUrl = await blobToDataUrl(processedBlob);\n\n setCapturedImages((prev) => ({ ...prev, [side]: processedDataUrl }));\n\n if (side === \"recto\") {\n const selected = allowedDocumentTypes.find((d) => d.id === selectedDocumentType);\n const requiresTwoSides = selected?.side === \"RECTO_VERSO\";\n setPhotoSubStep(requiresTwoSides ? \"before-verso\" : \"confirmation\");\n } else {\n setPhotoSubStep(\"confirmation\");\n }\n } catch (error) {\n console.error(`[DocumentCollection] Failed to process photo for ${side}:`, error);\n setCapturedImages((prev) => ({ ...prev, [side]: imageData }));\n if (side === \"recto\") {\n const selected = allowedDocumentTypes.find((d) => d.id === selectedDocumentType);\n const requiresTwoSides = selected?.side === \"RECTO_VERSO\";\n setPhotoSubStep(requiresTwoSides ? \"before-verso\" : \"confirmation\");\n } else {\n setPhotoSubStep(\"confirmation\");\n }\n }\n };\n\n const handlePhotoConfirmation = () => {\n if (capturedImages.recto) {\n const files: onUploadFiles = {\n front: capturedImages.recto,\n back: capturedImages.verso || null,\n };\n setFileUploaded(files);\n setCurrentStep(4);\n }\n };\n\n const handleDocumentUpload = (files: onUploadFiles) => {\n setFileUploaded(files);\n\n // Check if the selected document type is collectOnly — skip processing step\n const selectedDoc = allowedDocumentTypes.find((d) => d.id === selectedDocumentType);\n if (selectedDoc?.collectOnly) {\n handleCollectOnlyUpload(files);\n return;\n }\n\n // Check if retry limit is reached before processing\n if (!isRetryAllowed() && retryCount > 0) {\n // Skip processing and go directly to error page\n setCurrentStep(6);\n } else {\n // Proceed to processing\n setCurrentStep(4);\n }\n };\n\n const handleProcessingComplete = (\n success: boolean,\n currentRetryCount?: number,\n apiAnalysisData?: Prediction[] | null\n ) => {\n if (apiAnalysisData) {\n setAnalysisData(apiAnalysisData);\n if (apiAnalysisData.length > 0) {\n setErrorCode(apiAnalysisData[0].code);\n }\n }\n\n if (success) {\n if (template) {\n stepObject.goToNextStep(node.id, template);\n } else {\n stepObject.setStep(stepObject.step + 1);\n }\n setCurrentStep(5);\n } else {\n setRetryCount((prev) => {\n const newCount = prev + 1;\n incrementNodeRetryCount(sessionId, node.id, prev).catch((error) => {\n console.error(\"Failed to update retry count in session:\", error);\n });\n return newCount;\n });\n setCurrentStep(6);\n }\n };\n\n const handleCollectOnlyUpload = async (files: onUploadFiles) => {\n try {\n await analyzeFiles(sessionId, node.id, files, selectedDocumentType, {\n documentTypeKey: selectedDocumentType,\n collectOnly: true,\n enablePolling: false,\n });\n handleProcessingComplete(true, retryCount, null);\n } catch (error) {\n console.error(\"[DocumentCollection] collectOnly upload failed:\", error);\n handleProcessingComplete(false, retryCount, null);\n }\n };\n\n const handleRetryFromError = () => {\n setCurrentStep(1);\n setSelectedMethod(null);\n setCapturedImages({});\n setFileUploaded(null);\n };\n\n // Check if retry is allowed based on configuration\n const isRetryAllowed = () => {\n if (allowResubmission === undefined) return true;\n if (!allowResubmission) return false;\n if (maxResubmissionAttempts !== undefined) {\n return retryCount <= maxResubmissionAttempts;\n }\n return true;\n };\n\n const handleContinueAnyway = () => {\n if (onContinueOnPC) {\n onContinueOnPC();\n } else {\n if (template) {\n stepObject.goToNextStep(node.id, template);\n } else {\n stepObject.setStep(stepObject.step + 1);\n }\n }\n };\n\n const handleSuccessContinue = () => {\n if (onContinueOnPC) {\n onContinueOnPC();\n } else {\n if (template) {\n stepObject.goToNextStep(node.id, template);\n } else {\n stepObject.setStep(stepObject.step + 1);\n }\n }\n };\n\n const handleBack = () => {\n if (currentStep === 0) {\n stepObject.setStep(stepObject.step - 1);\n } else {\n setCurrentStep(currentStep - 1);\n }\n };\n\n switch (currentStep) {\n case 0:\n return (\n <DocumentCollectionIntroduction\n onContinue={handleContinueFromIntroduction}\n onBack={handleBack}\n introductionPage={introductionPage}\n />\n );\n case 1:\n return (\n <DocumentCollectionSelection\n onContinue={handleDocumentTypeSelect}\n onBack={handleBack}\n allowedDocumentTypes={allowedDocumentTypes}\n allowedAddingMethods={allowedAddingMethods}\n stepObject={stepObject}\n documentSelection={documentSelection}\n />\n );\n case 2:\n return (\n <DocumentCollectionMethodSelection\n onMethodSelect={handleMethodSelect}\n onBack={handleBack}\n title={documentSelection?.title}\n description={documentSelection?.description}\n />\n );\n case 3:\n if (selectedMethod === \"download\") {\n return (\n <DocumentCollectionUpload\n selectedDocumentType={selectedDocumentType}\n allowedDocumentTypes={allowedDocumentTypes}\n onUpload={handleDocumentUpload}\n onBack={handleBack}\n documentSelection={documentSelection}\n sessionId={sessionId}\n />\n );\n } else {\n // Photo flow\n const requiresTwoSides = allowedDocumentTypes.find((dt) => dt.id === selectedDocumentType)?.side === \"RECTO_VERSO\";\n\n switch (photoSubStep) {\n case \"before-recto\":\n return <BeforePhoto setStep={() => setPhotoSubStep(\"recto\")} isSingleSided={!requiresTwoSides} onBack={handleBack} />;\n case \"recto\":\n return <Photo onCapture={(img) => handlePhotoCapture(img, \"recto\")} automaticCapture={false} maskType=\"document\" />;\n case \"before-verso\":\n return <BeforeVersoPhoto setStep={() => setPhotoSubStep(\"verso\")} />;\n case \"verso\":\n return <Photo onCapture={(img) => handlePhotoCapture(img, \"verso\")} automaticCapture={false} maskType=\"document\" />;\n case \"confirmation\":\n return (\n <PhotoConfirmation\n imageUrl={capturedImages.recto}\n versoImageUrl={capturedImages.verso}\n requiresTwoSides={requiresTwoSides}\n onConfirm={handlePhotoConfirmation}\n onRetry={() => {\n setPhotoSubStep(\"before-recto\");\n setCapturedImages({});\n }}\n onRetryAfterProcessing={() => {\n setCurrentStep(1);\n setPhotoSubStep(\"before-recto\");\n setCapturedImages({});\n }}\n fileUploaded={fileUploaded}\n isSingleSided={!requiresTwoSides}\n />\n );\n }\n }\n return null;\n\n case 4:\n return (\n <DocumentProcessing\n documentType={selectedDocumentType}\n onProcessingComplete={handleProcessingComplete}\n fileUploaded={fileUploaded}\n documentTypeId={selectedDocumentType}\n retryCount={retryCount}\n nodeId={node.id}\n />\n );\n case 5:\n return (\n <DocumentSuccess\n documentType={selectedDocumentType}\n documentTypeLabel={t(allowedDocumentTypes.find((dt) => dt.id === selectedDocumentType)?.name || \"\")}\n onContinue={handleSuccessContinue}\n errorCode={errorCode || undefined}\n successDetails={{\n nextSteps: {\n title: t(\"success.next_steps\", \"Prochaines étapes\"),\n description: t(\n \"success.next_steps_description\",\n \"Vous pouvez maintenant continuer le processus de vérification en suivant les instructions à l'écran.\"\n ),\n },\n }}\n />\n );\n case 6:\n return (\n <DocumentError\n documentType={selectedDocumentType}\n onRetry={handleRetryFromError}\n onContinueAnyway={handleContinueAnyway}\n retryCount={retryCount}\n predictions={analysisData || undefined}\n errorCode={errorCode || undefined}\n allowResubmission={allowResubmission}\n maxResubmissionAttempts={maxResubmissionAttempts}\n isRetryAllowed={isRetryAllowed()}\n />\n );\n\n default:\n console.error(`Invalid document collection step: ${currentStep} `);\n return (\n <div className=\"flex flex-col items-center justify-center h-full p-4 text-center\">\n <div className=\"text-red-500 text-4xl mb-4\">⚠️</div>\n <h2 className=\"text-xl font-bold text-red-600 mb-2\">\n {t(\"document_collection.navigation_error.title\", \"Erreur de navigation\")}\n </h2>\n <p className=\"text-gray-600 mb-4\">\n {t(\"document_collection.navigation_error.description\", \"Étape non valide. Veuillez recommencer.\")}\n </p>\n <ButtonDesktop\n type=\"back\"\n className=\"w-full\"\n onClick={() => setCurrentStep(0)}\n >\n {t(\"document_collection.navigation_error.back\", \"Retour au début\")}\n </ButtonDesktop>\n </div>\n );\n }\n};\n\nexport default DocumentCollection;\n"],"names":["_jsx","_jsxs"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAoFA;;;;;;;;;;;;;;;;;;;;;AAqBG;AACH,IAAM,kBAAkB,GAAG,UAAC,EAYF,EAAA;;AAXxB,IAAA,IAAA,UAAU,GAAA,EAAA,CAAA,UAAA,EACV,SAAS,GAAA,EAAA,CAAA,SAAA,EACT,IAAI,GAAA,EAAA,CAAA,IAAA,EACJ,QAAQ,GAAA,EAAA,CAAA,QAAA,EACR,cAAc,oBAAA,EACd,oBAAoB,GAAA,EAAA,CAAA,oBAAA,EACpB,oBAAoB,GAAA,EAAA,CAAA,oBAAA,EACpB,gBAAgB,GAAA,EAAA,CAAA,gBAAA,EAChB,iBAAiB,GAAA,EAAA,CAAA,iBAAA,EACjB,iBAAiB,GAAA,EAAA,CAAA,iBAAA,EACjB,uBAAuB,GAAA,EAAA,CAAA,uBAAA;AAEf,IAAA,IAAA,CAAC,GAAK,OAAO,EAAE,EAAd;AACD,IAAA,IAAA,OAAO,GAAK,UAAU,EAAE,QAAjB;IAET,IAAA,EAAA,GAAgC,QAAQ,CAAC,CAAA,gBAAgB,KAAA,IAAA,IAAhB,gBAAgB,KAAA,MAAA,GAAA,MAAA,GAAhB,gBAAgB,CAAE,KAAK,IAAG,CAAC,GAAG,CAAC,CAAC,EAAxE,WAAW,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,cAAc,GAAA,EAAA,CAAA,CAAA,CAA6C;IACzE,IAAA,EAAA,GAAkC,QAAQ,CAAuB,IAAI,CAAC,EAArE,YAAY,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,eAAe,GAAA,EAAA,CAAA,CAAA,CAAwC;IACtE,IAAA,EAAA,GAAkD,QAAQ,CAAS,EAAE,CAAC,EAArE,oBAAoB,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,uBAAuB,GAAA,EAAA,CAAA,CAAA,CAAwB;IACtE,IAAA,EAAA,GAAkC,QAAQ,CAAsB,IAAI,CAAC,EAApE,YAAY,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,eAAe,GAAA,EAAA,CAAA,CAAA,CAAuC;IACrE,IAAA,EAAA,GAA4B,QAAQ,CAAgB,IAAI,CAAC,EAAxD,SAAS,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,YAAY,GAAA,EAAA,CAAA,CAAA,CAAiC;IACzD,IAAA,EAAA,GAAsC,QAAQ,CAAgC,IAAI,CAAC,EAAlF,cAAc,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,iBAAiB,GAAA,EAAA,CAAA,CAAA,CAAiD;IACnF,IAAA,EAAA,GAAkC,QAAQ,CAAuE,cAAc,CAAC,EAA/H,YAAY,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,eAAe,GAAA,EAAA,CAAA,CAAA,CAAkG;IAChI,IAAA,EAAA,GAAsC,QAAQ,CAAyB,EAAE,CAAC,EAAzE,cAAc,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,iBAAiB,GAAA,EAAA,CAAA,CAAA,CAAwC;;IAG1E,IAAA,EAAA,GAA8B,QAAQ,CAAC,YAAA;QAC3C,OAAO,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;AAC5C,IAAA,CAAC,CAAC,EAFK,UAAU,QAAA,EAAE,aAAa,QAE9B;;AAGF,IAAA,SAAS,CAAC,YAAA;QACR,IAAI,OAAO,EAAE;YACX,IAAM,iBAAiB,GAAG,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;YAC7D,aAAa,CAAC,iBAAiB,CAAC;QAClC;IACF,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;;AAGtB,IAAA,SAAS,CAAC,YAAA;;QAER,IAAI,iBAAiB,KAAK,KAAK,IAAI,UAAU,GAAG,CAAC,EAAE;YACjD,cAAc,CAAC,CAAC,CAAC;YACjB;QACF;;QAGA,IAAI,UAAU,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;;YAEvC,cAAc,CAAC,CAAC,CAAC;QACnB;AACF,IAAA,CAAC,EAAE,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;AAEnC,IAAA,IAAM,8BAA8B,GAAG,YAAA;QACrC,cAAc,CAAC,CAAC,CAAC;AACnB,IAAA,CAAC;AAED,IAAA,IAAM,wBAAwB,GAAG,UAAC,OAAe,EAAE,KAAqB,EAAA;QACtE,uBAAuB,CAAC,OAAO,CAAC;QAEhC,IAAI,KAAK,EAAE;YACT,oBAAoB,CAAC,KAAK,CAAC;YAC3B;QACF;QAEA,IAAM,gBAAgB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,SAAS,CAAC;QACjE,IAAM,iBAAiB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,UAAU,CAAC;AAEnE,QAAA,IAAI,gBAAgB,IAAI,iBAAiB,EAAE;AACzC,YAAA,cAAc,CAAC,CAAC,CAAC,CAAC;QACpB;aAAO;YACL,IAAM,MAAM,GAAG,gBAAgB,GAAG,SAAS,GAAG,UAAU;YACxD,kBAAkB,CAAC,MAAM,CAAC;QAC5B;AACF,IAAA,CAAC;IAED,IAAM,kBAAkB,GAAG,UAAC,MAA8B,EAAA;QACxD,iBAAiB,CAAC,MAAM,CAAC;AACzB,QAAA,IAAI,MAAM,KAAK,SAAS,EAAE;YACxB,eAAe,CAAC,cAAc,CAAC;YAC/B,iBAAiB,CAAC,EAAE,CAAC;QACvB;AACA,QAAA,cAAc,CAAC,CAAC,CAAC,CAAC;AACpB,IAAA,CAAC;AAED,IAAA,IAAM,kBAAkB,GAAG,UAAO,SAAiB,EAAE,IAAuB,EAAA,EAAA,OAAA,SAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA;;;;;;AAElE,oBAAA,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;AACpB,oBAAA,OAAA,CAAA,CAAA,YAAM,kBAAkB,CAAC,SAAS,CAAC,CAAA;;AAAnD,oBAAA,aAAa,GAAG,EAAA,CAAA,IAAA,EAAmC;AAChC,oBAAA,OAAA,CAAA,CAAA,YAAM,aAAa,CAAC,aAAa,CAAC,CAAA;;AAArD,oBAAA,kBAAA,GAAmB,EAAA,CAAA,IAAA,EAAkC;oBAE3D,iBAAiB,CAAC,UAAC,IAAI,EAAA;;AAAK,wBAAA,8BAAM,IAAI,CAAA,GAAA,EAAA,GAAA,EAAA,EAAA,EAAA,CAAG,IAAI,CAAA,GAAG,kBAAgB,EAAA,EAAA,EAAA;AAApC,oBAAA,CAAuC,CAAC;AAEpE,oBAAA,IAAI,IAAI,KAAK,OAAO,EAAE;AACd,wBAAA,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,UAAC,CAAC,EAAA,EAAK,OAAA,CAAC,CAAC,EAAE,KAAK,oBAAoB,CAAA,CAA7B,CAA6B,CAAC;wBAC1E,gBAAgB,GAAG,CAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,MAAA,GAAA,MAAA,GAAR,QAAQ,CAAE,IAAI,MAAK,aAAa;wBACzD,eAAe,CAAC,gBAAgB,GAAG,cAAc,GAAG,cAAc,CAAC;oBACrE;yBAAO;wBACL,eAAe,CAAC,cAAc,CAAC;oBACjC;;;;oBAEA,OAAO,CAAC,KAAK,CAAC,mDAAA,CAAA,MAAA,CAAoD,IAAI,EAAA,GAAA,CAAG,EAAE,OAAK,CAAC;oBACjF,iBAAiB,CAAC,UAAC,IAAI,EAAA;;AAAK,wBAAA,8BAAM,IAAI,CAAA,GAAA,EAAA,GAAA,EAAA,EAAA,EAAA,CAAG,IAAI,CAAA,GAAG,SAAS,EAAA,EAAA,EAAA;AAA7B,oBAAA,CAAgC,CAAC;AAC7D,oBAAA,IAAI,IAAI,KAAK,OAAO,EAAE;AACd,wBAAA,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CAAC,UAAC,CAAC,EAAA,EAAK,OAAA,CAAC,CAAC,EAAE,KAAK,oBAAoB,CAAA,CAA7B,CAA6B,CAAC;wBAC1E,gBAAgB,GAAG,CAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,MAAA,GAAA,MAAA,GAAR,QAAQ,CAAE,IAAI,MAAK,aAAa;wBACzD,eAAe,CAAC,gBAAgB,GAAG,cAAc,GAAG,cAAc,CAAC;oBACrE;yBAAO;wBACL,eAAe,CAAC,cAAc,CAAC;oBACjC;;;;;SAEH;AAED,IAAA,IAAM,uBAAuB,GAAG,YAAA;AAC9B,QAAA,IAAI,cAAc,CAAC,KAAK,EAAE;AACxB,YAAA,IAAM,KAAK,GAAkB;gBAC3B,KAAK,EAAE,cAAc,CAAC,KAAK;AAC3B,gBAAA,IAAI,EAAE,cAAc,CAAC,KAAK,IAAI,IAAI;aACnC;YACD,eAAe,CAAC,KAAK,CAAC;YACtB,cAAc,CAAC,CAAC,CAAC;QACnB;AACF,IAAA,CAAC;IAED,IAAM,oBAAoB,GAAG,UAAC,KAAoB,EAAA;QAChD,eAAe,CAAC,KAAK,CAAC;;AAGtB,QAAA,IAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,CAAC,UAAC,CAAC,EAAA,EAAK,OAAA,CAAC,CAAC,EAAE,KAAK,oBAAoB,CAAA,CAA7B,CAA6B,CAAC;QACnF,IAAI,WAAW,aAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,WAAW,EAAE;YAC5B,uBAAuB,CAAC,KAAK,CAAC;YAC9B;QACF;;QAGA,IAAI,CAAC,cAAc,EAAE,IAAI,UAAU,GAAG,CAAC,EAAE;;YAEvC,cAAc,CAAC,CAAC,CAAC;QACnB;aAAO;;YAEL,cAAc,CAAC,CAAC,CAAC;QACnB;AACF,IAAA,CAAC;AAED,IAAA,IAAM,wBAAwB,GAAG,UAC/B,OAAgB,EAChB,iBAA0B,EAC1B,eAAqC,EAAA;QAErC,IAAI,eAAe,EAAE;YACnB,eAAe,CAAC,eAAe,CAAC;AAChC,YAAA,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC9B,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACvC;QACF;QAEA,IAAI,OAAO,EAAE;YACX,IAAI,QAAQ,EAAE;gBACZ,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC;YAC5C;iBAAO;gBACL,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;YACzC;YACA,cAAc,CAAC,CAAC,CAAC;QACnB;aAAO;YACL,aAAa,CAAC,UAAC,IAAI,EAAA;AACjB,gBAAA,IAAM,QAAQ,GAAG,IAAI,GAAG,CAAC;AACzB,gBAAA,uBAAuB,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,UAAC,KAAK,EAAA;AAC5D,oBAAA,OAAO,CAAC,KAAK,CAAC,0CAA0C,EAAE,KAAK,CAAC;AAClE,gBAAA,CAAC,CAAC;AACF,gBAAA,OAAO,QAAQ;AACjB,YAAA,CAAC,CAAC;YACF,cAAc,CAAC,CAAC,CAAC;QACnB;AACF,IAAA,CAAC;IAED,IAAM,uBAAuB,GAAG,UAAO,KAAoB,EAAA,EAAA,OAAA,SAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA;;;;;;oBAEvD,OAAA,CAAA,CAAA,YAAM,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;AAClE,4BAAA,eAAe,EAAE,oBAAoB;AACrC,4BAAA,WAAW,EAAE,IAAI;AACjB,4BAAA,aAAa,EAAE,KAAK;AACrB,yBAAA,CAAC,CAAA;;AAJF,oBAAA,EAAA,CAAA,IAAA,EAIE;AACF,oBAAA,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC;;;;AAEhD,oBAAA,OAAO,CAAC,KAAK,CAAC,iDAAiD,EAAE,OAAK,CAAC;AACvE,oBAAA,wBAAwB,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC;;;;;SAEpD;AAED,IAAA,IAAM,oBAAoB,GAAG,YAAA;QAC3B,cAAc,CAAC,CAAC,CAAC;QACjB,iBAAiB,CAAC,IAAI,CAAC;QACvB,iBAAiB,CAAC,EAAE,CAAC;QACrB,eAAe,CAAC,IAAI,CAAC;AACvB,IAAA,CAAC;;AAGD,IAAA,IAAM,cAAc,GAAG,YAAA;QACrB,IAAI,iBAAiB,KAAK,SAAS;AAAE,YAAA,OAAO,IAAI;AAChD,QAAA,IAAI,CAAC,iBAAiB;AAAE,YAAA,OAAO,KAAK;AACpC,QAAA,IAAI,uBAAuB,KAAK,SAAS,EAAE;YACzC,OAAO,UAAU,IAAI,uBAAuB;QAC9C;AACA,QAAA,OAAO,IAAI;AACb,IAAA,CAAC;AAED,IAAA,IAAM,oBAAoB,GAAG,YAAA;QAC3B,IAAI,cAAc,EAAE;AAClB,YAAA,cAAc,EAAE;QAClB;aAAO;YACL,IAAI,QAAQ,EAAE;gBACZ,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC;YAC5C;iBAAO;gBACL,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;YACzC;QACF;AACF,IAAA,CAAC;AAED,IAAA,IAAM,qBAAqB,GAAG,YAAA;QAC5B,IAAI,cAAc,EAAE;AAClB,YAAA,cAAc,EAAE;QAClB;aAAO;YACL,IAAI,QAAQ,EAAE;gBACZ,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC;YAC5C;iBAAO;gBACL,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;YACzC;QACF;AACF,IAAA,CAAC;AAED,IAAA,IAAM,UAAU,GAAG,YAAA;AACjB,QAAA,IAAI,WAAW,KAAK,CAAC,EAAE;YACrB,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;QACzC;aAAO;AACL,YAAA,cAAc,CAAC,WAAW,GAAG,CAAC,CAAC;QACjC;AACF,IAAA,CAAC;IAED,QAAQ,WAAW;AACjB,QAAA,KAAK,CAAC;AACJ,YAAA,QACEA,GAAA,CAAC,8BAA8B,EAAA,EAC7B,UAAU,EAAE,8BAA8B,EAC1C,MAAM,EAAE,UAAU,EAClB,gBAAgB,EAAE,gBAAgB,EAAA,CAClC;AAEN,QAAA,KAAK,CAAC;AACJ,YAAA,QACEA,GAAA,CAAC,2BAA2B,EAAA,EAC1B,UAAU,EAAE,wBAAwB,EACpC,MAAM,EAAE,UAAU,EAClB,oBAAoB,EAAE,oBAAoB,EAC1C,oBAAoB,EAAE,oBAAoB,EAC1C,UAAU,EAAE,UAAU,EACtB,iBAAiB,EAAE,iBAAiB,EAAA,CACpC;AAEN,QAAA,KAAK,CAAC;AACJ,YAAA,QACEA,GAAA,CAAC,iCAAiC,EAAA,EAChC,cAAc,EAAE,kBAAkB,EAClC,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE,iBAAiB,KAAA,IAAA,IAAjB,iBAAiB,KAAA,MAAA,GAAA,MAAA,GAAjB,iBAAiB,CAAE,KAAK,EAC/B,WAAW,EAAE,iBAAiB,KAAA,IAAA,IAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,WAAW,EAAA,CAC3C;AAEN,QAAA,KAAK,CAAC;AACJ,YAAA,IAAI,cAAc,KAAK,UAAU,EAAE;AACjC,gBAAA,QACEA,GAAA,CAAC,wBAAwB,EAAA,EACvB,oBAAoB,EAAE,oBAAoB,EAC1C,oBAAoB,EAAE,oBAAoB,EAC1C,QAAQ,EAAE,oBAAoB,EAC9B,MAAM,EAAE,UAAU,EAClB,iBAAiB,EAAE,iBAAiB,EACpC,SAAS,EAAE,SAAS,EAAA,CACpB;YAEN;iBAAO;;gBAEL,IAAM,gBAAgB,GAAG,CAAA,CAAA,EAAA,GAAA,oBAAoB,CAAC,IAAI,CAAC,UAAC,EAAE,EAAA,EAAK,OAAA,EAAE,CAAC,EAAE,KAAK,oBAAoB,CAAA,CAA9B,CAA8B,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,MAAK,aAAa;gBAElH,QAAQ,YAAY;AAClB,oBAAA,KAAK,cAAc;wBACjB,OAAOA,GAAA,CAAC,WAAW,EAAA,EAAC,OAAO,EAAE,YAAA,EAAM,OAAA,eAAe,CAAC,OAAO,CAAC,EAAxB,CAAwB,EAAE,aAAa,EAAE,CAAC,gBAAgB,EAAE,MAAM,EAAE,UAAU,EAAA,CAAI;AACvH,oBAAA,KAAK,OAAO;wBACV,OAAOA,GAAA,CAAC,KAAK,EAAA,EAAC,SAAS,EAAE,UAAC,GAAG,EAAA,EAAK,OAAA,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA,CAAhC,CAAgC,EAAE,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAC,UAAU,EAAA,CAAG;AACrH,oBAAA,KAAK,cAAc;AACjB,wBAAA,OAAOA,GAAA,CAAC,gBAAgB,EAAA,EAAC,OAAO,EAAE,YAAA,EAAM,OAAA,eAAe,CAAC,OAAO,CAAC,CAAA,CAAxB,CAAwB,GAAI;AACtE,oBAAA,KAAK,OAAO;wBACV,OAAOA,GAAA,CAAC,KAAK,EAAA,EAAC,SAAS,EAAE,UAAC,GAAG,EAAA,EAAK,OAAA,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA,CAAhC,CAAgC,EAAE,gBAAgB,EAAE,KAAK,EAAE,QAAQ,EAAC,UAAU,EAAA,CAAG;AACrH,oBAAA,KAAK,cAAc;wBACjB,QACEA,GAAA,CAAC,iBAAiB,EAAA,EAChB,QAAQ,EAAE,cAAc,CAAC,KAAK,EAC9B,aAAa,EAAE,cAAc,CAAC,KAAK,EACnC,gBAAgB,EAAE,gBAAgB,EAClC,SAAS,EAAE,uBAAuB,EAClC,OAAO,EAAE,YAAA;gCACP,eAAe,CAAC,cAAc,CAAC;gCAC/B,iBAAiB,CAAC,EAAE,CAAC;4BACvB,CAAC,EACD,sBAAsB,EAAE,YAAA;gCACtB,cAAc,CAAC,CAAC,CAAC;gCACjB,eAAe,CAAC,cAAc,CAAC;gCAC/B,iBAAiB,CAAC,EAAE,CAAC;4BACvB,CAAC,EACD,YAAY,EAAE,YAAY,EAC1B,aAAa,EAAE,CAAC,gBAAgB,EAAA,CAChC;;YAGV;AACA,YAAA,OAAO,IAAI;AAEb,QAAA,KAAK,CAAC;AACJ,YAAA,QACEA,GAAA,CAAC,kBAAkB,EAAA,EACjB,YAAY,EAAE,oBAAoB,EAClC,oBAAoB,EAAE,wBAAwB,EAC9C,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,oBAAoB,EACpC,UAAU,EAAE,UAAU,EACtB,MAAM,EAAE,IAAI,CAAC,EAAE,EAAA,CACf;AAEN,QAAA,KAAK,CAAC;YACJ,QACEA,IAAC,eAAe,EAAA,EACd,YAAY,EAAE,oBAAoB,EAClC,iBAAiB,EAAE,CAAC,CAAC,CAAA,MAAA,oBAAoB,CAAC,IAAI,CAAC,UAAC,EAAE,EAAA,EAAK,OAAA,EAAE,CAAC,EAAE,KAAK,oBAAoB,CAAA,CAA9B,CAA8B,CAAC,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,IAAI,KAAI,EAAE,CAAC,EACnG,UAAU,EAAE,qBAAqB,EACjC,SAAS,EAAE,SAAS,IAAI,SAAS,EACjC,cAAc,EAAE;AACd,oBAAA,SAAS,EAAE;AACT,wBAAA,KAAK,EAAE,CAAC,CAAC,oBAAoB,EAAE,mBAAmB,CAAC;AACnD,wBAAA,WAAW,EAAE,CAAC,CACZ,gCAAgC,EAChC,sGAAsG,CACvG;AACF,qBAAA;AACF,iBAAA,EAAA,CACD;AAEN,QAAA,KAAK,CAAC;YACJ,QACEA,IAAC,aAAa,EAAA,EACZ,YAAY,EAAE,oBAAoB,EAClC,OAAO,EAAE,oBAAoB,EAC7B,gBAAgB,EAAE,oBAAoB,EACtC,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,YAAY,IAAI,SAAS,EACtC,SAAS,EAAE,SAAS,IAAI,SAAS,EACjC,iBAAiB,EAAE,iBAAiB,EACpC,uBAAuB,EAAE,uBAAuB,EAChD,cAAc,EAAE,cAAc,EAAE,EAAA,CAChC;AAGN,QAAA;AACE,YAAA,OAAO,CAAC,KAAK,CAAC,4CAAqC,WAAW,EAAA,GAAA,CAAG,CAAC;AAClE,YAAA,QACEC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kEAAkE,EAAA,QAAA,EAAA,CAC/ED,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,4BAA4B,EAAA,QAAA,EAAA,cAAA,EAAA,CAAS,EACpDA,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,qCAAqC,EAAA,QAAA,EAChD,CAAC,CAAC,4CAA4C,EAAE,sBAAsB,CAAC,EAAA,CACrE,EACLA,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,oBAAoB,EAAA,QAAA,EAC9B,CAAC,CAAC,kDAAkD,EAAE,yCAAyC,CAAC,EAAA,CAC/F,EACJA,GAAA,CAAC,aAAa,IACZ,IAAI,EAAC,MAAM,EACX,SAAS,EAAC,QAAQ,EAClB,OAAO,EAAE,YAAA,EAAM,OAAA,cAAc,CAAC,CAAC,CAAC,CAAA,CAAjB,CAAiB,EAAA,QAAA,EAE/B,CAAC,CAAC,2CAA2C,EAAE,iBAAiB,CAAC,EAAA,CACpD,CAAA,EAAA,CACZ;;AAGd;;;;"}
@@ -8,9 +8,10 @@ import { Upload } from 'lucide-react';
8
8
  import PDFPreview from '../ui/PDFPreview.js';
9
9
  import { useI18n } from '../../hooks/useI18n.js';
10
10
  import MobilePageLayout from '../ui/MobilePageLayout.js';
11
+ import { logDocumentLoaded, logDocumentsValidated } from '../../services/auditTrailService.js';
11
12
 
12
13
  var DocumentCollectionUpload = function (_a) {
13
- var onUpload = _a.onUpload, onBack = _a.onBack, selectedDocumentType = _a.selectedDocumentType, allowedDocumentTypes = _a.allowedDocumentTypes; _a.documentSelection;
14
+ var onUpload = _a.onUpload, onBack = _a.onBack, selectedDocumentType = _a.selectedDocumentType, allowedDocumentTypes = _a.allowedDocumentTypes; _a.documentSelection; var sessionId = _a.sessionId;
14
15
  var t = useI18n().t;
15
16
  var _b = useState(null), frontImage = _b[0], setFrontImage = _b[1];
16
17
  var _c = useState(null), backImage = _c[0], setBackImage = _c[1];
@@ -115,6 +116,13 @@ var DocumentCollectionUpload = function (_a) {
115
116
  front: frontImage,
116
117
  back: requiresTwoSides() ? backImage : null,
117
118
  };
119
+ if (sessionId) {
120
+ logDocumentLoaded(sessionId, "recto");
121
+ if (requiresTwoSides() && backImage) {
122
+ logDocumentLoaded(sessionId, "verso");
123
+ }
124
+ logDocumentsValidated(sessionId);
125
+ }
118
126
  onUpload(files);
119
127
  }
120
128
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentCollectionUpload.js","sources":["../../../../../src/components/document-collection/DocumentCollectionUpload.tsx"],"sourcesContent":["import React, { useState, useRef } from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { Card } from \"../ui/Card\";\nimport { Upload } from \"lucide-react\";\nimport PDFPreview from \"../ui/PDFPreview\";\nimport type { onUploadFiles } from \"../../types/uploadFiles\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { DocumentTypeSide } from \"./DocumentCollection\";\n\ninterface AllowedDocumentType {\n id: string;\n name: string;\n side?: DocumentTypeSide;\n}\n\ninterface DocumentCollectionUploadProps {\n onUpload: (files: onUploadFiles) => void;\n onBack: () => void;\n selectedDocumentType: string;\n allowedDocumentTypes: AllowedDocumentType[];\n documentSelection?: {\n title?: string;\n description?: string;\n };\n}\n\nconst DocumentCollectionUpload = ({\n onUpload,\n onBack,\n selectedDocumentType,\n allowedDocumentTypes,\n documentSelection,\n}: DocumentCollectionUploadProps) => {\n const { t } = useI18n();\n const [frontImage, setFrontImage] = useState<string | null>(null);\n const [backImage, setBackImage] = useState<string | null>(null);\n const [frontIsPDF, setFrontIsPDF] = useState<boolean>(false);\n const [backIsPDF, setBackIsPDF] = useState<boolean>(false);\n const [isUploading, setIsUploading] = useState(false);\n const [error, setError] = useState<string>(\"\");\n const [isDragging, setIsDragging] = useState(false);\n\n const frontInputRef = useRef<HTMLInputElement>(null);\n const multipleInputRef = useRef<HTMLInputElement>(null);\n const dropZoneRef = useRef<HTMLDivElement>(null);\n\n const requiresTwoSides = (): boolean => {\n const selected = allowedDocumentTypes.find(\n (d) => d.id === selectedDocumentType,\n );\n return selected?.side === \"RECTO_VERSO\";\n };\n\n const getSelectedDocumentName = () => {\n const selectedDoc = allowedDocumentTypes.find(\n (doc) => doc.id === selectedDocumentType,\n );\n if (!selectedDoc) return \"document\";\n return t(selectedDoc.name) || selectedDoc.name;\n };\n\n const handleFileChange = (\n event: React.ChangeEvent<HTMLInputElement>,\n side: \"front\" | \"back\" = \"front\",\n ) => {\n const file = event.target.files?.[0];\n if (!file) return;\n\n if (\n !file.type.startsWith(\"image/\") &&\n !file.type.startsWith(\"application/pdf\")\n ) {\n setError(t(\"document_upload.errors.invalid_file_type\"));\n return;\n }\n if (file.size > 10 * 1024 * 1024) {\n setError(t(\"document_upload.errors.file_too_large\"));\n return;\n }\n\n setError(\"\");\n const isFilePDF = file.type === \"application/pdf\";\n const reader = new FileReader();\n reader.onload = (e) => {\n const result = e.target?.result as string;\n if (side === \"front\") {\n setFrontImage(result);\n setFrontIsPDF(isFilePDF);\n } else {\n setBackImage(result);\n setBackIsPDF(isFilePDF);\n }\n };\n reader.readAsDataURL(file);\n };\n\n const handleMultipleFileChange = (\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n const files = event.target.files;\n if (!files) return;\n const maxFiles = requiresTwoSides() ? 2 : 1;\n if (files.length > maxFiles) {\n setError(t(\"document_upload.errors.max_files\"));\n return;\n }\n setError(\"\");\n Array.from(files).forEach((file, index) => {\n if (\n !file.type.startsWith(\"image/\") &&\n !file.type.startsWith(\"application/pdf\")\n ) {\n setError(t(\"document_upload.errors.invalid_file_type\"));\n return;\n }\n if (file.size > 10 * 1024 * 1024) {\n setError(t(\"document_upload.errors.file_too_large\"));\n return;\n }\n const isFilePDF = file.type === \"application/pdf\";\n const reader = new FileReader();\n reader.onload = (e) => {\n const result = e.target?.result as string;\n if (index === 0) {\n setFrontImage(result);\n setFrontIsPDF(isFilePDF);\n } else if (index === 1 && requiresTwoSides()) {\n setBackImage(result);\n setBackIsPDF(isFilePDF);\n }\n };\n reader.readAsDataURL(file);\n });\n };\n\n const handleUpload = async () => {\n setError(\"\");\n if (!frontImage) {\n setError(t(\"jdi.document_upload.errors.add_photo_identity\"));\n return;\n }\n\n setIsUploading(true);\n try {\n const files = {\n front: frontImage,\n back: requiresTwoSides() ? backImage : null,\n };\n onUpload(files);\n } catch (err) {\n setError(t(\"document_upload.errors.upload_error\"));\n setIsUploading(false);\n }\n };\n\n const removeImage = (side: \"front\" | \"back\" = \"front\") => {\n if (side === \"front\") {\n setFrontImage(null);\n setFrontIsPDF(false);\n } else {\n setBackImage(null);\n setBackIsPDF(false);\n }\n setError(\"\");\n };\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button\n onClick={handleUpload}\n disabled={!frontImage || isUploading}\n >\n {isUploading\n ? t(\"jdi.processing.download\")\n : requiresTwoSides()\n ? t(\"jdi.document_upload.validate_multiple\")\n : t(\"jdi.document_upload.validate_single\")}\n </Button>\n }\n secondary={\n <Button variant=\"secondary\" onClick={onBack} disabled={isUploading}>\n {t(\"buttons.back\")}\n </Button>\n }\n />\n }\n >\n <div className=\"flex-1 flex items-start justify-center md:items-center p-4\">\n <div className=\"w-full max-w-lg\">\n <div className=\"text-center mb-8\">\n <h1 className=\"text-2xl md:text-3xl font-bold text-gray-900 mb-2\">\n {t(\"document_upload.upload_title\")}\n </h1>\n <p className=\"text-gray-600\">\n {t(\"document_upload.upload_description\")}\n </p>\n </div>\n\n {error && (\n <div className=\"mb-6 p-4 bg-red-50 border border-red-200 rounded-lg text-sm text-red-700\">\n {error}\n </div>\n )}\n\n <Card\n className=\"border-2 border-dashed border-teal-300 bg-teal-50/30 p-8 mb-6 text-center\"\n onDragOver={(e) => e.preventDefault()}\n onDrop={(e) => {\n e.preventDefault();\n const files = e.dataTransfer.files;\n if (files.length > 0) {\n const syntheticEvent = { target: { files } } as any;\n requiresTwoSides() ? handleMultipleFileChange(syntheticEvent) : handleFileChange(syntheticEvent);\n }\n }}\n >\n {!frontImage ? (\n <div className=\"space-y-6\">\n <h3 className=\"text-lg font-semibold text-gray-900\">{getSelectedDocumentName()}</h3>\n <Button\n onClick={() => requiresTwoSides() ? multipleInputRef.current?.click() : frontInputRef.current?.click()}\n className=\"bg-teal-600 text-white hover:bg-teal-700 px-6 py-2 rounded-lg font-medium mx-auto flex items-center gap-2\"\n disabled={isUploading}\n >\n <Upload size={18} />\n <span>{t(\"document_upload.browse_files\")}</span>\n </Button>\n <div className=\"text-xs text-gray-500 space-y-1\">\n <p>{t(\"document_upload.accepted_formats\")}</p>\n <p>{requiresTwoSides() ? t(\"document_upload.multiple_files_info\") : t(\"document_upload.single_file_info\")}</p>\n </div>\n </div>\n ) : (\n <div className=\"space-y-4\">\n <div className=\"bg-white border rounded-lg p-4 relative group\">\n <p className=\"text-sm font-medium mb-1\">{frontIsPDF ? t(\"document_upload.pdf_preview\") : t(\"document_upload.image_preview\")}</p>\n {frontIsPDF ? <PDFPreview src={frontImage} /> : <img src={frontImage} alt={t(\"document_upload.front_side\")} className=\"max-h-48 mx-auto\" />}\n <button onClick={() => removeImage(\"front\")} className=\"absolute top-2 right-2 text-red-500 hover:text-red-700\">✕</button>\n </div>\n {requiresTwoSides() && backImage && (\n <div className=\"bg-white border rounded-lg p-4 relative group\">\n <p className=\"text-sm font-medium mb-1\">{t(\"document_upload.back_side\")} {backIsPDF ? \"PDF\" : \"\"}</p>\n {backIsPDF ? <PDFPreview src={backImage} /> : <img src={backImage} alt={t(\"document_upload.back_side\")} className=\"max-h-48 mx-auto\" />}\n <button onClick={() => removeImage(\"back\")} className=\"absolute top-2 right-2 text-red-500 hover:text-red-700\">✕</button>\n </div>\n )}\n {requiresTwoSides() && !backImage && (\n <Button\n onClick={() => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \"image/*,.pdf\";\n input.onchange = (e) => handleFileChange(e as any, \"back\");\n input.click();\n }}\n className=\"text-teal-600 border border-teal-600 bg-transparent hover:bg-teal-50 w-full\"\n >\n {t(\"document_upload.add_back\")}\n </Button>\n )}\n </div>\n )}\n </Card>\n\n <input ref={frontInputRef} type=\"file\" accept=\"image/*,.pdf\" onChange={(e) => handleFileChange(e, \"front\")} className=\"hidden\" />\n <input ref={multipleInputRef} type=\"file\" accept=\"image/*,.pdf\" multiple={true} onChange={handleMultipleFileChange} className=\"hidden\" />\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default DocumentCollectionUpload;\n"],"names":["_jsx","_jsxs"],"mappings":";;;;;;;;;;;AA8BA,IAAM,wBAAwB,GAAG,UAAC,EAMF,EAAA;AAL5B,IAAA,IAAA,QAAQ,GAAA,EAAA,CAAA,QAAA,CAAA,CACR,MAAM,GAAA,EAAA,CAAA,MAAA,CAAA,CACN,oBAAoB,GAAA,EAAA,CAAA,oBAAA,CAAA,CACpB,oBAAoB,GAAA,EAAA,CAAA,oBAAA,CAAA,CACH,EAAA,CAAA;AAET,IAAA,IAAA,CAAC,GAAK,OAAO,EAAE,EAAd;IACH,IAAA,EAAA,GAA8B,QAAQ,CAAgB,IAAI,CAAC,EAA1D,UAAU,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,aAAa,GAAA,EAAA,CAAA,CAAA,CAAiC;IAC3D,IAAA,EAAA,GAA4B,QAAQ,CAAgB,IAAI,CAAC,EAAxD,SAAS,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,YAAY,GAAA,EAAA,CAAA,CAAA,CAAiC;IACzD,IAAA,EAAA,GAA8B,QAAQ,CAAU,KAAK,CAAC,EAArD,UAAU,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,aAAa,GAAA,EAAA,CAAA,CAAA,CAA4B;IACtD,IAAA,EAAA,GAA4B,QAAQ,CAAU,KAAK,CAAC,EAAnD,SAAS,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,YAAY,GAAA,EAAA,CAAA,CAAA,CAA4B;IACpD,IAAA,EAAA,GAAgC,QAAQ,CAAC,KAAK,CAAC,EAA9C,WAAW,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,cAAc,GAAA,EAAA,CAAA,CAAA,CAAmB;IAC/C,IAAA,EAAA,GAAoB,QAAQ,CAAS,EAAE,CAAC,EAAvC,KAAK,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,QAAQ,GAAA,EAAA,CAAA,CAAA,CAAwB;IACxC,IAAA,EAAA,GAA8B,QAAQ,CAAC,KAAK,CAAC,CAAA,CAAlC,EAAA,CAAA,CAAA,CAAA,CAAA,CAAe,EAAA,CAAA,CAAA;AAEhC,IAAA,IAAM,aAAa,GAAG,MAAM,CAAmB,IAAI,CAAC;AACpD,IAAA,IAAM,gBAAgB,GAAG,MAAM,CAAmB,IAAI,CAAC;AACvD,IAAoB,MAAM,CAAiB,IAAI;AAE/C,IAAA,IAAM,gBAAgB,GAAG,YAAA;AACrB,QAAA,IAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,CACtC,UAAC,CAAC,EAAA,EAAK,OAAA,CAAC,CAAC,EAAE,KAAK,oBAAoB,CAAA,CAA7B,CAA6B,CACvC;QACD,OAAO,CAAA,QAAQ,KAAA,IAAA,IAAR,QAAQ,KAAA,MAAA,GAAA,MAAA,GAAR,QAAQ,CAAE,IAAI,MAAK,aAAa;AAC3C,IAAA,CAAC;AAED,IAAA,IAAM,uBAAuB,GAAG,YAAA;AAC5B,QAAA,IAAM,WAAW,GAAG,oBAAoB,CAAC,IAAI,CACzC,UAAC,GAAG,EAAA,EAAK,OAAA,GAAG,CAAC,EAAE,KAAK,oBAAoB,CAAA,CAA/B,CAA+B,CAC3C;AACD,QAAA,IAAI,CAAC,WAAW;AAAE,YAAA,OAAO,UAAU;QACnC,OAAO,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI;AAClD,IAAA,CAAC;AAED,IAAA,IAAM,gBAAgB,GAAG,UACrB,KAA0C,EAC1C,IAAgC,EAAA;;AAAhC,QAAA,IAAA,IAAA,KAAA,MAAA,EAAA,EAAA,IAAA,GAAA,OAAgC,CAAA,CAAA;QAEhC,IAAM,IAAI,GAAG,CAAA,EAAA,GAAA,KAAK,CAAC,MAAM,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAG,CAAC,CAAC;AACpC,QAAA,IAAI,CAAC,IAAI;YAAE;QAEX,IACI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;YAC/B,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAC1C;AACE,YAAA,QAAQ,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC;YACvD;QACJ;QACA,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE;AAC9B,YAAA,QAAQ,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC;YACpD;QACJ;QAEA,QAAQ,CAAC,EAAE,CAAC;AACZ,QAAA,IAAM,SAAS,GAAG,IAAI,CAAC,IAAI,KAAK,iBAAiB;AACjD,QAAA,IAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC/B,QAAA,MAAM,CAAC,MAAM,GAAG,UAAC,CAAC,EAAA;;YACd,IAAM,MAAM,GAAG,CAAA,EAAA,GAAA,CAAC,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAgB;AACzC,YAAA,IAAI,IAAI,KAAK,OAAO,EAAE;gBAClB,aAAa,CAAC,MAAM,CAAC;gBACrB,aAAa,CAAC,SAAS,CAAC;YAC5B;iBAAO;gBACH,YAAY,CAAC,MAAM,CAAC;gBACpB,YAAY,CAAC,SAAS,CAAC;YAC3B;AACJ,QAAA,CAAC;AACD,QAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;AAC9B,IAAA,CAAC;IAED,IAAM,wBAAwB,GAAG,UAC7B,KAA0C,EAAA;AAE1C,QAAA,IAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK;AAChC,QAAA,IAAI,CAAC,KAAK;YAAE;AACZ,QAAA,IAAM,QAAQ,GAAG,gBAAgB,EAAE,GAAG,CAAC,GAAG,CAAC;AAC3C,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,QAAQ,EAAE;AACzB,YAAA,QAAQ,CAAC,CAAC,CAAC,kCAAkC,CAAC,CAAC;YAC/C;QACJ;QACA,QAAQ,CAAC,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,UAAC,IAAI,EAAE,KAAK,EAAA;YAClC,IACI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAC/B,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,iBAAiB,CAAC,EAC1C;AACE,gBAAA,QAAQ,CAAC,CAAC,CAAC,0CAA0C,CAAC,CAAC;gBACvD;YACJ;YACA,IAAI,IAAI,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE;AAC9B,gBAAA,QAAQ,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC;gBACpD;YACJ;AACA,YAAA,IAAM,SAAS,GAAG,IAAI,CAAC,IAAI,KAAK,iBAAiB;AACjD,YAAA,IAAM,MAAM,GAAG,IAAI,UAAU,EAAE;AAC/B,YAAA,MAAM,CAAC,MAAM,GAAG,UAAC,CAAC,EAAA;;gBACd,IAAM,MAAM,GAAG,CAAA,EAAA,GAAA,CAAC,CAAC,MAAM,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,MAAgB;AACzC,gBAAA,IAAI,KAAK,KAAK,CAAC,EAAE;oBACb,aAAa,CAAC,MAAM,CAAC;oBACrB,aAAa,CAAC,SAAS,CAAC;gBAC5B;AAAO,qBAAA,IAAI,KAAK,KAAK,CAAC,IAAI,gBAAgB,EAAE,EAAE;oBAC1C,YAAY,CAAC,MAAM,CAAC;oBACpB,YAAY,CAAC,SAAS,CAAC;gBAC3B;AACJ,YAAA,CAAC;AACD,YAAA,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;AAC9B,QAAA,CAAC,CAAC;AACN,IAAA,CAAC;AAED,IAAA,IAAM,YAAY,GAAG,YAAA,EAAA,OAAA,SAAA,CAAA,MAAA,EAAA,MAAA,EAAA,MAAA,EAAA,YAAA;;;YACjB,QAAQ,CAAC,EAAE,CAAC;YACZ,IAAI,CAAC,UAAU,EAAE;AACb,gBAAA,QAAQ,CAAC,CAAC,CAAC,+CAA+C,CAAC,CAAC;gBAC5D,OAAA,CAAA,CAAA,YAAA;YACJ;YAEA,cAAc,CAAC,IAAI,CAAC;AACpB,YAAA,IAAI;AACM,gBAAA,KAAK,GAAG;AACV,oBAAA,KAAK,EAAE,UAAU;oBACjB,IAAI,EAAE,gBAAgB,EAAE,GAAG,SAAS,GAAG,IAAI;iBAC9C;gBACD,QAAQ,CAAC,KAAK,CAAC;YACnB;YAAE,OAAO,GAAG,EAAE;AACV,gBAAA,QAAQ,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC;gBAClD,cAAc,CAAC,KAAK,CAAC;YACzB;;;SACH;IAED,IAAM,WAAW,GAAG,UAAC,IAAgC,EAAA;AAAhC,QAAA,IAAA,IAAA,KAAA,MAAA,EAAA,EAAA,IAAA,GAAA,OAAgC,CAAA,CAAA;AACjD,QAAA,IAAI,IAAI,KAAK,OAAO,EAAE;YAClB,aAAa,CAAC,IAAI,CAAC;YACnB,aAAa,CAAC,KAAK,CAAC;QACxB;aAAO;YACH,YAAY,CAAC,IAAI,CAAC;YAClB,YAAY,CAAC,KAAK,CAAC;QACvB;QACA,QAAQ,CAAC,EAAE,CAAC;AAChB,IAAA,CAAC;IAED,QACIA,GAAA,CAAC,gBAAgB,EAAA,EACb,MAAM,EACFA,GAAA,CAAC,WAAW,EAAA,EACJ,OAAO,EACHA,GAAA,CAAC,MAAM,EAAA,EACH,OAAO,EAAE,YAAY,EACrB,QAAQ,EAAE,CAAC,UAAU,IAAI,WAAW,EAAA,QAAA,EAEnC;AACG,sBAAE,CAAC,CAAC,yBAAyB;sBAC3B,gBAAgB;AACd,0BAAE,CAAC,CAAC,uCAAuC;0BACzC,CAAC,CAAC,qCAAqC,CAAC,EAAA,CAC7C,EAEb,SAAS,EACLA,GAAA,CAAC,MAAM,IAAC,OAAO,EAAC,WAAW,EAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAA,QAAA,EAC7D,CAAC,CAAC,cAAc,CAAC,GACb,EAAA,CAEf,EAAA,QAAA,EAGVA,aAAK,SAAS,EAAC,4DAA4D,EAAA,QAAA,EACvEC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iBAAiB,EAAA,QAAA,EAAA,CAC5BA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,kBAAkB,aAC7BD,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,mDAAmD,EAAA,QAAA,EAC5D,CAAC,CAAC,8BAA8B,CAAC,GACjC,EACLA,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,eAAe,EAAA,QAAA,EACvB,CAAC,CAAC,oCAAoC,CAAC,EAAA,CACxC,CAAA,EAAA,CACF,EAEL,KAAK,KACFA,aAAK,SAAS,EAAC,0EAA0E,EAAA,QAAA,EACpF,KAAK,EAAA,CACJ,CACT,EAEDA,GAAA,CAAC,IAAI,EAAA,EACD,SAAS,EAAC,2EAA2E,EACrF,UAAU,EAAE,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,cAAc,EAAE,CAAA,CAAlB,CAAkB,EACrC,MAAM,EAAE,UAAC,CAAC,EAAA;4BACN,CAAC,CAAC,cAAc,EAAE;AAClB,4BAAA,IAAM,KAAK,GAAG,CAAC,CAAC,YAAY,CAAC,KAAK;AAClC,4BAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;gCAClB,IAAM,cAAc,GAAG,EAAE,MAAM,EAAE,EAAE,KAAK,EAAA,KAAA,EAAE,EAAS;AACnD,gCAAA,gBAAgB,EAAE,GAAG,wBAAwB,CAAC,cAAc,CAAC,GAAG,gBAAgB,CAAC,cAAc,CAAC;4BACpG;AACJ,wBAAA,CAAC,EAAA,QAAA,EAEA,CAAC,UAAU,IACRC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CACtBD,GAAA,CAAA,IAAA,EAAA,EAAI,SAAS,EAAC,qCAAqC,EAAA,QAAA,EAAE,uBAAuB,EAAE,EAAA,CAAM,EACpFC,IAAA,CAAC,MAAM,EAAA,EACH,OAAO,EAAE,YAAA,EAAA,IAAA,EAAA,EAAA,EAAA,CAAA,CAAM,OAAA,gBAAgB,EAAE,GAAG,CAAA,EAAA,GAAA,gBAAgB,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,EAAE,GAAG,CAAA,EAAA,GAAA,aAAa,CAAC,OAAO,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,MAAA,GAAA,EAAA,CAAE,KAAK,EAAE,CAAA,CAAA,CAAA,EACtG,SAAS,EAAC,2GAA2G,EACrH,QAAQ,EAAE,WAAW,EAAA,QAAA,EAAA,CAErBD,GAAA,CAAC,MAAM,IAAC,IAAI,EAAE,EAAE,EAAA,CAAI,EACpBA,GAAA,CAAA,MAAA,EAAA,EAAA,QAAA,EAAO,CAAC,CAAC,8BAA8B,CAAC,EAAA,CAAQ,CAAA,EAAA,CAC3C,EACTC,cAAK,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAAA,CAC5CD,GAAA,CAAA,GAAA,EAAA,EAAA,QAAA,EAAI,CAAC,CAAC,kCAAkC,CAAC,EAAA,CAAK,EAC9CA,GAAA,CAAA,GAAA,EAAA,EAAA,QAAA,EAAI,gBAAgB,EAAE,GAAG,CAAC,CAAC,qCAAqC,CAAC,GAAG,CAAC,CAAC,kCAAkC,CAAC,EAAA,CAAK,CAAA,EAAA,CAC5G,CAAA,EAAA,CACJ,KAENC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CACtBA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,+CAA+C,EAAA,QAAA,EAAA,CAC1DD,GAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,0BAA0B,EAAA,QAAA,EAAE,UAAU,GAAG,CAAC,CAAC,6BAA6B,CAAC,GAAG,CAAC,CAAC,+BAA+B,CAAC,EAAA,CAAK,EAC/H,UAAU,GAAGA,IAAC,UAAU,EAAA,EAAC,GAAG,EAAE,UAAU,EAAA,CAAI,GAAGA,GAAA,CAAA,KAAA,EAAA,EAAK,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,4BAA4B,CAAC,EAAE,SAAS,EAAC,kBAAkB,EAAA,CAAG,EAC3IA,gBAAQ,OAAO,EAAE,YAAA,EAAM,OAAA,WAAW,CAAC,OAAO,CAAC,EAApB,CAAoB,EAAE,SAAS,EAAC,wDAAwD,EAAA,QAAA,EAAA,QAAA,EAAA,CAAW,CAAA,EAAA,CACxH,EACL,gBAAgB,EAAE,IAAI,SAAS,KAC5BC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,+CAA+C,EAAA,QAAA,EAAA,CAC1DA,IAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,0BAA0B,EAAA,QAAA,EAAA,CAAE,CAAC,CAAC,2BAA2B,CAAC,EAAA,GAAA,EAAG,SAAS,GAAG,KAAK,GAAG,EAAE,CAAA,EAAA,CAAK,EACpG,SAAS,GAAGD,GAAA,CAAC,UAAU,EAAA,EAAC,GAAG,EAAE,SAAS,EAAA,CAAI,GAAGA,aAAK,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC,2BAA2B,CAAC,EAAE,SAAS,EAAC,kBAAkB,EAAA,CAAG,EACvIA,GAAA,CAAA,QAAA,EAAA,EAAQ,OAAO,EAAE,YAAA,EAAM,OAAA,WAAW,CAAC,MAAM,CAAC,CAAA,CAAnB,CAAmB,EAAE,SAAS,EAAC,wDAAwD,EAAA,QAAA,EAAA,QAAA,EAAA,CAAW,CAAA,EAAA,CACvH,CACT,EACA,gBAAgB,EAAE,IAAI,CAAC,SAAS,KAC7BA,GAAA,CAAC,MAAM,EAAA,EACH,OAAO,EAAE,YAAA;wCACL,IAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC;AAC7C,wCAAA,KAAK,CAAC,IAAI,GAAG,MAAM;AACnB,wCAAA,KAAK,CAAC,MAAM,GAAG,cAAc;AAC7B,wCAAA,KAAK,CAAC,QAAQ,GAAG,UAAC,CAAC,EAAA,EAAK,OAAA,gBAAgB,CAAC,CAAQ,EAAE,MAAM,CAAC,CAAA,CAAlC,CAAkC;wCAC1D,KAAK,CAAC,KAAK,EAAE;AACjB,oCAAA,CAAC,EACD,SAAS,EAAC,6EAA6E,EAAA,QAAA,EAEtF,CAAC,CAAC,0BAA0B,CAAC,EAAA,CACzB,CACZ,CAAA,EAAA,CACC,CACT,EAAA,CACE,EAEPA,eAAO,GAAG,EAAE,aAAa,EAAE,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,QAAQ,EAAE,UAAC,CAAC,EAAA,EAAK,OAAA,gBAAgB,CAAC,CAAC,EAAE,OAAO,CAAC,EAA5B,CAA4B,EAAE,SAAS,EAAC,QAAQ,EAAA,CAAG,EACjIA,GAAA,CAAA,OAAA,EAAA,EAAO,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,wBAAwB,EAAE,SAAS,EAAC,QAAQ,EAAA,CAAG,IACvI,EAAA,CACJ,EAAA,CACS;AAE3B;;;;"}
1
+ {"version":3,"file":"DocumentCollectionUpload.js","sources":["../../../../../src/components/document-collection/DocumentCollectionUpload.tsx"],"sourcesContent":["import React, { useState, useRef } from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { Card } from \"../ui/Card\";\nimport { Upload } from \"lucide-react\";\nimport PDFPreview from \"../ui/PDFPreview\";\nimport type { onUploadFiles } from \"../../types/uploadFiles\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { DocumentTypeSide } from \"./DocumentCollection\";\nimport {\n logDocumentLoaded,\n logDocumentsValidated,\n} from \"../../services/auditTrailService\";\n\ninterface AllowedDocumentType {\n id: string;\n name: string;\n side?: DocumentTypeSide;\n}\n\ninterface DocumentCollectionUploadProps {\n onUpload: (files: onUploadFiles) => void;\n onBack: () => void;\n selectedDocumentType: string;\n allowedDocumentTypes: AllowedDocumentType[];\n documentSelection?: {\n title?: string;\n description?: string;\n };\n sessionId?: string;\n}\n\nconst DocumentCollectionUpload = ({\n onUpload,\n onBack,\n selectedDocumentType,\n allowedDocumentTypes,\n documentSelection,\n sessionId,\n}: DocumentCollectionUploadProps) => {\n const { t } = useI18n();\n const [frontImage, setFrontImage] = useState<string | null>(null);\n const [backImage, setBackImage] = useState<string | null>(null);\n const [frontIsPDF, setFrontIsPDF] = useState<boolean>(false);\n const [backIsPDF, setBackIsPDF] = useState<boolean>(false);\n const [isUploading, setIsUploading] = useState(false);\n const [error, setError] = useState<string>(\"\");\n const [isDragging, setIsDragging] = useState(false);\n\n const frontInputRef = useRef<HTMLInputElement>(null);\n const multipleInputRef = useRef<HTMLInputElement>(null);\n const dropZoneRef = useRef<HTMLDivElement>(null);\n\n const requiresTwoSides = (): boolean => {\n const selected = allowedDocumentTypes.find(\n (d) => d.id === selectedDocumentType,\n );\n return selected?.side === \"RECTO_VERSO\";\n };\n\n const getSelectedDocumentName = () => {\n const selectedDoc = allowedDocumentTypes.find(\n (doc) => doc.id === selectedDocumentType,\n );\n if (!selectedDoc) return \"document\";\n return t(selectedDoc.name) || selectedDoc.name;\n };\n\n const handleFileChange = (\n event: React.ChangeEvent<HTMLInputElement>,\n side: \"front\" | \"back\" = \"front\",\n ) => {\n const file = event.target.files?.[0];\n if (!file) return;\n\n if (\n !file.type.startsWith(\"image/\") &&\n !file.type.startsWith(\"application/pdf\")\n ) {\n setError(t(\"document_upload.errors.invalid_file_type\"));\n return;\n }\n if (file.size > 10 * 1024 * 1024) {\n setError(t(\"document_upload.errors.file_too_large\"));\n return;\n }\n\n setError(\"\");\n const isFilePDF = file.type === \"application/pdf\";\n const reader = new FileReader();\n reader.onload = (e) => {\n const result = e.target?.result as string;\n if (side === \"front\") {\n setFrontImage(result);\n setFrontIsPDF(isFilePDF);\n } else {\n setBackImage(result);\n setBackIsPDF(isFilePDF);\n }\n };\n reader.readAsDataURL(file);\n };\n\n const handleMultipleFileChange = (\n event: React.ChangeEvent<HTMLInputElement>,\n ) => {\n const files = event.target.files;\n if (!files) return;\n const maxFiles = requiresTwoSides() ? 2 : 1;\n if (files.length > maxFiles) {\n setError(t(\"document_upload.errors.max_files\"));\n return;\n }\n setError(\"\");\n Array.from(files).forEach((file, index) => {\n if (\n !file.type.startsWith(\"image/\") &&\n !file.type.startsWith(\"application/pdf\")\n ) {\n setError(t(\"document_upload.errors.invalid_file_type\"));\n return;\n }\n if (file.size > 10 * 1024 * 1024) {\n setError(t(\"document_upload.errors.file_too_large\"));\n return;\n }\n const isFilePDF = file.type === \"application/pdf\";\n const reader = new FileReader();\n reader.onload = (e) => {\n const result = e.target?.result as string;\n if (index === 0) {\n setFrontImage(result);\n setFrontIsPDF(isFilePDF);\n } else if (index === 1 && requiresTwoSides()) {\n setBackImage(result);\n setBackIsPDF(isFilePDF);\n }\n };\n reader.readAsDataURL(file);\n });\n };\n\n const handleUpload = async () => {\n setError(\"\");\n if (!frontImage) {\n setError(t(\"jdi.document_upload.errors.add_photo_identity\"));\n return;\n }\n\n setIsUploading(true);\n try {\n const files = {\n front: frontImage,\n back: requiresTwoSides() ? backImage : null,\n };\n if (sessionId) {\n logDocumentLoaded(sessionId, \"recto\");\n if (requiresTwoSides() && backImage) {\n logDocumentLoaded(sessionId, \"verso\");\n }\n logDocumentsValidated(sessionId);\n }\n onUpload(files);\n } catch (err) {\n setError(t(\"document_upload.errors.upload_error\"));\n setIsUploading(false);\n }\n };\n\n const removeImage = (side: \"front\" | \"back\" = \"front\") => {\n if (side === \"front\") {\n setFrontImage(null);\n setFrontIsPDF(false);\n } else {\n setBackImage(null);\n setBackIsPDF(false);\n }\n setError(\"\");\n };\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button\n onClick={handleUpload}\n disabled={!frontImage || isUploading}\n >\n {isUploading\n ? t(\"jdi.processing.download\")\n : requiresTwoSides()\n ? t(\"jdi.document_upload.validate_multiple\")\n : t(\"jdi.document_upload.validate_single\")}\n </Button>\n }\n secondary={\n <Button variant=\"secondary\" onClick={onBack} disabled={isUploading}>\n {t(\"buttons.back\")}\n </Button>\n }\n />\n }\n >\n <div className=\"flex-1 flex items-start justify-center md:items-center p-4\">\n <div className=\"w-full max-w-lg\">\n <div className=\"text-center mb-8\">\n <h1 className=\"text-2xl md:text-3xl font-bold text-gray-900 mb-2\">\n {t(\"document_upload.upload_title\")}\n </h1>\n <p className=\"text-gray-600\">\n {t(\"document_upload.upload_description\")}\n </p>\n </div>\n\n {error && (\n <div className=\"mb-6 p-4 bg-red-50 border border-red-200 rounded-lg text-sm text-red-700\">\n {error}\n </div>\n )}\n\n <Card\n className=\"border-2 border-dashed border-teal-300 bg-teal-50/30 p-8 mb-6 text-center\"\n onDragOver={(e) => e.preventDefault()}\n onDrop={(e) => {\n e.preventDefault();\n const files = e.dataTransfer.files;\n if (files.length > 0) {\n const syntheticEvent = { target: { files } } as any;\n requiresTwoSides() ? handleMultipleFileChange(syntheticEvent) : handleFileChange(syntheticEvent);\n }\n }}\n >\n {!frontImage ? (\n <div className=\"space-y-6\">\n <h3 className=\"text-lg font-semibold text-gray-900\">{getSelectedDocumentName()}</h3>\n <Button\n onClick={() => requiresTwoSides() ? multipleInputRef.current?.click() : frontInputRef.current?.click()}\n className=\"bg-teal-600 text-white hover:bg-teal-700 px-6 py-2 rounded-lg font-medium mx-auto flex items-center gap-2\"\n disabled={isUploading}\n >\n <Upload size={18} />\n <span>{t(\"document_upload.browse_files\")}</span>\n </Button>\n <div className=\"text-xs text-gray-500 space-y-1\">\n <p>{t(\"document_upload.accepted_formats\")}</p>\n <p>{requiresTwoSides() ? t(\"document_upload.multiple_files_info\") : t(\"document_upload.single_file_info\")}</p>\n </div>\n </div>\n ) : (\n <div className=\"space-y-4\">\n <div className=\"bg-white border rounded-lg p-4 relative group\">\n <p className=\"text-sm font-medium mb-1\">{frontIsPDF ? t(\"document_upload.pdf_preview\") : t(\"document_upload.image_preview\")}</p>\n {frontIsPDF ? <PDFPreview src={frontImage} /> : <img src={frontImage} alt={t(\"document_upload.front_side\")} className=\"max-h-48 mx-auto\" />}\n <button onClick={() => removeImage(\"front\")} className=\"absolute top-2 right-2 text-red-500 hover:text-red-700\">✕</button>\n </div>\n {requiresTwoSides() && backImage && (\n <div className=\"bg-white border rounded-lg p-4 relative group\">\n <p className=\"text-sm font-medium mb-1\">{t(\"document_upload.back_side\")} {backIsPDF ? \"PDF\" : \"\"}</p>\n {backIsPDF ? <PDFPreview src={backImage} /> : <img src={backImage} alt={t(\"document_upload.back_side\")} className=\"max-h-48 mx-auto\" />}\n <button onClick={() => removeImage(\"back\")} className=\"absolute top-2 right-2 text-red-500 hover:text-red-700\">✕</button>\n </div>\n )}\n {requiresTwoSides() && !backImage && (\n <Button\n onClick={() => {\n const input = document.createElement(\"input\");\n input.type = \"file\";\n input.accept = \"image/*,.pdf\";\n input.onchange = (e) => handleFileChange(e as any, \"back\");\n input.click();\n }}\n className=\"text-teal-600 border border-teal-600 bg-transparent hover:bg-teal-50 w-full\"\n >\n {t(\"document_upload.add_back\")}\n </Button>\n )}\n </div>\n )}\n </Card>\n\n <input ref={frontInputRef} type=\"file\" accept=\"image/*,.pdf\" onChange={(e) => handleFileChange(e, \"front\")} className=\"hidden\" />\n <input ref={multipleInputRef} type=\"file\" accept=\"image/*,.pdf\" multiple={true} onChange={handleMultipleFileChange} className=\"hidden\" />\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default DocumentCollectionUpload;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -11,7 +11,7 @@ import { requiresTwoSides } from '../../utils/documentLabels.js';
11
11
  import MobilePageLayout from '../ui/MobilePageLayout.js';
12
12
 
13
13
  var JDIDocumentUpload = function (_a) {
14
- var documentType = _a.documentType, onUpload = _a.onUpload, onBack = _a.onBack, documentTypeId = _a.documentTypeId, documentLabel = _a.documentLabel, _b = _a.initialFront, initialFront = _b === void 0 ? null : _b, _c = _a.initialBack, initialBack = _c === void 0 ? null : _c;
14
+ var documentType = _a.documentType, onUpload = _a.onUpload, onBack = _a.onBack, documentTypeId = _a.documentTypeId, documentLabel = _a.documentLabel, _b = _a.initialFront, initialFront = _b === void 0 ? null : _b, _c = _a.initialBack, initialBack = _c === void 0 ? null : _c; _a.sessionId;
15
15
  var t = useI18n().t;
16
16
  // Helper functions for conditional text
17
17
  var getDropZoneText = function () {