datakeen-session-react 1.1.159 → 1.1.161

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 (192) hide show
  1. package/dist/cjs/components/DatakeenSession.js +22 -3
  2. package/dist/cjs/components/DatakeenSession.js.map +1 -1
  3. package/dist/cjs/components/document-collection/DocumentCollection.js +2 -2
  4. package/dist/cjs/components/document-collection/DocumentCollection.js.map +1 -1
  5. package/dist/cjs/components/document-collection/DocumentCollectionIntroduction.js +5 -5
  6. package/dist/cjs/components/document-collection/DocumentCollectionIntroduction.js.map +1 -1
  7. package/dist/cjs/components/document-collection/DocumentCollectionMethodSelection.js +2 -2
  8. package/dist/cjs/components/document-collection/DocumentCollectionMethodSelection.js.map +1 -1
  9. package/dist/cjs/components/document-collection/DocumentCollectionSelection.js +5 -5
  10. package/dist/cjs/components/document-collection/DocumentCollectionSelection.js.map +1 -1
  11. package/dist/cjs/components/document-collection/DocumentCollectionUpload.js +11 -11
  12. package/dist/cjs/components/document-collection/DocumentCollectionUpload.js.map +1 -1
  13. package/dist/cjs/components/document-collection/DocumentError.js +4 -2
  14. package/dist/cjs/components/document-collection/DocumentError.js.map +1 -1
  15. package/dist/cjs/components/document-collection/DocumentSuccess.js +2 -2
  16. package/dist/cjs/components/document-collection/DocumentSuccess.js.map +1 -1
  17. package/dist/cjs/components/id-check/Photo.js +9 -1
  18. package/dist/cjs/components/id-check/Photo.js.map +1 -1
  19. package/dist/cjs/components/jdi/JDDWorkInProgress.js +1 -1
  20. package/dist/cjs/components/jdi/JDDWorkInProgress.js.map +1 -1
  21. package/dist/cjs/components/jdi/JDIDocumentUpload.js +1 -1
  22. package/dist/cjs/components/jdi/JDIDocumentUpload.js.map +1 -1
  23. package/dist/cjs/components/selfie/selfie-flow/SelfieRecorder.js +26 -7
  24. package/dist/cjs/components/selfie/selfie-flow/SelfieRecorder.js.map +1 -1
  25. package/dist/cjs/components/session/DocumentCheck.js +2 -2
  26. package/dist/cjs/components/session/DocumentCheck.js.map +1 -1
  27. package/dist/cjs/components/session/UserInputForm/CustomFormFields.js +42 -45
  28. package/dist/cjs/components/session/UserInputForm/CustomFormFields.js.map +1 -1
  29. package/dist/cjs/components/session/UserInputForm/DatePickerField.js +154 -0
  30. package/dist/cjs/components/session/UserInputForm/DatePickerField.js.map +1 -0
  31. package/dist/cjs/components/session/UserInputForm.js +2 -2
  32. package/dist/cjs/components/session/UserInputForm.js.map +1 -1
  33. package/dist/cjs/components/session/VideoWorkInProgress.js +1 -1
  34. package/dist/cjs/components/session/VideoWorkInProgress.js.map +1 -1
  35. package/dist/cjs/components/signature-electronic/DocusealSignature.js +2 -1
  36. package/dist/cjs/components/signature-electronic/DocusealSignature.js.map +1 -1
  37. package/dist/cjs/components/signature-electronic/SignatureElectronic.js +2 -1
  38. package/dist/cjs/components/signature-electronic/SignatureElectronic.js.map +1 -1
  39. package/dist/cjs/components/signature-electronic/SignatureElectronicIntroduction.js +2 -1
  40. package/dist/cjs/components/signature-electronic/SignatureElectronicIntroduction.js.map +1 -1
  41. package/dist/cjs/components/start-flow/CGU.js +5 -2
  42. package/dist/cjs/components/start-flow/CGU.js.map +1 -1
  43. package/dist/cjs/components/start-flow/Start.js +5 -2
  44. package/dist/cjs/components/start-flow/Start.js.map +1 -1
  45. package/dist/cjs/components/template/ExternalVerificationNodeHandler.js +2 -1
  46. package/dist/cjs/components/template/ExternalVerificationNodeHandler.js.map +1 -1
  47. package/dist/cjs/components/ui/MobilePageLayout.js +1 -1
  48. package/dist/cjs/components/ui/MobilePageLayout.js.map +1 -1
  49. package/dist/cjs/components/ui/Paper.js +2 -2
  50. package/dist/cjs/components/ui/Paper.js.map +1 -1
  51. package/dist/cjs/hooks/useUserInputForm.js +90 -29
  52. package/dist/cjs/hooks/useUserInputForm.js.map +1 -1
  53. package/dist/cjs/i18n/en.json.js +35 -5
  54. package/dist/cjs/i18n/en.json.js.map +1 -1
  55. package/dist/cjs/i18n/fr.json.js +36 -6
  56. package/dist/cjs/i18n/fr.json.js.map +1 -1
  57. package/dist/cjs/index.css.js +1 -1
  58. package/dist/cjs/node_modules/date-fns/locale/_lib/buildFormatLongFn.js +13 -0
  59. package/dist/cjs/node_modules/date-fns/locale/_lib/buildFormatLongFn.js.map +1 -0
  60. package/dist/cjs/node_modules/date-fns/locale/_lib/buildLocalizeFn.js +67 -0
  61. package/dist/cjs/node_modules/date-fns/locale/_lib/buildLocalizeFn.js.map +1 -0
  62. package/dist/cjs/node_modules/date-fns/locale/_lib/buildMatchFn.js +62 -0
  63. package/dist/cjs/node_modules/date-fns/locale/_lib/buildMatchFn.js.map +1 -0
  64. package/dist/cjs/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js +25 -0
  65. package/dist/cjs/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js.map +1 -0
  66. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatDistance.js +106 -0
  67. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatDistance.js.map +1 -0
  68. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatLong.js +44 -0
  69. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatLong.js.map +1 -0
  70. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatRelative.js +16 -0
  71. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/formatRelative.js.map +1 -0
  72. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/localize.js +192 -0
  73. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/localize.js.map +1 -0
  74. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/match.js +137 -0
  75. package/dist/cjs/node_modules/date-fns/locale/en-US/_lib/match.js.map +1 -0
  76. package/dist/cjs/node_modules/date-fns/locale/en-US.js +31 -0
  77. package/dist/cjs/node_modules/date-fns/locale/en-US.js.map +1 -0
  78. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatDistance.js +105 -0
  79. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatDistance.js.map +1 -0
  80. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatLong.js +44 -0
  81. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatLong.js.map +1 -0
  82. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatRelative.js +16 -0
  83. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/formatRelative.js.map +1 -0
  84. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/localize.js +170 -0
  85. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/localize.js.map +1 -0
  86. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/match.js +138 -0
  87. package/dist/cjs/node_modules/date-fns/locale/fr/_lib/match.js.map +1 -0
  88. package/dist/cjs/node_modules/date-fns/locale/fr.js +31 -0
  89. package/dist/cjs/node_modules/date-fns/locale/fr.js.map +1 -0
  90. package/dist/cjs/types/session.js +6 -0
  91. package/dist/cjs/types/session.js.map +1 -0
  92. package/dist/cjs/utils/customFieldValidation.js +62 -0
  93. package/dist/cjs/utils/customFieldValidation.js.map +1 -0
  94. package/dist/esm/components/DatakeenSession.js +22 -3
  95. package/dist/esm/components/DatakeenSession.js.map +1 -1
  96. package/dist/esm/components/document-collection/DocumentCollection.js +2 -2
  97. package/dist/esm/components/document-collection/DocumentCollection.js.map +1 -1
  98. package/dist/esm/components/document-collection/DocumentCollectionIntroduction.js +5 -5
  99. package/dist/esm/components/document-collection/DocumentCollectionIntroduction.js.map +1 -1
  100. package/dist/esm/components/document-collection/DocumentCollectionMethodSelection.js +2 -2
  101. package/dist/esm/components/document-collection/DocumentCollectionMethodSelection.js.map +1 -1
  102. package/dist/esm/components/document-collection/DocumentCollectionSelection.js +5 -5
  103. package/dist/esm/components/document-collection/DocumentCollectionSelection.js.map +1 -1
  104. package/dist/esm/components/document-collection/DocumentCollectionUpload.js +11 -11
  105. package/dist/esm/components/document-collection/DocumentCollectionUpload.js.map +1 -1
  106. package/dist/esm/components/document-collection/DocumentError.js +4 -2
  107. package/dist/esm/components/document-collection/DocumentError.js.map +1 -1
  108. package/dist/esm/components/document-collection/DocumentSuccess.js +2 -2
  109. package/dist/esm/components/document-collection/DocumentSuccess.js.map +1 -1
  110. package/dist/esm/components/id-check/Photo.js +9 -1
  111. package/dist/esm/components/id-check/Photo.js.map +1 -1
  112. package/dist/esm/components/jdi/JDDWorkInProgress.js +1 -1
  113. package/dist/esm/components/jdi/JDDWorkInProgress.js.map +1 -1
  114. package/dist/esm/components/jdi/JDIDocumentUpload.js +1 -1
  115. package/dist/esm/components/jdi/JDIDocumentUpload.js.map +1 -1
  116. package/dist/esm/components/selfie/selfie-flow/SelfieRecorder.js +26 -7
  117. package/dist/esm/components/selfie/selfie-flow/SelfieRecorder.js.map +1 -1
  118. package/dist/esm/components/session/DocumentCheck.js +2 -2
  119. package/dist/esm/components/session/DocumentCheck.js.map +1 -1
  120. package/dist/esm/components/session/UserInputForm/CustomFormFields.js +42 -45
  121. package/dist/esm/components/session/UserInputForm/CustomFormFields.js.map +1 -1
  122. package/dist/esm/components/session/UserInputForm/DatePickerField.js +132 -0
  123. package/dist/esm/components/session/UserInputForm/DatePickerField.js.map +1 -0
  124. package/dist/esm/components/session/UserInputForm.js +2 -2
  125. package/dist/esm/components/session/UserInputForm.js.map +1 -1
  126. package/dist/esm/components/session/VideoWorkInProgress.js +1 -1
  127. package/dist/esm/components/session/VideoWorkInProgress.js.map +1 -1
  128. package/dist/esm/components/signature-electronic/DocusealSignature.js +2 -1
  129. package/dist/esm/components/signature-electronic/DocusealSignature.js.map +1 -1
  130. package/dist/esm/components/signature-electronic/SignatureElectronic.js +2 -1
  131. package/dist/esm/components/signature-electronic/SignatureElectronic.js.map +1 -1
  132. package/dist/esm/components/signature-electronic/SignatureElectronicIntroduction.js +2 -1
  133. package/dist/esm/components/signature-electronic/SignatureElectronicIntroduction.js.map +1 -1
  134. package/dist/esm/components/start-flow/CGU.js +5 -2
  135. package/dist/esm/components/start-flow/CGU.js.map +1 -1
  136. package/dist/esm/components/start-flow/Start.js +5 -2
  137. package/dist/esm/components/start-flow/Start.js.map +1 -1
  138. package/dist/esm/components/template/ExternalVerificationNodeHandler.js +2 -1
  139. package/dist/esm/components/template/ExternalVerificationNodeHandler.js.map +1 -1
  140. package/dist/esm/components/ui/MobilePageLayout.js +1 -1
  141. package/dist/esm/components/ui/MobilePageLayout.js.map +1 -1
  142. package/dist/esm/components/ui/Paper.js +2 -2
  143. package/dist/esm/components/ui/Paper.js.map +1 -1
  144. package/dist/esm/components/ui/SelectComponent.js +3 -3
  145. package/dist/esm/components/ui/SelectComponent.js.map +1 -1
  146. package/dist/esm/hooks/useUserInputForm.js +92 -31
  147. package/dist/esm/hooks/useUserInputForm.js.map +1 -1
  148. package/dist/esm/i18n/en.json.js +35 -5
  149. package/dist/esm/i18n/en.json.js.map +1 -1
  150. package/dist/esm/i18n/fr.json.js +36 -6
  151. package/dist/esm/i18n/fr.json.js.map +1 -1
  152. package/dist/esm/index.css.js +1 -1
  153. package/dist/esm/node_modules/date-fns/locale/_lib/buildFormatLongFn.js +11 -0
  154. package/dist/esm/node_modules/date-fns/locale/_lib/buildFormatLongFn.js.map +1 -0
  155. package/dist/esm/node_modules/date-fns/locale/_lib/buildLocalizeFn.js +65 -0
  156. package/dist/esm/node_modules/date-fns/locale/_lib/buildLocalizeFn.js.map +1 -0
  157. package/dist/esm/node_modules/date-fns/locale/_lib/buildMatchFn.js +60 -0
  158. package/dist/esm/node_modules/date-fns/locale/_lib/buildMatchFn.js.map +1 -0
  159. package/dist/esm/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js +23 -0
  160. package/dist/esm/node_modules/date-fns/locale/_lib/buildMatchPatternFn.js.map +1 -0
  161. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatDistance.js +104 -0
  162. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatDistance.js.map +1 -0
  163. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatLong.js +42 -0
  164. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatLong.js.map +1 -0
  165. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatRelative.js +14 -0
  166. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/formatRelative.js.map +1 -0
  167. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/localize.js +190 -0
  168. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/localize.js.map +1 -0
  169. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/match.js +135 -0
  170. package/dist/esm/node_modules/date-fns/locale/en-US/_lib/match.js.map +1 -0
  171. package/dist/esm/node_modules/date-fns/locale/en-US.js +29 -0
  172. package/dist/esm/node_modules/date-fns/locale/en-US.js.map +1 -0
  173. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatDistance.js +103 -0
  174. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatDistance.js.map +1 -0
  175. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatLong.js +42 -0
  176. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatLong.js.map +1 -0
  177. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatRelative.js +14 -0
  178. package/dist/esm/node_modules/date-fns/locale/fr/_lib/formatRelative.js.map +1 -0
  179. package/dist/esm/node_modules/date-fns/locale/fr/_lib/localize.js +168 -0
  180. package/dist/esm/node_modules/date-fns/locale/fr/_lib/localize.js.map +1 -0
  181. package/dist/esm/node_modules/date-fns/locale/fr/_lib/match.js +136 -0
  182. package/dist/esm/node_modules/date-fns/locale/fr/_lib/match.js.map +1 -0
  183. package/dist/esm/node_modules/date-fns/locale/fr.js +29 -0
  184. package/dist/esm/node_modules/date-fns/locale/fr.js.map +1 -0
  185. package/dist/esm/providers/I18nProvider.js +2 -2
  186. package/dist/esm/providers/I18nProvider.js.map +1 -1
  187. package/dist/esm/types/session.js +4 -0
  188. package/dist/esm/types/session.js.map +1 -0
  189. package/dist/esm/utils/customFieldValidation.js +56 -0
  190. package/dist/esm/utils/customFieldValidation.js.map +1 -0
  191. package/jest.config.js +1 -0
  192. package/package.json +4 -1
@@ -12,7 +12,7 @@ import BeforePhoto from '../id-check/BeforePhoto.js';
12
12
  import BeforeVersoPhoto from '../id-check/BeforeVersoPhoto.js';
13
13
  import Photo from '../id-check/Photo.js';
14
14
  import PhotoConfirmation from '../id-check/PhotoConfirmation.js';
15
- import { useTranslation } from 'react-i18next';
15
+ import { useI18n } from '../../hooks/useI18n.js';
16
16
  import ButtonDesktop from '../ui/ButtonDesktop.js';
17
17
  import { analyzeFiles } from '../../services/analysis.js';
18
18
  import { getNodeRetryCount, incrementNodeRetryCount } from '../../services/retryService.js';
@@ -44,7 +44,7 @@ import { blobToDataUrl, dataUrlToBlob, resizeAfterCapture } from '../../utils/im
44
44
  var DocumentCollection = function (_a) {
45
45
  var _b, _c;
46
46
  var stepObject = _a.stepObject, sessionId = _a.sessionId, node = _a.node, template = _a.template, onContinueOnPC = _a.onContinueOnPC, allowedDocumentTypes = _a.allowedDocumentTypes, allowedAddingMethods = _a.allowedAddingMethods, introductionPage = _a.introductionPage, documentSelection = _a.documentSelection, allowResubmission = _a.allowResubmission, maxResubmissionAttempts = _a.maxResubmissionAttempts;
47
- var t = useTranslation().t;
47
+ var t = useI18n().t;
48
48
  var session = getSession().session;
49
49
  var _d = useState((introductionPage === null || introductionPage === void 0 ? void 0 : introductionPage.title) ? 0 : 1), currentStep = _d[0], setCurrentStep = _d[1];
50
50
  var _e = useState(null), fileUploaded = _e[0], setFileUploaded = _e[1];
@@ -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 { useTranslation } from \"react-i18next\";\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 } = useTranslation();\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 />\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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"}
@@ -4,18 +4,18 @@ import Subtitle from '../ui/Subtitle.js';
4
4
  import Button from '../ui/Button.js';
5
5
  import PageActions from '../ui/PageActions.js';
6
6
  import img from '../../assets/before-document.png.js';
7
- import { useTranslation } from 'react-i18next';
7
+ import { useI18n } from '../../hooks/useI18n.js';
8
8
  import MobilePageLayout from '../ui/MobilePageLayout.js';
9
9
 
10
10
  var DocumentCollectionIntroduction = function (_a) {
11
11
  var onContinue = _a.onContinue, onBack = _a.onBack, introductionPage = _a.introductionPage;
12
12
  // Use provided values or fallback to defaults (use i18n keys)
13
- var t = useTranslation().t;
13
+ var t = useI18n().t;
14
14
  var title = (introductionPage === null || introductionPage === void 0 ? void 0 : introductionPage.title) ||
15
- t("document_upload.selection_title", "Collection de documents");
15
+ t("document_upload.selection_title");
16
16
  var description = (introductionPage === null || introductionPage === void 0 ? void 0 : introductionPage.description) ||
17
- t("document_upload.selection_description", "Veuillez fournir les documents suivants pour vérification");
18
- return (jsx(MobilePageLayout, { footer: jsx(PageActions, { primary: jsx(Button, { onClick: onContinue, children: t("buttons.continue", "Commencer la collecte") }), secondary: jsx(Button, { variant: "secondary", onClick: onBack, children: t("buttons.back", "Retour") }) }), children: jsx("div", { className: "px-4 py-6 md:px-8 md:py-8", children: jsxs("div", { className: "w-full max-w-md mx-auto space-y-6", children: [jsxs("div", { className: "text-center space-y-4", children: [jsx(Title, { className: "text-xl md:text-2xl lg:text-3xl", children: title }), jsx(Subtitle, { className: "text-sm md:text-base text-gray-600 leading-relaxed whitespace-pre-line", children: description })] }), jsx("div", { className: "flex justify-center py-6", children: jsx("img", { src: img, alt: "Collection de documents", className: "max-w-full h-auto object-contain max-h-[25vh]" }) }), jsx("div", { className: "bg-blue-50 border border-blue-200 rounded-lg p-4", children: jsxs("div", { className: "flex", children: [jsx("div", { className: "flex-shrink-0", children: jsx("svg", { className: "h-5 w-5 text-blue-400", fill: "currentColor", viewBox: "0 0 20 20", xmlns: "http://www.w3.org/2000/svg", children: jsx("path", { fillRule: "evenodd", d: "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z", clipRule: "evenodd" }) }) }), jsxs("div", { className: "ml-3", children: [jsx("h3", { className: "text-sm font-medium text-blue-800", children: t("jdi.document_selection.info_title", "Informations importantes") }), jsx("div", { className: "mt-2 text-sm text-blue-700", children: jsxs("ul", { className: "list-disc pl-5 space-y-1", children: [jsx("li", { children: t("jdi.document_upload.info_point1", "Assurez-vous que vos documents sont lisibles et de bonne qualité") }), jsx("li", { children: t("jdi.document_upload.accepted_formats", "Les formats PDF, PNG et JPG sont acceptés") }), jsxs("li", { children: [t("jdi.document_upload.max_size_label", "La taille maximale par fichier est de 10 MB"), " ", " ", " ", t("jdi.document_upload.max_size", "10 MB")] })] }) })] })] }) })] }) }) }));
17
+ t("document_upload.selection_description");
18
+ return (jsx(MobilePageLayout, { footer: jsx(PageActions, { primary: jsx(Button, { onClick: onContinue, children: t("buttons.continue") }), secondary: jsx(Button, { variant: "secondary", onClick: onBack, children: t("buttons.back") }) }), children: jsx("div", { className: "px-4 py-6 md:px-8 md:py-8", children: jsxs("div", { className: "w-full max-w-md mx-auto space-y-6", children: [jsxs("div", { className: "text-center space-y-4", children: [jsx(Title, { className: "text-xl md:text-2xl lg:text-3xl", children: title }), jsx(Subtitle, { className: "text-sm md:text-base text-gray-600 leading-relaxed whitespace-pre-line", children: description })] }), jsx("div", { className: "flex justify-center py-6", children: jsx("img", { src: img, alt: t("document_upload.selection_title"), className: "max-w-full h-auto object-contain max-h-[25vh]" }) }), jsx("div", { className: "bg-blue-50 border border-blue-200 rounded-lg p-4", children: jsxs("div", { className: "flex", children: [jsx("div", { className: "flex-shrink-0", children: jsx("svg", { className: "h-5 w-5 text-blue-400", fill: "currentColor", viewBox: "0 0 20 20", xmlns: "http://www.w3.org/2000/svg", children: jsx("path", { fillRule: "evenodd", d: "M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z", clipRule: "evenodd" }) }) }), jsxs("div", { className: "ml-3", children: [jsx("h3", { className: "text-sm font-medium text-blue-800", children: t("jdi.document_selection.info_title") }), jsx("div", { className: "mt-2 text-sm text-blue-700", children: jsxs("ul", { className: "list-disc pl-5 space-y-1", children: [jsx("li", { children: t("jdi.document_upload.info_point1") }), jsx("li", { children: t("jdi.document_upload.accepted_formats") }), jsxs("li", { children: [t("jdi.document_upload.max_size_label"), " ", t("jdi.document_upload.max_size")] })] }) })] })] }) })] }) }) }));
19
19
  };
20
20
 
21
21
  export { DocumentCollectionIntroduction as default };
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentCollectionIntroduction.js","sources":["../../../../../src/components/document-collection/DocumentCollectionIntroduction.tsx"],"sourcesContent":["import Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { beforeDocumentIcon } from \"../../assets\";\nimport { useTranslation } from \"react-i18next\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\ninterface DocumentCollectionIntroductionProps {\n onContinue: () => void;\n onBack: () => void;\n introductionPage?: {\n title?: string;\n description?: string;\n };\n}\n\nconst DocumentCollectionIntroduction = ({\n onContinue,\n onBack,\n introductionPage,\n}: DocumentCollectionIntroductionProps) => {\n // Use provided values or fallback to defaults (use i18n keys)\n const { t } = useTranslation();\n const title =\n introductionPage?.title ||\n t(\"document_upload.selection_title\", \"Collection de documents\");\n const description =\n introductionPage?.description ||\n t(\n \"document_upload.selection_description\",\n \"Veuillez fournir les documents suivants pour vérification\",\n );\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button onClick={onContinue}>\n {t(\"buttons.continue\", \"Commencer la collecte\")}\n </Button>\n }\n secondary={\n <Button variant=\"secondary\" onClick={onBack}>\n {t(\"buttons.back\", \"Retour\")}\n </Button>\n }\n />\n }\n >\n <div className=\"px-4 py-6 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n {/* Header */}\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">{title}</Title>\n <Subtitle className=\"text-sm md:text-base text-gray-600 leading-relaxed whitespace-pre-line\">\n {description}\n </Subtitle>\n </div>\n\n {/* Document collection illustration */}\n <div className=\"flex justify-center py-6\">\n <img\n src={beforeDocumentIcon}\n alt=\"Collection de documents\"\n className=\"max-w-full h-auto object-contain max-h-[25vh]\"\n />\n </div>\n\n {/* Information box */}\n <div className=\"bg-blue-50 border border-blue-200 rounded-lg p-4\">\n <div className=\"flex\">\n <div className=\"flex-shrink-0\">\n <svg\n className=\"h-5 w-5 text-blue-400\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n <div className=\"ml-3\">\n <h3 className=\"text-sm font-medium text-blue-800\">\n {t(\n \"jdi.document_selection.info_title\",\n \"Informations importantes\",\n )}\n </h3>\n <div className=\"mt-2 text-sm text-blue-700\">\n <ul className=\"list-disc pl-5 space-y-1\">\n <li>{t(\"jdi.document_upload.info_point1\", \"Assurez-vous que vos documents sont lisibles et de bonne qualité\")}</li>\n <li>{t(\"jdi.document_upload.accepted_formats\", \"Les formats PDF, PNG et JPG sont acceptés\")}</li>\n <li>{t(\"jdi.document_upload.max_size_label\", \"La taille maximale par fichier est de 10 MB\")} {\" \"} {t(\"jdi.document_upload.max_size\", \"10 MB\")}</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default DocumentCollectionIntroduction;\n"],"names":["_jsx","_jsxs","beforeDocumentIcon"],"mappings":"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"}
1
+ {"version":3,"file":"DocumentCollectionIntroduction.js","sources":["../../../../../src/components/document-collection/DocumentCollectionIntroduction.tsx"],"sourcesContent":["import Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { beforeDocumentIcon } from \"../../assets\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\ninterface DocumentCollectionIntroductionProps {\n onContinue: () => void;\n onBack: () => void;\n introductionPage?: {\n title?: string;\n description?: string;\n };\n}\n\nconst DocumentCollectionIntroduction = ({\n onContinue,\n onBack,\n introductionPage,\n}: DocumentCollectionIntroductionProps) => {\n // Use provided values or fallback to defaults (use i18n keys)\n const { t } = useI18n();\n const title =\n introductionPage?.title ||\n t(\"document_upload.selection_title\");\n const description =\n introductionPage?.description ||\n t(\"document_upload.selection_description\");\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button onClick={onContinue}>\n {t(\"buttons.continue\")}\n </Button>\n }\n secondary={\n <Button variant=\"secondary\" onClick={onBack}>\n {t(\"buttons.back\")}\n </Button>\n }\n />\n }\n >\n <div className=\"px-4 py-6 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n {/* Header */}\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">{title}</Title>\n <Subtitle className=\"text-sm md:text-base text-gray-600 leading-relaxed whitespace-pre-line\">\n {description}\n </Subtitle>\n </div>\n\n {/* Document collection illustration */}\n <div className=\"flex justify-center py-6\">\n <img\n src={beforeDocumentIcon}\n alt={t(\"document_upload.selection_title\")}\n className=\"max-w-full h-auto object-contain max-h-[25vh]\"\n />\n </div>\n\n {/* Information box */}\n <div className=\"bg-blue-50 border border-blue-200 rounded-lg p-4\">\n <div className=\"flex\">\n <div className=\"flex-shrink-0\">\n <svg\n className=\"h-5 w-5 text-blue-400\"\n fill=\"currentColor\"\n viewBox=\"0 0 20 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a1 1 0 000 2v3a1 1 0 001 1h1a1 1 0 100-2v-3a1 1 0 00-1-1H9z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </div>\n <div className=\"ml-3\">\n <h3 className=\"text-sm font-medium text-blue-800\">\n {t(\"jdi.document_selection.info_title\")}\n </h3>\n <div className=\"mt-2 text-sm text-blue-700\">\n <ul className=\"list-disc pl-5 space-y-1\">\n <li>{t(\"jdi.document_upload.info_point1\")}</li>\n <li>{t(\"jdi.document_upload.accepted_formats\")}</li>\n <li>{t(\"jdi.document_upload.max_size_label\")} {t(\"jdi.document_upload.max_size\")}</li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default DocumentCollectionIntroduction;\n"],"names":["_jsx","_jsxs","beforeDocumentIcon"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
2
  import { Camera, Upload } from 'lucide-react';
3
- import { useTranslation } from 'react-i18next';
3
+ import { useI18n } from '../../hooks/useI18n.js';
4
4
  import Title from '../ui/Title.js';
5
5
  import Subtitle from '../ui/Subtitle.js';
6
6
  import Button from '../ui/Button.js';
@@ -9,7 +9,7 @@ import MobilePageLayout from '../ui/MobilePageLayout.js';
9
9
 
10
10
  var DocumentCollectionMethodSelection = function (_a) {
11
11
  var onMethodSelect = _a.onMethodSelect, onBack = _a.onBack, title = _a.title, description = _a.description;
12
- var t = useTranslation().t;
12
+ var t = useI18n().t;
13
13
  return (jsx(MobilePageLayout, { footer: jsx(PageActions, { primary: jsx(Button, { variant: "secondary", onClick: onBack, children: t("buttons.back", "Retour") }) }), children: jsx("div", { className: "px-4 py-6 pt-11 md:px-8 md:py-8", children: jsxs("div", { className: "w-full max-w-md mx-auto space-y-6", children: [jsxs("div", { className: "text-center space-y-4", children: [jsx(Title, { className: "text-xl md:text-2xl lg:text-3xl", children: title || t("document_check.method_selection.title", "Choisissez une méthode") }), jsx(Subtitle, { className: "text-sm text-gray-600 leading-relaxed", children: description || t("document_check.method_selection.subtitle", "Comment souhaitez-vous ajouter votre document ?") })] }), jsxs("div", { className: "grid gap-4", children: [jsxs("button", { onClick: function () { return onMethodSelect("picture"); }, className: "flex items-center p-4 bg-white border-2 border-gray-100 rounded-xl hover:border-teal-500 transition-colors text-left group", children: [jsx("div", { className: "w-12 h-12 bg-teal-50 rounded-lg flex items-center justify-center text-teal-600 group-hover:bg-teal-100 transition-colors mr-4", children: jsx(Camera, { size: 24 }) }), jsxs("div", { children: [jsx("p", { className: "font-semibold text-gray-900", children: t("document_check.method_selection.picture_title", "Prendre une photo") }), jsx("p", { className: "text-sm text-gray-500", children: t("document_check.method_selection.picture_desc", "Utilisez l'appareil photo de votre appareil") })] })] }), jsxs("button", { onClick: function () { return onMethodSelect("download"); }, className: "flex items-center p-4 bg-white border-2 border-gray-100 rounded-xl hover:border-teal-500 transition-colors text-left group", children: [jsx("div", { className: "w-12 h-12 bg-teal-50 rounded-lg flex items-center justify-center text-teal-600 group-hover:bg-teal-100 transition-colors mr-4", children: jsx(Upload, { size: 24 }) }), jsxs("div", { children: [jsx("p", { className: "font-semibold text-gray-900", children: t("document_check.method_selection.download_title", "Téléverser un fichier") }), jsx("p", { className: "text-sm text-gray-500", children: t("document_check.method_selection.download_desc", "Sélectionnez un fichier sur votre appareil") })] })] })] })] }) }) }));
14
14
  };
15
15
 
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentCollectionMethodSelection.js","sources":["../../../../../src/components/document-collection/DocumentCollectionMethodSelection.tsx"],"sourcesContent":["import React from \"react\";\nimport { Camera, Upload } from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\ninterface DocumentCollectionMethodSelectionProps {\n onMethodSelect: (method: \"download\" | \"picture\") => void;\n onBack: () => void;\n title?: string;\n description?: string;\n}\n\nconst DocumentCollectionMethodSelection = ({\n onMethodSelect,\n onBack,\n title,\n description,\n}: DocumentCollectionMethodSelectionProps) => {\n const { t } = useTranslation();\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button variant=\"secondary\" onClick={onBack}>\n {t(\"buttons.back\", \"Retour\")}\n </Button>\n }\n />\n }\n >\n <div className=\"px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {title || t(\"document_check.method_selection.title\", \"Choisissez une méthode\")}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed\">\n {description || t(\"document_check.method_selection.subtitle\", \"Comment souhaitez-vous ajouter votre document ?\")}\n </Subtitle>\n </div>\n\n <div className=\"grid gap-4\">\n <button\n onClick={() => onMethodSelect(\"picture\")}\n className=\"flex items-center p-4 bg-white border-2 border-gray-100 rounded-xl hover:border-teal-500 transition-colors text-left group\"\n >\n <div className=\"w-12 h-12 bg-teal-50 rounded-lg flex items-center justify-center text-teal-600 group-hover:bg-teal-100 transition-colors mr-4\">\n <Camera size={24} />\n </div>\n <div>\n <p className=\"font-semibold text-gray-900\">\n {t(\"document_check.method_selection.picture_title\", \"Prendre une photo\")}\n </p>\n <p className=\"text-sm text-gray-500\">\n {t(\"document_check.method_selection.picture_desc\", \"Utilisez l'appareil photo de votre appareil\")}\n </p>\n </div>\n </button>\n\n <button\n onClick={() => onMethodSelect(\"download\")}\n className=\"flex items-center p-4 bg-white border-2 border-gray-100 rounded-xl hover:border-teal-500 transition-colors text-left group\"\n >\n <div className=\"w-12 h-12 bg-teal-50 rounded-lg flex items-center justify-center text-teal-600 group-hover:bg-teal-100 transition-colors mr-4\">\n <Upload size={24} />\n </div>\n <div>\n <p className=\"font-semibold text-gray-900\">\n {t(\"document_check.method_selection.download_title\", \"Téléverser un fichier\")}\n </p>\n <p className=\"text-sm text-gray-500\">\n {t(\"document_check.method_selection.download_desc\", \"Sélectionnez un fichier sur votre appareil\")}\n </p>\n </div>\n </button>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default DocumentCollectionMethodSelection;\n"],"names":["_jsx","_jsxs"],"mappings":";;;;;;;;;AAgBA,IAAM,iCAAiC,GAAG,UAAC,EAKF,EAAA;QAJrC,cAAc,GAAA,EAAA,CAAA,cAAA,EACd,MAAM,GAAA,EAAA,CAAA,MAAA,EACN,KAAK,GAAA,EAAA,CAAA,KAAA,EACL,WAAW,GAAA,EAAA,CAAA,WAAA;AAEH,IAAA,IAAA,CAAC,GAAK,cAAc,EAAE,EAArB;IAET,QACIA,IAAC,gBAAgB,EAAA,EACb,MAAM,EACFA,GAAA,CAAC,WAAW,EAAA,EACR,OAAO,EACHA,IAAC,MAAM,EAAA,EAAC,OAAO,EAAC,WAAW,EAAC,OAAO,EAAE,MAAM,EAAA,QAAA,EACtC,CAAC,CAAC,cAAc,EAAE,QAAQ,CAAC,EAAA,CACvB,EAAA,CAEf,YAGNA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAC5CC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,CAC9CA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,CAClCD,GAAA,CAAC,KAAK,EAAA,EAAC,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAC7C,KAAK,IAAI,CAAC,CAAC,uCAAuC,EAAE,wBAAwB,CAAC,EAAA,CAC1E,EACRA,GAAA,CAAC,QAAQ,EAAA,EAAC,SAAS,EAAC,uCAAuC,EAAA,QAAA,EACtD,WAAW,IAAI,CAAC,CAAC,0CAA0C,EAAE,iDAAiD,CAAC,EAAA,CACzG,CAAA,EAAA,CACT,EAENC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,YAAY,EAAA,QAAA,EAAA,CACvBA,IAAA,CAAA,QAAA,EAAA,EACI,OAAO,EAAE,YAAA,EAAM,OAAA,cAAc,CAAC,SAAS,CAAC,CAAA,CAAzB,CAAyB,EACxC,SAAS,EAAC,4HAA4H,EAAA,QAAA,EAAA,CAEtID,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,+HAA+H,EAAA,QAAA,EAC1IA,IAAC,MAAM,EAAA,EAAC,IAAI,EAAE,EAAE,EAAA,CAAI,EAAA,CAClB,EACNC,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACID,WAAG,SAAS,EAAC,6BAA6B,EAAA,QAAA,EACrC,CAAC,CAAC,+CAA+C,EAAE,mBAAmB,CAAC,EAAA,CACxE,EACJA,WAAG,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAC/B,CAAC,CAAC,8CAA8C,EAAE,6CAA6C,CAAC,EAAA,CACjG,CAAA,EAAA,CACF,IACD,EAETC,IAAA,CAAA,QAAA,EAAA,EACI,OAAO,EAAE,YAAA,EAAM,OAAA,cAAc,CAAC,UAAU,CAAC,CAAA,CAA1B,CAA0B,EACzC,SAAS,EAAC,4HAA4H,aAEtID,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,+HAA+H,EAAA,QAAA,EAC1IA,GAAA,CAAC,MAAM,EAAA,EAAC,IAAI,EAAE,EAAE,EAAA,CAAI,GAClB,EACNC,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACID,WAAG,SAAS,EAAC,6BAA6B,EAAA,QAAA,EACrC,CAAC,CAAC,gDAAgD,EAAE,uBAAuB,CAAC,EAAA,CAC7E,EACJA,WAAG,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAC/B,CAAC,CAAC,+CAA+C,EAAE,4CAA4C,CAAC,EAAA,CACjG,CAAA,EAAA,CACF,CAAA,EAAA,CACD,IACP,CAAA,EAAA,CACJ,EAAA,CACJ,EAAA,CACS;AAE3B;;;;"}
1
+ {"version":3,"file":"DocumentCollectionMethodSelection.js","sources":["../../../../../src/components/document-collection/DocumentCollectionMethodSelection.tsx"],"sourcesContent":["import React from \"react\";\nimport { Camera, Upload } from \"lucide-react\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\ninterface DocumentCollectionMethodSelectionProps {\n onMethodSelect: (method: \"download\" | \"picture\") => void;\n onBack: () => void;\n title?: string;\n description?: string;\n}\n\nconst DocumentCollectionMethodSelection = ({\n onMethodSelect,\n onBack,\n title,\n description,\n}: DocumentCollectionMethodSelectionProps) => {\n const { t } = useI18n();\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button variant=\"secondary\" onClick={onBack}>\n {t(\"buttons.back\", \"Retour\")}\n </Button>\n }\n />\n }\n >\n <div className=\"px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {title || t(\"document_check.method_selection.title\", \"Choisissez une méthode\")}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed\">\n {description || t(\"document_check.method_selection.subtitle\", \"Comment souhaitez-vous ajouter votre document ?\")}\n </Subtitle>\n </div>\n\n <div className=\"grid gap-4\">\n <button\n onClick={() => onMethodSelect(\"picture\")}\n className=\"flex items-center p-4 bg-white border-2 border-gray-100 rounded-xl hover:border-teal-500 transition-colors text-left group\"\n >\n <div className=\"w-12 h-12 bg-teal-50 rounded-lg flex items-center justify-center text-teal-600 group-hover:bg-teal-100 transition-colors mr-4\">\n <Camera size={24} />\n </div>\n <div>\n <p className=\"font-semibold text-gray-900\">\n {t(\"document_check.method_selection.picture_title\", \"Prendre une photo\")}\n </p>\n <p className=\"text-sm text-gray-500\">\n {t(\"document_check.method_selection.picture_desc\", \"Utilisez l'appareil photo de votre appareil\")}\n </p>\n </div>\n </button>\n\n <button\n onClick={() => onMethodSelect(\"download\")}\n className=\"flex items-center p-4 bg-white border-2 border-gray-100 rounded-xl hover:border-teal-500 transition-colors text-left group\"\n >\n <div className=\"w-12 h-12 bg-teal-50 rounded-lg flex items-center justify-center text-teal-600 group-hover:bg-teal-100 transition-colors mr-4\">\n <Upload size={24} />\n </div>\n <div>\n <p className=\"font-semibold text-gray-900\">\n {t(\"document_check.method_selection.download_title\", \"Téléverser un fichier\")}\n </p>\n <p className=\"text-sm text-gray-500\">\n {t(\"document_check.method_selection.download_desc\", \"Sélectionnez un fichier sur votre appareil\")}\n </p>\n </div>\n </button>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default DocumentCollectionMethodSelection;\n"],"names":["_jsx","_jsxs"],"mappings":";;;;;;;;;AAgBA,IAAM,iCAAiC,GAAG,UAAC,EAKF,EAAA;QAJrC,cAAc,GAAA,EAAA,CAAA,cAAA,EACd,MAAM,GAAA,EAAA,CAAA,MAAA,EACN,KAAK,GAAA,EAAA,CAAA,KAAA,EACL,WAAW,GAAA,EAAA,CAAA,WAAA;AAEH,IAAA,IAAA,CAAC,GAAK,OAAO,EAAE,EAAd;IAET,QACIA,IAAC,gBAAgB,EAAA,EACb,MAAM,EACFA,GAAA,CAAC,WAAW,EAAA,EACR,OAAO,EACHA,IAAC,MAAM,EAAA,EAAC,OAAO,EAAC,WAAW,EAAC,OAAO,EAAE,MAAM,EAAA,QAAA,EACtC,CAAC,CAAC,cAAc,EAAE,QAAQ,CAAC,EAAA,CACvB,EAAA,CAEf,YAGNA,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAC5CC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,mCAAmC,EAAA,QAAA,EAAA,CAC9CA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,CAClCD,GAAA,CAAC,KAAK,EAAA,EAAC,SAAS,EAAC,iCAAiC,EAAA,QAAA,EAC7C,KAAK,IAAI,CAAC,CAAC,uCAAuC,EAAE,wBAAwB,CAAC,EAAA,CAC1E,EACRA,GAAA,CAAC,QAAQ,EAAA,EAAC,SAAS,EAAC,uCAAuC,EAAA,QAAA,EACtD,WAAW,IAAI,CAAC,CAAC,0CAA0C,EAAE,iDAAiD,CAAC,EAAA,CACzG,CAAA,EAAA,CACT,EAENC,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,YAAY,EAAA,QAAA,EAAA,CACvBA,IAAA,CAAA,QAAA,EAAA,EACI,OAAO,EAAE,YAAA,EAAM,OAAA,cAAc,CAAC,SAAS,CAAC,CAAA,CAAzB,CAAyB,EACxC,SAAS,EAAC,4HAA4H,EAAA,QAAA,EAAA,CAEtID,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,+HAA+H,EAAA,QAAA,EAC1IA,IAAC,MAAM,EAAA,EAAC,IAAI,EAAE,EAAE,EAAA,CAAI,EAAA,CAClB,EACNC,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACID,WAAG,SAAS,EAAC,6BAA6B,EAAA,QAAA,EACrC,CAAC,CAAC,+CAA+C,EAAE,mBAAmB,CAAC,EAAA,CACxE,EACJA,WAAG,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAC/B,CAAC,CAAC,8CAA8C,EAAE,6CAA6C,CAAC,EAAA,CACjG,CAAA,EAAA,CACF,IACD,EAETC,IAAA,CAAA,QAAA,EAAA,EACI,OAAO,EAAE,YAAA,EAAM,OAAA,cAAc,CAAC,UAAU,CAAC,CAAA,CAA1B,CAA0B,EACzC,SAAS,EAAC,4HAA4H,aAEtID,GAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,+HAA+H,EAAA,QAAA,EAC1IA,GAAA,CAAC,MAAM,EAAA,EAAC,IAAI,EAAE,EAAE,EAAA,CAAI,GAClB,EACNC,IAAA,CAAA,KAAA,EAAA,EAAA,QAAA,EAAA,CACID,WAAG,SAAS,EAAC,6BAA6B,EAAA,QAAA,EACrC,CAAC,CAAC,gDAAgD,EAAE,uBAAuB,CAAC,EAAA,CAC7E,EACJA,WAAG,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAC/B,CAAC,CAAC,+CAA+C,EAAE,4CAA4C,CAAC,EAAA,CACjG,CAAA,EAAA,CACF,CAAA,EAAA,CACD,IACP,CAAA,EAAA,CACJ,EAAA,CACJ,EAAA,CACS;AAE3B;;;;"}
@@ -5,12 +5,12 @@ import Subtitle from '../ui/Subtitle.js';
5
5
  import Button from '../ui/Button.js';
6
6
  import PageActions from '../ui/PageActions.js';
7
7
  import { Select } from '../ui/SelectComponent.js';
8
- import { useTranslation } from 'react-i18next';
8
+ import { useI18n } from '../../hooks/useI18n.js';
9
9
  import MobilePageLayout from '../ui/MobilePageLayout.js';
10
10
 
11
11
  var DocumentCollectionSelection = function (_a) {
12
12
  var onContinue = _a.onContinue, onBack = _a.onBack, allowedDocumentTypes = _a.allowedDocumentTypes; _a.allowedAddingMethods; _a.stepObject; var documentSelection = _a.documentSelection;
13
- var t = useTranslation().t;
13
+ var t = useI18n().t;
14
14
  var _b = useState(""), selectedDocumentType = _b[0], setSelectedDocumentType = _b[1];
15
15
  useEffect(function () {
16
16
  if (allowedDocumentTypes.length > 0 && !selectedDocumentType) {
@@ -18,9 +18,9 @@ var DocumentCollectionSelection = function (_a) {
18
18
  }
19
19
  }, [allowedDocumentTypes, selectedDocumentType]);
20
20
  var title = (documentSelection === null || documentSelection === void 0 ? void 0 : documentSelection.title) ||
21
- t("document_upload.selection_title", "Sélection des documents");
21
+ t("document_upload.selection_title");
22
22
  var description = (documentSelection === null || documentSelection === void 0 ? void 0 : documentSelection.description) ||
23
- t("document_upload.selection_description", "Choisissez le type de document que vous souhaitez transmettre.");
23
+ t("document_upload.selection_description");
24
24
  var documentOptions = allowedDocumentTypes.map(function (docType) { return ({
25
25
  value: docType.id,
26
26
  label: t(docType.name) || docType.name,
@@ -30,7 +30,7 @@ var DocumentCollectionSelection = function (_a) {
30
30
  onContinue(selectedDocumentType);
31
31
  }
32
32
  };
33
- return (jsx(MobilePageLayout, { footer: jsx(PageActions, { primary: jsx(Button, { onClick: handleContinueAction, disabled: !selectedDocumentType, children: t("buttons.continue", "Continuer") }), secondary: jsx(Button, { variant: "secondary", onClick: onBack, children: t("processing.back", "Retour") }) }), children: jsx("div", { className: "flex-1 flex items-center justify-center p-4", children: jsxs("div", { className: "w-full max-w-lg", children: [jsxs("div", { className: "text-center mb-8", children: [jsx(Title, { className: "text-2xl md:text-3xl font-bold text-gray-900 mb-2", children: title }), jsx(Subtitle, { className: "text-gray-600 whitespace-pre-line", children: description })] }), jsxs("div", { className: "mb-6", children: [jsx("label", { className: "block text-sm font-medium text-gray-700 mb-2", children: t("document_selection.label_identity", "Type de document *") }), jsx(Select, { options: documentOptions, value: selectedDocumentType, onValueChange: function (value) { return setSelectedDocumentType(value); }, placeholder: t("document_selection.placeholder_identity", "Choisissez le type de document") })] }), selectedDocumentType && (jsxs("div", { className: "bg-gray-50 border border-gray-200 rounded-lg p-4 mb-6", children: [jsx("h3", { className: "font-medium text-gray-900 mb-2", children: t("jdi.document_selection.info_title", "Informations importantes") }), jsxs("div", { className: "text-sm text-gray-700 space-y-1", children: [jsx("p", { children: t("jdi.document_upload.info_point1", "• Assurez-vous que le document est lisible et de bonne qualité") }), jsx("p", { children: t("jdi.document_upload.info_point2", "• Toutes les informations doivent être clairement visibles") }), jsx("p", { children: t("jdi.document_upload.info_point3", "• Le document doit être récent et valide") })] })] }))] }) }) }));
33
+ return (jsx(MobilePageLayout, { footer: jsx(PageActions, { primary: jsx(Button, { onClick: handleContinueAction, disabled: !selectedDocumentType, children: t("buttons.continue") }), secondary: jsx(Button, { variant: "secondary", onClick: onBack, children: t("buttons.back") }) }), children: jsx("div", { className: "flex-1 flex items-start justify-center md:items-center p-4", children: jsxs("div", { className: "w-full max-w-lg", children: [jsxs("div", { className: "text-center mb-8", children: [jsx(Title, { className: "text-2xl md:text-3xl font-bold text-gray-900 mb-2", children: title }), jsx(Subtitle, { className: "text-gray-600 whitespace-pre-line", children: description })] }), jsxs("div", { className: "mb-6", children: [jsx("label", { className: "block text-sm font-medium text-gray-700 mb-2", children: t("jdi.document_selection.label_identity") }), jsx(Select, { options: documentOptions, value: selectedDocumentType, onValueChange: function (value) { return setSelectedDocumentType(value); }, placeholder: t("jdi.document_selection.placeholder_identity") })] }), selectedDocumentType && (jsxs("div", { className: "bg-gray-50 border border-gray-200 rounded-lg p-4 mb-6", children: [jsx("h3", { className: "font-medium text-gray-900 mb-2", children: t("jdi.document_selection.info_title") }), jsxs("div", { className: "text-sm text-gray-700 space-y-1", children: [jsx("p", { children: t("jdi.document_upload.info_point1") }), jsx("p", { children: t("jdi.document_upload.info_point2") }), jsx("p", { children: t("jdi.document_upload.info_point3") })] })] }))] }) }) }));
34
34
  };
35
35
 
36
36
  export { DocumentCollectionSelection as default };
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentCollectionSelection.js","sources":["../../../../../src/components/document-collection/DocumentCollectionSelection.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { Select } from \"../ui/SelectComponent\";\nimport { useTranslation } from \"react-i18next\";\nimport { DocumentTypeSide } from \"./DocumentCollection\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { stepObject } from \"../../types/session\";\nimport { Card } from \"../ui/Card\";\nimport { Upload } from \"lucide-react\";\nimport PDFPreview from \"../ui/PDFPreview\";\nimport type { onUploadFiles } from \"../../types/uploadFiles\";\n\ninterface AllowedDocumentType {\n id: string;\n name: string;\n side?: DocumentTypeSide;\n}\n\ninterface DocumentCollectionSelectionProps {\n onContinue: (selectedDocumentType: string, files?: onUploadFiles) => void;\n onBack: () => void;\n allowedDocumentTypes: AllowedDocumentType[];\n allowedAddingMethods: string[];\n stepObject?: stepObject;\n documentSelection?: {\n title?: string;\n description?: string;\n };\n}\n\nconst DocumentCollectionSelection = ({\n onContinue,\n onBack,\n allowedDocumentTypes,\n allowedAddingMethods,\n stepObject,\n documentSelection,\n}: DocumentCollectionSelectionProps) => {\n const { t } = useTranslation();\n const [selectedDocumentType, setSelectedDocumentType] = useState<string>(\"\");\n\n useEffect(() => {\n if (allowedDocumentTypes.length > 0 && !selectedDocumentType) {\n setSelectedDocumentType(allowedDocumentTypes[0].id);\n }\n }, [allowedDocumentTypes, selectedDocumentType]);\n\n const title =\n documentSelection?.title ||\n t(\"document_upload.selection_title\", \"Sélection des documents\");\n const description =\n documentSelection?.description ||\n t(\"document_upload.selection_description\", \"Choisissez le type de document que vous souhaitez transmettre.\");\n\n const documentOptions = allowedDocumentTypes.map((docType) => ({\n value: docType.id,\n label: t(docType.name) || docType.name,\n }));\n\n const handleContinueAction = () => {\n if (selectedDocumentType) {\n onContinue(selectedDocumentType);\n }\n };\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button onClick={handleContinueAction} disabled={!selectedDocumentType}>\n {t(\"buttons.continue\", \"Continuer\")}\n </Button>\n }\n secondary={\n <Button variant=\"secondary\" onClick={onBack}>\n {t(\"processing.back\", \"Retour\")}\n </Button>\n }\n />\n }\n >\n <div className=\"flex-1 flex items-center justify-center p-4\">\n <div className=\"w-full max-w-lg\">\n <div className=\"text-center mb-8\">\n <Title className=\"text-2xl md:text-3xl font-bold text-gray-900 mb-2\">\n {title}\n </Title>\n <Subtitle className=\"text-gray-600 whitespace-pre-line\">{description}</Subtitle>\n </div>\n\n {/* Document Type Selection */}\n <div className=\"mb-6\">\n <label className=\"block text-sm font-medium text-gray-700 mb-2\">\n {t(\"document_selection.label_identity\", \"Type de document *\")}\n </label>\n <Select\n options={documentOptions}\n value={selectedDocumentType}\n onValueChange={(value) => setSelectedDocumentType(value)}\n placeholder={t(\"document_selection.placeholder_identity\", \"Choisissez le type de document\")}\n />\n </div>\n\n {/* Information about selected document */}\n {selectedDocumentType && (\n <div className=\"bg-gray-50 border border-gray-200 rounded-lg p-4 mb-6\">\n <h3 className=\"font-medium text-gray-900 mb-2\">\n {t(\n \"jdi.document_selection.info_title\",\n \"Informations importantes\",\n )}\n </h3>\n <div className=\"text-sm text-gray-700 space-y-1\">\n <p>\n {t(\n \"jdi.document_upload.info_point1\",\n \"• Assurez-vous que le document est lisible et de bonne qualité\",\n )}\n </p>\n <p>\n {t(\n \"jdi.document_upload.info_point2\",\n \"• Toutes les informations doivent être clairement visibles\",\n )}\n </p>\n <p>\n {t(\n \"jdi.document_upload.info_point3\",\n \"• Le document doit être récent et valide\",\n )}\n </p>\n </div>\n </div>\n )}\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default DocumentCollectionSelection;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"DocumentCollectionSelection.js","sources":["../../../../../src/components/document-collection/DocumentCollectionSelection.tsx"],"sourcesContent":["import React, { useState, useEffect, useRef } from \"react\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport { Select } from \"../ui/SelectComponent\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport { DocumentTypeSide } from \"./DocumentCollection\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { stepObject } from \"../../types/session\";\nimport { Card } from \"../ui/Card\";\nimport { Upload } from \"lucide-react\";\nimport PDFPreview from \"../ui/PDFPreview\";\nimport type { onUploadFiles } from \"../../types/uploadFiles\";\n\ninterface AllowedDocumentType {\n id: string;\n name: string;\n side?: DocumentTypeSide;\n}\n\ninterface DocumentCollectionSelectionProps {\n onContinue: (selectedDocumentType: string, files?: onUploadFiles) => void;\n onBack: () => void;\n allowedDocumentTypes: AllowedDocumentType[];\n allowedAddingMethods: string[];\n stepObject?: stepObject;\n documentSelection?: {\n title?: string;\n description?: string;\n };\n}\n\nconst DocumentCollectionSelection = ({\n onContinue,\n onBack,\n allowedDocumentTypes,\n allowedAddingMethods,\n stepObject,\n documentSelection,\n}: DocumentCollectionSelectionProps) => {\n const { t } = useI18n();\n const [selectedDocumentType, setSelectedDocumentType] = useState<string>(\"\");\n\n useEffect(() => {\n if (allowedDocumentTypes.length > 0 && !selectedDocumentType) {\n setSelectedDocumentType(allowedDocumentTypes[0].id);\n }\n }, [allowedDocumentTypes, selectedDocumentType]);\n\n const title =\n documentSelection?.title ||\n t(\"document_upload.selection_title\");\n const description =\n documentSelection?.description ||\n t(\"document_upload.selection_description\");\n\n const documentOptions = allowedDocumentTypes.map((docType) => ({\n value: docType.id,\n label: t(docType.name) || docType.name,\n }));\n\n const handleContinueAction = () => {\n if (selectedDocumentType) {\n onContinue(selectedDocumentType);\n }\n };\n\n return (\n <MobilePageLayout\n footer={\n <PageActions\n primary={\n <Button onClick={handleContinueAction} disabled={!selectedDocumentType}>\n {t(\"buttons.continue\")}\n </Button>\n }\n secondary={\n <Button variant=\"secondary\" onClick={onBack}>\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 <Title className=\"text-2xl md:text-3xl font-bold text-gray-900 mb-2\">\n {title}\n </Title>\n <Subtitle className=\"text-gray-600 whitespace-pre-line\">{description}</Subtitle>\n </div>\n\n {/* Document Type Selection */}\n <div className=\"mb-6\">\n <label className=\"block text-sm font-medium text-gray-700 mb-2\">\n {t(\"jdi.document_selection.label_identity\")}\n </label>\n <Select\n options={documentOptions}\n value={selectedDocumentType}\n onValueChange={(value) => setSelectedDocumentType(value)}\n placeholder={t(\"jdi.document_selection.placeholder_identity\")}\n />\n </div>\n\n {/* Information about selected document */}\n {selectedDocumentType && (\n <div className=\"bg-gray-50 border border-gray-200 rounded-lg p-4 mb-6\">\n <h3 className=\"font-medium text-gray-900 mb-2\">\n {t(\"jdi.document_selection.info_title\")}\n </h3>\n <div className=\"text-sm text-gray-700 space-y-1\">\n <p>{t(\"jdi.document_upload.info_point1\")}</p>\n <p>{t(\"jdi.document_upload.info_point2\")}</p>\n <p>{t(\"jdi.document_upload.info_point3\")}</p>\n </div>\n </div>\n )}\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default DocumentCollectionSelection;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -6,12 +6,12 @@ import PageActions from '../ui/PageActions.js';
6
6
  import { Card } from '../ui/Card.js';
7
7
  import { Upload } from 'lucide-react';
8
8
  import PDFPreview from '../ui/PDFPreview.js';
9
- import { useTranslation } from 'react-i18next';
9
+ import { useI18n } from '../../hooks/useI18n.js';
10
10
  import MobilePageLayout from '../ui/MobilePageLayout.js';
11
11
 
12
12
  var DocumentCollectionUpload = function (_a) {
13
13
  var onUpload = _a.onUpload, onBack = _a.onBack, selectedDocumentType = _a.selectedDocumentType, allowedDocumentTypes = _a.allowedDocumentTypes; _a.documentSelection;
14
- var t = useTranslation().t;
14
+ var t = useI18n().t;
15
15
  var _b = useState(null), frontImage = _b[0], setFrontImage = _b[1];
16
16
  var _c = useState(null), backImage = _c[0], setBackImage = _c[1];
17
17
  var _d = useState(false), frontIsPDF = _d[0], setFrontIsPDF = _d[1];
@@ -40,11 +40,11 @@ var DocumentCollectionUpload = function (_a) {
40
40
  return;
41
41
  if (!file.type.startsWith("image/") &&
42
42
  !file.type.startsWith("application/pdf")) {
43
- setError(t("document_upload.errors.invalid_file_type", "Veuillez sélectionner un fichier image ou PDF valide"));
43
+ setError(t("document_upload.errors.invalid_file_type"));
44
44
  return;
45
45
  }
46
46
  if (file.size > 10 * 1024 * 1024) {
47
- setError(t("document_upload.errors.file_too_large", "Le fichier ne doit pas dépasser 10MB"));
47
+ setError(t("document_upload.errors.file_too_large"));
48
48
  return;
49
49
  }
50
50
  setError("");
@@ -70,7 +70,7 @@ var DocumentCollectionUpload = function (_a) {
70
70
  return;
71
71
  var maxFiles = requiresTwoSides() ? 2 : 1;
72
72
  if (files.length > maxFiles) {
73
- setError(t("document_upload.errors.max_files", "Veuillez s\u00E9lectionner maximum ".concat(maxFiles, " fichier${maxFiles > 1 ? \"s\" : \"\"}")));
73
+ setError(t("document_upload.errors.max_files"));
74
74
  return;
75
75
  }
76
76
  setError("");
@@ -106,7 +106,7 @@ var DocumentCollectionUpload = function (_a) {
106
106
  return __generator(this, function (_a) {
107
107
  setError("");
108
108
  if (!frontImage) {
109
- setError(t("jdi.errors.add_photo_identity", "Veuillez ajouter une photo du recto"));
109
+ setError(t("jdi.document_upload.errors.add_photo_identity"));
110
110
  return [2 /*return*/];
111
111
  }
112
112
  setIsUploading(true);
@@ -137,23 +137,23 @@ var DocumentCollectionUpload = function (_a) {
137
137
  setError("");
138
138
  };
139
139
  return (jsx(MobilePageLayout, { footer: jsx(PageActions, { primary: jsx(Button, { onClick: handleUpload, disabled: !frontImage || isUploading, children: isUploading
140
- ? t("processing.download", "Téléchargement...")
140
+ ? t("jdi.processing.download")
141
141
  : requiresTwoSides()
142
- ? t("processing.validate_documents", "Valider les documents")
143
- : t("processing.validate_document", "Valider le document") }), secondary: jsx(Button, { variant: "secondary", onClick: onBack, disabled: isUploading, children: t("processing.back", "Retour") }) }), children: jsx("div", { className: "flex-1 flex items-center justify-center p-4", children: jsxs("div", { className: "w-full max-w-lg", children: [jsxs("div", { className: "text-center mb-8", children: [jsx("h1", { className: "text-2xl md:text-3xl font-bold text-gray-900 mb-2", children: t("document_upload.upload_title", "Ajoutez votre document") }), jsx("p", { className: "text-gray-600", children: t("document_upload.upload_description", "Veuillez sélectionner le fichier correspondant au document choisi.") })] }), error && (jsx("div", { className: "mb-6 p-4 bg-red-50 border border-red-200 rounded-lg text-sm text-red-700", children: error })), jsx(Card, { className: "border-2 border-dashed border-teal-300 bg-teal-50/30 p-8 mb-6 text-center", onDragOver: function (e) { return e.preventDefault(); }, onDrop: function (e) {
142
+ ? t("jdi.document_upload.validate_multiple")
143
+ : t("jdi.document_upload.validate_single") }), secondary: jsx(Button, { variant: "secondary", onClick: onBack, disabled: isUploading, children: t("buttons.back") }) }), children: jsx("div", { className: "flex-1 flex items-start justify-center md:items-center p-4", children: jsxs("div", { className: "w-full max-w-lg", children: [jsxs("div", { className: "text-center mb-8", children: [jsx("h1", { className: "text-2xl md:text-3xl font-bold text-gray-900 mb-2", children: t("document_upload.upload_title") }), jsx("p", { className: "text-gray-600", children: t("document_upload.upload_description") })] }), error && (jsx("div", { className: "mb-6 p-4 bg-red-50 border border-red-200 rounded-lg text-sm text-red-700", children: error })), jsx(Card, { className: "border-2 border-dashed border-teal-300 bg-teal-50/30 p-8 mb-6 text-center", onDragOver: function (e) { return e.preventDefault(); }, onDrop: function (e) {
144
144
  e.preventDefault();
145
145
  var files = e.dataTransfer.files;
146
146
  if (files.length > 0) {
147
147
  var syntheticEvent = { target: { files: files } };
148
148
  requiresTwoSides() ? handleMultipleFileChange(syntheticEvent) : handleFileChange(syntheticEvent);
149
149
  }
150
- }, children: !frontImage ? (jsxs("div", { className: "space-y-6", children: [jsx("h3", { className: "text-lg font-semibold text-gray-900", children: getSelectedDocumentName() }), jsxs(Button, { onClick: function () { var _a, _b; return requiresTwoSides() ? (_a = multipleInputRef.current) === null || _a === void 0 ? void 0 : _a.click() : (_b = frontInputRef.current) === null || _b === void 0 ? void 0 : _b.click(); }, 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", disabled: isUploading, children: [jsx(Upload, { size: 18 }), jsx("span", { children: t("document_upload.browse_files", "Parcourir mes fichiers") })] }), jsxs("div", { className: "text-xs text-gray-500 space-y-1", children: [jsx("p", { children: t("document_upload.accepted_formats", "Formats PDF, PNG, JPG acceptés (max 10MB)") }), jsx("p", { children: requiresTwoSides() ? t("document_upload.multiple_files_info", "Jusqu'à 2 fichiers") : t("document_upload.single_file_info", "Jusqu'à 1 fichier") })] })] })) : (jsxs("div", { className: "space-y-4", children: [jsxs("div", { className: "bg-white border rounded-lg p-4 relative group", children: [jsx("p", { className: "text-sm font-medium mb-1", children: frontIsPDF ? "Document PDF" : "Image" }), frontIsPDF ? jsx(PDFPreview, { src: frontImage }) : jsx("img", { src: frontImage, alt: "Recto", className: "max-h-48 mx-auto" }), jsx("button", { onClick: function () { return removeImage("front"); }, className: "absolute top-2 right-2 text-red-500 hover:text-red-700", children: "\u2715" })] }), requiresTwoSides() && backImage && (jsxs("div", { className: "bg-white border rounded-lg p-4 relative group", children: [jsx("p", { className: "text-sm font-medium mb-1", children: backIsPDF ? "Verso PDF" : "Verso Image" }), backIsPDF ? jsx(PDFPreview, { src: backImage }) : jsx("img", { src: backImage, alt: "Verso", className: "max-h-48 mx-auto" }), jsx("button", { onClick: function () { return removeImage("back"); }, className: "absolute top-2 right-2 text-red-500 hover:text-red-700", children: "\u2715" })] })), requiresTwoSides() && !backImage && (jsx(Button, { onClick: function () {
150
+ }, children: !frontImage ? (jsxs("div", { className: "space-y-6", children: [jsx("h3", { className: "text-lg font-semibold text-gray-900", children: getSelectedDocumentName() }), jsxs(Button, { onClick: function () { var _a, _b; return requiresTwoSides() ? (_a = multipleInputRef.current) === null || _a === void 0 ? void 0 : _a.click() : (_b = frontInputRef.current) === null || _b === void 0 ? void 0 : _b.click(); }, 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", disabled: isUploading, children: [jsx(Upload, { size: 18 }), jsx("span", { children: t("document_upload.browse_files") })] }), jsxs("div", { className: "text-xs text-gray-500 space-y-1", children: [jsx("p", { children: t("document_upload.accepted_formats") }), jsx("p", { children: requiresTwoSides() ? t("document_upload.multiple_files_info") : t("document_upload.single_file_info") })] })] })) : (jsxs("div", { className: "space-y-4", children: [jsxs("div", { className: "bg-white border rounded-lg p-4 relative group", children: [jsx("p", { className: "text-sm font-medium mb-1", children: frontIsPDF ? t("document_upload.pdf_preview") : t("document_upload.image_preview") }), frontIsPDF ? jsx(PDFPreview, { src: frontImage }) : jsx("img", { src: frontImage, alt: t("document_upload.front_side"), className: "max-h-48 mx-auto" }), jsx("button", { onClick: function () { return removeImage("front"); }, className: "absolute top-2 right-2 text-red-500 hover:text-red-700", children: "\u2715" })] }), requiresTwoSides() && backImage && (jsxs("div", { className: "bg-white border rounded-lg p-4 relative group", children: [jsxs("p", { className: "text-sm font-medium mb-1", children: [t("document_upload.back_side"), " ", backIsPDF ? "PDF" : ""] }), backIsPDF ? jsx(PDFPreview, { src: backImage }) : jsx("img", { src: backImage, alt: t("document_upload.back_side"), className: "max-h-48 mx-auto" }), jsx("button", { onClick: function () { return removeImage("back"); }, className: "absolute top-2 right-2 text-red-500 hover:text-red-700", children: "\u2715" })] })), requiresTwoSides() && !backImage && (jsx(Button, { onClick: function () {
151
151
  var input = document.createElement("input");
152
152
  input.type = "file";
153
153
  input.accept = "image/*,.pdf";
154
154
  input.onchange = function (e) { return handleFileChange(e, "back"); };
155
155
  input.click();
156
- }, className: "text-teal-600 border border-teal-600 bg-transparent hover:bg-teal-50 w-full", children: t("document_upload.add_back", "Ajouter le verso") }))] })) }), jsx("input", { ref: frontInputRef, type: "file", accept: "image/*,.pdf", onChange: function (e) { return handleFileChange(e, "front"); }, className: "hidden" }), jsx("input", { ref: multipleInputRef, type: "file", accept: "image/*,.pdf", multiple: true, onChange: handleMultipleFileChange, className: "hidden" })] }) }) }));
156
+ }, className: "text-teal-600 border border-teal-600 bg-transparent hover:bg-teal-50 w-full", children: t("document_upload.add_back") }))] })) }), jsx("input", { ref: frontInputRef, type: "file", accept: "image/*,.pdf", onChange: function (e) { return handleFileChange(e, "front"); }, className: "hidden" }), jsx("input", { ref: multipleInputRef, type: "file", accept: "image/*,.pdf", multiple: true, onChange: handleMultipleFileChange, className: "hidden" })] }) }) }));
157
157
  };
158
158
 
159
159
  export { DocumentCollectionUpload as default };