datakeen-session-react 1.1.140-dev.96 → 1.1.140-oid4vp-demo.0

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 (76) hide show
  1. package/.gitlab-ci.yml +37 -0
  2. package/dist/cjs/components/document-collection/DocumentCollection.js +132 -22
  3. package/dist/cjs/components/document-collection/DocumentCollection.js.map +1 -1
  4. package/dist/cjs/components/session/DocumentCheck.js +112 -15
  5. package/dist/cjs/components/session/DocumentCheck.js.map +1 -1
  6. package/dist/cjs/components/session/UserInputForm/LegalRepFields.js +45 -0
  7. package/dist/cjs/components/session/UserInputForm/LegalRepFields.js.map +1 -0
  8. package/dist/cjs/components/session/UserInputForm.js +2 -1
  9. package/dist/cjs/components/session/UserInputForm.js.map +1 -1
  10. package/dist/cjs/components/template/TemplateNodeRenderer.js +5 -1
  11. package/dist/cjs/components/template/TemplateNodeRenderer.js.map +1 -1
  12. package/dist/cjs/components/wallet/AgeControl.js +75 -0
  13. package/dist/cjs/components/wallet/AgeControl.js.map +1 -0
  14. package/dist/cjs/components/wallet/WalletProposal.js +27 -0
  15. package/dist/cjs/components/wallet/WalletProposal.js.map +1 -0
  16. package/dist/cjs/components/wallet/WalletSuccessAnimation.js +37 -0
  17. package/dist/cjs/components/wallet/WalletSuccessAnimation.js.map +1 -0
  18. package/dist/cjs/components/wallet/WalletVerificationStep.js +132 -0
  19. package/dist/cjs/components/wallet/WalletVerificationStep.js.map +1 -0
  20. package/dist/cjs/constants/userInputForm.js +2 -2
  21. package/dist/cjs/constants/userInputForm.js.map +1 -1
  22. package/dist/cjs/hooks/useUserInputForm.js +17 -1
  23. package/dist/cjs/hooks/useUserInputForm.js.map +1 -1
  24. package/dist/cjs/hooks/useWalletSseStatus.js +67 -0
  25. package/dist/cjs/hooks/useWalletSseStatus.js.map +1 -0
  26. package/dist/cjs/i18n/documents/documents.en.json.js +3 -0
  27. package/dist/cjs/i18n/documents/documents.en.json.js.map +1 -1
  28. package/dist/cjs/i18n/documents/documents.fr.json.js +3 -0
  29. package/dist/cjs/i18n/documents/documents.fr.json.js.map +1 -1
  30. package/dist/cjs/i18n/en.json.js +36 -2
  31. package/dist/cjs/i18n/en.json.js.map +1 -1
  32. package/dist/cjs/i18n/fr.json.js +36 -2
  33. package/dist/cjs/i18n/fr.json.js.map +1 -1
  34. package/dist/cjs/services/sessionService.js +57 -0
  35. package/dist/cjs/services/sessionService.js.map +1 -1
  36. package/dist/cjs/types/session.js.map +1 -1
  37. package/dist/cjs/utils/userInputForm.js +1 -0
  38. package/dist/cjs/utils/userInputForm.js.map +1 -1
  39. package/dist/esm/components/document-collection/DocumentCollection.js +132 -22
  40. package/dist/esm/components/document-collection/DocumentCollection.js.map +1 -1
  41. package/dist/esm/components/session/DocumentCheck.js +113 -16
  42. package/dist/esm/components/session/DocumentCheck.js.map +1 -1
  43. package/dist/esm/components/session/UserInputForm/LegalRepFields.js +22 -0
  44. package/dist/esm/components/session/UserInputForm/LegalRepFields.js.map +1 -0
  45. package/dist/esm/components/session/UserInputForm.js +2 -1
  46. package/dist/esm/components/session/UserInputForm.js.map +1 -1
  47. package/dist/esm/components/template/TemplateNodeRenderer.js +5 -1
  48. package/dist/esm/components/template/TemplateNodeRenderer.js.map +1 -1
  49. package/dist/esm/components/wallet/AgeControl.js +71 -0
  50. package/dist/esm/components/wallet/AgeControl.js.map +1 -0
  51. package/dist/esm/components/wallet/WalletProposal.js +23 -0
  52. package/dist/esm/components/wallet/WalletProposal.js.map +1 -0
  53. package/dist/esm/components/wallet/WalletSuccessAnimation.js +33 -0
  54. package/dist/esm/components/wallet/WalletSuccessAnimation.js.map +1 -0
  55. package/dist/esm/components/wallet/WalletVerificationStep.js +128 -0
  56. package/dist/esm/components/wallet/WalletVerificationStep.js.map +1 -0
  57. package/dist/esm/constants/userInputForm.js +2 -2
  58. package/dist/esm/constants/userInputForm.js.map +1 -1
  59. package/dist/esm/hooks/useUserInputForm.js +17 -1
  60. package/dist/esm/hooks/useUserInputForm.js.map +1 -1
  61. package/dist/esm/hooks/useWalletSseStatus.js +65 -0
  62. package/dist/esm/hooks/useWalletSseStatus.js.map +1 -0
  63. package/dist/esm/i18n/documents/documents.en.json.js +3 -1
  64. package/dist/esm/i18n/documents/documents.en.json.js.map +1 -1
  65. package/dist/esm/i18n/documents/documents.fr.json.js +3 -1
  66. package/dist/esm/i18n/documents/documents.fr.json.js.map +1 -1
  67. package/dist/esm/i18n/en.json.js +35 -3
  68. package/dist/esm/i18n/en.json.js.map +1 -1
  69. package/dist/esm/i18n/fr.json.js +35 -3
  70. package/dist/esm/i18n/fr.json.js.map +1 -1
  71. package/dist/esm/services/sessionService.js +55 -1
  72. package/dist/esm/services/sessionService.js.map +1 -1
  73. package/dist/esm/types/session.js.map +1 -1
  74. package/dist/esm/utils/userInputForm.js +1 -0
  75. package/dist/esm/utils/userInputForm.js.map +1 -1
  76. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"DocumentCheck.js","sources":["../../../../../src/components/session/DocumentCheck.tsx"],"sourcesContent":["import { useState, useEffect, useMemo, useRef } from \"react\";\nimport type {\n AcceptedCountry,\n stepObject,\n SessionTemplate,\n} from \"../../types/session\";\nimport JDIPreIntroduction from \"../jdi/JDIPreIntroduction\";\nimport JDICountrySelection from \"../jdi/JDICountrySelection\";\nimport JDIDocumentSelection from \"../jdi/JDIDocumentSelection\";\nimport JDIDocumentUpload from \"../jdi/JDIDocumentUpload\";\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 DocumentVideoCapture from \"../document-video/DocumentVideoCapture\";\nimport { Camera, Upload } from \"lucide-react\";\nimport { useDocumentContext } from \"../../context/DocumentContext\";\nimport type { onUploadFiles } from \"../../types/uploadFiles\";\nimport type { Prediction } from \"../../utils/apiAnalysis\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport {\n logDocumentTypeSelected,\n logCaptureModeSelected,\n logPhotoCaptured,\n logPhotosValidated,\n logDocumentLoaded,\n logDocumentsValidated,\n} from \"../../services/auditTrailService\";\nimport ButtonDesktop from \"../ui/ButtonDesktop\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { ISO_COUNTRY_CODES } from \"../../utils/isoCountryCodes\";\nimport {\n DocumentTemplate,\n FetchedDocumentTemplates,\n getAllDocumentTemplates,\n getDocTypeKey,\n getDocumentTemplateId,\n} from \"../../services/documentTemplate\";\nimport { UserInput } from \"../../types/userInput\";\nimport {\n resizeAfterCapture,\n dataUrlToBlob,\n blobToDataUrl,\n} from \"../../utils/imageProcessing\";\nimport {\n getNodeRetryCount,\n incrementNodeRetryCount,\n} from \"../../services/retryService\";\nimport { getSession } from \"../../context/SessionContext\";\nimport {\n updateSessionUserInput,\n skipNfcWithReason,\n} from \"../../services/sessionService\";\nimport NfcScanStep from \"../nfc-scan/NfcScanNode\";\nimport NfcChipGate from \"../nfc-scan/NfcChipGate\";\nimport NfcFallbackSurvey from \"../nfc-scan/NfcFallbackSurvey\";\n\nexport interface CountryDocuments {\n code: string;\n documents: {\n passport: string[];\n idCard: string[];\n residencePermit: string[];\n driverLicense: string[];\n pinkDriverLicense: string[];\n };\n}\n\nexport interface NodeIdentityControl {\n id: string;\n acceptedCountries: CountryDocuments[];\n automaticPhotoCapture?: boolean;\n withVideo?: boolean;\n nfcEnabled?: boolean;\n // \"nfcAndApi\" reste accepté pour rétrocompat (parcours legacy), normalisé via normalizeNfcMode.\n nfcMode?: \"nfcOnly\" | \"nfcOrPhoto\" | \"nfcAndApi\";\n allowedAddingMethods?: string[];\n introductionPage?: {\n title: string;\n description: string;\n };\n countrySelection?: {\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 DocumentCheckProps {\n stepObject: stepObject;\n sessionId: string;\n node: NodeIdentityControl;\n onContinueOnPC?: () => void;\n documentTypeId: string;\n acceptedCountries?: AcceptedCountry[];\n isMobileCapture?: boolean;\n allowedAddingMethods?: string[];\n template?: SessionTemplate;\n templateIndex?: number;\n setUserInput: React.Dispatch<React.SetStateAction<UserInput>>;\n}\n\nimport { EUROPEAN_COUNTRY_CODES } from \"../../utils/europeanCountries\";\n\nconst NFC_ELIGIBLE_DOCUMENT_TYPES = new Set([\n \"passport\",\n \"idCard\",\n \"residencePermit\",\n]);\n\n/**\n * Normalise le mode NFC vers les valeurs courantes.\n * Rétrocompat : les parcours enregistrés avant le renommage portent encore\n * `nfcAndApi`, qui doit être traité comme `nfcOrPhoto` (scan NFC avec alternative photo).\n */\nconst normalizeNfcMode = (mode?: string): \"nfcOnly\" | \"nfcOrPhoto\" =>\n mode === \"nfcAndApi\" || mode === \"nfcOrPhoto\" ? \"nfcOrPhoto\" : \"nfcOnly\";\n\n/**\n * DocumentCheck component manages the multi-step document verification flow for a session.\n * It handles country and document type selection, document upload or photo capture, processing, and error/success handling.\n * The component adapts its flow for mobile capture and supports custom session templates.\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 {() => void} [props.onContinueOnPC] - Optional callback to continue the process on a PC (used for mobile capture fallback).\n * @param {string} props.documentTypeId - The ID of the required document type for verification (e.g., \"jdi-2\" for ID card).\n * @param {AcceptedCountry[]} [props.acceptedCountries] - Optional list of countries accepted for the document type. If not provided, resolved from the session template.\n * @param {boolean} [props.isMobileCapture=false] - If true, enables mobile photo capture flow instead of file upload.\n * @param {SessionTemplate} [props.template] - Optional session template object, used to resolve accepted countries and flow configuration.\n * @param {number} [props.templateIndex] - Optional index of the current template node, used for navigation and retry logic.\n *\n * @returns {JSX.Element} Multi-step document verification UI, rendering different subcomponents based on the current step.\n *\n * @remarks\n * - Handles both desktop and mobile flows, including photo capture and file upload.\n * - Integrates with context for selected document type and manages internal state for step navigation, country selection, file uploads, and error handling.\n * - Displays error messages and fallback UI for misconfiguration or invalid navigation.\n * - Uses hooks for translation, retry navigation, and context management.\n */\nconst DocumentCheck = ({\n stepObject,\n sessionId,\n node,\n onContinueOnPC: _onContinueOnPC,\n documentTypeId,\n acceptedCountries,\n isMobileCapture = false,\n allowedAddingMethods,\n template,\n setUserInput,\n}: DocumentCheckProps): JSX.Element => {\n const { t } = useI18n();\n const { session } = getSession();\n\n const [documentTemplates, setDocumentTemplates] =\n useState<FetchedDocumentTemplates>();\n const [loadingTemplates, setLoadingTemplates] = useState(true);\n\n useEffect(() => {\n (async () => {\n setLoadingTemplates(true);\n const templates = await getAllDocumentTemplates();\n setDocumentTemplates(templates);\n setLoadingTemplates(false);\n })();\n }, []);\n\n const initialRetryCount = getNodeRetryCount(session, node.id);\n const [selectedMethod, setSelectedMethod] = useState<\n \"download\" | \"picture\" | null\n >(null);\n\n const isPictureAllowed = allowedAddingMethods?.includes(\"picture\") ?? true;\n const isDownloadAllowed = allowedAddingMethods?.includes(\"download\") ?? true;\n\n // Check if retry is allowed based on initial retry count\n const isInitialRetryAllowed = () => {\n // Special case: if allowResubmission is false and retryCount > 0, no retries allowed\n if (node.allowResubmission === false && initialRetryCount > 0) {\n return false;\n }\n\n if (node.allowResubmission === undefined) return true;\n if (!node.allowResubmission) return false;\n if (node.maxResubmissionAttempts !== undefined) {\n return initialRetryCount <= node.maxResubmissionAttempts;\n }\n return true;\n };\n\n // Initialize docStep - if retries exhausted, start at error page (step 6)\n const [docStep, setDocStep] = useState(() => {\n if (initialRetryCount > 0 && !isInitialRetryAllowed()) {\n return 6; // Error page\n }\n return 0; // Normal flow - start with introduction\n });\n const [selectedCountry, setSelectedCountry] = useState(\n acceptedCountries?.[0]?.code?.toUpperCase() || \"FR\",\n );\n const [fileUploaded, setFileUploaded] = useState<onUploadFiles | null>(null);\n const [analysisData, setAnalysisData] = useState<Prediction[] | null>(null);\n const [errorCode, setErrorCode] = useState<string | null>(null);\n const [nfcPreparationError, setNfcPreparationError] = useState<string | null>(null);\n // Quand l'utilisateur déclare ne pas avoir de puce (questionnaire de fallback),\n // on ne doit plus le réorienter vers le scan NFC (ni avant, ni après l'analyse API).\n const [nfcSkipped, setNfcSkipped] = useState(false);\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 // Restauration après refresh : si le NFC est en cours côté backend (l'utilisateur attendait sur\n // l'écran QR), revenir directement à cet écran (docStep 7) au lieu de repartir au début du nœud.\n // `docStep` est en mémoire et serait sinon perdu au rechargement.\n const hasRestoredNfcStep = useRef(false);\n useEffect(() => {\n if (hasRestoredNfcStep.current) return;\n if (node.nfcEnabled !== true) return;\n const status = session?.nfcStatus;\n if (status === \"pending\" || status === \"opened\") {\n hasRestoredNfcStep.current = true;\n setDocStep(7);\n }\n }, [session, node.nfcEnabled]);\n\n // Check retry limits on mount/reload - if retries exhausted, show error page immediately\n useEffect(() => {\n // Special case: if allowResubmission is false and retryCount > 0, show error immediately\n if (node.allowResubmission === false && retryCount > 0) {\n setDocStep(6);\n return;\n }\n\n // Normal case: check against maxResubmissionAttempts\n // Inline retry check to avoid dependency issues\n const checkRetryLimit = () => {\n // If allowResubmission is undefined (old journeys), allow unlimited retries\n if (node.allowResubmission === undefined) {\n return true;\n }\n // If allowResubmission is false, no retries allowed\n if (!node.allowResubmission) {\n return false;\n }\n // If allowResubmission is true, check against maxResubmissionAttempts\n if (node.maxResubmissionAttempts !== undefined) {\n return retryCount <= node.maxResubmissionAttempts;\n }\n // If maxResubmissionAttempts is not set, allow unlimited retries\n return true;\n };\n\n // Check immediately on mount if retries are exhausted\n // This redirects to error page before showing any JDI steps\n if (retryCount > 0 && !checkRetryLimit()) {\n // User has exhausted retries, redirect to error page immediately\n setDocStep(6);\n }\n }, [retryCount, node.allowResubmission, node.maxResubmissionAttempts]);\n\n const [capturedImages, setCapturedImages] = useState<Record<string, string>>(\n {},\n );\n const [currentPhotoStep, setCurrentPhotoStep] = useState(\n \"before-recto\" as\n | \"before-recto\"\n | \"recto\"\n | \"before-verso\"\n | \"verso\"\n | \"confirmation\",\n );\n const [videoFlowPhase, setVideoFlowPhase] = useState<\"photo\" | \"video\">(\n \"photo\",\n );\n\n const { selectedDocumentType, setSelectedDocumentType } =\n useDocumentContext();\n\n const finalAcceptedCountries = useMemo(() => {\n if (loadingTemplates) return acceptedCountries;\n const result: AcceptedCountry[] = [];\n const hasInternational = acceptedCountries?.some(c => c.code === \"INT\");\n const hasEurope = acceptedCountries?.some(c => c.code === \"EU\");\n\n if (!hasInternational && !hasEurope) return acceptedCountries;\n\n const internationalDoc = acceptedCountries?.find(c => c.code === \"INT\");\n const europeDoc = acceptedCountries?.find(c => c.code === \"EU\");\n\n for (const ISOCode of ISO_COUNTRY_CODES) {\n if (ISOCode === \"INT\" || ISOCode === \"EU\") continue;\n\n const countryDocInput = acceptedCountries?.find(c => c.code?.toUpperCase() === ISOCode);\n const isEuropean = EUROPEAN_COUNTRY_CODES.includes(ISOCode);\n\n // Determine which configuration to use for this country\n // 1. Specific country config\n // 2. EU group config (if European)\n // 3. INT group config\n let configToUse: AcceptedCountry | undefined = countryDocInput;\n\n if (!configToUse) {\n if (isEuropean && europeDoc) {\n configToUse = europeDoc;\n } else if (internationalDoc) {\n configToUse = internationalDoc;\n }\n }\n\n if (configToUse) {\n const documents: AcceptedCountry['documents'] = {\n passport: [],\n idCard: [],\n driverLicense: [],\n residencePermit: [],\n pinkDriverLicense: [],\n };\n for (const key of Object.keys(configToUse.documents)) {\n const docKey = key as keyof AcceptedCountry['documents'];\n if (!isDocumentTypeAvailable(ISOCode, docKey)) continue;\n documents[docKey] = configToUse.documents[docKey];\n }\n if (\n documents.passport.length ||\n documents.idCard.length ||\n documents.driverLicense.length ||\n documents.residencePermit.length ||\n documents.pinkDriverLicense.length\n ) {\n result.push({ code: ISOCode, documents: { ...documents } });\n }\n }\n }\n return result;\n }, [acceptedCountries, documentTemplates, loadingTemplates]);\n\n // Helper to check if a document type is available for a country\n function isDocumentTypeAvailable(\n countryCode: string,\n documentType: keyof AcceptedCountry[\"documents\"],\n ) {\n if (countryCode === 'INT' || countryCode === 'EU') return true;\n const docTypeKey = (getDocTypeKey(documentType) ?? \"\").toLowerCase();\n return documentTemplates?.data?.some(\n (tpl: DocumentTemplate) =>\n tpl.countryCode === countryCode &&\n (tpl.name?.toLowerCase() || \"\").includes(docTypeKey),\n );\n }\n\n useEffect(() => {\n if (!documentTypeId) console.error(\"DocumentCheck: Missing documentTypeId\");\n console.debug(\"[DocumentCheck] node content:\", node);\n\n // Don't reset docStep if we're already on error page (step 6) due to exhausted retries\n if (docStep === 6) {\n return;\n }\n\n // En NFC, on affiche d'abord l'écran de confirmation de la puce (gate -1)\n if (node.nfcEnabled === true) {\n setDocStep(-1);\n return;\n }\n\n if (\n node.introductionPage?.title === undefined &&\n node.introductionPage?.description === undefined\n ) {\n setDocStep(1);\n } else {\n setDocStep(0);\n }\n }, [documentTypeId, sessionId, isMobileCapture]);\n\n const handleCountrySelect = (countryId: string) => {\n console.debug(\n \"[DocumentCheck] handleCountrySelect - countryId:\",\n countryId,\n );\n setUserInput((prev) => ({ ...prev, countryCode: countryId.toUpperCase() }));\n setSelectedCountry(countryId.toUpperCase());\n setSelectedDocumentType(null);\n setFileUploaded(null);\n setAnalysisData(null);\n setErrorCode(null);\n setNfcPreparationError(null);\n // Reset retry count to 0 (will be synced to session)\n setRetryCount(0);\n setCapturedImages({});\n setCurrentPhotoStep(\"before-recto\");\n setVideoFlowPhase(\"photo\");\n setDocStep(2);\n };\n\n const handlePhotoCapture = async (\n imageData: string,\n side: \"recto\" | \"verso\",\n ) => {\n try {\n // Convert data URL to Blob for processing\n const imageBlob = dataUrlToBlob(imageData);\n\n // Resize and optimize the image (only on mobile)\n const processedBlob = await resizeAfterCapture(imageBlob);\n\n // Convert back to data URL for storage and display\n const processedDataUrl = await blobToDataUrl(processedBlob);\n\n console.debug(`[DocumentCheck] Photo processed for ${side}`, {\n originalSize: imageBlob.size,\n processedSize: processedBlob.size,\n originalType: imageBlob.type,\n processedType: processedBlob.type,\n });\n\n setCapturedImages((prev) => ({ ...prev, [side]: processedDataUrl }));\n logPhotoCaptured(sessionId, side);\n\n if (side === \"recto\") {\n const isSingleSided =\n selectedDocumentType?.id === \"passport\" ||\n selectedDocumentType?.id === \"pinkDriverLicense\";\n setCurrentPhotoStep(isSingleSided ? \"confirmation\" : \"before-verso\");\n } else {\n setCurrentPhotoStep(\"confirmation\");\n }\n } catch (error) {\n console.error(\n `[DocumentCheck] Failed to process photo for ${side}:`,\n error,\n );\n // Fallback: use original image if processing fails\n setCapturedImages((prev) => ({ ...prev, [side]: imageData }));\n logPhotoCaptured(sessionId, side);\n\n if (side === \"recto\") {\n const isSingleSided =\n selectedDocumentType?.id === \"passport\" ||\n selectedDocumentType?.id === \"pinkDriverLicense\";\n setCurrentPhotoStep(isSingleSided ? \"confirmation\" : \"before-verso\");\n } else {\n setCurrentPhotoStep(\"confirmation\");\n }\n }\n };\n\n const handlePhotoConfirmation = () => {\n if (capturedImages.recto) {\n logPhotosValidated(sessionId);\n setFileUploaded({\n front: capturedImages.recto,\n back: capturedImages.verso || null,\n });\n setDocStep(4);\n }\n };\n\n const handlePhotoConfirmedForVideo = () => {\n setVideoFlowPhase(\"video\");\n };\n\n const handleDocumentVideoComplete = (\n success: boolean,\n predictions?: Prediction[],\n errorCode?: string,\n ) => {\n const analysisData =\n predictions && predictions.length > 0 ? predictions : null;\n if (analysisData) {\n setAnalysisData(analysisData);\n }\n if (errorCode) {\n setErrorCode(errorCode);\n }\n handleProcessingComplete(success, undefined, analysisData);\n };\n\n const handleDocumentTypeSelect = async (documentId: string) => {\n const documentLabel = t(`documentTypes.${documentId}`, documentId);\n logDocumentTypeSelected(sessionId, documentId, documentLabel);\n const documentTemplateID = loadingTemplates\n ? undefined\n : getDocumentTemplateId({\n acceptedCountries: finalAcceptedCountries,\n countryCode: selectedCountry,\n documentId,\n documentTemplates,\n });\n\n const selectedDoc = {\n id: documentId,\n label: t(`documentTypes.${documentId}`),\n hasTwoSides:\n documentId !== \"passport\" && documentId !== \"pinkDriverLicense\",\n documentTemplateId: documentTemplateID,\n };\n\n const selectedCountryCode = selectedCountry.toUpperCase();\n const selectedDocumentInput = {\n countryCode: selectedCountryCode,\n identityDocumentType: documentId,\n identityDocumentTemplateId: documentTemplateID,\n };\n\n setSelectedDocumentType(selectedDoc);\n setUserInput((prev) => ({ ...prev, ...selectedDocumentInput }));\n setFileUploaded(null);\n setAnalysisData(null);\n setErrorCode(null);\n setNfcPreparationError(null);\n setCapturedImages({});\n setCurrentPhotoStep(\"before-recto\");\n setVideoFlowPhase(\"photo\");\n\n if (\n node.nfcEnabled === true &&\n !nfcSkipped &&\n NFC_ELIGIBLE_DOCUMENT_TYPES.has(documentId)\n ) {\n const nfcMode = normalizeNfcMode(node.nfcMode);\n try {\n await updateSessionUserInput(sessionId, {\n ...((session?.userInput as Record<string, unknown> | undefined) ?? {}),\n ...selectedDocumentInput,\n });\n } catch (error) {\n console.error(\"Failed to persist NFC document selection:\", error);\n setNfcPreparationError(\n t(\n \"nfc_scan.preparation_failed\",\n \"Impossible de préparer le scan NFC. Veuillez réessayer.\",\n ),\n );\n }\n setDocStep(nfcMode === \"nfcOrPhoto\" ? 3 : 7);\n return;\n }\n\n setDocStep(3);\n };\n\n const handleDocumentUpload = (files: onUploadFiles) => {\n logDocumentLoaded(sessionId, \"recto\");\n if (files.back) {\n logDocumentLoaded(sessionId, \"verso\");\n }\n logDocumentsValidated(sessionId);\n\n setFileUploaded(files);\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 setDocStep(6);\n } else {\n // Proceed to processing\n setDocStep(4);\n }\n };\n\n const handleProcessingComplete = (\n success: boolean,\n _retryCount?: number,\n apiAnalysisData?: Prediction[] | null,\n ) => {\n if (apiAnalysisData) {\n setAnalysisData(apiAnalysisData);\n\n // Extract and store the error code\n if (apiAnalysisData.length > 0) {\n const code = apiAnalysisData[0].code;\n setErrorCode(code);\n }\n }\n\n if (success) {\n const shouldRunNfcAfterApi =\n node.nfcEnabled === true &&\n !nfcSkipped &&\n normalizeNfcMode(node.nfcMode) === \"nfcOrPhoto\" &&\n !!selectedDocumentType?.id &&\n NFC_ELIGIBLE_DOCUMENT_TYPES.has(selectedDocumentType.id);\n\n if (shouldRunNfcAfterApi) {\n setDocStep(7);\n return;\n }\n\n // Increment currentStep in database immediately after successful analysis\n // This prevents double analysis if the user refreshes the page\n if (template) {\n stepObject.goToNextStep(node.id, template);\n } else {\n stepObject.setStep(stepObject.step + 1);\n }\n setDocStep(5);\n } else {\n // Increment retry count both in state and session\n setRetryCount((prev) => {\n const newCount = prev + 1;\n // Update session asynchronously\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 setDocStep(6);\n }\n };\n\n const handleRetryFromError = () => {\n // Note: retry count is already incremented in handleProcessingComplete\n // This function just handles navigation\n // Pour l'erreur 2.5 (face manquante), on conserve fileUploaded pour pré-remplir\n // l'upload avec la face déjà déposée. Pour les autres erreurs, on repart de zéro.\n if (errorCode !== \"2.5\") {\n setFileUploaded(null);\n }\n // Always stay on the current node and go back to upload step.\n // Never navigate to a different global step: if this node was reached via a\n // condition branch (e.g. \"true\"), navigating away would land on the other\n // branch (\"false\"). The retry means \"re-submit on THIS node\", not \"go back\n // in the journey\".\n setDocStep(3);\n };\n\n // Check if retry is allowed based on configuration\n const isRetryAllowed = () => {\n console.log(\"isRetryAllowed - Props:\", {\n allowResubmission: node.allowResubmission,\n maxResubmissionAttempts: node.maxResubmissionAttempts,\n retryCount,\n });\n // Specimen documents (code 8.x) block retry — user can only continue anyway\n if (errorCode?.startsWith(\"8\")) {\n return false;\n }\n // If allowResubmission is undefined (old journeys), allow unlimited retries\n if (node.allowResubmission === undefined) {\n return true;\n }\n // If allowResubmission is false, no retries allowed\n if (!node.allowResubmission) {\n return false;\n }\n // If allowResubmission is true, check against maxResubmissionAttempts\n if (node.maxResubmissionAttempts !== undefined) {\n return retryCount <= node.maxResubmissionAttempts;\n }\n // If maxResubmissionAttempts is not set, allow unlimited retries\n return true;\n };\n\n const handleContinueAnyway = () => {\n if (template) {\n stepObject.goToNextStep(node.id, template);\n } else {\n stepObject.setStep(stepObject.step + 1);\n }\n setDocStep(0);\n };\n\n const handleSuccessContinue = () => {\n if (template) {\n stepObject.goToNextStep(node.id, template);\n } else {\n stepObject.setStep(stepObject.step + 1);\n }\n setDocStep(0);\n };\n\n // Questionnaire de fallback NFC : l'utilisateur a déclaré ne pas avoir de puce.\n // On enregistre la raison (non bloquant) puis on poursuit selon le mode du nœud :\n // - nfcOrPhoto → flux photo/API du même nœud (intro/pays → upload → analyse), sans scan NFC\n // - nfcOnly → on saute le nœud (nœud suivant)\n const handleNfcFallback = async (\n reason: string,\n label: string,\n comment?: string,\n ) => {\n setNfcSkipped(true);\n try {\n await skipNfcWithReason(sessionId, { reason, label, comment });\n } catch (error) {\n console.error(\"Failed to persist NFC fallback reason:\", error);\n }\n\n const nfcMode = normalizeNfcMode(node.nfcMode);\n if (nfcMode === \"nfcOrPhoto\") {\n const hasIntroduction =\n node.introductionPage?.title !== undefined ||\n node.introductionPage?.description !== undefined;\n setDocStep(hasIntroduction ? 0 : 1);\n return;\n }\n\n if (template) {\n stepObject.goToNextStep(node.id, template);\n } else {\n stepObject.setStep(stepObject.step + 1);\n }\n };\n\n const handleBack = () => {\n const hasIntroduction =\n node.introductionPage?.title !== undefined ||\n node.introductionPage?.description !== undefined;\n\n // Le questionnaire de fallback (-2) revient au gate (-1)\n if (docStep === -2) {\n setDocStep(-1);\n return;\n }\n\n // En NFC, le premier écran réel (intro=0 sinon pays=1) revient au gate (-1)\n if (\n node.nfcEnabled === true &&\n docStep === (hasIntroduction ? 0 : 1)\n ) {\n setDocStep(-1);\n return;\n }\n\n if (docStep === 0) {\n stepObject.goBack();\n } else {\n setDocStep((prev) => prev - 1);\n }\n };\n\n switch (docStep) {\n case -1: {\n const hasIntroduction =\n node.introductionPage?.title !== undefined ||\n node.introductionPage?.description !== undefined;\n return (\n <NfcChipGate\n onConfirm={() => setDocStep(hasIntroduction ? 0 : 1)}\n // Pas de puce → questionnaire de fallback pour recueillir la raison\n onNoChip={() => setDocStep(-2)}\n />\n );\n }\n case -2:\n return <NfcFallbackSurvey onSubmit={handleNfcFallback} />;\n case 0:\n if (!documentTypeId) {\n console.error(\"DocumentCheck: Missing documentTypeId in step 0\");\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(\n \"document_check.config_error.title\",\n \"Erreur de configuration\",\n )}\n </h2>\n <p className=\"text-gray-600 mb-4\">\n {t(\n \"document_check.config_error.description\",\n \"Type de document non spécifié.\",\n )}\n </p>\n <ButtonDesktop\n type=\"back\"\n className=\"px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors\"\n onClick={() =>\n stepObject.setStep(Math.max(0, stepObject.step - 1))\n }\n >\n {t(\"document_check.config_error.back\", \"Retour\")}\n </ButtonDesktop>\n </div>\n );\n }\n return (\n <JDIPreIntroduction\n documentTypeId={documentTypeId}\n onContinue={() => setDocStep(1)}\n onBack={handleBack}\n introTitleText={\n node.introductionPage?.title || t(\"jdi.pre_introduction.title\")\n }\n introDescText={\n node.introductionPage?.description ||\n t(\"jdi.pre_introduction.description\")\n }\n />\n );\n case 1:\n return (\n <JDICountrySelection\n onCountrySelect={handleCountrySelect}\n onBack={handleBack}\n documentTypeId={documentTypeId}\n acceptedCountries={finalAcceptedCountries}\n countryIntroText={\n node.countrySelection?.title || t(\"jdi.country_selection.title\")\n }\n countryDescText={\n node.countrySelection?.description ||\n t(\"jdi.country_selection.description\")\n }\n />\n );\n case 2:\n return (\n <JDIDocumentSelection\n onDocumentSelect={handleDocumentTypeSelect}\n onBack={handleBack}\n documentTypeId={documentTypeId}\n sessionId={sessionId}\n chosenCountry={\n finalAcceptedCountries?.find((c) => c.code === selectedCountry) ||\n undefined\n }\n documentSelectionTitle={\n node.documentSelection?.title || t(\"jdi.document_selection.title\")\n }\n documentSelectionDescription={\n // En NFC, on laisse JDIDocumentSelection choisir le wording adapté\n // (subtitle_identity_nfc) plutôt que l'override \"téléverser\" du nœud.\n node.nfcEnabled === true\n ? undefined\n : node.documentSelection?.description ||\n t(\"jdi.document_selection.description\")\n }\n nfcEnabled={node.nfcEnabled === true}\n />\n );\n case 3:\n if (!selectedDocumentType) {\n console.error(\n \"DocumentCheck: selectedDocumentType is null for step 3!\",\n );\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_check.selection_error.title\", \"Erreur de sélection\")}\n </h2>\n <p className=\"text-gray-600 mb-4\">\n {t(\n \"document_check.selection_error.description\",\n \"Aucun type de document sélectionné. Veuillez revenir à l'étape précédente.\",\n )}\n </p>\n <ButtonDesktop\n className=\"px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors\"\n type=\"back\"\n onClick={() => setDocStep(2)}\n >\n {t(\n \"document_check.selection_error.back\",\n \"Retour à la sélection\",\n )}\n </ButtonDesktop>\n </div>\n );\n }\n\n if (isPictureAllowed && isDownloadAllowed && !selectedMethod) {\n return (\n <MobilePageLayout\n footer={\n <div className=\"w-full max-w-md mx-auto\">\n <ButtonDesktop\n type=\"back\"\n onClick={handleBack}\n className=\"w-full text-[#3C3C40] text-center font-poppins text-sm font-medium hover:underline py-2\"\n >\n {t(\"buttons.back\", \"Retour\")}\n </ButtonDesktop>\n </div>\n }\n >\n <div className=\"px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {t(\n \"document_check.method_selection.title\",\n \"Choisissez une méthode\",\n )}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed\">\n {t(\n \"document_check.method_selection.subtitle\",\n \"Comment souhaitez-vous ajouter votre document ?\",\n )}\n </Subtitle>\n </div>\n\n <div className=\"grid gap-4\">\n <button\n onClick={() => { setSelectedMethod(\"picture\"); logCaptureModeSelected(sessionId, \"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(\n \"document_check.method_selection.picture_title\",\n \"Prendre une photo\",\n )}\n </p>\n <p className=\"text-sm text-gray-500\">\n {t(\n \"document_check.method_selection.picture_desc\",\n \"Utilisez l'appareil photo de votre appareil\",\n )}\n </p>\n </div>\n </button>\n\n <button\n onClick={() => { setSelectedMethod(\"download\"); logCaptureModeSelected(sessionId, \"upload\"); }}\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(\n \"document_check.method_selection.download_title\",\n \"Téléverser un fichier\",\n )}\n </p>\n <p className=\"text-sm text-gray-500\">\n {t(\n \"document_check.method_selection.download_desc\",\n \"Sélectionnez un fichier sur votre appareil\",\n )}\n </p>\n </div>\n </button>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n }\n\n const activeMethod =\n selectedMethod ||\n (isPictureAllowed && isMobileCapture ? \"picture\" : \"download\");\n\n if (activeMethod === \"picture\" && isPictureAllowed) {\n const isSingleSided =\n selectedDocumentType?.id === \"passport\" ||\n selectedDocumentType?.id === \"pinkDriverLicense\";\n const onConfirm = node.withVideo\n ? handlePhotoConfirmedForVideo\n : handlePhotoConfirmation;\n\n if (node.withVideo && videoFlowPhase === \"video\") {\n return (\n <DocumentVideoCapture\n selectedDocumentType={selectedDocumentType}\n onComplete={handleDocumentVideoComplete}\n onBack={() => {\n setVideoFlowPhase(\"photo\");\n setCurrentPhotoStep(\"confirmation\");\n }}\n nodeId={node.id}\n sessionId={sessionId}\n previewOverrides={{\n recto: capturedImages.recto,\n verso: capturedImages.verso,\n }}\n />\n );\n }\n\n if (currentPhotoStep === \"before-recto\") {\n return (\n <BeforePhoto\n setStep={() => setCurrentPhotoStep(\"recto\")}\n isSingleSided={isSingleSided}\n onBack={() => setDocStep(2)}\n />\n );\n }\n if (currentPhotoStep === \"recto\") {\n return (\n <Photo\n onCapture={(imageData) => handlePhotoCapture(imageData, \"recto\")}\n />\n );\n }\n if (currentPhotoStep === \"before-verso\") {\n return (\n <BeforeVersoPhoto setStep={() => setCurrentPhotoStep(\"verso\")} />\n );\n }\n if (currentPhotoStep === \"verso\") {\n return (\n <Photo\n onCapture={(imageData) => handlePhotoCapture(imageData, \"verso\")}\n />\n );\n }\n if (currentPhotoStep === \"confirmation\") {\n return (\n <PhotoConfirmation\n imageUrl={capturedImages.recto || \"\"}\n versoImageUrl={capturedImages.verso}\n requiresTwoSides={!!capturedImages.verso}\n onConfirm={onConfirm}\n onRetry={() => setCurrentPhotoStep(\"before-recto\")}\n onRetryAfterProcessing={() => setCurrentPhotoStep(\"before-recto\")}\n fileUploaded={fileUploaded}\n isSingleSided={isSingleSided}\n />\n );\n }\n return (\n <BeforePhoto\n setStep={() => setCurrentPhotoStep(\"recto\")}\n isSingleSided={isSingleSided}\n onBack={() => setDocStep(2)}\n />\n );\n } else {\n return (\n <JDIDocumentUpload\n documentType={selectedDocumentType?.id || documentTypeId}\n documentTypeId={documentTypeId}\n documentLabel={selectedDocumentType?.label}\n onUpload={handleDocumentUpload}\n onBack={() => {\n if (isPictureAllowed && isDownloadAllowed) {\n setSelectedMethod(null);\n } else {\n setDocStep(2);\n }\n }}\n initialFront={errorCode === \"2.5\" ? fileUploaded?.front : null}\n initialBack={errorCode === \"2.5\" ? fileUploaded?.back : null}\n sessionId={sessionId}\n />\n );\n }\n case 4:\n return (\n <JDIProcessing\n documentType={selectedDocumentType?.id || documentTypeId}\n onProcessingComplete={handleProcessingComplete}\n fileUploaded={fileUploaded}\n documentTypeId={documentTypeId}\n retryCount={retryCount}\n documentTemplateId={selectedDocumentType?.documentTemplateId}\n nodeId={node.id}\n />\n );\n case 5:\n return (\n <JDISuccess\n documentType={selectedDocumentType?.id || documentTypeId}\n onContinue={handleSuccessContinue}\n errorCode={errorCode || undefined}\n />\n );\n case 6:\n return (\n <JDIError\n documentType={selectedDocumentType?.id || documentTypeId}\n onRetry={handleRetryFromError}\n onContinueAnyway={handleContinueAnyway}\n retryCount={retryCount}\n predictions={analysisData || undefined}\n errorCode={errorCode || undefined}\n allowResubmission={node.allowResubmission}\n maxResubmissionAttempts={node.maxResubmissionAttempts}\n isRetryAllowed={isRetryAllowed()}\n />\n );\n case 7:\n if (nfcPreparationError) {\n return (\n <MobilePageLayout\n footer={\n <div className=\"w-full max-w-md mx-auto\">\n <ButtonDesktop\n type=\"back\"\n onClick={() => setDocStep(2)}\n className=\"w-full text-[#3C3C40] text-center font-poppins text-sm font-medium hover:underline py-2\"\n >\n {t(\"buttons.back\", \"Retour\")}\n </ButtonDesktop>\n </div>\n }\n >\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(\"nfc_scan.preparation_error_title\", \"Erreur de préparation NFC\")}\n </h2>\n <p className=\"text-gray-600 mb-4\">{nfcPreparationError}</p>\n </div>\n </MobilePageLayout>\n );\n }\n return (\n <NfcScanStep\n sessionId={sessionId}\n nodeId={node.id}\n stepObject={stepObject}\n template={template}\n onBack={() => {\n // Retour vers la sélection du document (corriger un mauvais choix). Le démontage de\n // NfcScanStep ferme le SSE via le cleanup du hook (pas d'appel backend nécessaire).\n const hasIntroduction =\n node.introductionPage?.title !== undefined ||\n node.introductionPage?.description !== undefined;\n hasRestoredNfcStep.current = true; // ne pas re-restaurer l'étape QR après ce retour\n setDocStep(hasIntroduction ? 0 : 1);\n }}\n />\n );\n default:\n console.error(`Invalid docStep: ${docStep}`);\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_check.navigation_error.title\", \"Erreur de navigation\")}\n </h2>\n <p className=\"text-gray-600 mb-4\">\n {t(\n \"document_check.navigation_error.description\",\n \"Étape non valide. Veuillez recommencer.\",\n )}\n </p>\n <ButtonDesktop\n className=\"px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors\"\n type=\"back\"\n onClick={() => setDocStep(0)}\n >\n {t(\"document_check.navigation_error.back\", \"Retour au début\")}\n </ButtonDesktop>\n </div>\n );\n }\n};\n\nexport default DocumentCheck;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
1
+ {"version":3,"file":"DocumentCheck.js","sources":["../../../../../src/components/session/DocumentCheck.tsx"],"sourcesContent":["import { useState, useEffect, useMemo, useRef } from \"react\";\nimport type {\n AcceptedCountry,\n stepObject,\n SessionTemplate,\n} from \"../../types/session\";\nimport JDIPreIntroduction from \"../jdi/JDIPreIntroduction\";\nimport JDICountrySelection from \"../jdi/JDICountrySelection\";\nimport JDIDocumentSelection from \"../jdi/JDIDocumentSelection\";\nimport JDIDocumentUpload from \"../jdi/JDIDocumentUpload\";\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 DocumentVideoCapture from \"../document-video/DocumentVideoCapture\";\nimport { Camera, Upload } from \"lucide-react\";\nimport { useDocumentContext } from \"../../context/DocumentContext\";\nimport type { onUploadFiles } from \"../../types/uploadFiles\";\nimport type { Prediction } from \"../../utils/apiAnalysis\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport {\n logDocumentTypeSelected,\n logCaptureModeSelected,\n logPhotoCaptured,\n logPhotosValidated,\n logDocumentLoaded,\n logDocumentsValidated,\n} from \"../../services/auditTrailService\";\nimport ButtonDesktop from \"../ui/ButtonDesktop\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\nimport { ISO_COUNTRY_CODES } from \"../../utils/isoCountryCodes\";\nimport {\n DocumentTemplate,\n FetchedDocumentTemplates,\n getAllDocumentTemplates,\n getDocTypeKey,\n getDocumentTemplateId,\n} from \"../../services/documentTemplate\";\nimport { UserInput } from \"../../types/userInput\";\nimport {\n resizeAfterCapture,\n dataUrlToBlob,\n blobToDataUrl,\n} from \"../../utils/imageProcessing\";\nimport {\n getNodeRetryCount,\n incrementNodeRetryCount,\n} from \"../../services/retryService\";\nimport { getSession } from \"../../context/SessionContext\";\nimport {\n updateSessionUserInput,\n skipNfcWithReason,\n fetchWallets,\n skipWalletWithReason,\n} from \"../../services/sessionService\";\nimport NfcScanStep from \"../nfc-scan/NfcScanNode\";\nimport NfcChipGate from \"../nfc-scan/NfcChipGate\";\nimport NfcFallbackSurvey from \"../nfc-scan/NfcFallbackSurvey\";\nimport WalletProposal from \"../wallet/WalletProposal\";\nimport WalletVerificationStep from \"../wallet/WalletVerificationStep\";\n\nexport interface CountryDocuments {\n code: string;\n documents: {\n passport: string[];\n idCard: string[];\n residencePermit: string[];\n driverLicense: string[];\n pinkDriverLicense: string[];\n };\n}\n\nexport interface NodeIdentityControl {\n id: string;\n acceptedCountries: CountryDocuments[];\n automaticPhotoCapture?: boolean;\n withVideo?: boolean;\n nfcEnabled?: boolean;\n // \"nfcAndApi\" reste accepté pour rétrocompat (parcours legacy), normalisé via normalizeNfcMode.\n nfcMode?: \"nfcOnly\" | \"nfcOrPhoto\" | \"nfcAndApi\";\n walletEnabled?: boolean;\n walletMode?: \"walletOnly\" | \"walletOrPhoto\";\n allowedAddingMethods?: string[];\n introductionPage?: {\n title: string;\n description: string;\n };\n countrySelection?: {\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 DocumentCheckProps {\n stepObject: stepObject;\n sessionId: string;\n node: NodeIdentityControl;\n onContinueOnPC?: () => void;\n documentTypeId: string;\n acceptedCountries?: AcceptedCountry[];\n isMobileCapture?: boolean;\n allowedAddingMethods?: string[];\n template?: SessionTemplate;\n templateIndex?: number;\n setUserInput: React.Dispatch<React.SetStateAction<UserInput>>;\n}\n\nimport { EUROPEAN_COUNTRY_CODES } from \"../../utils/europeanCountries\";\n\nconst NFC_ELIGIBLE_DOCUMENT_TYPES = new Set([\n \"passport\",\n \"idCard\",\n \"residencePermit\",\n]);\n\n/**\n * Normalise le mode NFC vers les valeurs courantes.\n * Rétrocompat : les parcours enregistrés avant le renommage portent encore\n * `nfcAndApi`, qui doit être traité comme `nfcOrPhoto` (scan NFC avec alternative photo).\n */\nconst normalizeNfcMode = (mode?: string): \"nfcOnly\" | \"nfcOrPhoto\" =>\n mode === \"nfcAndApi\" || mode === \"nfcOrPhoto\" ? \"nfcOrPhoto\" : \"nfcOnly\";\n\nconst normalizeWalletMode = (mode?: string): \"walletOnly\" | \"walletOrPhoto\" =>\n mode === \"walletOnly\" ? \"walletOnly\" : \"walletOrPhoto\";\n\n/**\n * DocumentCheck component manages the multi-step document verification flow for a session.\n * It handles country and document type selection, document upload or photo capture, processing, and error/success handling.\n * The component adapts its flow for mobile capture and supports custom session templates.\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 {() => void} [props.onContinueOnPC] - Optional callback to continue the process on a PC (used for mobile capture fallback).\n * @param {string} props.documentTypeId - The ID of the required document type for verification (e.g., \"jdi-2\" for ID card).\n * @param {AcceptedCountry[]} [props.acceptedCountries] - Optional list of countries accepted for the document type. If not provided, resolved from the session template.\n * @param {boolean} [props.isMobileCapture=false] - If true, enables mobile photo capture flow instead of file upload.\n * @param {SessionTemplate} [props.template] - Optional session template object, used to resolve accepted countries and flow configuration.\n * @param {number} [props.templateIndex] - Optional index of the current template node, used for navigation and retry logic.\n *\n * @returns {JSX.Element} Multi-step document verification UI, rendering different subcomponents based on the current step.\n *\n * @remarks\n * - Handles both desktop and mobile flows, including photo capture and file upload.\n * - Integrates with context for selected document type and manages internal state for step navigation, country selection, file uploads, and error handling.\n * - Displays error messages and fallback UI for misconfiguration or invalid navigation.\n * - Uses hooks for translation, retry navigation, and context management.\n */\nconst DocumentCheck = ({\n stepObject,\n sessionId,\n node,\n onContinueOnPC: _onContinueOnPC,\n documentTypeId,\n acceptedCountries,\n isMobileCapture = false,\n allowedAddingMethods,\n template,\n setUserInput,\n}: DocumentCheckProps): JSX.Element => {\n const { t } = useI18n();\n const { session } = getSession();\n\n const [documentTemplates, setDocumentTemplates] =\n useState<FetchedDocumentTemplates>();\n const [loadingTemplates, setLoadingTemplates] = useState(true);\n\n useEffect(() => {\n (async () => {\n setLoadingTemplates(true);\n const templates = await getAllDocumentTemplates();\n setDocumentTemplates(templates);\n setLoadingTemplates(false);\n })();\n }, []);\n\n const initialRetryCount = getNodeRetryCount(session, node.id);\n const [selectedMethod, setSelectedMethod] = useState<\n \"download\" | \"picture\" | null\n >(null);\n\n const isPictureAllowed = allowedAddingMethods?.includes(\"picture\") ?? true;\n const isDownloadAllowed = allowedAddingMethods?.includes(\"download\") ?? true;\n\n // Check if retry is allowed based on initial retry count\n const isInitialRetryAllowed = () => {\n // Special case: if allowResubmission is false and retryCount > 0, no retries allowed\n if (node.allowResubmission === false && initialRetryCount > 0) {\n return false;\n }\n\n if (node.allowResubmission === undefined) return true;\n if (!node.allowResubmission) return false;\n if (node.maxResubmissionAttempts !== undefined) {\n return initialRetryCount <= node.maxResubmissionAttempts;\n }\n return true;\n };\n\n // Initialize docStep - if retries exhausted, start at error page (step 6)\n const [docStep, setDocStep] = useState(() => {\n if (initialRetryCount > 0 && !isInitialRetryAllowed()) {\n return 6; // Error page\n }\n return 0; // Normal flow - start with introduction\n });\n const [selectedCountry, setSelectedCountry] = useState(\n acceptedCountries?.[0]?.code?.toUpperCase() || \"FR\",\n );\n const [fileUploaded, setFileUploaded] = useState<onUploadFiles | null>(null);\n const [analysisData, setAnalysisData] = useState<Prediction[] | null>(null);\n const [errorCode, setErrorCode] = useState<string | null>(null);\n const [nfcPreparationError, setNfcPreparationError] = useState<string | null>(null);\n // Quand l'utilisateur déclare ne pas avoir de puce (questionnaire de fallback),\n // on ne doit plus le réorienter vers le scan NFC (ni avant, ni après l'analyse API).\n const [nfcSkipped, setNfcSkipped] = useState(false);\n // Idem pour le wallet : une fois décliné/échoué, on ne re-propose plus le wallet\n // sur ce nœud (mais le NFC, s'il est également activé, reste tenté ensuite).\n const [walletDeclined, setWalletDeclined] = useState(false);\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 // Restauration après refresh : si le NFC est en cours côté backend (l'utilisateur attendait sur\n // l'écran QR), revenir directement à cet écran (docStep 7) au lieu de repartir au début du nœud.\n // `docStep` est en mémoire et serait sinon perdu au rechargement.\n const hasRestoredNfcStep = useRef(false);\n useEffect(() => {\n if (hasRestoredNfcStep.current) return;\n if (node.nfcEnabled !== true) return;\n const status = session?.nfcStatus;\n if (status === \"pending\" || status === \"opened\") {\n hasRestoredNfcStep.current = true;\n setDocStep(7);\n }\n }, [session, node.nfcEnabled]);\n\n // Check retry limits on mount/reload - if retries exhausted, show error page immediately\n useEffect(() => {\n // Special case: if allowResubmission is false and retryCount > 0, show error immediately\n if (node.allowResubmission === false && retryCount > 0) {\n setDocStep(6);\n return;\n }\n\n // Normal case: check against maxResubmissionAttempts\n // Inline retry check to avoid dependency issues\n const checkRetryLimit = () => {\n // If allowResubmission is undefined (old journeys), allow unlimited retries\n if (node.allowResubmission === undefined) {\n return true;\n }\n // If allowResubmission is false, no retries allowed\n if (!node.allowResubmission) {\n return false;\n }\n // If allowResubmission is true, check against maxResubmissionAttempts\n if (node.maxResubmissionAttempts !== undefined) {\n return retryCount <= node.maxResubmissionAttempts;\n }\n // If maxResubmissionAttempts is not set, allow unlimited retries\n return true;\n };\n\n // Check immediately on mount if retries are exhausted\n // This redirects to error page before showing any JDI steps\n if (retryCount > 0 && !checkRetryLimit()) {\n // User has exhausted retries, redirect to error page immediately\n setDocStep(6);\n }\n }, [retryCount, node.allowResubmission, node.maxResubmissionAttempts]);\n\n const [capturedImages, setCapturedImages] = useState<Record<string, string>>(\n {},\n );\n const [currentPhotoStep, setCurrentPhotoStep] = useState(\n \"before-recto\" as\n | \"before-recto\"\n | \"recto\"\n | \"before-verso\"\n | \"verso\"\n | \"confirmation\",\n );\n const [videoFlowPhase, setVideoFlowPhase] = useState<\"photo\" | \"video\">(\n \"photo\",\n );\n\n const { selectedDocumentType, setSelectedDocumentType } =\n useDocumentContext();\n\n const finalAcceptedCountries = useMemo(() => {\n if (loadingTemplates) return acceptedCountries;\n const result: AcceptedCountry[] = [];\n const hasInternational = acceptedCountries?.some(c => c.code === \"INT\");\n const hasEurope = acceptedCountries?.some(c => c.code === \"EU\");\n\n if (!hasInternational && !hasEurope) return acceptedCountries;\n\n const internationalDoc = acceptedCountries?.find(c => c.code === \"INT\");\n const europeDoc = acceptedCountries?.find(c => c.code === \"EU\");\n\n for (const ISOCode of ISO_COUNTRY_CODES) {\n if (ISOCode === \"INT\" || ISOCode === \"EU\") continue;\n\n const countryDocInput = acceptedCountries?.find(c => c.code?.toUpperCase() === ISOCode);\n const isEuropean = EUROPEAN_COUNTRY_CODES.includes(ISOCode);\n\n // Determine which configuration to use for this country\n // 1. Specific country config\n // 2. EU group config (if European)\n // 3. INT group config\n let configToUse: AcceptedCountry | undefined = countryDocInput;\n\n if (!configToUse) {\n if (isEuropean && europeDoc) {\n configToUse = europeDoc;\n } else if (internationalDoc) {\n configToUse = internationalDoc;\n }\n }\n\n if (configToUse) {\n const documents: AcceptedCountry['documents'] = {\n passport: [],\n idCard: [],\n driverLicense: [],\n residencePermit: [],\n pinkDriverLicense: [],\n };\n for (const key of Object.keys(configToUse.documents)) {\n const docKey = key as keyof AcceptedCountry['documents'];\n if (!isDocumentTypeAvailable(ISOCode, docKey)) continue;\n documents[docKey] = configToUse.documents[docKey];\n }\n if (\n documents.passport.length ||\n documents.idCard.length ||\n documents.driverLicense.length ||\n documents.residencePermit.length ||\n documents.pinkDriverLicense.length\n ) {\n result.push({ code: ISOCode, documents: { ...documents } });\n }\n }\n }\n return result;\n }, [acceptedCountries, documentTemplates, loadingTemplates]);\n\n // Helper to check if a document type is available for a country\n function isDocumentTypeAvailable(\n countryCode: string,\n documentType: keyof AcceptedCountry[\"documents\"],\n ) {\n if (countryCode === 'INT' || countryCode === 'EU') return true;\n const docTypeKey = (getDocTypeKey(documentType) ?? \"\").toLowerCase();\n return documentTemplates?.data?.some(\n (tpl: DocumentTemplate) =>\n tpl.countryCode === countryCode &&\n (tpl.name?.toLowerCase() || \"\").includes(docTypeKey),\n );\n }\n\n useEffect(() => {\n if (!documentTypeId) console.error(\"DocumentCheck: Missing documentTypeId\");\n console.debug(\"[DocumentCheck] node content:\", node);\n\n // Don't reset docStep if we're already on error page (step 6) due to exhausted retries\n if (docStep === 6) {\n return;\n }\n\n // En NFC, on affiche d'abord l'écran de confirmation de la puce (gate -1)\n if (node.nfcEnabled === true) {\n setDocStep(-1);\n return;\n }\n\n if (\n node.introductionPage?.title === undefined &&\n node.introductionPage?.description === undefined\n ) {\n setDocStep(1);\n } else {\n setDocStep(0);\n }\n }, [documentTypeId, sessionId, isMobileCapture]);\n\n const handleCountrySelect = (countryId: string) => {\n console.debug(\n \"[DocumentCheck] handleCountrySelect - countryId:\",\n countryId,\n );\n setUserInput((prev) => ({ ...prev, countryCode: countryId.toUpperCase() }));\n setSelectedCountry(countryId.toUpperCase());\n setSelectedDocumentType(null);\n setFileUploaded(null);\n setAnalysisData(null);\n setErrorCode(null);\n setNfcPreparationError(null);\n // Reset retry count to 0 (will be synced to session)\n setRetryCount(0);\n setCapturedImages({});\n setCurrentPhotoStep(\"before-recto\");\n setVideoFlowPhase(\"photo\");\n setDocStep(2);\n };\n\n const handlePhotoCapture = async (\n imageData: string,\n side: \"recto\" | \"verso\",\n ) => {\n try {\n // Convert data URL to Blob for processing\n const imageBlob = dataUrlToBlob(imageData);\n\n // Resize and optimize the image (only on mobile)\n const processedBlob = await resizeAfterCapture(imageBlob);\n\n // Convert back to data URL for storage and display\n const processedDataUrl = await blobToDataUrl(processedBlob);\n\n console.debug(`[DocumentCheck] Photo processed for ${side}`, {\n originalSize: imageBlob.size,\n processedSize: processedBlob.size,\n originalType: imageBlob.type,\n processedType: processedBlob.type,\n });\n\n setCapturedImages((prev) => ({ ...prev, [side]: processedDataUrl }));\n logPhotoCaptured(sessionId, side);\n\n if (side === \"recto\") {\n const isSingleSided =\n selectedDocumentType?.id === \"passport\" ||\n selectedDocumentType?.id === \"pinkDriverLicense\";\n setCurrentPhotoStep(isSingleSided ? \"confirmation\" : \"before-verso\");\n } else {\n setCurrentPhotoStep(\"confirmation\");\n }\n } catch (error) {\n console.error(\n `[DocumentCheck] Failed to process photo for ${side}:`,\n error,\n );\n // Fallback: use original image if processing fails\n setCapturedImages((prev) => ({ ...prev, [side]: imageData }));\n logPhotoCaptured(sessionId, side);\n\n if (side === \"recto\") {\n const isSingleSided =\n selectedDocumentType?.id === \"passport\" ||\n selectedDocumentType?.id === \"pinkDriverLicense\";\n setCurrentPhotoStep(isSingleSided ? \"confirmation\" : \"before-verso\");\n } else {\n setCurrentPhotoStep(\"confirmation\");\n }\n }\n };\n\n const handlePhotoConfirmation = () => {\n if (capturedImages.recto) {\n logPhotosValidated(sessionId);\n setFileUploaded({\n front: capturedImages.recto,\n back: capturedImages.verso || null,\n });\n setDocStep(4);\n }\n };\n\n const handlePhotoConfirmedForVideo = () => {\n setVideoFlowPhase(\"video\");\n };\n\n const handleDocumentVideoComplete = (\n success: boolean,\n predictions?: Prediction[],\n errorCode?: string,\n ) => {\n const analysisData =\n predictions && predictions.length > 0 ? predictions : null;\n if (analysisData) {\n setAnalysisData(analysisData);\n }\n if (errorCode) {\n setErrorCode(errorCode);\n }\n handleProcessingComplete(success, undefined, analysisData);\n };\n\n const handleDocumentTypeSelect = async (documentId: string) => {\n const documentLabel = t(`documentTypes.${documentId}`, documentId);\n logDocumentTypeSelected(sessionId, documentId, documentLabel);\n const documentTemplateID = loadingTemplates\n ? undefined\n : getDocumentTemplateId({\n acceptedCountries: finalAcceptedCountries,\n countryCode: selectedCountry,\n documentId,\n documentTemplates,\n });\n\n const selectedDoc = {\n id: documentId,\n label: t(`documentTypes.${documentId}`),\n hasTwoSides:\n documentId !== \"passport\" && documentId !== \"pinkDriverLicense\",\n documentTemplateId: documentTemplateID,\n };\n\n const selectedCountryCode = selectedCountry.toUpperCase();\n const selectedDocumentInput = {\n countryCode: selectedCountryCode,\n identityDocumentType: documentId,\n identityDocumentTemplateId: documentTemplateID,\n };\n\n setSelectedDocumentType(selectedDoc);\n setUserInput((prev) => ({ ...prev, ...selectedDocumentInput }));\n setFileUploaded(null);\n setAnalysisData(null);\n setErrorCode(null);\n setNfcPreparationError(null);\n setCapturedImages({});\n setCurrentPhotoStep(\"before-recto\");\n setVideoFlowPhase(\"photo\");\n\n // Wallet gate first, NFC as fallback (cf. WALLET_OID4VP_IMPLEMENTATION_PLAN.md §7) :\n // si un wallet est disponible pour ce pays, on le propose avant toute alternative\n // NFC/photo. Le NFC (et la photo) restent le repli si le wallet est indisponible,\n // décliné, ou échoue.\n if (node.walletEnabled === true && !walletDeclined) {\n try {\n const wallets = await fetchWallets(selectedCountryCode, \"pid\");\n if (wallets.length > 0) {\n setDocStep(-10);\n return;\n }\n } catch (error) {\n console.error(\"Failed to check wallet availability:\", error);\n // Indisponibilité du référentiel wallet : on poursuit sur le flux NFC/photo existant.\n }\n }\n\n await proceedWithNfcOrPhoto(documentId, selectedDocumentInput);\n };\n\n // Logique NFC-ou-photo existante, factorisée pour être rejouable après un\n // refus/échec du wallet (le wallet est tenté avant, cf. handleDocumentTypeSelect).\n const proceedWithNfcOrPhoto = async (\n documentId: string,\n selectedDocumentInput: Record<string, unknown>,\n ) => {\n if (\n node.nfcEnabled === true &&\n !nfcSkipped &&\n NFC_ELIGIBLE_DOCUMENT_TYPES.has(documentId)\n ) {\n const nfcMode = normalizeNfcMode(node.nfcMode);\n try {\n await updateSessionUserInput(sessionId, {\n ...((session?.userInput as Record<string, unknown> | undefined) ?? {}),\n ...selectedDocumentInput,\n });\n } catch (error) {\n console.error(\"Failed to persist NFC document selection:\", error);\n setNfcPreparationError(\n t(\n \"nfc_scan.preparation_failed\",\n \"Impossible de préparer le scan NFC. Veuillez réessayer.\",\n ),\n );\n }\n setDocStep(nfcMode === \"nfcOrPhoto\" ? 3 : 7);\n return;\n }\n\n setDocStep(3);\n };\n\n // Le wallet a été décliné (WalletProposal) ou a échoué (WalletVerificationStep).\n // walletOnly : pas d'alternative photo/NFC → on saute le nœud, comme le NFC en mode nfcOnly.\n // walletOrPhoto : on rejoue la logique NFC-ou-photo normale.\n const handleWalletDeclineOrFail = async () => {\n setWalletDeclined(true);\n try {\n await skipWalletWithReason(sessionId, {\n nodeId: node.id,\n reason: \"wallet_declined_or_failed\",\n label: \"Wallet non utilisé\",\n });\n } catch (error) {\n console.error(\"Failed to persist wallet skip reason:\", error);\n }\n\n if (normalizeWalletMode(node.walletMode) === \"walletOnly\") {\n if (template) {\n stepObject.goToNextStep(node.id, template);\n } else {\n stepObject.setStep(stepObject.step + 1);\n }\n return;\n }\n\n const selectedDocumentInput = {\n countryCode: selectedCountry.toUpperCase(),\n identityDocumentType: selectedDocumentType?.id,\n identityDocumentTemplateId: selectedDocumentType?.documentTemplateId,\n };\n await proceedWithNfcOrPhoto(selectedDocumentType?.id || \"\", selectedDocumentInput);\n };\n\n // Vérification par wallet aboutie : l'identité est confirmée, on saute la capture photo.\n const handleWalletVerificationCompleted = () => {\n if (template) {\n stepObject.goToNextStep(node.id, template);\n } else {\n stepObject.setStep(stepObject.step + 1);\n }\n };\n\n const handleDocumentUpload = (files: onUploadFiles) => {\n logDocumentLoaded(sessionId, \"recto\");\n if (files.back) {\n logDocumentLoaded(sessionId, \"verso\");\n }\n logDocumentsValidated(sessionId);\n\n setFileUploaded(files);\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 setDocStep(6);\n } else {\n // Proceed to processing\n setDocStep(4);\n }\n };\n\n const handleProcessingComplete = (\n success: boolean,\n _retryCount?: number,\n apiAnalysisData?: Prediction[] | null,\n ) => {\n if (apiAnalysisData) {\n setAnalysisData(apiAnalysisData);\n\n // Extract and store the error code\n if (apiAnalysisData.length > 0) {\n const code = apiAnalysisData[0].code;\n setErrorCode(code);\n }\n }\n\n if (success) {\n const shouldRunNfcAfterApi =\n node.nfcEnabled === true &&\n !nfcSkipped &&\n normalizeNfcMode(node.nfcMode) === \"nfcOrPhoto\" &&\n !!selectedDocumentType?.id &&\n NFC_ELIGIBLE_DOCUMENT_TYPES.has(selectedDocumentType.id);\n\n if (shouldRunNfcAfterApi) {\n setDocStep(7);\n return;\n }\n\n // Increment currentStep in database immediately after successful analysis\n // This prevents double analysis if the user refreshes the page\n if (template) {\n stepObject.goToNextStep(node.id, template);\n } else {\n stepObject.setStep(stepObject.step + 1);\n }\n setDocStep(5);\n } else {\n // Increment retry count both in state and session\n setRetryCount((prev) => {\n const newCount = prev + 1;\n // Update session asynchronously\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 setDocStep(6);\n }\n };\n\n const handleRetryFromError = () => {\n // Note: retry count is already incremented in handleProcessingComplete\n // This function just handles navigation\n // Pour l'erreur 2.5 (face manquante), on conserve fileUploaded pour pré-remplir\n // l'upload avec la face déjà déposée. Pour les autres erreurs, on repart de zéro.\n if (errorCode !== \"2.5\") {\n setFileUploaded(null);\n }\n // Always stay on the current node and go back to upload step.\n // Never navigate to a different global step: if this node was reached via a\n // condition branch (e.g. \"true\"), navigating away would land on the other\n // branch (\"false\"). The retry means \"re-submit on THIS node\", not \"go back\n // in the journey\".\n setDocStep(3);\n };\n\n // Check if retry is allowed based on configuration\n const isRetryAllowed = () => {\n console.log(\"isRetryAllowed - Props:\", {\n allowResubmission: node.allowResubmission,\n maxResubmissionAttempts: node.maxResubmissionAttempts,\n retryCount,\n });\n // Specimen documents (code 8.x) block retry — user can only continue anyway\n if (errorCode?.startsWith(\"8\")) {\n return false;\n }\n // If allowResubmission is undefined (old journeys), allow unlimited retries\n if (node.allowResubmission === undefined) {\n return true;\n }\n // If allowResubmission is false, no retries allowed\n if (!node.allowResubmission) {\n return false;\n }\n // If allowResubmission is true, check against maxResubmissionAttempts\n if (node.maxResubmissionAttempts !== undefined) {\n return retryCount <= node.maxResubmissionAttempts;\n }\n // If maxResubmissionAttempts is not set, allow unlimited retries\n return true;\n };\n\n const handleContinueAnyway = () => {\n if (template) {\n stepObject.goToNextStep(node.id, template);\n } else {\n stepObject.setStep(stepObject.step + 1);\n }\n setDocStep(0);\n };\n\n const handleSuccessContinue = () => {\n if (template) {\n stepObject.goToNextStep(node.id, template);\n } else {\n stepObject.setStep(stepObject.step + 1);\n }\n setDocStep(0);\n };\n\n // Questionnaire de fallback NFC : l'utilisateur a déclaré ne pas avoir de puce.\n // On enregistre la raison (non bloquant) puis on poursuit selon le mode du nœud :\n // - nfcOrPhoto → flux photo/API du même nœud (intro/pays → upload → analyse), sans scan NFC\n // - nfcOnly → on saute le nœud (nœud suivant)\n const handleNfcFallback = async (\n reason: string,\n label: string,\n comment?: string,\n ) => {\n setNfcSkipped(true);\n try {\n await skipNfcWithReason(sessionId, { reason, label, comment });\n } catch (error) {\n console.error(\"Failed to persist NFC fallback reason:\", error);\n }\n\n const nfcMode = normalizeNfcMode(node.nfcMode);\n if (nfcMode === \"nfcOrPhoto\") {\n const hasIntroduction =\n node.introductionPage?.title !== undefined ||\n node.introductionPage?.description !== undefined;\n setDocStep(hasIntroduction ? 0 : 1);\n return;\n }\n\n if (template) {\n stepObject.goToNextStep(node.id, template);\n } else {\n stepObject.setStep(stepObject.step + 1);\n }\n };\n\n const handleBack = () => {\n const hasIntroduction =\n node.introductionPage?.title !== undefined ||\n node.introductionPage?.description !== undefined;\n\n // Le questionnaire de fallback (-2) revient au gate (-1)\n if (docStep === -2) {\n setDocStep(-1);\n return;\n }\n\n // En NFC, le premier écran réel (intro=0 sinon pays=1) revient au gate (-1)\n if (\n node.nfcEnabled === true &&\n docStep === (hasIntroduction ? 0 : 1)\n ) {\n setDocStep(-1);\n return;\n }\n\n if (docStep === 0) {\n stepObject.goBack();\n } else {\n setDocStep((prev) => prev - 1);\n }\n };\n\n switch (docStep) {\n case -10:\n return (\n <WalletProposal\n walletMode={normalizeWalletMode(node.walletMode)}\n onUseWallet={() => setDocStep(-11)}\n onDecline={handleWalletDeclineOrFail}\n />\n );\n case -11:\n return (\n <WalletVerificationStep\n sessionId={sessionId}\n nodeId={node.id}\n credentialType=\"pid\"\n walletMode={normalizeWalletMode(node.walletMode)}\n onCompleted={handleWalletVerificationCompleted}\n onFailedOrDeclined={handleWalletDeclineOrFail}\n />\n );\n case -1: {\n const hasIntroduction =\n node.introductionPage?.title !== undefined ||\n node.introductionPage?.description !== undefined;\n return (\n <NfcChipGate\n onConfirm={() => setDocStep(hasIntroduction ? 0 : 1)}\n // Pas de puce → questionnaire de fallback pour recueillir la raison\n onNoChip={() => setDocStep(-2)}\n />\n );\n }\n case -2:\n return <NfcFallbackSurvey onSubmit={handleNfcFallback} />;\n case 0:\n if (!documentTypeId) {\n console.error(\"DocumentCheck: Missing documentTypeId in step 0\");\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(\n \"document_check.config_error.title\",\n \"Erreur de configuration\",\n )}\n </h2>\n <p className=\"text-gray-600 mb-4\">\n {t(\n \"document_check.config_error.description\",\n \"Type de document non spécifié.\",\n )}\n </p>\n <ButtonDesktop\n type=\"back\"\n className=\"px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors\"\n onClick={() =>\n stepObject.setStep(Math.max(0, stepObject.step - 1))\n }\n >\n {t(\"document_check.config_error.back\", \"Retour\")}\n </ButtonDesktop>\n </div>\n );\n }\n return (\n <JDIPreIntroduction\n documentTypeId={documentTypeId}\n onContinue={() => setDocStep(1)}\n onBack={handleBack}\n introTitleText={\n node.introductionPage?.title || t(\"jdi.pre_introduction.title\")\n }\n introDescText={\n node.introductionPage?.description ||\n t(\"jdi.pre_introduction.description\")\n }\n />\n );\n case 1:\n return (\n <JDICountrySelection\n onCountrySelect={handleCountrySelect}\n onBack={handleBack}\n documentTypeId={documentTypeId}\n acceptedCountries={finalAcceptedCountries}\n countryIntroText={\n node.countrySelection?.title || t(\"jdi.country_selection.title\")\n }\n countryDescText={\n node.countrySelection?.description ||\n t(\"jdi.country_selection.description\")\n }\n />\n );\n case 2:\n return (\n <JDIDocumentSelection\n onDocumentSelect={handleDocumentTypeSelect}\n onBack={handleBack}\n documentTypeId={documentTypeId}\n sessionId={sessionId}\n chosenCountry={\n finalAcceptedCountries?.find((c) => c.code === selectedCountry) ||\n undefined\n }\n documentSelectionTitle={\n node.documentSelection?.title || t(\"jdi.document_selection.title\")\n }\n documentSelectionDescription={\n // En NFC, on laisse JDIDocumentSelection choisir le wording adapté\n // (subtitle_identity_nfc) plutôt que l'override \"téléverser\" du nœud.\n node.nfcEnabled === true\n ? undefined\n : node.documentSelection?.description ||\n t(\"jdi.document_selection.description\")\n }\n nfcEnabled={node.nfcEnabled === true}\n />\n );\n case 3:\n if (!selectedDocumentType) {\n console.error(\n \"DocumentCheck: selectedDocumentType is null for step 3!\",\n );\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_check.selection_error.title\", \"Erreur de sélection\")}\n </h2>\n <p className=\"text-gray-600 mb-4\">\n {t(\n \"document_check.selection_error.description\",\n \"Aucun type de document sélectionné. Veuillez revenir à l'étape précédente.\",\n )}\n </p>\n <ButtonDesktop\n className=\"px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors\"\n type=\"back\"\n onClick={() => setDocStep(2)}\n >\n {t(\n \"document_check.selection_error.back\",\n \"Retour à la sélection\",\n )}\n </ButtonDesktop>\n </div>\n );\n }\n\n if (isPictureAllowed && isDownloadAllowed && !selectedMethod) {\n return (\n <MobilePageLayout\n footer={\n <div className=\"w-full max-w-md mx-auto\">\n <ButtonDesktop\n type=\"back\"\n onClick={handleBack}\n className=\"w-full text-[#3C3C40] text-center font-poppins text-sm font-medium hover:underline py-2\"\n >\n {t(\"buttons.back\", \"Retour\")}\n </ButtonDesktop>\n </div>\n }\n >\n <div className=\"px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div className=\"w-full max-w-md mx-auto space-y-6\">\n <div className=\"text-center space-y-4\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {t(\n \"document_check.method_selection.title\",\n \"Choisissez une méthode\",\n )}\n </Title>\n <Subtitle className=\"text-sm text-gray-600 leading-relaxed\">\n {t(\n \"document_check.method_selection.subtitle\",\n \"Comment souhaitez-vous ajouter votre document ?\",\n )}\n </Subtitle>\n </div>\n\n <div className=\"grid gap-4\">\n <button\n onClick={() => { setSelectedMethod(\"picture\"); logCaptureModeSelected(sessionId, \"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(\n \"document_check.method_selection.picture_title\",\n \"Prendre une photo\",\n )}\n </p>\n <p className=\"text-sm text-gray-500\">\n {t(\n \"document_check.method_selection.picture_desc\",\n \"Utilisez l'appareil photo de votre appareil\",\n )}\n </p>\n </div>\n </button>\n\n <button\n onClick={() => { setSelectedMethod(\"download\"); logCaptureModeSelected(sessionId, \"upload\"); }}\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(\n \"document_check.method_selection.download_title\",\n \"Téléverser un fichier\",\n )}\n </p>\n <p className=\"text-sm text-gray-500\">\n {t(\n \"document_check.method_selection.download_desc\",\n \"Sélectionnez un fichier sur votre appareil\",\n )}\n </p>\n </div>\n </button>\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n }\n\n const activeMethod =\n selectedMethod ||\n (isPictureAllowed && isMobileCapture ? \"picture\" : \"download\");\n\n if (activeMethod === \"picture\" && isPictureAllowed) {\n const isSingleSided =\n selectedDocumentType?.id === \"passport\" ||\n selectedDocumentType?.id === \"pinkDriverLicense\";\n const onConfirm = node.withVideo\n ? handlePhotoConfirmedForVideo\n : handlePhotoConfirmation;\n\n if (node.withVideo && videoFlowPhase === \"video\") {\n return (\n <DocumentVideoCapture\n selectedDocumentType={selectedDocumentType}\n onComplete={handleDocumentVideoComplete}\n onBack={() => {\n setVideoFlowPhase(\"photo\");\n setCurrentPhotoStep(\"confirmation\");\n }}\n nodeId={node.id}\n sessionId={sessionId}\n previewOverrides={{\n recto: capturedImages.recto,\n verso: capturedImages.verso,\n }}\n />\n );\n }\n\n if (currentPhotoStep === \"before-recto\") {\n return (\n <BeforePhoto\n setStep={() => setCurrentPhotoStep(\"recto\")}\n isSingleSided={isSingleSided}\n onBack={() => setDocStep(2)}\n />\n );\n }\n if (currentPhotoStep === \"recto\") {\n return (\n <Photo\n onCapture={(imageData) => handlePhotoCapture(imageData, \"recto\")}\n />\n );\n }\n if (currentPhotoStep === \"before-verso\") {\n return (\n <BeforeVersoPhoto setStep={() => setCurrentPhotoStep(\"verso\")} />\n );\n }\n if (currentPhotoStep === \"verso\") {\n return (\n <Photo\n onCapture={(imageData) => handlePhotoCapture(imageData, \"verso\")}\n />\n );\n }\n if (currentPhotoStep === \"confirmation\") {\n return (\n <PhotoConfirmation\n imageUrl={capturedImages.recto || \"\"}\n versoImageUrl={capturedImages.verso}\n requiresTwoSides={!!capturedImages.verso}\n onConfirm={onConfirm}\n onRetry={() => setCurrentPhotoStep(\"before-recto\")}\n onRetryAfterProcessing={() => setCurrentPhotoStep(\"before-recto\")}\n fileUploaded={fileUploaded}\n isSingleSided={isSingleSided}\n />\n );\n }\n return (\n <BeforePhoto\n setStep={() => setCurrentPhotoStep(\"recto\")}\n isSingleSided={isSingleSided}\n onBack={() => setDocStep(2)}\n />\n );\n } else {\n return (\n <JDIDocumentUpload\n documentType={selectedDocumentType?.id || documentTypeId}\n documentTypeId={documentTypeId}\n documentLabel={selectedDocumentType?.label}\n onUpload={handleDocumentUpload}\n onBack={() => {\n if (isPictureAllowed && isDownloadAllowed) {\n setSelectedMethod(null);\n } else {\n setDocStep(2);\n }\n }}\n initialFront={errorCode === \"2.5\" ? fileUploaded?.front : null}\n initialBack={errorCode === \"2.5\" ? fileUploaded?.back : null}\n sessionId={sessionId}\n />\n );\n }\n case 4:\n return (\n <JDIProcessing\n documentType={selectedDocumentType?.id || documentTypeId}\n onProcessingComplete={handleProcessingComplete}\n fileUploaded={fileUploaded}\n documentTypeId={documentTypeId}\n retryCount={retryCount}\n documentTemplateId={selectedDocumentType?.documentTemplateId}\n nodeId={node.id}\n />\n );\n case 5:\n return (\n <JDISuccess\n documentType={selectedDocumentType?.id || documentTypeId}\n onContinue={handleSuccessContinue}\n errorCode={errorCode || undefined}\n />\n );\n case 6:\n return (\n <JDIError\n documentType={selectedDocumentType?.id || documentTypeId}\n onRetry={handleRetryFromError}\n onContinueAnyway={handleContinueAnyway}\n retryCount={retryCount}\n predictions={analysisData || undefined}\n errorCode={errorCode || undefined}\n allowResubmission={node.allowResubmission}\n maxResubmissionAttempts={node.maxResubmissionAttempts}\n isRetryAllowed={isRetryAllowed()}\n />\n );\n case 7:\n if (nfcPreparationError) {\n return (\n <MobilePageLayout\n footer={\n <div className=\"w-full max-w-md mx-auto\">\n <ButtonDesktop\n type=\"back\"\n onClick={() => setDocStep(2)}\n className=\"w-full text-[#3C3C40] text-center font-poppins text-sm font-medium hover:underline py-2\"\n >\n {t(\"buttons.back\", \"Retour\")}\n </ButtonDesktop>\n </div>\n }\n >\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(\"nfc_scan.preparation_error_title\", \"Erreur de préparation NFC\")}\n </h2>\n <p className=\"text-gray-600 mb-4\">{nfcPreparationError}</p>\n </div>\n </MobilePageLayout>\n );\n }\n return (\n <NfcScanStep\n sessionId={sessionId}\n nodeId={node.id}\n stepObject={stepObject}\n template={template}\n onBack={() => {\n // Retour vers la sélection du document (corriger un mauvais choix). Le démontage de\n // NfcScanStep ferme le SSE via le cleanup du hook (pas d'appel backend nécessaire).\n const hasIntroduction =\n node.introductionPage?.title !== undefined ||\n node.introductionPage?.description !== undefined;\n hasRestoredNfcStep.current = true; // ne pas re-restaurer l'étape QR après ce retour\n setDocStep(hasIntroduction ? 0 : 1);\n }}\n />\n );\n default:\n console.error(`Invalid docStep: ${docStep}`);\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_check.navigation_error.title\", \"Erreur de navigation\")}\n </h2>\n <p className=\"text-gray-600 mb-4\">\n {t(\n \"document_check.navigation_error.description\",\n \"Étape non valide. Veuillez recommencer.\",\n )}\n </p>\n <ButtonDesktop\n className=\"px-4 py-2 bg-primary text-white rounded hover:bg-primary-dark transition-colors\"\n type=\"back\"\n onClick={() => setDocStep(0)}\n >\n {t(\"document_check.navigation_error.back\", \"Retour au début\")}\n </ButtonDesktop>\n </div>\n );\n }\n};\n\nexport default DocumentCheck;\n"],"names":["_jsx","_jsxs"],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { Fragment } from 'react';
3
+ import * as Label from '@radix-ui/react-label';
4
+ import clsx from 'clsx';
5
+ import { useI18n } from '../../../hooks/useI18n.js';
6
+
7
+ var LegalRepFields = function (_a) {
8
+ var form = _a.form, errors = _a.errors, requestedFields = _a.requestedFields, onFieldChange = _a.onFieldChange;
9
+ var t = useI18n().t;
10
+ return (jsxs(Fragment, { children: [requestedFields.has("legalRepresentativeNom") && (jsxs("div", { className: "space-y-2", children: [jsx(Label.Root, { htmlFor: "legalRepresentativeLastName", className: "block text-sm md:text-base font-semibold text-gray-900", children: t("user_input_form.fields.legal_representative_last_name", "Nom du représentant légal") }), jsx("input", { id: "legalRepresentativeLastName", type: "text", value: form.legalRepresentativeLastName || "", onChange: function (event) {
11
+ return onFieldChange("legalRepresentativeLastName", event.target.value);
12
+ }, placeholder: t("user_input_form.placeholders.legal_representative_last_name", "Nom"), className: clsx("w-full px-3 py-3 md:py-4 border rounded-lg text-base transition-colors focus:outline-none focus:ring-2 focus:ring-[#11E5C5] focus:border-transparent", errors.legalRepresentativeLastName
13
+ ? "border-red-500 bg-red-50"
14
+ : "border-gray-300 hover-border-gray-400"), autoComplete: "off" }), errors.legalRepresentativeLastName && (jsxs("p", { className: "text-red-600 text-sm flex items-center gap-1", children: [jsx("span", { className: "text-red-500", children: "\u26A0" }), t("user_input_form.errors.legal_representative_last_name_required")] }))] })), requestedFields.has("legalRepresentativePrenom") && (jsxs("div", { className: "space-y-2", children: [jsx(Label.Root, { htmlFor: "legalRepresentativeFirstName", className: "block text-sm md:text-base font-semibold text-gray-900", children: t("user_input_form.fields.legal_representative_first_name", "Prénom du représentant légal") }), jsx("input", { id: "legalRepresentativeFirstName", type: "text", value: form.legalRepresentativeFirstName || "", onChange: function (event) {
15
+ return onFieldChange("legalRepresentativeFirstName", event.target.value);
16
+ }, placeholder: t("user_input_form.placeholders.legal_representative_first_name", "Prénom"), className: clsx("w-full px-3 py-3 md:py-4 border rounded-lg text-base transition-colors focus:outline-none focus:ring-2 focus:ring-[#11E5C5] focus:border-transparent", errors.legalRepresentativeFirstName
17
+ ? "border-red-500 bg-red-50"
18
+ : "border-gray-300 hover-border-gray-400"), autoComplete: "off" }), errors.legalRepresentativeFirstName && (jsxs("p", { className: "text-red-600 text-sm flex items-center gap-1", children: [jsx("span", { className: "text-red-500", children: "\u26A0" }), t("user_input_form.errors.legal_representative_first_name_required")] }))] }))] }));
19
+ };
20
+
21
+ export { LegalRepFields as default };
22
+ //# sourceMappingURL=LegalRepFields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LegalRepFields.js","sources":["../../../../../../src/components/session/UserInputForm/LegalRepFields.tsx"],"sourcesContent":["import { Fragment } from \"react\";\nimport * as Label from \"@radix-ui/react-label\";\nimport clsx from \"clsx\";\nimport type {\n RequestedFields,\n UserInputFormErrors,\n UserInputFormState,\n} from \"../../../types/userInputForm\";\nimport { useI18n } from \"../../../hooks/useI18n\";\n\ninterface LegalRepFieldsProps {\n form: UserInputFormState;\n errors: UserInputFormErrors;\n requestedFields: RequestedFields;\n onFieldChange: (key: keyof UserInputFormState, value: string) => void;\n}\n\nconst LegalRepFields = ({\n form,\n errors,\n requestedFields,\n onFieldChange,\n}: LegalRepFieldsProps) => {\n const { t } = useI18n();\n\n return (\n <Fragment>\n {requestedFields.has(\"legalRepresentativeNom\") && (\n <div className=\"space-y-2\">\n <Label.Root\n htmlFor=\"legalRepresentativeLastName\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(\n \"user_input_form.fields.legal_representative_last_name\",\n \"Nom du représentant légal\",\n )}\n </Label.Root>\n <input\n id=\"legalRepresentativeLastName\"\n type=\"text\"\n value={form.legalRepresentativeLastName || \"\"}\n onChange={(event) =>\n onFieldChange(\"legalRepresentativeLastName\", event.target.value)\n }\n placeholder={t(\n \"user_input_form.placeholders.legal_representative_last_name\",\n \"Nom\",\n )}\n className={clsx(\n \"w-full px-3 py-3 md:py-4 border rounded-lg text-base transition-colors focus:outline-none focus:ring-2 focus:ring-[#11E5C5] focus:border-transparent\",\n errors.legalRepresentativeLastName\n ? \"border-red-500 bg-red-50\"\n : \"border-gray-300 hover-border-gray-400\",\n )}\n autoComplete=\"off\"\n />\n {errors.legalRepresentativeLastName && (\n <p className=\"text-red-600 text-sm flex items-center gap-1\">\n <span className=\"text-red-500\">⚠</span>\n {t(\n \"user_input_form.errors.legal_representative_last_name_required\",\n )}\n </p>\n )}\n </div>\n )}\n\n {requestedFields.has(\"legalRepresentativePrenom\") && (\n <div className=\"space-y-2\">\n <Label.Root\n htmlFor=\"legalRepresentativeFirstName\"\n className=\"block text-sm md:text-base font-semibold text-gray-900\"\n >\n {t(\n \"user_input_form.fields.legal_representative_first_name\",\n \"Prénom du représentant légal\",\n )}\n </Label.Root>\n <input\n id=\"legalRepresentativeFirstName\"\n type=\"text\"\n value={form.legalRepresentativeFirstName || \"\"}\n onChange={(event) =>\n onFieldChange(\"legalRepresentativeFirstName\", event.target.value)\n }\n placeholder={t(\n \"user_input_form.placeholders.legal_representative_first_name\",\n \"Prénom\",\n )}\n className={clsx(\n \"w-full px-3 py-3 md:py-4 border rounded-lg text-base transition-colors focus:outline-none focus:ring-2 focus:ring-[#11E5C5] focus:border-transparent\",\n errors.legalRepresentativeFirstName\n ? \"border-red-500 bg-red-50\"\n : \"border-gray-300 hover-border-gray-400\",\n )}\n autoComplete=\"off\"\n />\n {errors.legalRepresentativeFirstName && (\n <p className=\"text-red-600 text-sm flex items-center gap-1\">\n <span className=\"text-red-500\">⚠</span>\n {t(\n \"user_input_form.errors.legal_representative_first_name_required\",\n )}\n </p>\n )}\n </div>\n )}\n </Fragment>\n );\n};\n\nexport default LegalRepFields;\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;AAiBA,IAAM,cAAc,GAAG,UAAC,EAKF,EAAA;QAJpB,IAAI,GAAA,EAAA,CAAA,IAAA,EACJ,MAAM,GAAA,EAAA,CAAA,MAAA,EACN,eAAe,GAAA,EAAA,CAAA,eAAA,EACf,aAAa,GAAA,EAAA,CAAA,aAAA;AAEL,IAAA,IAAA,CAAC,GAAK,OAAO,EAAE,EAAd;IAET,QACEA,IAAA,CAAC,QAAQ,EAAA,EAAA,QAAA,EAAA,CACN,eAAe,CAAC,GAAG,CAAC,wBAAwB,CAAC,KAC5CA,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,EAAA,QAAA,EAAA,CACxBC,GAAA,CAAC,KAAK,CAAC,IAAI,EAAA,EACT,OAAO,EAAC,6BAA6B,EACrC,SAAS,EAAC,wDAAwD,YAEjE,CAAC,CACA,uDAAuD,EACvD,2BAA2B,CAC5B,EAAA,CACU,EACbA,GAAA,CAAA,OAAA,EAAA,EACE,EAAE,EAAC,6BAA6B,EAChC,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,IAAI,CAAC,2BAA2B,IAAI,EAAE,EAC7C,QAAQ,EAAE,UAAC,KAAK,EAAA;4BACd,OAAA,aAAa,CAAC,6BAA6B,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;AAAhE,wBAAA,CAAgE,EAElE,WAAW,EAAE,CAAC,CACZ,6DAA6D,EAC7D,KAAK,CACN,EACD,SAAS,EAAE,IAAI,CACb,sJAAsJ,EACtJ,MAAM,CAAC;AACL,8BAAE;AACF,8BAAE,uCAAuC,CAC5C,EACD,YAAY,EAAC,KAAK,EAAA,CAClB,EACD,MAAM,CAAC,2BAA2B,KACjCD,IAAA,CAAA,GAAA,EAAA,EAAG,SAAS,EAAC,8CAA8C,aACzDC,GAAA,CAAA,MAAA,EAAA,EAAM,SAAS,EAAC,cAAc,uBAAS,EACtC,CAAC,CACA,gEAAgE,CACjE,IACC,CACL,CAAA,EAAA,CACG,CACP,EAEA,eAAe,CAAC,GAAG,CAAC,2BAA2B,CAAC,KAC/CD,IAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,WAAW,aACxBC,GAAA,CAAC,KAAK,CAAC,IAAI,EAAA,EACT,OAAO,EAAC,8BAA8B,EACtC,SAAS,EAAC,wDAAwD,EAAA,QAAA,EAEjE,CAAC,CACA,wDAAwD,EACxD,8BAA8B,CAC/B,EAAA,CACU,EACbA,GAAA,CAAA,OAAA,EAAA,EACE,EAAE,EAAC,8BAA8B,EACjC,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,IAAI,CAAC,4BAA4B,IAAI,EAAE,EAC9C,QAAQ,EAAE,UAAC,KAAK,EAAA;4BACd,OAAA,aAAa,CAAC,8BAA8B,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC;AAAjE,wBAAA,CAAiE,EAEnE,WAAW,EAAE,CAAC,CACZ,8DAA8D,EAC9D,QAAQ,CACT,EACD,SAAS,EAAE,IAAI,CACb,sJAAsJ,EACtJ,MAAM,CAAC;AACL,8BAAE;AACF,8BAAE,uCAAuC,CAC5C,EACD,YAAY,EAAC,KAAK,EAAA,CAClB,EACD,MAAM,CAAC,4BAA4B,KAClCD,YAAG,SAAS,EAAC,8CAA8C,EAAA,QAAA,EAAA,CACzDC,cAAM,SAAS,EAAC,cAAc,EAAA,QAAA,EAAA,QAAA,EAAA,CAAS,EACtC,CAAC,CACA,iEAAiE,CAClE,IACC,CACL,CAAA,EAAA,CACG,CACP,CAAA,EAAA,CACQ;AAEf;;;;"}
@@ -7,6 +7,7 @@ import { useI18n } from '../../hooks/useI18n.js';
7
7
  import { useUserInputForm } from '../../hooks/useUserInputForm.js';
8
8
  import IdentityFields from './UserInputForm/IdentityFields.js';
9
9
  import LegalEntityFields from './UserInputForm/LegalEntityFields.js';
10
+ import LegalRepFields from './UserInputForm/LegalRepFields.js';
10
11
  import ContactFields from './UserInputForm/ContactFields.js';
11
12
  import AddressFields from './UserInputForm/AddressFields.js';
12
13
  import NationalityField from './UserInputForm/NationalityField.js';
@@ -28,7 +29,7 @@ var UserInputForm = function (props) {
28
29
  return (jsxs(MobilePageLayout, { contentClassName: "h-full", footer: jsx(PageActions, { primary: jsx(Button, { onClick: goOnNextStep, children: t("user_input_form.buttons.continue") }), secondary: jsx(Button, { variant: "secondary", onClick: goOnPreviousStep, children: t("user_input_form.buttons.back") }) }), children: [typeof process !== "undefined" &&
29
30
  ((_a = process.env) === null || _a === void 0 ? void 0 : _a.NODE_ENV) === "development" && (jsx("div", { className: "fixed right-0 top-0 z-50 bg-green-500 p-2 text-xs text-white", children: "UserInputForm Rendered \u2713" })), jsx("div", { className: "px-4 py-6 pt-11 md:px-8 md:py-8", children: jsxs("div", { className: "mx-auto w-full space-y-6 ".concat(hasListCustomField
30
31
  ? "max-w-[98vw] md:max-w-[1300px] lg:max-w-[1500px]"
31
- : "max-w-md"), children: [jsxs("div", { className: "space-y-4 text-center", children: [jsx(Title, { className: "text-xl md:text-2xl lg:text-3xl", children: pageTitle }), jsx(Subtitle, { className: "text-sm leading-relaxed text-gray-600 md:text-base whitespace-pre-line", children: pageDescription })] }), jsxs("div", { className: "space-y-6 z-30 h-full", children: [informationType === "identity" && (jsx(IdentityFields, { form: form, errors: errors, requestedFields: requestedFields, onFieldChange: handleFieldChange })), informationType === "identity-legal" && (jsxs(Fragment, { children: [jsx(LegalEntityFields, { form: form, errors: errors, requestedFields: requestedFields, onFieldChange: handleFieldChange }), requestedFields.has("adresse") && (jsxs("div", { className: "space-y-4", children: [jsx("h3", { className: "text-lg md:text-xl font-semibold text-gray-900", children: t("user_input_form.registered_office_address", "Adresse du siège social") }), jsx(AddressFields, { form: form, errors: errors, requestedFields: requestedFields, onFieldChange: handleFieldChange, addressSuggestions: addressSuggestions, showSuggestions: showSuggestions, onAddressChange: handleAddressChange, onAddressFocus: handleAddressFocus, onAddressBlur: handleAddressBlur, onApplySuggestion: applyAddressSuggestion })] }))] })), informationType === "contact" && (jsx(ContactFields, { form: form, errors: errors, requestedFields: requestedFields, onFieldChange: handleFieldChange })), informationType === "address" && (jsx(AddressFields, { form: form, errors: errors, requestedFields: requestedFields, onFieldChange: handleFieldChange, addressSuggestions: addressSuggestions, showSuggestions: showSuggestions, onAddressChange: handleAddressChange, onAddressFocus: handleAddressFocus, onAddressBlur: handleAddressBlur, onApplySuggestion: applyAddressSuggestion })), informationType === "nationality" && (jsx(NationalityField, { form: form, errors: errors, requestedFields: requestedFields, onFieldChange: handleFieldChange })), informationType === "custom" && props.node.customFields && (jsx(CustomFormFields, { customFields: props.node.customFields, formData: customFormData, errors: customFormErrors, cellErrors: customFormCellErrors, onFieldChange: handleCustomFieldChange, addressSuggestions: addressSuggestions, showSuggestions: showSuggestions, onAddressChange: function (fieldId, val) { return handleAddressChange(val); }, onAddressFocus: function (fieldId) { return handleAddressFocus(); }, onAddressBlur: function (fieldId) { return handleAddressBlur(); }, onApplySuggestion: function (fieldId, suggestion) {
32
+ : "max-w-md"), children: [jsxs("div", { className: "space-y-4 text-center", children: [jsx(Title, { className: "text-xl md:text-2xl lg:text-3xl", children: pageTitle }), jsx(Subtitle, { className: "text-sm leading-relaxed text-gray-600 md:text-base whitespace-pre-line", children: pageDescription })] }), jsxs("div", { className: "space-y-6 z-30 h-full", children: [informationType === "identity" && (jsx(IdentityFields, { form: form, errors: errors, requestedFields: requestedFields, onFieldChange: handleFieldChange })), informationType === "identity-legal-rep" && (jsx(LegalRepFields, { form: form, errors: errors, requestedFields: requestedFields, onFieldChange: handleFieldChange })), informationType === "identity-legal" && (jsxs(Fragment, { children: [jsx(LegalEntityFields, { form: form, errors: errors, requestedFields: requestedFields, onFieldChange: handleFieldChange }), requestedFields.has("adresse") && (jsxs("div", { className: "space-y-4", children: [jsx("h3", { className: "text-lg md:text-xl font-semibold text-gray-900", children: t("user_input_form.registered_office_address", "Adresse du siège social") }), jsx(AddressFields, { form: form, errors: errors, requestedFields: requestedFields, onFieldChange: handleFieldChange, addressSuggestions: addressSuggestions, showSuggestions: showSuggestions, onAddressChange: handleAddressChange, onAddressFocus: handleAddressFocus, onAddressBlur: handleAddressBlur, onApplySuggestion: applyAddressSuggestion })] }))] })), informationType === "contact" && (jsx(ContactFields, { form: form, errors: errors, requestedFields: requestedFields, onFieldChange: handleFieldChange })), informationType === "address" && (jsx(AddressFields, { form: form, errors: errors, requestedFields: requestedFields, onFieldChange: handleFieldChange, addressSuggestions: addressSuggestions, showSuggestions: showSuggestions, onAddressChange: handleAddressChange, onAddressFocus: handleAddressFocus, onAddressBlur: handleAddressBlur, onApplySuggestion: applyAddressSuggestion })), informationType === "nationality" && (jsx(NationalityField, { form: form, errors: errors, requestedFields: requestedFields, onFieldChange: handleFieldChange })), informationType === "custom" && props.node.customFields && (jsx(CustomFormFields, { customFields: props.node.customFields, formData: customFormData, errors: customFormErrors, cellErrors: customFormCellErrors, onFieldChange: handleCustomFieldChange, addressSuggestions: addressSuggestions, showSuggestions: showSuggestions, onAddressChange: function (fieldId, val) { return handleAddressChange(val); }, onAddressFocus: function (fieldId) { return handleAddressFocus(); }, onAddressBlur: function (fieldId) { return handleAddressBlur(); }, onApplySuggestion: function (fieldId, suggestion) {
32
33
  return applyAddressSuggestion(suggestion);
33
34
  } }))] })] }) })] }));
34
35
  };
@@ -1 +1 @@
1
- {"version":3,"file":"UserInputForm.js","sources":["../../../../../src/components/session/UserInputForm.tsx"],"sourcesContent":["import type { UserInputFormProps } from \"../../types/userInput\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport { useUserInputForm } from \"../../hooks/useUserInputForm\";\nimport IdentityFields from \"./UserInputForm/IdentityFields\";\nimport LegalEntityFields from \"./UserInputForm/LegalEntityFields\";\nimport ContactFields from \"./UserInputForm/ContactFields\";\nimport AddressFields from \"./UserInputForm/AddressFields\";\nimport NationalityField from \"./UserInputForm/NationalityField\";\nimport CustomFormFields from \"./UserInputForm/CustomFormFields\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\nconst UserInputForm = (props: UserInputFormProps) => {\n const { t } = useI18n();\n const hasListCustomField =\n props.node.informationType === \"custom\" &&\n (props.node.customFields || []).some((field) => field.valueType === \"list\");\n\n const {\n form,\n errors,\n informationType,\n requestedFields,\n pageTitle,\n pageDescription,\n addressSuggestions,\n showSuggestions,\n handleFieldChange,\n handleAddressChange,\n handleAddressFocus,\n handleAddressBlur,\n applyAddressSuggestion,\n goOnNextStep,\n goOnPreviousStep,\n customFormData,\n customFormErrors,\n customFormCellErrors,\n handleCustomFieldChange,\n } = useUserInputForm(props);\n\n // DEBUG LOGS\n console.log(\"🔍 [UserInputForm] informationType:\", informationType);\n console.log(\n \"🔍 [UserInputForm] node.informationType:\",\n props.node.informationType,\n );\n console.log(\"🔍 [UserInputForm] node.customFields:\", props.node.customFields);\n console.log(\"🔍 [UserInputForm] customFormData:\", customFormData);\n console.log(\n \"🔍 [UserInputForm] requestedFields:\",\n Array.from(requestedFields),\n );\n\n return (\n <MobilePageLayout\n contentClassName=\"h-full\"\n footer={\n <PageActions\n primary={\n <Button onClick={goOnNextStep}>\n {t(\"user_input_form.buttons.continue\")}\n </Button>\n }\n secondary={\n <Button variant=\"secondary\" onClick={goOnPreviousStep}>\n {t(\"user_input_form.buttons.back\")}\n </Button>\n }\n />\n }\n >\n {typeof process !== \"undefined\" &&\n process.env?.NODE_ENV === \"development\" && (\n <div className=\"fixed right-0 top-0 z-50 bg-green-500 p-2 text-xs text-white\">\n UserInputForm Rendered ✓\n </div>\n )}\n\n <div className=\"px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div\n className={`mx-auto w-full space-y-6 ${\n hasListCustomField\n ? \"max-w-[98vw] md:max-w-[1300px] lg:max-w-[1500px]\"\n : \"max-w-md\"\n }`}\n >\n <div className=\"space-y-4 text-center\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {pageTitle}\n </Title>\n <Subtitle className=\"text-sm leading-relaxed text-gray-600 md:text-base whitespace-pre-line\">\n {pageDescription}\n </Subtitle>\n </div>\n\n <div className=\"space-y-6 z-30 h-full\">\n {informationType === \"identity\" && (\n <IdentityFields\n form={form}\n errors={errors}\n requestedFields={requestedFields}\n onFieldChange={handleFieldChange}\n />\n )}\n\n {informationType === \"identity-legal\" && (\n <>\n <LegalEntityFields\n form={form}\n errors={errors}\n requestedFields={requestedFields}\n onFieldChange={handleFieldChange}\n />\n {requestedFields.has(\"adresse\") && (\n <div className=\"space-y-4\">\n <h3 className=\"text-lg md:text-xl font-semibold text-gray-900\">\n {t(\n \"user_input_form.registered_office_address\",\n \"Adresse du siège social\",\n )}\n </h3>\n <AddressFields\n form={form}\n errors={errors}\n requestedFields={requestedFields}\n onFieldChange={handleFieldChange}\n addressSuggestions={addressSuggestions}\n showSuggestions={showSuggestions}\n onAddressChange={handleAddressChange}\n onAddressFocus={handleAddressFocus}\n onAddressBlur={handleAddressBlur}\n onApplySuggestion={applyAddressSuggestion}\n />\n </div>\n )}\n </>\n )}\n\n {informationType === \"contact\" && (\n <ContactFields\n form={form}\n errors={errors}\n requestedFields={requestedFields}\n onFieldChange={handleFieldChange}\n />\n )}\n\n {informationType === \"address\" && (\n <AddressFields\n form={form}\n errors={errors}\n requestedFields={requestedFields}\n onFieldChange={handleFieldChange}\n addressSuggestions={addressSuggestions}\n showSuggestions={showSuggestions}\n onAddressChange={handleAddressChange}\n onAddressFocus={handleAddressFocus}\n onAddressBlur={handleAddressBlur}\n onApplySuggestion={applyAddressSuggestion}\n />\n )}\n\n {informationType === \"nationality\" && (\n <NationalityField\n form={form}\n errors={errors}\n requestedFields={requestedFields}\n onFieldChange={handleFieldChange}\n />\n )}\n\n {informationType === \"custom\" && props.node.customFields && (\n <CustomFormFields\n customFields={props.node.customFields}\n formData={customFormData}\n errors={customFormErrors}\n cellErrors={customFormCellErrors}\n onFieldChange={handleCustomFieldChange}\n addressSuggestions={addressSuggestions}\n showSuggestions={showSuggestions}\n onAddressChange={(fieldId, val) => handleAddressChange(val)}\n onAddressFocus={(fieldId) => handleAddressFocus()}\n onAddressBlur={(fieldId) => handleAddressBlur()}\n onApplySuggestion={(fieldId, suggestion) =>\n applyAddressSuggestion(suggestion)\n }\n />\n )}\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default UserInputForm;\n"],"names":["_jsxs","_jsx"],"mappings":"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"}
1
+ {"version":3,"file":"UserInputForm.js","sources":["../../../../../src/components/session/UserInputForm.tsx"],"sourcesContent":["import type { UserInputFormProps } from \"../../types/userInput\";\nimport Button from \"../ui/Button\";\nimport PageActions from \"../ui/PageActions\";\nimport Title from \"../ui/Title\";\nimport Subtitle from \"../ui/Subtitle\";\nimport { useI18n } from \"../../hooks/useI18n\";\nimport { useUserInputForm } from \"../../hooks/useUserInputForm\";\nimport IdentityFields from \"./UserInputForm/IdentityFields\";\nimport LegalEntityFields from \"./UserInputForm/LegalEntityFields\";\nimport LegalRepFields from \"./UserInputForm/LegalRepFields\";\nimport ContactFields from \"./UserInputForm/ContactFields\";\nimport AddressFields from \"./UserInputForm/AddressFields\";\nimport NationalityField from \"./UserInputForm/NationalityField\";\nimport CustomFormFields from \"./UserInputForm/CustomFormFields\";\nimport MobilePageLayout from \"../ui/MobilePageLayout\";\n\nconst UserInputForm = (props: UserInputFormProps) => {\n const { t } = useI18n();\n const hasListCustomField =\n props.node.informationType === \"custom\" &&\n (props.node.customFields || []).some((field) => field.valueType === \"list\");\n\n const {\n form,\n errors,\n informationType,\n requestedFields,\n pageTitle,\n pageDescription,\n addressSuggestions,\n showSuggestions,\n handleFieldChange,\n handleAddressChange,\n handleAddressFocus,\n handleAddressBlur,\n applyAddressSuggestion,\n goOnNextStep,\n goOnPreviousStep,\n customFormData,\n customFormErrors,\n customFormCellErrors,\n handleCustomFieldChange,\n } = useUserInputForm(props);\n\n // DEBUG LOGS\n console.log(\"🔍 [UserInputForm] informationType:\", informationType);\n console.log(\n \"🔍 [UserInputForm] node.informationType:\",\n props.node.informationType,\n );\n console.log(\"🔍 [UserInputForm] node.customFields:\", props.node.customFields);\n console.log(\"🔍 [UserInputForm] customFormData:\", customFormData);\n console.log(\n \"🔍 [UserInputForm] requestedFields:\",\n Array.from(requestedFields),\n );\n\n return (\n <MobilePageLayout\n contentClassName=\"h-full\"\n footer={\n <PageActions\n primary={\n <Button onClick={goOnNextStep}>\n {t(\"user_input_form.buttons.continue\")}\n </Button>\n }\n secondary={\n <Button variant=\"secondary\" onClick={goOnPreviousStep}>\n {t(\"user_input_form.buttons.back\")}\n </Button>\n }\n />\n }\n >\n {typeof process !== \"undefined\" &&\n process.env?.NODE_ENV === \"development\" && (\n <div className=\"fixed right-0 top-0 z-50 bg-green-500 p-2 text-xs text-white\">\n UserInputForm Rendered ✓\n </div>\n )}\n\n <div className=\"px-4 py-6 pt-11 md:px-8 md:py-8\">\n <div\n className={`mx-auto w-full space-y-6 ${\n hasListCustomField\n ? \"max-w-[98vw] md:max-w-[1300px] lg:max-w-[1500px]\"\n : \"max-w-md\"\n }`}\n >\n <div className=\"space-y-4 text-center\">\n <Title className=\"text-xl md:text-2xl lg:text-3xl\">\n {pageTitle}\n </Title>\n <Subtitle className=\"text-sm leading-relaxed text-gray-600 md:text-base whitespace-pre-line\">\n {pageDescription}\n </Subtitle>\n </div>\n\n <div className=\"space-y-6 z-30 h-full\">\n {informationType === \"identity\" && (\n <IdentityFields\n form={form}\n errors={errors}\n requestedFields={requestedFields}\n onFieldChange={handleFieldChange}\n />\n )}\n\n {informationType === \"identity-legal-rep\" && (\n <LegalRepFields\n form={form}\n errors={errors}\n requestedFields={requestedFields}\n onFieldChange={handleFieldChange}\n />\n )}\n\n {informationType === \"identity-legal\" && (\n <>\n <LegalEntityFields\n form={form}\n errors={errors}\n requestedFields={requestedFields}\n onFieldChange={handleFieldChange}\n />\n {requestedFields.has(\"adresse\") && (\n <div className=\"space-y-4\">\n <h3 className=\"text-lg md:text-xl font-semibold text-gray-900\">\n {t(\n \"user_input_form.registered_office_address\",\n \"Adresse du siège social\",\n )}\n </h3>\n <AddressFields\n form={form}\n errors={errors}\n requestedFields={requestedFields}\n onFieldChange={handleFieldChange}\n addressSuggestions={addressSuggestions}\n showSuggestions={showSuggestions}\n onAddressChange={handleAddressChange}\n onAddressFocus={handleAddressFocus}\n onAddressBlur={handleAddressBlur}\n onApplySuggestion={applyAddressSuggestion}\n />\n </div>\n )}\n </>\n )}\n\n {informationType === \"contact\" && (\n <ContactFields\n form={form}\n errors={errors}\n requestedFields={requestedFields}\n onFieldChange={handleFieldChange}\n />\n )}\n\n {informationType === \"address\" && (\n <AddressFields\n form={form}\n errors={errors}\n requestedFields={requestedFields}\n onFieldChange={handleFieldChange}\n addressSuggestions={addressSuggestions}\n showSuggestions={showSuggestions}\n onAddressChange={handleAddressChange}\n onAddressFocus={handleAddressFocus}\n onAddressBlur={handleAddressBlur}\n onApplySuggestion={applyAddressSuggestion}\n />\n )}\n\n {informationType === \"nationality\" && (\n <NationalityField\n form={form}\n errors={errors}\n requestedFields={requestedFields}\n onFieldChange={handleFieldChange}\n />\n )}\n\n {informationType === \"custom\" && props.node.customFields && (\n <CustomFormFields\n customFields={props.node.customFields}\n formData={customFormData}\n errors={customFormErrors}\n cellErrors={customFormCellErrors}\n onFieldChange={handleCustomFieldChange}\n addressSuggestions={addressSuggestions}\n showSuggestions={showSuggestions}\n onAddressChange={(fieldId, val) => handleAddressChange(val)}\n onAddressFocus={(fieldId) => handleAddressFocus()}\n onAddressBlur={(fieldId) => handleAddressBlur()}\n onApplySuggestion={(fieldId, suggestion) =>\n applyAddressSuggestion(suggestion)\n }\n />\n )}\n </div>\n </div>\n </div>\n </MobilePageLayout>\n );\n};\n\nexport default UserInputForm;\n"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}
@@ -16,6 +16,7 @@ import SignatureElectronic from '../signature-electronic/SignatureElectronic.js'
16
16
  import ExternalVerificationNodeHandler from './ExternalVerificationNodeHandler.js';
17
17
  import PdfGeneration from '../session/PdfGeneration.js';
18
18
  import LegalConsentNode from '../legal-consent/LegalConsentNode.js';
19
+ import AgeControl from '../wallet/AgeControl.js';
19
20
 
20
21
  var TemplateNodeRenderer = function (_a) {
21
22
  var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;
@@ -93,7 +94,7 @@ var TemplateNodeRenderer = function (_a) {
93
94
  return (jsx(DocumentCollection, { node: node, stepObject: stepObject, sessionId: sessionId, template: session.template, onContinueOnPC: onContinueOnPC, allowedDocumentTypes: (node.allowedDocumentTypes || []).map(function (docType) { return (__assign(__assign({}, docType), { side: typeof docType.side === "string" ||
94
95
  typeof docType.side === "number"
95
96
  ? docType.side
96
- : undefined })); }), allowedAddingMethods: node.allowedAddingMethods || ["download"], introductionPage: node.introductionPage, documentSelection: node.documentSelection, allowResubmission: node.allowResubmission, maxResubmissionAttempts: node.maxResubmissionAttempts }, "doc-collection-".concat(templateIndex)));
97
+ : undefined })); }), allowedAddingMethods: node.allowedAddingMethods || ["download"], introductionPage: node.introductionPage, documentSelection: node.documentSelection, allowResubmission: node.allowResubmission, maxResubmissionAttempts: node.maxResubmissionAttempts, countryCode: userInput === null || userInput === void 0 ? void 0 : userInput.countryCode }, "doc-collection-".concat(templateIndex)));
97
98
  }
98
99
  case "document-selection":
99
100
  case "controle-jdi": {
@@ -120,6 +121,8 @@ var TemplateNodeRenderer = function (_a) {
120
121
  case "jdd":
121
122
  console.log("🚧 Rendering JDD Work in Progress component");
122
123
  return jsx(JDDWorkInProgress, { onContinue: onContinueOnPC });
124
+ case "age-control":
125
+ return (jsx(AgeControl, { sessionId: sessionId, node: node, stepObject: stepObject, template: session.template, countryCode: userInput === null || userInput === void 0 ? void 0 : userInput.countryCode }, "age-control-".concat(templateIndex)));
123
126
  case "condition":
124
127
  console.debug("🔀 Rendering Condition Node Handler component and well");
125
128
  return (jsx(ConditionNodeHandler, { node: node, session: session, templateNodes: templateNodes, stepObject: stepObject, userInput: userInput, contactInfo: contactInfo }));
@@ -165,6 +168,7 @@ var TemplateNodeRenderer = function (_a) {
165
168
  "video-capture",
166
169
  "country-selection",
167
170
  "identity-control",
171
+ "age-control",
168
172
  "jdd",
169
173
  "condition",
170
174
  "custom",