@sanctum-key/react-native-sdk 1.0.60 → 1.0.62
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -0
- package/android/build/.transforms/ac63f648699cdd4b91e6ee06476f2a70/results.bin +1 -0
- package/android/build/.transforms/ac63f648699cdd4b91e6ee06476f2a70/transformed/classes/classes_dex/classes.dex +0 -0
- package/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml +9 -0
- package/android/build/intermediates/compile_library_classes_jar/debug/bundleLibCompileToJarDebug/classes.jar +0 -0
- package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +1 -1
- package/android/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt +45 -25
- package/android/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml +9 -0
- package/android/build/intermediates/runtime_library_classes_jar/debug/bundleLibRuntimeToJarDebug/classes.jar +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab +1 -1
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/last-build.bin +0 -0
- package/android/build/kotlin/compileDebugKotlin/classpath-snapshot/shrunk-classpath-snapshot.bin +0 -0
- package/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin +0 -0
- package/android/build/outputs/logs/manifest-merger-debug-report.txt +34 -12
- package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/SanctumKeySdkModule$BarcodeRegion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/SanctumKeySdkModule$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$1$6$1.class → SanctumKeySdkModule$definition$1$7$1.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$1$6$2.class → SanctumKeySdkModule$definition$1$7$2.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunction$1.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$1.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunction$5.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$2.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunction$3.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$3.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$4.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunction$2.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$5.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$6.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunction$4.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$7.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$8.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunction$6.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunction$9.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$1.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunctionWithPromise$1.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$2.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunctionWithPromise$2.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$3.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunctionWithPromise$3.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$4.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunctionWithPromise$4.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$5.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunctionWithPromise$5.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$6.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunctionWithPromise$6.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$AsyncFunctionWithPromise$7.class → SanctumKeySdkModule$definition$lambda$24$$inlined$AsyncFunctionWithPromise$7.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$$inlined$View$1.class → SanctumKeySdkModule$definition$lambda$24$$inlined$View$1.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$lambda$15$$inlined$Prop$1.class → SanctumKeySdkModule$definition$lambda$24$lambda$23$$inlined$Prop$1.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/{SanctumKeySdkModule$definition$lambda$16$lambda$15$$inlined$Prop$2.class → SanctumKeySdkModule$definition$lambda$24$lambda$23$$inlined$Prop$2.class} +0 -0
- package/android/build/tmp/kotlin-classes/debug/kyc/sanctumkey/com/SanctumKeySdkModule.class +0 -0
- package/android/src/main/AndroidManifest.xml +9 -0
- package/android/src/main/java/kyc/sanctumkey/com/SanctumKeySdkModule.kt +147 -0
- package/build/package.json +1 -1
- package/build/src/SanctumKeySdkModule.d.ts +2 -0
- package/build/src/SanctumKeySdkModule.d.ts.map +1 -1
- package/build/src/SanctumKeySdkModule.js.map +1 -1
- package/build/src/SanctumKeySdkModule.web.d.ts +2 -0
- package/build/src/SanctumKeySdkModule.web.d.ts.map +1 -1
- package/build/src/SanctumKeySdkModule.web.js +14 -0
- package/build/src/SanctumKeySdkModule.web.js.map +1 -1
- package/build/src/components/KYCElements/CountrySelection.d.ts.map +1 -1
- package/build/src/components/KYCElements/CountrySelection.js +1 -1
- package/build/src/components/KYCElements/CountrySelection.js.map +1 -1
- package/build/src/components/KYCElements/CountrySelectionTemplate.d.ts.map +1 -1
- package/build/src/components/KYCElements/CountrySelectionTemplate.js +27 -17
- package/build/src/components/KYCElements/CountrySelectionTemplate.js.map +1 -1
- package/build/src/components/KYCElements/IDCardCapture.d.ts.map +1 -1
- package/build/src/components/KYCElements/IDCardCapture.js +46 -28
- package/build/src/components/KYCElements/IDCardCapture.js.map +1 -1
- package/build/src/components/OverLay/IdCard.d.ts +1 -1
- package/build/src/components/OverLay/IdCard.d.ts.map +1 -1
- package/build/src/components/OverLay/IdCard.js +47 -14
- package/build/src/components/OverLay/IdCard.js.map +1 -1
- package/build/src/components/OverLay/type.d.ts +2 -0
- package/build/src/components/OverLay/type.d.ts.map +1 -1
- package/build/src/components/OverLay/type.js.map +1 -1
- package/build/src/components/Svgs/scanningLine.d.ts +4 -1
- package/build/src/components/Svgs/scanningLine.d.ts.map +1 -1
- package/build/src/components/Svgs/scanningLine.js +15 -11
- package/build/src/components/Svgs/scanningLine.js.map +1 -1
- package/build/src/components/TemplateKYCExample.d.ts +4 -1
- package/build/src/components/TemplateKYCExample.d.ts.map +1 -1
- package/build/src/components/TemplateKYCExample.js +2 -2
- package/build/src/components/TemplateKYCExample.js.map +1 -1
- package/build/src/components/TemplateKYCFlowRefactored.d.ts +4 -2
- package/build/src/components/TemplateKYCFlowRefactored.d.ts.map +1 -1
- package/build/src/components/TemplateKYCFlowRefactored.js +157 -8
- package/build/src/components/TemplateKYCFlowRefactored.js.map +1 -1
- package/build/src/config/region_mapping.d.ts.map +1 -1
- package/build/src/config/region_mapping.js +28 -0
- package/build/src/config/region_mapping.js.map +1 -1
- package/build/src/config/region_mapping.json +28 -0
- package/build/src/index.d.ts +2 -0
- package/build/src/index.d.ts.map +1 -1
- package/build/src/index.js +2 -0
- package/build/src/index.js.map +1 -1
- package/build/src/security/deviceSecurity.d.ts +30 -0
- package/build/src/security/deviceSecurity.d.ts.map +1 -0
- package/build/src/security/deviceSecurity.js +55 -0
- package/build/src/security/deviceSecurity.js.map +1 -0
- package/build/src/utils/logger.d.ts.map +1 -1
- package/build/src/utils/logger.js +5 -0
- package/build/src/utils/logger.js.map +1 -1
- package/ios/SanctumKeySdkModule.swift +93 -0
- package/package.json +1 -1
- package/src/SanctumKeySdkModule.ts +2 -0
- package/src/SanctumKeySdkModule.web.ts +16 -0
- package/src/components/KYCElements/CountrySelection.tsx +3 -1
- package/src/components/KYCElements/CountrySelectionTemplate.tsx +73 -24
- package/src/components/KYCElements/IDCardCapture.tsx +53 -30
- package/src/components/OverLay/IdCard.tsx +72 -15
- package/src/components/OverLay/type.ts +4 -2
- package/src/components/Svgs/scanningLine.tsx +19 -12
- package/src/components/TemplateKYCExample.tsx +8 -1
- package/src/components/TemplateKYCFlowRefactored.tsx +202 -16
- package/src/config/region_mapping.json +28 -0
- package/src/config/region_mapping.ts +28 -0
- package/src/index.ts +9 -1
- package/src/security/deviceSecurity.ts +106 -0
- package/src/utils/logger.ts +5 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CountrySelectionTemplate.js","sourceRoot":"","sources":["../../../../src/components/KYCElements/CountrySelectionTemplate.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState, useMemo, useEffect } from 'react';\nimport { View, Text, TouchableOpacity, StyleSheet, ScrollView, TextInput } from 'react-native';\nimport { TemplateComponent, CountrySelectionConfig, LocalizedText, Country, IDCardConfig } from '../../types/KYC.types';\nimport { countryMapping } from '../../config/region_mapping';\nimport { useTemplateKYCFlowContext } from '../../hooks/useTemplateKYCFlow';\nimport { Button } from '../ui/Button';\nimport { countryData } from '../../config/countriesData';\nimport REGION_MAPPING from '../../config/region_mapping.json';\nimport { sdkLogger } from '../../utils/logger'; // 🚨 IMPORT SDK LOGGER\n\ninterface CountrySelectionTemplateProps {\n component: TemplateComponent;\n value?: any;\n onValueChange: (value: Country & { documentType?: string; region?: string }) => void;\n error?: string;\n language?: string;\n}\n\ntype SelectionStep = 'country' | 'documentType' | 'region';\n\ntype ExtendedIDCardConfig = IDCardConfig & {\n selectedCountries?: string[];\n documentTypesByCountry?: Record<string, string[]>;\n regionsByCountry?: Record<string, Record<string, string[]>>;\n instructionsByDocumentType?: Record<string, LocalizedText>;\n};\n\nconst ISO_TO_COUNTRY_NAME: Record<string, string> = { 'KE': 'Kenya', 'CM': 'Cameroon', 'NG': 'Nigeria', 'CA': 'Canada', 'FR': 'France', 'GH': 'Ghana', 'ZA': 'South Africa', 'GB': 'Britain', 'CI': 'Ivory Coast', 'SN': 'Senegal', 'TG': 'Togo', 'ML': 'Mali' };\nconst jsonDocMap: Record<string, string> = { 'nationalId': 'identity_card', 'national_id': 'identity_card', 'passport': 'passport', 'driversLicense': 'drivers_licence', 'drivers_licence': 'drivers_licence', 'residencePermit': 'permanent_residence', 'healthInsuranceCard': 'health_insurance_card' };\nconst SUB_REGION_CODES: Record<string, string> = { \"Alberta\": \"AB\", \"British Columbia\": \"BC\", \"Manitoba\": \"MB\", \"New Brunswick\": \"NB\", \"Newfoundland and Labrador\": \"NL\", \"Northwest Territories\": \"NT\", \"Nova Scotia\": \"NS\", \"Nunavut\": \"NU\", \"Ontario\": \"ON\", \"Prince Edward Island\": \"PE\", \"Quebec\": \"QC\", \"Saskatchewan\": \"SK\", \"Yukon\": \"YT\" };\n\nexport const CountrySelectionTemplate: React.FC<CountrySelectionTemplateProps> = ({ component, value, onValueChange, error, language = 'en', }) => {\n const config = component.config as CountrySelectionConfig;\n const { actions, state } = useTemplateKYCFlowContext();\n\n // 🚨 LOG: Track when the user reaches this step\n useEffect(() => {\n if (state.session?.session_id) {\n sdkLogger.info(\"User started country and document selection step\");\n }\n }, [state.session?.session_id]);\n\n const idCardComponent = useMemo(() => { return state.template.components.find(c => c.type === 'id_card'); }, [state.template.components]);\n const idCardConfig = useMemo(() => { return idCardComponent?.config as ExtendedIDCardConfig | undefined; }, [idCardComponent]);\n \n const [currentStep, setCurrentStep] = useState<SelectionStep>(() => {\n if (value?.code && value?.documentType) {\n if (value.region) return 'region';\n return 'documentType';\n }\n return 'country';\n });\n \n const [selectedCountryCode, setSelectedCountryCode] = useState<string | null>(value?.code || null);\n const [selectedDocumentType, setSelectedDocumentType] = useState<string | null>(value?.documentType || null);\n const [selectedRegion, setSelectedRegion] = useState<string | null>(value?.region || null);\n const [searchQuery, setSearchQuery] = useState('');\n\n useEffect(() => {\n if (value?.code && value?.documentType) {\n setSelectedCountryCode(value.code);\n setSelectedDocumentType(value.documentType);\n setSelectedRegion(value.region || null);\n if (value.region) {\n setCurrentStep('region');\n } else {\n let regionsCheck = idCardConfig?.regionsByCountry?.[value.code]?.[value.documentType] || [];\n if (regionsCheck.length === 0) {\n const rawCountryName = ISO_TO_COUNTRY_NAME[value.code] || value.code;\n const searchDocType = jsonDocMap[value.documentType] || value.documentType;\n const baseMapping = (REGION_MAPPING as any).regionMapping || REGION_MAPPING;\n let countryMapping = baseMapping[rawCountryName];\n if (!countryMapping) {\n const foundKey = Object.keys(baseMapping).find(k => k.toLowerCase() === rawCountryName.toLowerCase());\n if (foundKey) countryMapping = baseMapping[foundKey];\n }\n if (countryMapping && countryMapping[searchDocType]) {\n regionsCheck = Object.keys(countryMapping[searchDocType]).filter(k => k !== 'root');\n }\n }\n if (Array.isArray(regionsCheck) && regionsCheck.length > 0) {\n setCurrentStep('region');\n } else {\n setCurrentStep('documentType');\n }\n }\n } else {\n setSelectedCountryCode(null);\n setSelectedDocumentType(null);\n setSelectedRegion(null);\n setCurrentStep('country');\n }\n }, [value?.code, value?.documentType, value?.region, idCardConfig]);\n\n useEffect(() => {\n if (error) { actions.updateComponentData(component.id, value); }\n }, []);\n\n const availableCountries = useMemo(() => {\n const explicitlyAllowed = idCardConfig?.selectedCountries || config.allowed_countries || [];\n const configuredCodes = new Set(explicitlyAllowed);\n return Array.from(configuredCodes)\n .filter((code: string) => countryData[code])\n .map((code: string) => ({ code, ...countryData[code] }))\n .sort((a: Country, b: Country) => a.name.localeCompare(b.name));\n }, [idCardConfig?.selectedCountries, config.allowed_countries]);\n\n const filteredCountries = useMemo(() => {\n if (!searchQuery.trim()) return availableCountries;\n const cleanQuery = searchQuery.toLowerCase().trim();\n return availableCountries.filter(country =>\n country.name.toLowerCase().includes(cleanQuery) || country.name_en.toLowerCase().includes(cleanQuery) || country.code.toLowerCase().includes(cleanQuery)\n );\n }, [searchQuery, availableCountries]);\n\n const availableDocumentTypes = useMemo(() => {\n if (!selectedCountryCode) return [];\n if (idCardConfig?.documentTypesByCountry?.[selectedCountryCode]) {\n return idCardConfig.documentTypesByCountry[selectedCountryCode];\n }\n const rawCountryName = ISO_TO_COUNTRY_NAME[selectedCountryCode] || selectedCountryCode;\n const baseMapping = (REGION_MAPPING as any).regionMapping || REGION_MAPPING;\n let countryMapping = baseMapping[rawCountryName];\n if (!countryMapping) {\n const foundKey = Object.keys(baseMapping).find(k => k.toLowerCase() === rawCountryName.toLowerCase());\n if (foundKey) countryMapping = baseMapping[foundKey];\n }\n if (countryMapping) {\n const inverseDocMap: Record<string, string> = { 'identity_card': 'nationalId', 'passport': 'passport', 'drivers_licence': 'driversLicense', 'permanent_residence': 'residencePermit', 'health_insurance_card': 'healthInsuranceCard' };\n return Object.keys(countryMapping).map(key => inverseDocMap[key] || key);\n }\n return ['nationalId', 'passport', 'driversLicense'];\n }, [selectedCountryCode, idCardConfig?.documentTypesByCountry]);\n\n const availableRegions = useMemo(() => {\n if (!selectedCountryCode || !selectedDocumentType) return [];\n let rawRegions: string[] = [];\n if (idCardConfig?.regionsByCountry?.[selectedCountryCode]?.[selectedDocumentType]) {\n rawRegions = idCardConfig.regionsByCountry[selectedCountryCode][selectedDocumentType];\n }\n if (rawRegions.length === 0) {\n const rawCountryName = ISO_TO_COUNTRY_NAME[selectedCountryCode] || selectedCountryCode;\n const searchDocType = jsonDocMap[selectedDocumentType] || selectedDocumentType;\n const baseMapping = (REGION_MAPPING as any).regionMapping || REGION_MAPPING;\n let countryMapping = baseMapping[rawCountryName];\n if (!countryMapping) {\n const foundKey = Object.keys(baseMapping).find(k => k.toLowerCase() === rawCountryName.toLowerCase());\n if (foundKey) countryMapping = baseMapping[foundKey];\n }\n if (countryMapping && countryMapping[searchDocType]) {\n rawRegions = Object.keys(countryMapping[searchDocType]).filter(k => k !== 'root');\n }\n }\n if (!Array.isArray(rawRegions)) return [];\n return rawRegions.sort((a, b) => a.localeCompare(b)).map(region => ({ label: region, value: SUB_REGION_CODES[region] || region }));\n }, [selectedCountryCode, selectedDocumentType, idCardConfig?.regionsByCountry]);\n\n const needsRegion = useMemo(() => { return availableRegions.length > 0; }, [availableRegions]);\n const getLocalizedText = (text: LocalizedText): string => { return text[state.currentLanguage] || text.en || ''; };\n\n const handleCountrySelect = (countryCode: string) => { setSelectedCountryCode(countryCode); setSelectedDocumentType(null); setSelectedRegion(null); };\n const handleDocumentTypeSelect = (docType: string) => { setSelectedDocumentType(docType); setSelectedRegion(null); };\n const handleRegionSelect = (regionValue: string) => { setSelectedRegion(regionValue); };\n\n const finalizeSelection = (countryCode: string, docType: string, region: string | null) => {\n const country = countryData[countryCode];\n if (!country) return;\n \n // 🚨 LOG: Final payload successfully selected\n sdkLogger.info(\"User finalized document configuration\", {\n countryCode,\n documentType: docType,\n region: region || 'none'\n });\n\n const mapping = countryMapping[countryCode as keyof typeof countryMapping];\n const countryObj: Country & { documentType?: string; region?: string } = {\n code: countryCode, ...country, regionMapping: mapping, documentType: docType, region: region || undefined,\n };\n onValueChange(countryObj);\n setTimeout(() => { actions.nextComponent(countryObj); }, 100);\n };\n\n const handleBack = () => {\n sdkLogger.info(\"User navigated back in document selection\", { fromStep: currentStep }); // 🚨 LOG\n\n if (currentStep === 'region') {\n setCurrentStep('documentType'); setSelectedRegion(null);\n } else if (currentStep === 'documentType') {\n setCurrentStep('country'); setSelectedDocumentType(null); setSelectedRegion(null); setSearchQuery('');\n } else if (currentStep === 'country') {\n actions.previousComponent();\n }\n };\n\n const handleNext = () => {\n if (currentStep === 'country' && selectedCountryCode) {\n setCurrentStep('documentType');\n } else if (currentStep === 'documentType' && selectedDocumentType) {\n if (needsRegion) { setCurrentStep('region'); } else {\n if (selectedCountryCode) { finalizeSelection(selectedCountryCode, selectedDocumentType, null); }\n }\n } else if (currentStep === 'region' && selectedRegion) {\n if (selectedCountryCode && selectedDocumentType) { finalizeSelection(selectedCountryCode, selectedDocumentType, selectedRegion); }\n }\n };\n\n const renderCountrySelection = () => {\n return (\n <>\n <TextInput style={styles.searchBar} placeholder={state.currentLanguage === \"en\" ? \"🔍 Search country...\" : \"🔍 Rechercher un pays...\"} placeholderTextColor=\"#94A3B8\" value={searchQuery} onChangeText={setSearchQuery} autoCorrect={false} />\n <ScrollView style={styles.listContainer} showsVerticalScrollIndicator={false}>\n {filteredCountries.map((country: Country & { code?: string }) => (\n <TouchableOpacity key={country.code} style={[styles.option, selectedCountryCode === country.code && styles.selectedOption]} onPress={() => handleCountrySelect(country.code!)}>\n <Text style={styles.flag}>{country.flag}</Text>\n <View style={styles.optionContent}>\n <Text style={[styles.optionName, selectedCountryCode === country.code && styles.selectedOptionName]}>{state.currentLanguage === \"en\" ? country.name_en : country.name}</Text>\n <Text style={styles.optionCode}>{country.code}</Text>\n </View>\n {selectedCountryCode === country.code && (\n <View style={[styles.checkmark, { backgroundColor: component.ui.themeColor as string || '#2DBD60' }]}><Text style={styles.checkmarkText}>✓</Text></View>\n )}\n </TouchableOpacity>\n ))}\n {filteredCountries.length === 0 && (\n <Text style={styles.emptyText}>{state.currentLanguage === \"en\" ? \"No matching countries found.\" : \"Aucun pays trouvé.\"}</Text>\n )}\n </ScrollView>\n </>\n );\n };\n\n const renderDocumentTypeSelection = () => {\n const instructions = selectedDocumentType && idCardConfig?.instructionsByDocumentType?.[selectedDocumentType] ? getLocalizedText(idCardConfig.instructionsByDocumentType[selectedDocumentType]) : null;\n const documentTypeLabels: Record<string, { en: string; fr: string; icon?: string }> = {\n 'nationalId': { en: 'National ID', fr: 'Carte nationale d\\'identité', icon: '🏛️' },\n 'passport': { en: 'Passport', fr: 'Passeport', icon: '📘' },\n 'driversLicense': { en: 'Driver\\'s License', fr: 'Permis de conduire', icon: '🚗' },\n 'residencePermit': { en: 'Residence Permit', fr: 'Permis de séjour', icon: '🏠' },\n 'healthInsuranceCard': { en: 'Health Insurance Card', fr: 'Carte d\\'assurance maladie', icon: '🗳️' },\n };\n return (\n <>\n {instructions && (<View style={styles.infoBox}><Text style={styles.infoText}>{instructions}</Text></View>)}\n <ScrollView style={styles.listContainer} showsVerticalScrollIndicator={false}>\n {availableDocumentTypes.map((docType: string) => {\n const label = documentTypeLabels[docType];\n const displayName = label ? (state.currentLanguage === \"en\" ? label.en : label.fr) : docType;\n const icon = label?.icon || '📄';\n return (\n <TouchableOpacity key={docType} style={[styles.option, selectedDocumentType === docType && styles.selectedOption]} onPress={() => handleDocumentTypeSelect(docType)}>\n <Text style={styles.flag}>{icon}</Text>\n <View style={styles.optionContent}>\n <Text style={[styles.optionName, selectedDocumentType === docType && styles.selectedOptionName]}>{displayName}</Text>\n </View>\n {selectedDocumentType === docType && (\n <View style={[styles.checkmark, { backgroundColor: component.ui.themeColor as string || '#2DBD60' }]}><Text style={styles.checkmarkText}>✓</Text></View>\n )}\n </TouchableOpacity>\n );\n })}\n </ScrollView>\n </>\n );\n };\n\n const renderRegionSelection = () => {\n return (\n <>\n <ScrollView style={styles.listContainer} showsVerticalScrollIndicator={false}>\n {availableRegions.map((regionObj, index: number) => {\n return (\n <TouchableOpacity key={index} style={[styles.option, selectedRegion === regionObj.value && styles.selectedOption]} onPress={() => handleRegionSelect(regionObj.value)}>\n <View style={styles.optionContent}>\n <Text style={[styles.optionName, selectedRegion === regionObj.value && styles.selectedOptionName]}>{regionObj.label}</Text>\n {regionObj.value !== regionObj.label && (<Text style={styles.optionCode}>{regionObj.value}</Text>)}\n </View>\n {selectedRegion === regionObj.value && (\n <View style={[styles.checkmark, { backgroundColor: component.ui.themeColor as string || '#2DBD60' }]}><Text style={styles.checkmarkText}>✓</Text></View>\n )}\n </TouchableOpacity>\n );\n })}\n </ScrollView>\n </>\n );\n };\n\n const getStepTitle = (): string => {\n switch (currentStep) {\n case 'country': return getLocalizedText(component.labels as LocalizedText);\n case 'documentType': return state.currentLanguage === \"en\" ? \"Select Document Type\" : \"Sélectionnez le type de document\";\n case 'region': return state.currentLanguage === \"en\" ? \"Select Province/State\" : \"Sélectionnez la province/l'état\";\n default: return '';\n }\n };\n\n const getStepDescription = (): string => {\n switch (currentStep) {\n case 'country': return getLocalizedText(component.instructions as LocalizedText);\n case 'documentType': return state.currentLanguage === \"en\" ? \"Choose the type of document you want to use\" : \"Choisissez le type de document que vous souhaitez utiliser\";\n case 'region': return state.currentLanguage === \"en\" ? \"Select the issuing province or territory\" : \"Sélectionnez la province ou le territoire de délivrance\";\n default: return '';\n }\n };\n\n const getProgressStep = (): number => {\n if (currentStep === 'country') return 1;\n if (currentStep === 'documentType') return 2;\n return 3;\n };\n\n const getTotalSteps = (): number => { return needsRegion ? 3 : 2; };\n\n const canGoNext = (): boolean => {\n if (currentStep === 'country') return selectedCountryCode !== null;\n if (currentStep === 'documentType') return selectedDocumentType !== null;\n if (currentStep === 'region') return selectedRegion !== null;\n return false;\n };\n\n return (\n <View style={styles.root}>\n <View style={styles.container}>\n <View style={styles.progressContainer}>\n <Text style={styles.progressText}>{state.currentLanguage === \"en\" ? `Step ${getProgressStep()} of ${getTotalSteps()}` : `Étape ${getProgressStep()} sur ${getTotalSteps()}`}</Text>\n </View>\n <Text style={styles.title}>{getStepTitle()}</Text>\n <Text style={styles.description}>{getStepDescription()}</Text>\n {currentStep === 'country' && renderCountrySelection()}\n {currentStep === 'documentType' && renderDocumentTypeSelection()}\n {currentStep === 'region' && renderRegionSelection()}\n <View style={styles.buttonContainer}>\n <Button title={state.currentLanguage === \"en\" ? \"Back\" : \"Retour\"} onPress={handleBack} variant={currentStep === 'country' ? \"secondary\" : \"outline\"} size=\"large\" style={{ flex: 1, marginRight: 8 }} />\n <Button title={state.currentLanguage === \"en\" ? \"Next\" : \"Suivant\"} onPress={handleNext} variant=\"primary\" size=\"large\" style={{ flex: 1 }} disabled={!canGoNext()} />\n </View>\n {error && (<Text style={styles.errorText}>{error}</Text>)}\n </View>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n root: { flex: 1, maxWidth: 760, width: '100%' },\n container: { backgroundColor: 'white', margin: 10, borderRadius: 10, paddingVertical: 16, paddingHorizontal: 16, shadowColor: '#000', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.35, shadowRadius: 4.84, elevation: 10 },\n progressContainer: { marginBottom: 16, alignItems: 'center' },\n progressText: { fontSize: 14, color: '#666', fontWeight: '500' },\n title: { fontSize: 24, fontWeight: 'bold', color: '#333', marginBottom: 8, textAlign: 'center' },\n description: { fontSize: 16, color: '#666', textAlign: 'center', marginBottom: 24, lineHeight: 22 },\n searchBar: { height: 52, backgroundColor: '#F1F5F9', borderRadius: 12, paddingHorizontal: 16, fontSize: 16, color: '#1E293B', marginBottom: 16, borderWidth: 1, borderColor: '#CBD5E1', fontWeight: '500' },\n listContainer: { maxHeight: 360, marginBottom: 24 },\n option: { flexDirection: 'row', alignItems: 'center', padding: 16, backgroundColor: '#F8F9FA', borderRadius: 12, marginBottom: 12, borderWidth: 2, borderColor: '#E9ECEF', minHeight: 64 },\n selectedOption: { borderColor: '#2DBD60', backgroundColor: '#F0F9F0' },\n flag: { fontSize: 32, marginRight: 16 },\n optionContent: { flex: 1 },\n optionName: { fontSize: 18, fontWeight: '600', color: '#333' },\n selectedOptionName: { color: '#2DBD60' },\n optionCode: { fontSize: 14, color: '#666', marginTop: 4, fontWeight: '500' },\n checkmark: { width: 24, height: 24, borderRadius: 12, justifyContent: 'center', alignItems: 'center' },\n checkmarkText: { color: 'white', fontSize: 16, fontWeight: 'bold' },\n infoBox: { backgroundColor: '#F9FAFB', padding: 12, borderRadius: 12, marginBottom: 16 },\n infoText: { fontSize: 14, color: '#666', lineHeight: 20 },\n buttonContainer: { flexDirection: 'row', marginTop: 24, gap: 12 },\n errorText: { color: '#dc2626', fontSize: 14, marginTop: 8, textAlign: 'center' },\n emptyText: { textAlign: 'center', color: '#64748B', fontSize: 16, marginTop: 24, fontWeight: '500' }\n});"]}
|
|
1
|
+
{"version":3,"file":"CountrySelectionTemplate.js","sourceRoot":"","sources":["../../../../src/components/KYCElements/CountrySelectionTemplate.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState, useMemo, useEffect } from 'react';\nimport { FlatList, Platform, ScrollView, StyleSheet, Text, TextInput, TouchableOpacity, View } from 'react-native';\nimport { TemplateComponent, CountrySelectionConfig, LocalizedText, Country, IDCardConfig } from '../../types/KYC.types';\nimport { countryMapping } from '../../config/region_mapping';\nimport { useTemplateKYCFlowContext } from '../../hooks/useTemplateKYCFlow';\nimport { Button } from '../ui/Button';\nimport { countryData } from '../../config/countriesData';\nimport REGION_MAPPING from '../../config/region_mapping.json';\nimport { sdkLogger } from '../../utils/logger'; // 🚨 IMPORT SDK LOGGER\n\ninterface CountrySelectionTemplateProps {\n component: TemplateComponent;\n value?: any;\n onValueChange: (value: Country & { documentType?: string; region?: string }) => void;\n error?: string;\n language?: string;\n}\n\ntype SelectionStep = 'country' | 'documentType' | 'region';\n\ntype ExtendedIDCardConfig = IDCardConfig & {\n selectedCountries?: string[];\n documentTypesByCountry?: Record<string, string[]>;\n regionsByCountry?: Record<string, Record<string, string[]>>;\n instructionsByDocumentType?: Record<string, LocalizedText>;\n};\n\nconst ISO_TO_COUNTRY_NAME: Record<string, string> = { 'KE': 'Kenya', 'CM': 'Cameroon', 'NG': 'Nigeria', 'CA': 'Canada', 'FR': 'France', 'GH': 'Ghana', 'ZA': 'South Africa', 'GB': 'Britain', 'CI': 'Ivory Coast', 'SN': 'Senegal', 'TG': 'Togo', 'ML': 'Mali' };\nconst jsonDocMap: Record<string, string> = { 'nationalId': 'identity_card', 'national_id': 'identity_card', 'passport': 'passport', 'driversLicense': 'drivers_licence', 'drivers_licence': 'drivers_licence', 'residencePermit': 'permanent_residence', 'healthInsuranceCard': 'health_insurance_card' };\nconst SUB_REGION_CODES: Record<string, string> = { \"Alberta\": \"AB\", \"British Columbia\": \"BC\", \"Manitoba\": \"MB\", \"New Brunswick\": \"NB\", \"Newfoundland and Labrador\": \"NL\", \"Northwest Territories\": \"NT\", \"Nova Scotia\": \"NS\", \"Nunavut\": \"NU\", \"Ontario\": \"ON\", \"Prince Edward Island\": \"PE\", \"Quebec\": \"QC\", \"Saskatchewan\": \"SK\", \"Yukon\": \"YT\" };\n\nexport const CountrySelectionTemplate: React.FC<CountrySelectionTemplateProps> = ({ component, value, onValueChange, error, language = 'en', }) => {\n const config = component.config as CountrySelectionConfig;\n const { actions, state } = useTemplateKYCFlowContext();\n\n // 🚨 LOG: Track when the user reaches this step\n useEffect(() => {\n if (state.session?.session_id) {\n sdkLogger.info(\"User started country and document selection step\");\n }\n }, [state.session?.session_id]);\n\n const idCardComponent = useMemo(() => { return state.template.components.find(c => c.type === 'id_card'); }, [state.template.components]);\n const idCardConfig = useMemo(() => { return idCardComponent?.config as ExtendedIDCardConfig | undefined; }, [idCardComponent]);\n \n const [currentStep, setCurrentStep] = useState<SelectionStep>(() => {\n if (value?.code && value?.documentType) {\n if (value.region) return 'region';\n return 'documentType';\n }\n return 'country';\n });\n \n const [selectedCountryCode, setSelectedCountryCode] = useState<string | null>(value?.code || null);\n const [selectedDocumentType, setSelectedDocumentType] = useState<string | null>(value?.documentType || null);\n const [selectedRegion, setSelectedRegion] = useState<string | null>(value?.region || null);\n const [searchQuery, setSearchQuery] = useState('');\n\n useEffect(() => {\n if (value?.code && value?.documentType) {\n setSelectedCountryCode(value.code);\n setSelectedDocumentType(value.documentType);\n setSelectedRegion(value.region || null);\n if (value.region) {\n setCurrentStep('region');\n } else {\n let regionsCheck = idCardConfig?.regionsByCountry?.[value.code]?.[value.documentType] || [];\n if (regionsCheck.length === 0) {\n const rawCountryName = ISO_TO_COUNTRY_NAME[value.code] || value.code;\n const searchDocType = jsonDocMap[value.documentType] || value.documentType;\n const baseMapping = (REGION_MAPPING as any).regionMapping || REGION_MAPPING;\n let countryMapping = baseMapping[rawCountryName];\n if (!countryMapping) {\n const foundKey = Object.keys(baseMapping).find(k => k.toLowerCase() === rawCountryName.toLowerCase());\n if (foundKey) countryMapping = baseMapping[foundKey];\n }\n if (countryMapping && countryMapping[searchDocType]) {\n regionsCheck = Object.keys(countryMapping[searchDocType]).filter(k => k !== 'root');\n }\n }\n if (Array.isArray(regionsCheck) && regionsCheck.length > 0) {\n setCurrentStep('region');\n } else {\n setCurrentStep('documentType');\n }\n }\n } else {\n setSelectedCountryCode(null);\n setSelectedDocumentType(null);\n setSelectedRegion(null);\n setCurrentStep('country');\n }\n }, [value?.code, value?.documentType, value?.region, idCardConfig]);\n\n useEffect(() => {\n if (error) { actions.updateComponentData(component.id, value); }\n }, []);\n\n const availableCountries = useMemo(() => {\n const explicitlyAllowed = idCardConfig?.selectedCountries || config.allowed_countries || [];\n const configuredCodes = new Set(explicitlyAllowed);\n return Array.from(configuredCodes)\n .filter((code: string) => countryData[code])\n .map((code: string) => ({ code, ...countryData[code] }))\n .sort((a: Country, b: Country) => a.name.localeCompare(b.name));\n }, [idCardConfig?.selectedCountries, config.allowed_countries]);\n\n const filteredCountries = useMemo(() => {\n if (!searchQuery.trim()) return availableCountries;\n const cleanQuery = searchQuery.toLowerCase().trim();\n return availableCountries.filter(country =>\n country.name.toLowerCase().includes(cleanQuery) || country.name_en.toLowerCase().includes(cleanQuery) || country.code.toLowerCase().includes(cleanQuery)\n );\n }, [searchQuery, availableCountries]);\n\n const availableDocumentTypes = useMemo(() => {\n if (!selectedCountryCode) return [];\n if (idCardConfig?.documentTypesByCountry?.[selectedCountryCode]) {\n return idCardConfig.documentTypesByCountry[selectedCountryCode];\n }\n const rawCountryName = ISO_TO_COUNTRY_NAME[selectedCountryCode] || selectedCountryCode;\n const baseMapping = (REGION_MAPPING as any).regionMapping || REGION_MAPPING;\n let countryMapping = baseMapping[rawCountryName];\n if (!countryMapping) {\n const foundKey = Object.keys(baseMapping).find(k => k.toLowerCase() === rawCountryName.toLowerCase());\n if (foundKey) countryMapping = baseMapping[foundKey];\n }\n if (countryMapping) {\n const inverseDocMap: Record<string, string> = { 'identity_card': 'nationalId', 'passport': 'passport', 'drivers_licence': 'driversLicense', 'permanent_residence': 'residencePermit', 'health_insurance_card': 'healthInsuranceCard' };\n return Object.keys(countryMapping).map(key => inverseDocMap[key] || key);\n }\n return ['nationalId', 'passport', 'driversLicense'];\n }, [selectedCountryCode, idCardConfig?.documentTypesByCountry]);\n\n const availableRegions = useMemo(() => {\n if (!selectedCountryCode || !selectedDocumentType) return [];\n let rawRegions: string[] = [];\n if (idCardConfig?.regionsByCountry?.[selectedCountryCode]?.[selectedDocumentType]) {\n rawRegions = idCardConfig.regionsByCountry[selectedCountryCode][selectedDocumentType];\n }\n if (rawRegions.length === 0) {\n const rawCountryName = ISO_TO_COUNTRY_NAME[selectedCountryCode] || selectedCountryCode;\n const searchDocType = jsonDocMap[selectedDocumentType] || selectedDocumentType;\n const baseMapping = (REGION_MAPPING as any).regionMapping || REGION_MAPPING;\n let countryMapping = baseMapping[rawCountryName];\n if (!countryMapping) {\n const foundKey = Object.keys(baseMapping).find(k => k.toLowerCase() === rawCountryName.toLowerCase());\n if (foundKey) countryMapping = baseMapping[foundKey];\n }\n if (countryMapping && countryMapping[searchDocType]) {\n rawRegions = Object.keys(countryMapping[searchDocType]).filter(k => k !== 'root');\n }\n }\n if (!Array.isArray(rawRegions)) return [];\n return rawRegions.sort((a, b) => a.localeCompare(b)).map(region => ({ label: region, value: SUB_REGION_CODES[region] || region }));\n }, [selectedCountryCode, selectedDocumentType, idCardConfig?.regionsByCountry]);\n\n const needsRegion = useMemo(() => { return availableRegions.length > 0; }, [availableRegions]);\n const getLocalizedText = (text: LocalizedText): string => { return text[state.currentLanguage] || text.en || ''; };\n\n const handleCountrySelect = (countryCode: string) => { setSelectedCountryCode(countryCode); setSelectedDocumentType(null); setSelectedRegion(null); };\n const handleDocumentTypeSelect = (docType: string) => { setSelectedDocumentType(docType); setSelectedRegion(null); };\n const handleRegionSelect = (regionValue: string) => { setSelectedRegion(regionValue); };\n\n const finalizeSelection = (countryCode: string, docType: string, region: string | null) => {\n const country = countryData[countryCode];\n if (!country) return;\n \n // 🚨 LOG: Final payload successfully selected\n sdkLogger.info(\"User finalized document configuration\", {\n countryCode,\n documentType: docType,\n region: region || 'none'\n });\n\n const mapping = countryMapping[countryCode as keyof typeof countryMapping];\n const countryObj: Country & { documentType?: string; region?: string } = {\n code: countryCode, ...country, regionMapping: mapping, documentType: docType, region: region || undefined,\n };\n onValueChange(countryObj);\n setTimeout(() => { actions.nextComponent(countryObj); }, 100);\n };\n\n const handleBack = () => {\n sdkLogger.info(\"User navigated back in document selection\", { fromStep: currentStep }); // 🚨 LOG\n\n if (currentStep === 'region') {\n setCurrentStep('documentType'); setSelectedRegion(null);\n } else if (currentStep === 'documentType') {\n setCurrentStep('country'); setSelectedDocumentType(null); setSelectedRegion(null); setSearchQuery('');\n } else if (currentStep === 'country') {\n actions.previousComponent();\n }\n };\n\n const handleNext = () => {\n if (currentStep === 'country' && selectedCountryCode) {\n setCurrentStep('documentType');\n } else if (currentStep === 'documentType' && selectedDocumentType) {\n if (needsRegion) { setCurrentStep('region'); } else {\n if (selectedCountryCode) { finalizeSelection(selectedCountryCode, selectedDocumentType, null); }\n }\n } else if (currentStep === 'region' && selectedRegion) {\n if (selectedCountryCode && selectedDocumentType) { finalizeSelection(selectedCountryCode, selectedDocumentType, selectedRegion); }\n }\n };\n\n const renderCountrySelection = () => {\n return (\n <>\n <TextInput\n style={styles.searchBar}\n placeholder={state.currentLanguage === \"en\" ? \"Search countries\" : \"Rechercher un pays\"}\n placeholderTextColor=\"#64748B\"\n value={searchQuery}\n onChangeText={setSearchQuery}\n autoCorrect={false}\n autoCapitalize=\"none\"\n clearButtonMode=\"while-editing\"\n returnKeyType=\"search\"\n accessibilityRole=\"search\"\n accessibilityLabel={state.currentLanguage === \"en\" ? \"Search countries\" : \"Rechercher un pays\"}\n accessibilityHint={state.currentLanguage === \"en\" ? \"Filters the country list as you type\" : \"Filtre la liste des pays pendant la saisie\"}\n />\n <FlatList\n style={styles.listContainer}\n contentContainerStyle={[\n styles.listContent,\n filteredCountries.length === 0 && styles.emptyListContent,\n ]}\n data={filteredCountries}\n keyExtractor={(country) => country.code!}\n renderItem={({ item: country }) => {\n const isSelected = selectedCountryCode === country.code;\n const countryName = state.currentLanguage === \"en\" ? country.name_en : country.name;\n\n return (\n <TouchableOpacity\n style={[styles.option, isSelected && styles.selectedOption]}\n onPress={() => handleCountrySelect(country.code!)}\n activeOpacity={0.7}\n accessible\n accessibilityRole=\"radio\"\n accessibilityState={{ selected: isSelected }}\n accessibilityLabel={`${countryName}, ${country.code}`}\n accessibilityHint={state.currentLanguage === \"en\" ? \"Select this issuing country\" : \"Sélectionner ce pays émetteur\"}\n >\n <Text style={styles.flag} accessible={false}>{country.flag}</Text>\n <View style={styles.optionContent}>\n <Text style={[styles.optionName, isSelected && styles.selectedOptionName]}>{countryName}</Text>\n <Text style={styles.optionCode}>{country.code}</Text>\n </View>\n {isSelected && (\n <View style={[styles.checkmark, { backgroundColor: component.ui.themeColor as string || '#2DBD60' }]} accessible={false}>\n <Text style={styles.checkmarkText}>✓</Text>\n </View>\n )}\n </TouchableOpacity>\n );\n }}\n ListEmptyComponent={\n <Text style={styles.emptyText} accessibilityRole=\"text\">\n {state.currentLanguage === \"en\" ? \"No matching countries found.\" : \"Aucun pays trouvé.\"}\n </Text>\n }\n showsVerticalScrollIndicator\n persistentScrollbar={Platform.OS === 'android'}\n keyboardShouldPersistTaps=\"handled\"\n keyboardDismissMode={Platform.OS === 'ios' ? 'interactive' : 'on-drag'}\n nestedScrollEnabled\n initialNumToRender={12}\n maxToRenderPerBatch={12}\n windowSize={7}\n accessibilityRole=\"list\"\n />\n </>\n );\n };\n\n const renderDocumentTypeSelection = () => {\n const instructions = selectedDocumentType && idCardConfig?.instructionsByDocumentType?.[selectedDocumentType] ? getLocalizedText(idCardConfig.instructionsByDocumentType[selectedDocumentType]) : null;\n const documentTypeLabels: Record<string, { en: string; fr: string; icon?: string }> = {\n 'nationalId': { en: 'National ID', fr: 'Carte nationale d\\'identité', icon: '🏛️' },\n 'passport': { en: 'Passport', fr: 'Passeport', icon: '📘' },\n 'driversLicense': { en: 'Driver\\'s License', fr: 'Permis de conduire', icon: '🚗' },\n 'residencePermit': { en: 'Residence Permit', fr: 'Permis de séjour', icon: '🏠' },\n 'healthInsuranceCard': { en: 'Health Insurance Card', fr: 'Carte d\\'assurance maladie', icon: '🗳️' },\n };\n return (\n <>\n {instructions && (<View style={styles.infoBox}><Text style={styles.infoText}>{instructions}</Text></View>)}\n <ScrollView style={styles.listContainer} showsVerticalScrollIndicator={false}>\n {availableDocumentTypes.map((docType: string) => {\n const label = documentTypeLabels[docType];\n const displayName = label ? (state.currentLanguage === \"en\" ? label.en : label.fr) : docType;\n const icon = label?.icon || '📄';\n return (\n <TouchableOpacity key={docType} style={[styles.option, selectedDocumentType === docType && styles.selectedOption]} onPress={() => handleDocumentTypeSelect(docType)}>\n <Text style={styles.flag}>{icon}</Text>\n <View style={styles.optionContent}>\n <Text style={[styles.optionName, selectedDocumentType === docType && styles.selectedOptionName]}>{displayName}</Text>\n </View>\n {selectedDocumentType === docType && (\n <View style={[styles.checkmark, { backgroundColor: component.ui.themeColor as string || '#2DBD60' }]}><Text style={styles.checkmarkText}>✓</Text></View>\n )}\n </TouchableOpacity>\n );\n })}\n </ScrollView>\n </>\n );\n };\n\n const renderRegionSelection = () => {\n return (\n <>\n <ScrollView style={styles.listContainer} showsVerticalScrollIndicator={false}>\n {availableRegions.map((regionObj, index: number) => {\n return (\n <TouchableOpacity key={index} style={[styles.option, selectedRegion === regionObj.value && styles.selectedOption]} onPress={() => handleRegionSelect(regionObj.value)}>\n <View style={styles.optionContent}>\n <Text style={[styles.optionName, selectedRegion === regionObj.value && styles.selectedOptionName]}>{regionObj.label}</Text>\n {regionObj.value !== regionObj.label && (<Text style={styles.optionCode}>{regionObj.value}</Text>)}\n </View>\n {selectedRegion === regionObj.value && (\n <View style={[styles.checkmark, { backgroundColor: component.ui.themeColor as string || '#2DBD60' }]}><Text style={styles.checkmarkText}>✓</Text></View>\n )}\n </TouchableOpacity>\n );\n })}\n </ScrollView>\n </>\n );\n };\n\n const getStepTitle = (): string => {\n switch (currentStep) {\n case 'country': return getLocalizedText(component.labels as LocalizedText);\n case 'documentType': return state.currentLanguage === \"en\" ? \"Select Document Type\" : \"Sélectionnez le type de document\";\n case 'region': return state.currentLanguage === \"en\" ? \"Select Province/State\" : \"Sélectionnez la province/l'état\";\n default: return '';\n }\n };\n\n const getStepDescription = (): string => {\n switch (currentStep) {\n case 'country': return getLocalizedText(component.instructions as LocalizedText);\n case 'documentType': return state.currentLanguage === \"en\" ? \"Choose the type of document you want to use\" : \"Choisissez le type de document que vous souhaitez utiliser\";\n case 'region': return state.currentLanguage === \"en\" ? \"Select the issuing province or territory\" : \"Sélectionnez la province ou le territoire de délivrance\";\n default: return '';\n }\n };\n\n const getProgressStep = (): number => {\n if (currentStep === 'country') return 1;\n if (currentStep === 'documentType') return 2;\n return 3;\n };\n\n const getTotalSteps = (): number => { return needsRegion ? 3 : 2; };\n\n const canGoNext = (): boolean => {\n if (currentStep === 'country') return selectedCountryCode !== null;\n if (currentStep === 'documentType') return selectedDocumentType !== null;\n if (currentStep === 'region') return selectedRegion !== null;\n return false;\n };\n\n return (\n <View style={styles.root}>\n <View style={styles.container}>\n <View style={styles.progressContainer}>\n <Text style={styles.progressText}>{state.currentLanguage === \"en\" ? `Step ${getProgressStep()} of ${getTotalSteps()}` : `Étape ${getProgressStep()} sur ${getTotalSteps()}`}</Text>\n </View>\n <Text style={styles.title}>{getStepTitle()}</Text>\n <Text style={styles.description}>{getStepDescription()}</Text>\n {currentStep === 'country' && renderCountrySelection()}\n {currentStep === 'documentType' && renderDocumentTypeSelection()}\n {currentStep === 'region' && renderRegionSelection()}\n <View style={styles.buttonContainer}>\n <Button title={state.currentLanguage === \"en\" ? \"Back\" : \"Retour\"} onPress={handleBack} variant={currentStep === 'country' ? \"secondary\" : \"outline\"} size=\"large\" style={{ flex: 1, marginRight: 8 }} />\n <Button title={state.currentLanguage === \"en\" ? \"Next\" : \"Suivant\"} onPress={handleNext} variant=\"primary\" size=\"large\" style={{ flex: 1 }} disabled={!canGoNext()} />\n </View>\n {error && (<Text style={styles.errorText}>{error}</Text>)}\n </View>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n root: { flex: 1, minHeight: 0, maxWidth: 760, width: '100%' },\n container: { flex: 1, minHeight: 0, backgroundColor: 'white', margin: 10, borderRadius: 10, paddingVertical: 16, paddingHorizontal: 16, shadowColor: '#000', shadowOffset: { width: 0, height: 2 }, shadowOpacity: 0.35, shadowRadius: 4.84, elevation: 10 },\n progressContainer: { marginBottom: 16, alignItems: 'center' },\n progressText: { fontSize: 14, color: '#666', fontWeight: '500' },\n title: { fontSize: 24, fontWeight: 'bold', color: '#333', marginBottom: 8, textAlign: 'center' },\n description: { fontSize: 16, color: '#666', textAlign: 'center', marginBottom: 24, lineHeight: 22 },\n searchBar: { height: 52, backgroundColor: '#F1F5F9', borderRadius: 12, paddingHorizontal: 16, fontSize: 16, color: '#1E293B', marginBottom: 16, borderWidth: 1, borderColor: '#CBD5E1', fontWeight: '500' },\n listContainer: { flex: 1, minHeight: 120, marginBottom: 12 },\n listContent: { paddingBottom: 8 },\n emptyListContent: { flexGrow: 1, justifyContent: 'center' },\n option: { flexDirection: 'row', alignItems: 'center', padding: 16, backgroundColor: '#F8F9FA', borderRadius: 12, marginBottom: 12, borderWidth: 2, borderColor: '#E9ECEF', minHeight: 64 },\n selectedOption: { borderColor: '#2DBD60', backgroundColor: '#F0F9F0' },\n flag: { fontSize: 32, marginRight: 16 },\n optionContent: { flex: 1 },\n optionName: { fontSize: 18, fontWeight: '600', color: '#333' },\n selectedOptionName: { color: '#2DBD60' },\n optionCode: { fontSize: 14, color: '#666', marginTop: 4, fontWeight: '500' },\n checkmark: { width: 24, height: 24, borderRadius: 12, justifyContent: 'center', alignItems: 'center' },\n checkmarkText: { color: 'white', fontSize: 16, fontWeight: 'bold' },\n infoBox: { backgroundColor: '#F9FAFB', padding: 12, borderRadius: 12, marginBottom: 16 },\n infoText: { fontSize: 14, color: '#666', lineHeight: 20 },\n buttonContainer: { flexDirection: 'row', marginTop: 12, gap: 12 },\n errorText: { color: '#dc2626', fontSize: 14, marginTop: 8, textAlign: 'center' },\n emptyText: { textAlign: 'center', color: '#64748B', fontSize: 16, marginTop: 24, fontWeight: '500' }\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IDCardCapture.d.ts","sourceRoot":"","sources":["../../../../src/components/KYCElements/IDCardCapture.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAIpE,OAAO,EAAE,iBAAiB,EAAoI,MAAM,uBAAuB,CAAC;AAyB5L,UAAU,cAAc;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;
|
|
1
|
+
{"version":3,"file":"IDCardCapture.d.ts","sourceRoot":"","sources":["../../../../src/components/KYCElements/IDCardCapture.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAIpE,OAAO,EAAE,iBAAiB,EAAoI,MAAM,uBAAuB,CAAC;AAyB5L,UAAU,cAAc;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAoFD,UAAU,kBAAkB;IAC1B,SAAS,EAAE,iBAAiB,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACvC,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AA+CD,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAg4CtD,CAAC"}
|
|
@@ -79,6 +79,23 @@ const isUsableBarcodeText = (value, allowShortBarcode) => {
|
|
|
79
79
|
const isDecoderError = /^(no (?:bar)?code|barcode (?:not|was not)|unable to decode|failed to decode|error\b)/i.test(trimmed);
|
|
80
80
|
return !isDecoderError && trimmed.length > 0 && (allowShortBarcode || value.length > 50);
|
|
81
81
|
};
|
|
82
|
+
/**
|
|
83
|
+
* Keep barcode extraction payloads aligned with extract_mrz_text responses.
|
|
84
|
+
* The barcode formatter historically returned its decoded fields under
|
|
85
|
+
* `data`; downstream consumers expect all machine-readable document data
|
|
86
|
+
* under `parsed_data` regardless of whether it came from MRZ or a barcode.
|
|
87
|
+
*/
|
|
88
|
+
const normalizeBarcodePayload = (payload) => {
|
|
89
|
+
if (!payload || typeof payload !== 'object' || Array.isArray(payload))
|
|
90
|
+
return payload;
|
|
91
|
+
const record = payload;
|
|
92
|
+
if (Object.prototype.hasOwnProperty.call(record, 'parsed_data'))
|
|
93
|
+
return record;
|
|
94
|
+
if (!Object.prototype.hasOwnProperty.call(record, 'data'))
|
|
95
|
+
return record;
|
|
96
|
+
const { data, ...metadata } = record;
|
|
97
|
+
return { ...metadata, data: data };
|
|
98
|
+
};
|
|
82
99
|
const SHORT_TO_LONG_REGION = {
|
|
83
100
|
"AB": "Alberta", "BC": "British Columbia", "MB": "Manitoba", "NB": "New Brunswick",
|
|
84
101
|
"NL": "Newfoundland and Labrador", "NT": "Northwest Territories", "NS": "Nova Scotia",
|
|
@@ -448,7 +465,20 @@ export const IDCardCapture = ({ component, value = {}, onValueChange, error, lan
|
|
|
448
465
|
}
|
|
449
466
|
const isLandscape = screenWidth > screenHeight;
|
|
450
467
|
let xMin, xMax, yMin, yMax;
|
|
451
|
-
if (
|
|
468
|
+
if (scanPhase === 'barcode') {
|
|
469
|
+
// Keep the barcode target deliberately compact so users move close
|
|
470
|
+
// enough for dense PDF417 and linear bars to remain individually sharp.
|
|
471
|
+
// Pixel caps prevent the guide from becoming oversized on tablets.
|
|
472
|
+
const guideWidthPx = Math.min(screenWidth * (isLandscape ? 0.68 : 0.82), isLandscape ? 620 : 440);
|
|
473
|
+
const guideHeightPx = Math.min(guideWidthPx / (isLandscape ? 4.2 : 3.2), screenHeight * (isLandscape ? 0.34 : 0.12));
|
|
474
|
+
const guideWidthPercent = (guideWidthPx / screenWidth) * 100;
|
|
475
|
+
const guideHeightPercent = (guideHeightPx / screenHeight) * 100;
|
|
476
|
+
xMin = (100 - guideWidthPercent) / 2;
|
|
477
|
+
xMax = xMin + guideWidthPercent;
|
|
478
|
+
yMin = (100 - guideHeightPercent) / 2;
|
|
479
|
+
yMax = yMin + guideHeightPercent;
|
|
480
|
+
}
|
|
481
|
+
else if (Platform.OS === 'web') {
|
|
452
482
|
const boxWidthPercent = isLandscape ? 0.40 : 0.85;
|
|
453
483
|
xMin = isLandscape ? 30 : 7.5;
|
|
454
484
|
xMax = xMin + (boxWidthPercent * 100);
|
|
@@ -573,7 +603,13 @@ export const IDCardCapture = ({ component, value = {}, onValueChange, error, lan
|
|
|
573
603
|
setProcessingImagePath(safeCapturePath);
|
|
574
604
|
try {
|
|
575
605
|
let imagePathForUpload = capturePath;
|
|
576
|
-
|
|
606
|
+
// Barcode mode has a deliberately tighter visual guide, but this method
|
|
607
|
+
// saves the verified document image. If OBB bounds are unavailable, keep
|
|
608
|
+
// using the original full-card fallback rather than cropping to the
|
|
609
|
+
// barcode-only window.
|
|
610
|
+
const overlayBbox = scanPhaseRef.current === 'barcode'
|
|
611
|
+
? { xMin: 5, yMin: 34, xMax: 95, yMax: 66 }
|
|
612
|
+
: cameraConfig.overlay.bbox;
|
|
577
613
|
// Prefer the backend-detected card bounds. Front verification returns the
|
|
578
614
|
// detect_face OBB-derived bbox; back verification returns extract_mrz's
|
|
579
615
|
// OBB-derived bbox when MRZ is used. The fixed UI guide is only a fallback.
|
|
@@ -641,7 +677,7 @@ export const IDCardCapture = ({ component, value = {}, onValueChange, error, lan
|
|
|
641
677
|
return;
|
|
642
678
|
setShowCamera(false);
|
|
643
679
|
actions.showCustomStepper(true);
|
|
644
|
-
setSilentCaptureResult(prev => ({ ...prev, isAnalyzing: false }));
|
|
680
|
+
setSilentCaptureResult(prev => ({ ...prev, success: false, isAnalyzing: false, error: '' }));
|
|
645
681
|
isProcessingCaptureRef.current = false;
|
|
646
682
|
setIsProcessingCapture(false);
|
|
647
683
|
setProcessingImagePath(null);
|
|
@@ -712,11 +748,12 @@ export const IDCardCapture = ({ component, value = {}, onValueChange, error, lan
|
|
|
712
748
|
const isHIC = docType.type === 'health_insurance_card';
|
|
713
749
|
let parsedDictionary;
|
|
714
750
|
if (isHIC && barcodeString.length < 50) {
|
|
715
|
-
parsedDictionary = {
|
|
751
|
+
parsedDictionary = { parsed_data: { card_number: barcodeString, barcode_type: "1D" } };
|
|
716
752
|
}
|
|
717
753
|
else {
|
|
718
754
|
const token = await authentification();
|
|
719
|
-
|
|
755
|
+
const formattedBarcode = await kycService.formatBarcodeData({ textInput: barcodeString, token }, env);
|
|
756
|
+
parsedDictionary = normalizeBarcodePayload(formattedBarcode);
|
|
720
757
|
}
|
|
721
758
|
if (isStaleBarcode())
|
|
722
759
|
return;
|
|
@@ -1031,11 +1068,12 @@ export const IDCardCapture = ({ component, value = {}, onValueChange, error, lan
|
|
|
1031
1068
|
if (isValidScan) {
|
|
1032
1069
|
let parsedDictionary;
|
|
1033
1070
|
if (isHIC && barcodeData.length < 50) {
|
|
1034
|
-
parsedDictionary = {
|
|
1071
|
+
parsedDictionary = { parsed_data: { card_number: barcodeData, barcode_type: "1D" } };
|
|
1035
1072
|
}
|
|
1036
1073
|
else {
|
|
1037
1074
|
const token = await authentification();
|
|
1038
|
-
|
|
1075
|
+
const formattedBarcode = await kycService.formatBarcodeData({ textInput: barcodeData, token }, env);
|
|
1076
|
+
parsedDictionary = normalizeBarcodePayload(formattedBarcode);
|
|
1039
1077
|
}
|
|
1040
1078
|
if (isStaleFrame()) {
|
|
1041
1079
|
clearTimeout(watchdog);
|
|
@@ -1215,7 +1253,7 @@ export const IDCardCapture = ({ component, value = {}, onValueChange, error, lan
|
|
|
1215
1253
|
setSilentCaptureResult(prev => ({ ...prev, barcode: barcodeString }));
|
|
1216
1254
|
}
|
|
1217
1255
|
}
|
|
1218
|
-
}} overlayComponent={<IdCardOverlay xMin={cameraConfig.overlay.bbox.xMin} yMin={cameraConfig.overlay.bbox.yMin} xMax={cameraConfig.overlay.bbox.xMax} yMax={cameraConfig.overlay.bbox.yMax} instructions={cameraConfig.overlay.guideText} cornerOpacity={cameraConfig.overlay.bbox.cornerRadius || 0} isSuccess={silentCaptureResult.success
|
|
1256
|
+
}} overlayComponent={<IdCardOverlay xMin={cameraConfig.overlay.bbox.xMin} yMin={cameraConfig.overlay.bbox.yMin} xMax={cameraConfig.overlay.bbox.xMax} yMax={cameraConfig.overlay.bbox.yMax} instructions={cameraConfig.overlay.guideText} cornerOpacity={cameraConfig.overlay.bbox.cornerRadius || 0} isSuccess={silentCaptureResult.success} language={state.currentLanguage} mode={scanPhase === 'barcode' ? 'barcode' : 'document'} stepperProps={{
|
|
1219
1257
|
back: () => {
|
|
1220
1258
|
if (currentSide === 'back') {
|
|
1221
1259
|
returnToFrontReview();
|
|
@@ -1227,19 +1265,6 @@ export const IDCardCapture = ({ component, value = {}, onValueChange, error, lan
|
|
|
1227
1265
|
},
|
|
1228
1266
|
selectedDocumentType: selectedDocumentType ? (locale === 'en' ? getDocumentTypeInfo(selectedDocumentType.type).name.en : getDocumentTypeInfo(selectedDocumentType.type).name.fr) : '', step: state.currentComponentIndex + 1, totalSteps: state.template.components.length, side: currentSide,
|
|
1229
1267
|
}}/>}/>
|
|
1230
|
-
{scanPhase === 'barcode' && !isBusy && (<View style={styles.barcodePromptContainer}>
|
|
1231
|
-
<View style={styles.barcodePromptContent}>
|
|
1232
|
-
<View style={styles.barcodeIconContainer}><Text style={styles.barcodeIcon}>✓</Text></View>
|
|
1233
|
-
<View style={styles.barcodeTextContainer}>
|
|
1234
|
-
<Text style={styles.barcodePromptTitle}>{state.currentLanguage === 'en' ? 'Image Verified' : 'Image Vérifiée'}</Text>
|
|
1235
|
-
<Text style={styles.barcodePromptDesc}>
|
|
1236
|
-
{state.currentLanguage === 'en'
|
|
1237
|
-
? 'Proceed to scan the barcode. Move closer but ensure it is fully visible in the frame.'
|
|
1238
|
-
: 'Procédez au scan du code-barres. Rapprochez-vous, mais assurez-vous qu\'il soit entièrement visible dans le cadre.'}
|
|
1239
|
-
</Text>
|
|
1240
|
-
</View>
|
|
1241
|
-
</View>
|
|
1242
|
-
</View>)}
|
|
1243
1268
|
{!isBusy && silentCaptureResult.isAnalyzing && (<View style={styles.topAnalyzingPillContainer}>
|
|
1244
1269
|
<View style={styles.topAnalyzingPill}>
|
|
1245
1270
|
<ActivityIndicator size="small" color="white"/>
|
|
@@ -1449,13 +1474,6 @@ const styles = StyleSheet.create({
|
|
|
1449
1474
|
qrCodeWrapper: { padding: 20, backgroundColor: '#FFFFFF', borderRadius: 20, borderWidth: 2, borderColor: '#E2E8F0', marginBottom: 16, shadowColor: '#000', shadowOffset: { width: 0, height: 4 }, shadowOpacity: 0.05, shadowRadius: 10 },
|
|
1450
1475
|
listeningContainer: { flexDirection: 'row', alignItems: 'center', backgroundColor: '#F0FDF4', paddingVertical: 12, paddingHorizontal: 20, borderRadius: 12, marginBottom: 24, borderWidth: 1, borderColor: '#BBF7D0' },
|
|
1451
1476
|
listeningText: { marginLeft: 12, color: '#166534', fontSize: 14, fontWeight: '600' },
|
|
1452
|
-
barcodePromptContainer: { position: 'absolute', top: Platform.OS === 'android' ? 60 : 75, left: 0, right: 0, alignItems: 'center', zIndex: 150, paddingHorizontal: 24, },
|
|
1453
|
-
barcodePromptContent: { flexDirection: 'row', alignItems: 'center', backgroundColor: 'rgba(15, 23, 42, 0.85)', paddingVertical: 14, paddingHorizontal: 20, borderRadius: 16, borderWidth: 1, borderColor: 'rgba(255, 255, 255, 0.15)', shadowColor: '#000', shadowOffset: { width: 0, height: 8 }, shadowOpacity: 0.3, shadowRadius: 12, elevation: 10, maxWidth: 400, ...Platform.select({ web: { backdropFilter: 'blur(8px)' }, ios: { backdropFilter: 'blur(8px)' }, }), },
|
|
1454
|
-
barcodeIconContainer: { width: 36, height: 36, borderRadius: 18, backgroundColor: 'rgba(45, 189, 96, 0.2)', justifyContent: 'center', alignItems: 'center', marginRight: 14, borderWidth: 1, borderColor: 'rgba(45, 189, 96, 0.5)', },
|
|
1455
|
-
barcodeIcon: { fontSize: 16, color: '#2DBD60', fontWeight: 'bold', },
|
|
1456
|
-
barcodeTextContainer: { flex: 1, },
|
|
1457
|
-
barcodePromptTitle: { color: '#2DBD60', fontSize: 16, fontWeight: '700', marginBottom: 4, },
|
|
1458
|
-
barcodePromptDesc: { color: '#F8FAFC', fontSize: 14, fontWeight: '500', lineHeight: 20, },
|
|
1459
1477
|
storeLinksContainer: { width: '100%', alignItems: 'center', marginBottom: 24, paddingTop: 16, borderTopWidth: 1, borderTopColor: '#E2E8F0' },
|
|
1460
1478
|
storeLinksTitle: { fontSize: 14, color: '#64748B', fontWeight: '600', marginBottom: 12 },
|
|
1461
1479
|
storeButtonsRow: { flexDirection: 'row', gap: 12, width: '100%', justifyContent: 'center' },
|