@transfergratis/react-native-sdk 0.1.23 → 0.1.25
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/android/build/intermediates/aapt_friendly_merged_manifests/debug/processDebugManifest/aapt/AndroidManifest.xml +12 -5
- package/android/build/intermediates/aar_main_jar/debug/syncDebugLibJars/classes.jar +0 -0
- package/android/build/intermediates/annotations_typedef_file/debug/extractDebugAnnotations/typedefs.txt +0 -0
- package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +1 -1
- package/android/build/intermediates/incremental/debug-mergeJavaRes/merge-state +0 -0
- package/android/build/intermediates/manifest_merge_blame_file/debug/processDebugManifest/manifest-merger-blame-debug-report.txt +61 -59
- package/android/build/intermediates/merged_java_res/debug/mergeDebugJavaResource/feature-transfergratis-react-native-sdk.jar +0 -0
- package/android/build/intermediates/merged_manifest/debug/processDebugManifest/AndroidManifest.xml +12 -5
- package/android/build/kotlin/compileDebugKotlin/cacheable/last-build.bin +0 -0
- package/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin +0 -0
- package/android/build/outputs/aar/transfergratis-react-native-sdk-debug.aar +0 -0
- package/android/build/outputs/logs/manifest-merger-debug-report.txt +26 -34
- package/android/src/main/AndroidManifest.xml +13 -5
- package/build/components/EnhancedCameraView.d.ts.map +1 -1
- package/build/components/EnhancedCameraView.js +26 -3
- package/build/components/EnhancedCameraView.js.map +1 -1
- package/build/components/EnhancedCameraView.web.d.ts.map +1 -1
- package/build/components/EnhancedCameraView.web.js +21 -0
- package/build/components/EnhancedCameraView.web.js.map +1 -1
- package/build/components/KYCElements/AdditionalDocumentsTemplate.d.ts +12 -0
- package/build/components/KYCElements/AdditionalDocumentsTemplate.d.ts.map +1 -0
- package/build/components/KYCElements/AdditionalDocumentsTemplate.js +283 -0
- package/build/components/KYCElements/AdditionalDocumentsTemplate.js.map +1 -0
- package/build/components/KYCElements/CameraCapture.d.ts.map +1 -1
- package/build/components/KYCElements/CameraCapture.js +4 -3
- package/build/components/KYCElements/CameraCapture.js.map +1 -1
- package/build/components/KYCElements/CountrySelectionTemplate.d.ts +5 -2
- package/build/components/KYCElements/CountrySelectionTemplate.d.ts.map +1 -1
- package/build/components/KYCElements/CountrySelectionTemplate.js +360 -101
- package/build/components/KYCElements/CountrySelectionTemplate.js.map +1 -1
- package/build/components/KYCElements/EmailVerificationTemplate.d.ts +12 -0
- package/build/components/KYCElements/EmailVerificationTemplate.d.ts.map +1 -0
- package/build/components/KYCElements/EmailVerificationTemplate.js +193 -0
- package/build/components/KYCElements/EmailVerificationTemplate.js.map +1 -0
- package/build/components/KYCElements/FileUpload.d.ts.map +1 -1
- package/build/components/KYCElements/FileUpload.js +5 -4
- package/build/components/KYCElements/FileUpload.js.map +1 -1
- package/build/components/KYCElements/FileUploadTemplate.d.ts.map +1 -1
- package/build/components/KYCElements/FileUploadTemplate.js +5 -4
- package/build/components/KYCElements/FileUploadTemplate.js.map +1 -1
- package/build/components/KYCElements/IDCardCapture.d.ts.map +1 -1
- package/build/components/KYCElements/IDCardCapture.js +356 -227
- package/build/components/KYCElements/IDCardCapture.js.map +1 -1
- package/build/components/KYCElements/LocationCaptureTemplate.d.ts.map +1 -1
- package/build/components/KYCElements/LocationCaptureTemplate.js +78 -37
- package/build/components/KYCElements/LocationCaptureTemplate.js.map +1 -1
- package/build/components/KYCElements/OrientationVideoCapture.d.ts +2 -0
- package/build/components/KYCElements/OrientationVideoCapture.d.ts.map +1 -1
- package/build/components/KYCElements/OrientationVideoCapture.js +5 -4
- package/build/components/KYCElements/OrientationVideoCapture.js.map +1 -1
- package/build/components/KYCElements/OrientationVideoCaptureEnhanced.d.ts +2 -0
- package/build/components/KYCElements/OrientationVideoCaptureEnhanced.d.ts.map +1 -1
- package/build/components/KYCElements/OrientationVideoCaptureEnhanced.js +5 -4
- package/build/components/KYCElements/OrientationVideoCaptureEnhanced.js.map +1 -1
- package/build/components/KYCElements/OrientationVideoCaptureFinal.d.ts +2 -0
- package/build/components/KYCElements/OrientationVideoCaptureFinal.d.ts.map +1 -1
- package/build/components/KYCElements/OrientationVideoCaptureFinal.js +5 -4
- package/build/components/KYCElements/OrientationVideoCaptureFinal.js.map +1 -1
- package/build/components/KYCElements/PersonalInformationTemplate.d.ts +12 -0
- package/build/components/KYCElements/PersonalInformationTemplate.d.ts.map +1 -0
- package/build/components/KYCElements/PersonalInformationTemplate.js +120 -0
- package/build/components/KYCElements/PersonalInformationTemplate.js.map +1 -0
- package/build/components/KYCElements/PhoneVerificationTemplate.d.ts +12 -0
- package/build/components/KYCElements/PhoneVerificationTemplate.d.ts.map +1 -0
- package/build/components/KYCElements/PhoneVerificationTemplate.js +185 -0
- package/build/components/KYCElements/PhoneVerificationTemplate.js.map +1 -0
- package/build/components/KYCElements/SelfieCapture.d.ts.map +1 -1
- package/build/components/KYCElements/SelfieCapture.js +4 -3
- package/build/components/KYCElements/SelfieCapture.js.map +1 -1
- package/build/components/KYCElements/SelfieCaptureTemplate.d.ts.map +1 -1
- package/build/components/KYCElements/SelfieCaptureTemplate.js +189 -42
- package/build/components/KYCElements/SelfieCaptureTemplate.js.map +1 -1
- package/build/components/KYCElements/WelcomeTemplate.d.ts +12 -0
- package/build/components/KYCElements/WelcomeTemplate.d.ts.map +1 -0
- package/build/components/KYCElements/WelcomeTemplate.js +243 -0
- package/build/components/KYCElements/WelcomeTemplate.js.map +1 -0
- package/build/components/TemplateKYCExample.d.ts +8 -2
- package/build/components/TemplateKYCExample.d.ts.map +1 -1
- package/build/components/TemplateKYCExample.js +10 -97
- package/build/components/TemplateKYCExample.js.map +1 -1
- package/build/components/TemplateKYCFlowRefactored.d.ts +6 -1
- package/build/components/TemplateKYCFlowRefactored.d.ts.map +1 -1
- package/build/components/TemplateKYCFlowRefactored.js +108 -11
- package/build/components/TemplateKYCFlowRefactored.js.map +1 -1
- package/build/components/example/DynamicTemplateExample.d.ts +10 -0
- package/build/components/example/DynamicTemplateExample.d.ts.map +1 -0
- package/build/components/example/DynamicTemplateExample.js +241 -0
- package/build/components/example/DynamicTemplateExample.js.map +1 -0
- package/build/config/KYCConfig.d.ts +14 -0
- package/build/config/KYCConfig.d.ts.map +1 -0
- package/build/config/KYCConfig.js +26 -0
- package/build/config/KYCConfig.js.map +1 -0
- package/build/config/allowedDomains.d.ts +30 -0
- package/build/config/allowedDomains.d.ts.map +1 -0
- package/build/config/allowedDomains.js +112 -0
- package/build/config/allowedDomains.js.map +1 -0
- package/build/hooks/useOrientationVideo.d.ts +2 -1
- package/build/hooks/useOrientationVideo.d.ts.map +1 -1
- package/build/hooks/useOrientationVideo.js +3 -3
- package/build/hooks/useOrientationVideo.js.map +1 -1
- package/build/hooks/useTemplateKYCFlow.d.ts +6 -1
- package/build/hooks/useTemplateKYCFlow.d.ts.map +1 -1
- package/build/hooks/useTemplateKYCFlow.js +317 -34
- package/build/hooks/useTemplateKYCFlow.js.map +1 -1
- package/build/hooks/useTemplateLoader.d.ts +14 -0
- package/build/hooks/useTemplateLoader.d.ts.map +1 -0
- package/build/hooks/useTemplateLoader.js +85 -0
- package/build/hooks/useTemplateLoader.js.map +1 -0
- package/build/i18n/en/index.d.ts +49 -0
- package/build/i18n/en/index.d.ts.map +1 -1
- package/build/i18n/en/index.js +50 -1
- package/build/i18n/en/index.js.map +1 -1
- package/build/i18n/fr/index.d.ts +35 -0
- package/build/i18n/fr/index.d.ts.map +1 -1
- package/build/i18n/fr/index.js +36 -1
- package/build/i18n/fr/index.js.map +1 -1
- package/build/index.d.ts +6 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +10 -0
- package/build/index.js.map +1 -1
- package/build/modules/api/CardAuthentification.d.ts +24 -3
- package/build/modules/api/CardAuthentification.d.ts.map +1 -1
- package/build/modules/api/CardAuthentification.js +69 -10
- package/build/modules/api/CardAuthentification.js.map +1 -1
- package/build/modules/api/KYCService.d.ts +7 -7
- package/build/modules/api/KYCService.d.ts.map +1 -1
- package/build/modules/api/KYCService.js +108 -39
- package/build/modules/api/KYCService.js.map +1 -1
- package/build/modules/api/SelfieVerification.d.ts +3 -1
- package/build/modules/api/SelfieVerification.d.ts.map +1 -1
- package/build/modules/api/SelfieVerification.js +17 -1
- package/build/modules/api/SelfieVerification.js.map +1 -1
- package/build/modules/api/TemplateService.d.ts +44 -0
- package/build/modules/api/TemplateService.d.ts.map +1 -0
- package/build/modules/api/TemplateService.js +145 -0
- package/build/modules/api/TemplateService.js.map +1 -0
- package/build/types/KYC.types.d.ts +265 -4
- package/build/types/KYC.types.d.ts.map +1 -1
- package/build/types/KYC.types.js +15 -0
- package/build/types/KYC.types.js.map +1 -1
- package/build/types/env.types.d.ts +13 -0
- package/build/types/env.types.d.ts.map +1 -0
- package/build/types/env.types.js +2 -0
- package/build/types/env.types.js.map +1 -0
- package/build/utils/cropByObb.d.ts +1 -0
- package/build/utils/cropByObb.d.ts.map +1 -1
- package/build/utils/cropByObb.js +70 -0
- package/build/utils/cropByObb.js.map +1 -1
- package/build/utils/deviceDetection.d.ts +6 -0
- package/build/utils/deviceDetection.d.ts.map +1 -0
- package/build/utils/deviceDetection.js +12 -0
- package/build/utils/deviceDetection.js.map +1 -0
- package/build/utils/platformAlert.d.ts +20 -0
- package/build/utils/platformAlert.d.ts.map +1 -0
- package/build/utils/platformAlert.js +67 -0
- package/build/utils/platformAlert.js.map +1 -0
- package/build/utils/template-transformer.d.ts +10 -0
- package/build/utils/template-transformer.d.ts.map +1 -0
- package/build/utils/template-transformer.js +365 -0
- package/build/utils/template-transformer.js.map +1 -0
- package/build/web/WebKYCEntry.d.ts.map +1 -1
- package/build/web/WebKYCEntry.js +158 -32
- package/build/web/WebKYCEntry.js.map +1 -1
- package/package.json +1 -1
- package/plugin/build/withVisionCamera.js +3 -4
- package/plugin/src/withVisionCamera.js +3 -4
- package/plugin/src/withVisionCamera.ts +3 -4
- package/src/components/EnhancedCameraView.tsx +31 -2
- package/src/components/EnhancedCameraView.web.tsx +24 -0
- package/src/components/KYCElements/AdditionalDocumentsTemplate.tsx +346 -0
- package/src/components/KYCElements/CameraCapture.tsx +4 -3
- package/src/components/KYCElements/CountrySelectionTemplate.tsx +410 -113
- package/src/components/KYCElements/EmailVerificationTemplate.tsx +264 -0
- package/src/components/KYCElements/FileUpload.tsx +5 -4
- package/src/components/KYCElements/FileUploadTemplate.tsx +5 -4
- package/src/components/KYCElements/IDCardCapture.tsx +397 -254
- package/src/components/KYCElements/LocationCaptureTemplate.tsx +95 -44
- package/src/components/KYCElements/OrientationVideoCapture.tsx +6 -3
- package/src/components/KYCElements/OrientationVideoCaptureEnhanced.tsx +6 -3
- package/src/components/KYCElements/OrientationVideoCaptureFinal.tsx +6 -3
- package/src/components/KYCElements/PersonalInformationTemplate.tsx +158 -0
- package/src/components/KYCElements/PhoneVerificationTemplate.tsx +253 -0
- package/src/components/KYCElements/SelfieCapture.tsx +4 -3
- package/src/components/KYCElements/SelfieCaptureTemplate.tsx +201 -44
- package/src/components/KYCElements/WelcomeTemplate.tsx +289 -0
- package/src/components/TemplateKYCExample.tsx +37 -108
- package/src/components/TemplateKYCFlowRefactored.tsx +148 -12
- package/src/components/example/DynamicTemplateExample.tsx +289 -0
- package/src/config/KYCConfig.ts +34 -0
- package/src/config/allowedDomains.ts +133 -0
- package/src/hooks/useOrientationVideo.ts +5 -4
- package/src/hooks/useTemplateKYCFlow.tsx +347 -32
- package/src/hooks/useTemplateLoader.ts +102 -0
- package/src/i18n/en/index.ts +53 -2
- package/src/i18n/fr/index.ts +37 -1
- package/src/index.ts +14 -0
- package/src/modules/api/CardAuthentification.ts +76 -11
- package/src/modules/api/KYCService.ts +129 -45
- package/src/modules/api/SelfieVerification.ts +25 -3
- package/src/modules/api/TemplateService.ts +167 -0
- package/src/types/KYC.types.ts +331 -3
- package/src/types/env.types.ts +13 -0
- package/src/utils/cropByObb.ts +83 -3
- package/src/utils/deviceDetection.ts +11 -0
- package/src/utils/platformAlert.ts +86 -0
- package/src/utils/template-transformer.ts +445 -0
- package/src/web/WebKYCEntry.tsx +199 -50
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OrientationVideoCaptureFinal.js","sourceRoot":"","sources":["../../../src/components/KYCElements/OrientationVideoCaptureFinal.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState, useRef, useEffect } from 'react';\nimport {\n View,\n Text,\n StyleSheet,\n TouchableOpacity,\n Alert,\n ActivityIndicator,\n Animated,\n} from 'react-native';\nimport Svg, { Rect, Path, Mask, Defs } from 'react-native-svg';\nimport { EnhancedCameraView } from '../EnhancedCameraView';\nimport { OrientationVideoConfig, OrientationVideoState } from '../../types/KYC.types';\nimport SideSelfieIcon from '../Svgs/sideSelfieIcon';\nimport kycService from '../../modules/api/KYCService';\n\ninterface OrientationVideoCaptureFinalProps {\n config?: Partial<OrientationVideoConfig>;\n onComplete: (result: any) => void;\n onError: (error: string) => void;\n kycService: typeof kycService;\n}\n\nconst defaultConfig: OrientationVideoConfig = {\n duration: 10, // 10 seconds\n orientations: ['center', 'left', 'right'],\n instructions: {\n center: 'Look straight ahead at the camera',\n left: 'Turn your head to the left',\n right: 'Turn your head to the right',\n },\n showPreview: true,\n allowRetake: true,\n maxRetakes: 3,\n quality: 0.8,\n aspectRatio: 16 / 9,\n};\n\nexport const OrientationVideoCaptureFinal: React.FC<OrientationVideoCaptureFinalProps> = ({\n config = {},\n onComplete,\n onError,\n kycService,\n}) => {\n const finalConfig = { ...defaultConfig, ...config };\n \n const [state, setState] = useState<OrientationVideoState>({\n isRecording: false,\n currentOrientation: null,\n recordedVideo: null,\n processingResult: null,\n isProcessing: false,\n error: null,\n retakeCount: 0,\n });\n\n const [showCamera, setShowCamera] = useState(true);\n const instructionAnimation = useRef(new Animated.Value(0)).current;\n const recordingTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n startInstructionAnimation();\n }, []);\n\n useEffect(() => {\n return () => {\n if (recordingTimeoutRef.current) {\n clearTimeout(recordingTimeoutRef.current);\n }\n };\n }, []);\n\n const startInstructionAnimation = () => {\n Animated.loop(\n Animated.sequence([\n Animated.timing(instructionAnimation, {\n toValue: 1,\n duration: 1000,\n useNativeDriver: false,\n }),\n Animated.timing(instructionAnimation, {\n toValue: 0.8,\n duration: 1000,\n useNativeDriver: false,\n }),\n ])\n ).start();\n };\n\n const handleVideoRecordingStart = () => {\n setState(prev => ({ ...prev, isRecording: true, error: null }));\n \n // Set timeout to automatically stop recording after duration\n recordingTimeoutRef.current = setTimeout(() => {\n // The recording will be stopped automatically by the timeout\n }, finalConfig.duration * 1000);\n };\n\n const handleVideoRecordingStop = (result: { success: boolean; path?: string; error?: string }) => {\n if (recordingTimeoutRef.current) {\n clearTimeout(recordingTimeoutRef.current);\n recordingTimeoutRef.current = null;\n }\n\n if (result.success && result.path) {\n setState(prev => ({\n ...prev,\n isRecording: false,\n recordedVideo: result.path || null\n }));\n setShowCamera(false);\n // Process the video immediately\n processVideo(result.path);\n } else {\n setState(prev => ({ \n ...prev, \n isRecording: false,\n error: result.error || 'Recording failed' \n }));\n onError(result.error || 'Recording failed');\n }\n };\n\n const processVideo = async (videoUri: string) => {\n if (state.isProcessing) return;\n\n setState(prev => ({ ...prev, isProcessing: true, error: null }));\n\n try {\n const result = await kycService.processOrientationVideo(videoUri);\n \n if (result.success && result.data) {\n setState(prev => ({ \n ...prev, \n processingResult: result.data || null,\n isProcessing: false \n }));\n onComplete(result.data);\n } else {\n setState(prev => ({ \n ...prev, \n isProcessing: false,\n error: result.message || 'Processing failed' \n }));\n onError(result.message || 'Processing failed');\n }\n } catch (error) {\n console.error('Error processing video:', error);\n setState(prev => ({ \n ...prev, \n isProcessing: false,\n error: 'Failed to process video' \n }));\n onError('Failed to process video');\n }\n };\n\n const retake = () => {\n if (state.retakeCount >= finalConfig.maxRetakes) {\n Alert.alert('Max Retakes Reached', 'You have reached the maximum number of retakes.');\n return;\n }\n\n setState(prev => ({ \n ...prev, \n recordedVideo: null,\n processingResult: null,\n error: null,\n retakeCount: prev.retakeCount + 1 \n }));\n setShowCamera(true);\n };\n\n const reset = () => {\n setState({\n isRecording: false,\n currentOrientation: null,\n recordedVideo: null,\n processingResult: null,\n isProcessing: false,\n error: null,\n retakeCount: 0,\n });\n setShowCamera(true);\n };\n\n const renderInstructions = () => {\n if (!state.currentOrientation) return null;\n\n const instruction = finalConfig.instructions[state.currentOrientation];\n \n return (\n <Animated.View \n style={[\n styles.instructionContainer,\n { opacity: instructionAnimation }\n ]}\n >\n <Text style={styles.instructionText}>{instruction}</Text>\n </Animated.View>\n );\n };\n\n const renderProcessingResult = () => {\n if (!state.processingResult) return null;\n\n const { center, left, right } = state.processingResult;\n const allCaptured = center.captured && left.captured && right.captured;\n\n return (\n <View style={styles.resultContainer}>\n <Text style={styles.resultTitle}>\n {allCaptured ? '✅ All orientations captured!' : '⚠️ Some orientations missing'}\n </Text>\n \n <View style={styles.orientationResults}>\n <View style={styles.orientationResult}>\n <Text style={styles.orientationLabel}>Center</Text>\n <Text style={[styles.orientationStatus, center.captured && styles.captured]}>\n {center.captured ? '✅' : '❌'}\n </Text>\n {center.captured && (\n <Text style={styles.frameInfo}>Frame: {center.frame}</Text>\n )}\n </View>\n \n <View style={styles.orientationResult}>\n <Text style={styles.orientationLabel}>Left</Text>\n <Text style={[styles.orientationStatus, left.captured && styles.captured]}>\n {left.captured ? '✅' : '❌'}\n </Text>\n {left.captured && (\n <Text style={styles.frameInfo}>Frame: {left.frame}</Text>\n )}\n </View>\n \n <View style={styles.orientationResult}>\n <Text style={styles.orientationLabel}>Right</Text>\n <Text style={[styles.orientationStatus, right.captured && styles.captured]}>\n {right.captured ? '✅' : '❌'}\n </Text>\n {right.captured && (\n <Text style={styles.frameInfo}>Frame: {right.frame}</Text>\n )}\n </View>\n </View>\n </View>\n );\n };\n\n if (state.recordedVideo && finalConfig.showPreview) {\n return (\n <View style={styles.container}>\n <View style={styles.videoPreview}>\n <Text style={styles.previewText}>Video recorded successfully</Text>\n <Text style={styles.previewSubtext}>Path: {state.recordedVideo}</Text>\n <Text style={styles.previewSubtext}>Duration: {finalConfig.duration} seconds</Text>\n </View>\n \n {state.isProcessing && (\n <View style={styles.processingOverlay}>\n <ActivityIndicator size=\"large\" color=\"#007AFF\" />\n <Text style={styles.processingText}>Processing video...</Text>\n </View>\n )}\n \n {renderProcessingResult()}\n \n <View style={styles.buttonContainer}>\n {finalConfig.allowRetake && state.retakeCount < finalConfig.maxRetakes && (\n <TouchableOpacity style={styles.retakeButton} onPress={retake}>\n <Text style={styles.retakeButtonText}>\n Retake ({finalConfig.maxRetakes - state.retakeCount} left)\n </Text>\n </TouchableOpacity>\n )}\n \n <TouchableOpacity style={styles.resetButton} onPress={reset}>\n <Text style={styles.resetButtonText}>Start Over</Text>\n </TouchableOpacity>\n </View>\n </View>\n );\n }\n\n return (\n <View style={styles.container}>\n <EnhancedCameraView\n showCamera={showCamera}\n showSwitchCamera={false}\n cameraType=\"front\"\n enableVideo={true}\n isRecording={state.isRecording}\n onVideoRecordingStart={handleVideoRecordingStart}\n onVideoRecordingStop={handleVideoRecordingStop}\n onError={(error) => {\n setState(prev => ({ ...prev, error: error.message }));\n onError(error.message);\n }}\n overlayComponent={\n <View style={styles.overlay}>\n {renderInstructions()}\n \n {/* SideSelfieIcon overlay with mask */}\n <View style={styles.iconOverlay}>\n <Svg\n height=\"100%\"\n width=\"100%\"\n style={StyleSheet.absoluteFill}\n >\n <Defs>\n <Mask id=\"faceMask\">\n {/* Fond blanc - zone visible (extérieur) */}\n <Rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n fill=\"white\"\n />\n {/* Zone noire - zone masquée (forme du visage dans le bbox) */}\n <Path\n d=\"M35.4198 48.9242C38.2153 41.9014 42.5851 35.6693 48.3859 30.8232C61.3601 19.9842 88.1543 1.5 120 1.5C151.846 1.5 178.64 19.9842 191.614 30.8232C197.415 35.6693 201.785 41.9014 204.58 48.9242C210.484 63.7564 220 93.0114 220 127.5C220 168.082 204.19 212.617 198.234 227.954C196.792 231.667 194.971 235.196 192.628 238.417C183.46 251.021 156.313 283.5 120 283.5C83.6867 283.5 56.5401 251.021 47.3723 238.417C45.0294 235.196 43.2081 231.667 41.7663 227.954C35.8102 212.617 20 168.082 20 127.5C20 93.0114 29.5157 63.7564 35.4198 48.9242Z\"\n fill=\"black\"\n transform=\"translate(195, 240) scale(0.8) translate(-120, -142.5)\"\n />\n </Mask>\n </Defs>\n\n {/* Overlay semi-transparent avec masque */}\n <Rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n fill=\"rgba(0, 0, 0, 0.5)\"\n mask=\"url(#faceMask)\"\n />\n </Svg>\n \n {/* SideSelfieIcon positioned in the bbox */}\n <View style={[styles.iconContainer, {\n left: 20,\n top: 140,\n width: 350,\n height: 200,\n }]}>\n <SideSelfieIcon />\n </View>\n </View>\n \n {state.error && (\n <View style={styles.errorContainer}>\n <Text style={styles.errorText}>{state.error}</Text>\n </View>\n )}\n \n {state.isRecording && (\n <View style={styles.recordingIndicator}>\n <Text style={styles.recordingText}>Recording... {finalConfig.duration}s</Text>\n </View>\n )}\n </View>\n }\n />\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n backgroundColor: '#000',\n },\n overlay: {\n flex: 1,\n backgroundColor: 'rgba(0, 0, 0, 0.2)',\n justifyContent: 'space-between',\n padding: 20,\n },\n instructionContainer: {\n backgroundColor: 'rgba(0, 0, 0, 0.7)',\n padding: 15,\n borderRadius: 10,\n marginTop: 50,\n alignSelf: 'center',\n },\n instructionText: {\n color: '#fff',\n fontSize: 18,\n fontWeight: 'bold',\n textAlign: 'center',\n },\n recordingIndicator: {\n backgroundColor: 'rgba(255, 59, 48, 0.8)',\n padding: 10,\n borderRadius: 20,\n alignSelf: 'center',\n marginTop: 20,\n },\n recordingText: {\n color: '#fff',\n fontSize: 16,\n fontWeight: 'bold',\n },\n videoPreview: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: '#f0f0f0',\n },\n previewText: {\n fontSize: 18,\n fontWeight: 'bold',\n color: '#333',\n marginBottom: 10,\n },\n previewSubtext: {\n fontSize: 14,\n color: '#666',\n textAlign: 'center',\n paddingHorizontal: 20,\n marginBottom: 5,\n },\n processingOverlay: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.7)',\n justifyContent: 'center',\n alignItems: 'center',\n },\n processingText: {\n color: '#fff',\n fontSize: 16,\n marginTop: 10,\n },\n resultContainer: {\n backgroundColor: 'rgba(255, 255, 255, 0.9)',\n padding: 20,\n borderRadius: 10,\n margin: 20,\n },\n resultTitle: {\n fontSize: 18,\n fontWeight: 'bold',\n textAlign: 'center',\n marginBottom: 15,\n },\n orientationResults: {\n flexDirection: 'row',\n justifyContent: 'space-around',\n },\n orientationResult: {\n alignItems: 'center',\n },\n orientationLabel: {\n fontSize: 14,\n fontWeight: '600',\n marginBottom: 5,\n },\n orientationStatus: {\n fontSize: 20,\n marginBottom: 5,\n },\n captured: {\n color: '#34C759',\n },\n frameInfo: {\n fontSize: 12,\n color: '#666',\n },\n buttonContainer: {\n flexDirection: 'row',\n justifyContent: 'space-around',\n padding: 20,\n },\n retakeButton: {\n backgroundColor: '#FF9500',\n paddingHorizontal: 20,\n paddingVertical: 10,\n borderRadius: 20,\n },\n retakeButtonText: {\n color: '#fff',\n fontSize: 16,\n fontWeight: '600',\n },\n resetButton: {\n backgroundColor: '#007AFF',\n paddingHorizontal: 20,\n paddingVertical: 10,\n borderRadius: 20,\n },\n resetButtonText: {\n color: '#fff',\n fontSize: 16,\n fontWeight: '600',\n },\n errorContainer: {\n backgroundColor: 'rgba(255, 59, 48, 0.8)',\n padding: 15,\n borderRadius: 10,\n margin: 20,\n },\n errorText: {\n color: '#fff',\n fontSize: 16,\n textAlign: 'center',\n },\n iconOverlay: {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: [{ translateX: -120 }, { translateY: -142.5 }], // Half of width and height\n opacity: 1,\n zIndex: 10,\n backgroundColor: 'rgba(0, 0, 0, 0.1)',\n borderRadius: 10,\n padding: 10,\n },\n iconContainer: {\n position: 'absolute',\n justifyContent: 'center',\n alignItems: 'center',\n },\n});\n\nexport default OrientationVideoCaptureFinal; "]}
|
|
1
|
+
{"version":3,"file":"OrientationVideoCaptureFinal.js","sourceRoot":"","sources":["../../../src/components/KYCElements/OrientationVideoCaptureFinal.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState, useRef, useEffect } from 'react';\nimport {\n View,\n Text,\n StyleSheet,\n TouchableOpacity,\n ActivityIndicator,\n Animated,\n} from 'react-native';\nimport { showAlert } from '../../utils/platformAlert';\nimport Svg, { Rect, Path, Mask, Defs } from 'react-native-svg';\nimport { EnhancedCameraView } from '../EnhancedCameraView';\nimport { OrientationVideoConfig, OrientationVideoState } from '../../types/KYC.types';\nimport { KycEnvironment } from '../../types/env.types';\nimport SideSelfieIcon from '../Svgs/sideSelfieIcon';\nimport kycService from '../../modules/api/KYCService';\n\ninterface OrientationVideoCaptureFinalProps {\n config?: Partial<OrientationVideoConfig>;\n onComplete: (result: any) => void;\n onError: (error: string) => void;\n kycService: typeof kycService;\n env?: KycEnvironment;\n}\n\nconst defaultConfig: OrientationVideoConfig = {\n duration: 10, // 10 seconds\n orientations: ['center', 'left', 'right'],\n instructions: {\n center: 'Look straight ahead at the camera',\n left: 'Turn your head to the left',\n right: 'Turn your head to the right',\n },\n showPreview: true,\n allowRetake: true,\n maxRetakes: 3,\n quality: 0.8,\n aspectRatio: 16 / 9,\n};\n\nexport const OrientationVideoCaptureFinal: React.FC<OrientationVideoCaptureFinalProps> = ({\n config = {},\n onComplete,\n onError,\n kycService,\n env = 'PRODUCTION',\n}) => {\n const finalConfig = { ...defaultConfig, ...config };\n \n const [state, setState] = useState<OrientationVideoState>({\n isRecording: false,\n currentOrientation: null,\n recordedVideo: null,\n processingResult: null,\n isProcessing: false,\n error: null,\n retakeCount: 0,\n });\n\n const [showCamera, setShowCamera] = useState(true);\n const instructionAnimation = useRef(new Animated.Value(0)).current;\n const recordingTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n useEffect(() => {\n startInstructionAnimation();\n }, []);\n\n useEffect(() => {\n return () => {\n if (recordingTimeoutRef.current) {\n clearTimeout(recordingTimeoutRef.current);\n }\n };\n }, []);\n\n const startInstructionAnimation = () => {\n Animated.loop(\n Animated.sequence([\n Animated.timing(instructionAnimation, {\n toValue: 1,\n duration: 1000,\n useNativeDriver: false,\n }),\n Animated.timing(instructionAnimation, {\n toValue: 0.8,\n duration: 1000,\n useNativeDriver: false,\n }),\n ])\n ).start();\n };\n\n const handleVideoRecordingStart = () => {\n setState(prev => ({ ...prev, isRecording: true, error: null }));\n \n // Set timeout to automatically stop recording after duration\n recordingTimeoutRef.current = setTimeout(() => {\n // The recording will be stopped automatically by the timeout\n }, finalConfig.duration * 1000);\n };\n\n const handleVideoRecordingStop = (result: { success: boolean; path?: string; error?: string }) => {\n if (recordingTimeoutRef.current) {\n clearTimeout(recordingTimeoutRef.current);\n recordingTimeoutRef.current = null;\n }\n\n if (result.success && result.path) {\n setState(prev => ({\n ...prev,\n isRecording: false,\n recordedVideo: result.path || null\n }));\n setShowCamera(false);\n // Process the video immediately\n processVideo(result.path);\n } else {\n setState(prev => ({ \n ...prev, \n isRecording: false,\n error: result.error || 'Recording failed' \n }));\n onError(result.error || 'Recording failed');\n }\n };\n\n const processVideo = async (videoUri: string) => {\n if (state.isProcessing) return;\n\n setState(prev => ({ ...prev, isProcessing: true, error: null }));\n\n try {\n const result = await kycService.processOrientationVideo(videoUri, env);\n \n if (result.success && result.data) {\n setState(prev => ({ \n ...prev, \n processingResult: result.data || null,\n isProcessing: false \n }));\n onComplete(result.data);\n } else {\n setState(prev => ({ \n ...prev, \n isProcessing: false,\n error: result.message || 'Processing failed' \n }));\n onError(result.message || 'Processing failed');\n }\n } catch (error) {\n console.error('Error processing video:', error);\n setState(prev => ({ \n ...prev, \n isProcessing: false,\n error: 'Failed to process video' \n }));\n onError('Failed to process video');\n }\n };\n\n const retake = () => {\n if (state.retakeCount >= finalConfig.maxRetakes) {\n showAlert('Max Retakes Reached', 'You have reached the maximum number of retakes.');\n return;\n }\n\n setState(prev => ({ \n ...prev, \n recordedVideo: null,\n processingResult: null,\n error: null,\n retakeCount: prev.retakeCount + 1 \n }));\n setShowCamera(true);\n };\n\n const reset = () => {\n setState({\n isRecording: false,\n currentOrientation: null,\n recordedVideo: null,\n processingResult: null,\n isProcessing: false,\n error: null,\n retakeCount: 0,\n });\n setShowCamera(true);\n };\n\n const renderInstructions = () => {\n if (!state.currentOrientation) return null;\n\n const instruction = finalConfig.instructions[state.currentOrientation];\n \n return (\n <Animated.View \n style={[\n styles.instructionContainer,\n { opacity: instructionAnimation }\n ]}\n >\n <Text style={styles.instructionText}>{instruction}</Text>\n </Animated.View>\n );\n };\n\n const renderProcessingResult = () => {\n if (!state.processingResult) return null;\n\n const { center, left, right } = state.processingResult;\n const allCaptured = center.captured && left.captured && right.captured;\n\n return (\n <View style={styles.resultContainer}>\n <Text style={styles.resultTitle}>\n {allCaptured ? '✅ All orientations captured!' : '⚠️ Some orientations missing'}\n </Text>\n \n <View style={styles.orientationResults}>\n <View style={styles.orientationResult}>\n <Text style={styles.orientationLabel}>Center</Text>\n <Text style={[styles.orientationStatus, center.captured && styles.captured]}>\n {center.captured ? '✅' : '❌'}\n </Text>\n {center.captured && (\n <Text style={styles.frameInfo}>Frame: {center.frame}</Text>\n )}\n </View>\n \n <View style={styles.orientationResult}>\n <Text style={styles.orientationLabel}>Left</Text>\n <Text style={[styles.orientationStatus, left.captured && styles.captured]}>\n {left.captured ? '✅' : '❌'}\n </Text>\n {left.captured && (\n <Text style={styles.frameInfo}>Frame: {left.frame}</Text>\n )}\n </View>\n \n <View style={styles.orientationResult}>\n <Text style={styles.orientationLabel}>Right</Text>\n <Text style={[styles.orientationStatus, right.captured && styles.captured]}>\n {right.captured ? '✅' : '❌'}\n </Text>\n {right.captured && (\n <Text style={styles.frameInfo}>Frame: {right.frame}</Text>\n )}\n </View>\n </View>\n </View>\n );\n };\n\n if (state.recordedVideo && finalConfig.showPreview) {\n return (\n <View style={styles.container}>\n <View style={styles.videoPreview}>\n <Text style={styles.previewText}>Video recorded successfully</Text>\n <Text style={styles.previewSubtext}>Path: {state.recordedVideo}</Text>\n <Text style={styles.previewSubtext}>Duration: {finalConfig.duration} seconds</Text>\n </View>\n \n {state.isProcessing && (\n <View style={styles.processingOverlay}>\n <ActivityIndicator size=\"large\" color=\"#007AFF\" />\n <Text style={styles.processingText}>Processing video...</Text>\n </View>\n )}\n \n {renderProcessingResult()}\n \n <View style={styles.buttonContainer}>\n {finalConfig.allowRetake && state.retakeCount < finalConfig.maxRetakes && (\n <TouchableOpacity style={styles.retakeButton} onPress={retake}>\n <Text style={styles.retakeButtonText}>\n Retake ({finalConfig.maxRetakes - state.retakeCount} left)\n </Text>\n </TouchableOpacity>\n )}\n \n <TouchableOpacity style={styles.resetButton} onPress={reset}>\n <Text style={styles.resetButtonText}>Start Over</Text>\n </TouchableOpacity>\n </View>\n </View>\n );\n }\n\n return (\n <View style={styles.container}>\n <EnhancedCameraView\n showCamera={showCamera}\n showSwitchCamera={false}\n cameraType=\"front\"\n enableVideo={true}\n isRecording={state.isRecording}\n onVideoRecordingStart={handleVideoRecordingStart}\n onVideoRecordingStop={handleVideoRecordingStop}\n onError={(error) => {\n setState(prev => ({ ...prev, error: error.message }));\n onError(error.message);\n }}\n overlayComponent={\n <View style={styles.overlay}>\n {renderInstructions()}\n \n {/* SideSelfieIcon overlay with mask */}\n <View style={styles.iconOverlay}>\n <Svg\n height=\"100%\"\n width=\"100%\"\n style={StyleSheet.absoluteFill}\n >\n <Defs>\n <Mask id=\"faceMask\">\n {/* Fond blanc - zone visible (extérieur) */}\n <Rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n fill=\"white\"\n />\n {/* Zone noire - zone masquée (forme du visage dans le bbox) */}\n <Path\n d=\"M35.4198 48.9242C38.2153 41.9014 42.5851 35.6693 48.3859 30.8232C61.3601 19.9842 88.1543 1.5 120 1.5C151.846 1.5 178.64 19.9842 191.614 30.8232C197.415 35.6693 201.785 41.9014 204.58 48.9242C210.484 63.7564 220 93.0114 220 127.5C220 168.082 204.19 212.617 198.234 227.954C196.792 231.667 194.971 235.196 192.628 238.417C183.46 251.021 156.313 283.5 120 283.5C83.6867 283.5 56.5401 251.021 47.3723 238.417C45.0294 235.196 43.2081 231.667 41.7663 227.954C35.8102 212.617 20 168.082 20 127.5C20 93.0114 29.5157 63.7564 35.4198 48.9242Z\"\n fill=\"black\"\n transform=\"translate(195, 240) scale(0.8) translate(-120, -142.5)\"\n />\n </Mask>\n </Defs>\n\n {/* Overlay semi-transparent avec masque */}\n <Rect\n x=\"0\"\n y=\"0\"\n width=\"100%\"\n height=\"100%\"\n fill=\"rgba(0, 0, 0, 0.5)\"\n mask=\"url(#faceMask)\"\n />\n </Svg>\n \n {/* SideSelfieIcon positioned in the bbox */}\n <View style={[styles.iconContainer, {\n left: 20,\n top: 140,\n width: 350,\n height: 200,\n }]}>\n <SideSelfieIcon />\n </View>\n </View>\n \n {state.error && (\n <View style={styles.errorContainer}>\n <Text style={styles.errorText}>{state.error}</Text>\n </View>\n )}\n \n {state.isRecording && (\n <View style={styles.recordingIndicator}>\n <Text style={styles.recordingText}>Recording... {finalConfig.duration}s</Text>\n </View>\n )}\n </View>\n }\n />\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n flex: 1,\n backgroundColor: '#000',\n },\n overlay: {\n flex: 1,\n backgroundColor: 'rgba(0, 0, 0, 0.2)',\n justifyContent: 'space-between',\n padding: 20,\n },\n instructionContainer: {\n backgroundColor: 'rgba(0, 0, 0, 0.7)',\n padding: 15,\n borderRadius: 10,\n marginTop: 50,\n alignSelf: 'center',\n },\n instructionText: {\n color: '#fff',\n fontSize: 18,\n fontWeight: 'bold',\n textAlign: 'center',\n },\n recordingIndicator: {\n backgroundColor: 'rgba(255, 59, 48, 0.8)',\n padding: 10,\n borderRadius: 20,\n alignSelf: 'center',\n marginTop: 20,\n },\n recordingText: {\n color: '#fff',\n fontSize: 16,\n fontWeight: 'bold',\n },\n videoPreview: {\n flex: 1,\n justifyContent: 'center',\n alignItems: 'center',\n backgroundColor: '#f0f0f0',\n },\n previewText: {\n fontSize: 18,\n fontWeight: 'bold',\n color: '#333',\n marginBottom: 10,\n },\n previewSubtext: {\n fontSize: 14,\n color: '#666',\n textAlign: 'center',\n paddingHorizontal: 20,\n marginBottom: 5,\n },\n processingOverlay: {\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.7)',\n justifyContent: 'center',\n alignItems: 'center',\n },\n processingText: {\n color: '#fff',\n fontSize: 16,\n marginTop: 10,\n },\n resultContainer: {\n backgroundColor: 'rgba(255, 255, 255, 0.9)',\n padding: 20,\n borderRadius: 10,\n margin: 20,\n },\n resultTitle: {\n fontSize: 18,\n fontWeight: 'bold',\n textAlign: 'center',\n marginBottom: 15,\n },\n orientationResults: {\n flexDirection: 'row',\n justifyContent: 'space-around',\n },\n orientationResult: {\n alignItems: 'center',\n },\n orientationLabel: {\n fontSize: 14,\n fontWeight: '600',\n marginBottom: 5,\n },\n orientationStatus: {\n fontSize: 20,\n marginBottom: 5,\n },\n captured: {\n color: '#34C759',\n },\n frameInfo: {\n fontSize: 12,\n color: '#666',\n },\n buttonContainer: {\n flexDirection: 'row',\n justifyContent: 'space-around',\n padding: 20,\n },\n retakeButton: {\n backgroundColor: '#FF9500',\n paddingHorizontal: 20,\n paddingVertical: 10,\n borderRadius: 20,\n },\n retakeButtonText: {\n color: '#fff',\n fontSize: 16,\n fontWeight: '600',\n },\n resetButton: {\n backgroundColor: '#007AFF',\n paddingHorizontal: 20,\n paddingVertical: 10,\n borderRadius: 20,\n },\n resetButtonText: {\n color: '#fff',\n fontSize: 16,\n fontWeight: '600',\n },\n errorContainer: {\n backgroundColor: 'rgba(255, 59, 48, 0.8)',\n padding: 15,\n borderRadius: 10,\n margin: 20,\n },\n errorText: {\n color: '#fff',\n fontSize: 16,\n textAlign: 'center',\n },\n iconOverlay: {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: [{ translateX: -120 }, { translateY: -142.5 }], // Half of width and height\n opacity: 1,\n zIndex: 10,\n backgroundColor: 'rgba(0, 0, 0, 0.1)',\n borderRadius: 10,\n padding: 10,\n },\n iconContainer: {\n position: 'absolute',\n justifyContent: 'center',\n alignItems: 'center',\n },\n});\n\nexport default OrientationVideoCaptureFinal; "]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { TemplateComponent } from '../../types/KYC.types';
|
|
3
|
+
interface PersonalInformationTemplateProps {
|
|
4
|
+
component: TemplateComponent;
|
|
5
|
+
value?: any;
|
|
6
|
+
onValueChange: (data: any) => void;
|
|
7
|
+
error?: string;
|
|
8
|
+
language?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare const PersonalInformationTemplate: React.FC<PersonalInformationTemplateProps>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=PersonalInformationTemplate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PersonalInformationTemplate.d.ts","sourceRoot":"","sources":["../../../src/components/KYCElements/PersonalInformationTemplate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAEnD,OAAO,EAAE,iBAAiB,EAA4C,MAAM,uBAAuB,CAAC;AAKpG,UAAU,gCAAgC;IACtC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,aAAa,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,2BAA2B,EAAE,KAAK,CAAC,EAAE,CAAC,gCAAgC,CA+ElF,CAAC"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import React, { useState, useEffect } from 'react';
|
|
2
|
+
import { View, Text, StyleSheet, TextInput, KeyboardAvoidingView, Platform, ScrollView } from 'react-native';
|
|
3
|
+
import { useTemplateKYCFlowContext } from '../../hooks/useTemplateKYCFlow';
|
|
4
|
+
import { useI18n } from '../../hooks/useI18n';
|
|
5
|
+
import { Button } from '../ui/Button';
|
|
6
|
+
export const PersonalInformationTemplate = ({ component, value, onValueChange, error, }) => {
|
|
7
|
+
const { actions, getLocalizedText } = useTemplateKYCFlowContext();
|
|
8
|
+
const { t } = useI18n();
|
|
9
|
+
const config = component.config;
|
|
10
|
+
const [formData, setFormData] = useState({});
|
|
11
|
+
const title = getLocalizedText(component.labels);
|
|
12
|
+
const instructions = getLocalizedText(component.instructions);
|
|
13
|
+
const buttonText = getLocalizedText(component.ui.buttonText) || t('common.submit');
|
|
14
|
+
useEffect(() => {
|
|
15
|
+
if (value) {
|
|
16
|
+
setFormData(value);
|
|
17
|
+
}
|
|
18
|
+
}, [value]);
|
|
19
|
+
const handleChange = (fieldId, text) => {
|
|
20
|
+
const newData = { ...formData, [fieldId]: text };
|
|
21
|
+
setFormData(newData);
|
|
22
|
+
onValueChange(newData);
|
|
23
|
+
};
|
|
24
|
+
const handleCreate = () => {
|
|
25
|
+
actions.nextComponent();
|
|
26
|
+
};
|
|
27
|
+
const isFormValid = () => {
|
|
28
|
+
if (!config.fields)
|
|
29
|
+
return true;
|
|
30
|
+
return config.fields.every(field => {
|
|
31
|
+
if (field.required && !formData[field.id])
|
|
32
|
+
return false;
|
|
33
|
+
return true;
|
|
34
|
+
});
|
|
35
|
+
};
|
|
36
|
+
return (<KeyboardAvoidingView behavior={Platform.OS === "ios" ? "padding" : "height"} style={styles.keyboardAvoidingView}>
|
|
37
|
+
<ScrollView contentContainerStyle={styles.scrollContainer} showsVerticalScrollIndicator={false}>
|
|
38
|
+
<View style={styles.container}>
|
|
39
|
+
<Text style={styles.title}>{title}</Text>
|
|
40
|
+
<Text style={styles.instructions}>{instructions}</Text>
|
|
41
|
+
|
|
42
|
+
<View style={styles.formContainer}>
|
|
43
|
+
{config.fields && config.fields.map((field) => (<View key={field.id} style={styles.fieldContainer}>
|
|
44
|
+
<Text style={styles.label}>
|
|
45
|
+
{field.label} {field.type === 'date' && field.dateFormat ? `(${field.dateFormat})` : ''} {field.required && '*'}
|
|
46
|
+
</Text>
|
|
47
|
+
<TextInput style={styles.input} placeholder={field.placeholder || field.label} value={formData[field.id] || ''} onChangeText={(text) => handleChange(field.id, text)} autoCapitalize="words"/>
|
|
48
|
+
</View>))}
|
|
49
|
+
</View>
|
|
50
|
+
|
|
51
|
+
{error && <Text style={styles.errorText}>{error}</Text>}
|
|
52
|
+
|
|
53
|
+
<Button title={buttonText} onPress={handleCreate} fullWidth style={styles.button} disabled={!isFormValid()}/>
|
|
54
|
+
</View>
|
|
55
|
+
</ScrollView>
|
|
56
|
+
</KeyboardAvoidingView>);
|
|
57
|
+
};
|
|
58
|
+
const styles = StyleSheet.create({
|
|
59
|
+
keyboardAvoidingView: {
|
|
60
|
+
flex: 1,
|
|
61
|
+
width: '100%',
|
|
62
|
+
},
|
|
63
|
+
scrollContainer: {
|
|
64
|
+
flexGrow: 1,
|
|
65
|
+
justifyContent: 'center',
|
|
66
|
+
paddingBottom: 20,
|
|
67
|
+
},
|
|
68
|
+
container: {
|
|
69
|
+
padding: 20,
|
|
70
|
+
backgroundColor: 'white',
|
|
71
|
+
borderRadius: 12,
|
|
72
|
+
margin: 16,
|
|
73
|
+
shadowColor: '#000',
|
|
74
|
+
shadowOffset: { width: 0, height: 2 },
|
|
75
|
+
shadowOpacity: 0.1,
|
|
76
|
+
shadowRadius: 4,
|
|
77
|
+
elevation: 3,
|
|
78
|
+
width: '95%',
|
|
79
|
+
},
|
|
80
|
+
title: {
|
|
81
|
+
fontSize: 22,
|
|
82
|
+
fontWeight: 'bold',
|
|
83
|
+
marginBottom: 10,
|
|
84
|
+
color: '#333',
|
|
85
|
+
},
|
|
86
|
+
instructions: {
|
|
87
|
+
fontSize: 16,
|
|
88
|
+
color: '#666',
|
|
89
|
+
marginBottom: 20,
|
|
90
|
+
lineHeight: 22,
|
|
91
|
+
},
|
|
92
|
+
formContainer: {
|
|
93
|
+
marginBottom: 20,
|
|
94
|
+
},
|
|
95
|
+
fieldContainer: {
|
|
96
|
+
marginBottom: 16,
|
|
97
|
+
},
|
|
98
|
+
label: {
|
|
99
|
+
fontSize: 14,
|
|
100
|
+
fontWeight: '600',
|
|
101
|
+
color: '#333',
|
|
102
|
+
marginBottom: 6,
|
|
103
|
+
},
|
|
104
|
+
input: {
|
|
105
|
+
borderWidth: 1,
|
|
106
|
+
borderColor: '#ddd',
|
|
107
|
+
padding: 12,
|
|
108
|
+
borderRadius: 8,
|
|
109
|
+
fontSize: 16,
|
|
110
|
+
backgroundColor: '#f9f9f9',
|
|
111
|
+
},
|
|
112
|
+
errorText: {
|
|
113
|
+
color: 'red',
|
|
114
|
+
marginBottom: 10,
|
|
115
|
+
},
|
|
116
|
+
button: {
|
|
117
|
+
marginTop: 10,
|
|
118
|
+
},
|
|
119
|
+
});
|
|
120
|
+
//# sourceMappingURL=PersonalInformationTemplate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PersonalInformationTemplate.js","sourceRoot":"","sources":["../../../src/components/KYCElements/PersonalInformationTemplate.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState, useEffect } from 'react';\nimport { View, Text, StyleSheet, TextInput, KeyboardAvoidingView, Platform, ScrollView } from 'react-native';\nimport { TemplateComponent, PersonalInformationConfig, LocalizedText } from '../../types/KYC.types';\nimport { useTemplateKYCFlowContext } from '../../hooks/useTemplateKYCFlow';\nimport { useI18n } from '../../hooks/useI18n';\nimport { Button } from '../ui/Button';\n\ninterface PersonalInformationTemplateProps {\n component: TemplateComponent;\n value?: any;\n onValueChange: (data: any) => void;\n error?: string;\n language?: string;\n}\n\nexport const PersonalInformationTemplate: React.FC<PersonalInformationTemplateProps> = ({\n component,\n value,\n onValueChange,\n error,\n}) => {\n const { actions, getLocalizedText } = useTemplateKYCFlowContext();\n const { t } = useI18n();\n const config = component.config as PersonalInformationConfig;\n const [formData, setFormData] = useState<Record<string, string>>({});\n\n const title = getLocalizedText(component.labels as LocalizedText);\n const instructions = getLocalizedText(component.instructions as LocalizedText);\n const buttonText = getLocalizedText((component.ui as any).buttonText) || t('common.submit');\n\n useEffect(() => {\n if (value) {\n setFormData(value);\n }\n }, [value]);\n\n const handleChange = (fieldId: string, text: string) => {\n const newData = { ...formData, [fieldId]: text };\n setFormData(newData);\n onValueChange(newData);\n };\n\n const handleCreate = () => {\n actions.nextComponent();\n };\n\n const isFormValid = () => {\n if (!config.fields) return true;\n return config.fields.every(field => {\n if (field.required && !formData[field.id]) return false;\n return true;\n });\n };\n\n return (\n <KeyboardAvoidingView\n behavior={Platform.OS === \"ios\" ? \"padding\" : \"height\"}\n style={styles.keyboardAvoidingView}\n >\n <ScrollView contentContainerStyle={styles.scrollContainer} showsVerticalScrollIndicator={false}>\n <View style={styles.container}>\n <Text style={styles.title}>{title}</Text>\n <Text style={styles.instructions}>{instructions}</Text>\n\n <View style={styles.formContainer}>\n {config.fields && config.fields.map((field) => (\n <View key={field.id} style={styles.fieldContainer}>\n <Text style={styles.label}>\n {field.label} {field.type === 'date' && field.dateFormat ? `(${field.dateFormat})` : ''} {field.required && '*'}\n </Text>\n <TextInput\n style={styles.input}\n placeholder={field.placeholder || field.label}\n value={formData[field.id] || ''}\n onChangeText={(text) => handleChange(field.id, text)}\n autoCapitalize=\"words\"\n />\n </View>\n ))}\n </View>\n\n {error && <Text style={styles.errorText}>{error}</Text>}\n\n <Button\n title={buttonText}\n onPress={handleCreate}\n fullWidth\n style={styles.button}\n disabled={!isFormValid()}\n />\n </View>\n </ScrollView>\n </KeyboardAvoidingView>\n );\n};\n\nconst styles = StyleSheet.create({\n keyboardAvoidingView: {\n flex: 1,\n width: '100%',\n },\n scrollContainer: {\n flexGrow: 1,\n justifyContent: 'center',\n paddingBottom: 20,\n },\n container: {\n padding: 20,\n backgroundColor: 'white',\n borderRadius: 12,\n margin: 16,\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.1,\n shadowRadius: 4,\n elevation: 3,\n width: '95%',\n },\n title: {\n fontSize: 22,\n fontWeight: 'bold',\n marginBottom: 10,\n color: '#333',\n },\n instructions: {\n fontSize: 16,\n color: '#666',\n marginBottom: 20,\n lineHeight: 22,\n },\n formContainer: {\n marginBottom: 20,\n },\n fieldContainer: {\n marginBottom: 16,\n },\n label: {\n fontSize: 14,\n fontWeight: '600',\n color: '#333',\n marginBottom: 6,\n },\n input: {\n borderWidth: 1,\n borderColor: '#ddd',\n padding: 12,\n borderRadius: 8,\n fontSize: 16,\n backgroundColor: '#f9f9f9',\n },\n errorText: {\n color: 'red',\n marginBottom: 10,\n },\n button: {\n marginTop: 10,\n },\n});\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { TemplateComponent } from '../../types/KYC.types';
|
|
3
|
+
interface PhoneVerificationTemplateProps {
|
|
4
|
+
component: TemplateComponent;
|
|
5
|
+
value?: any;
|
|
6
|
+
onValueChange: (data: any) => void;
|
|
7
|
+
error?: string;
|
|
8
|
+
language?: string;
|
|
9
|
+
}
|
|
10
|
+
export declare const PhoneVerificationTemplate: React.FC<PhoneVerificationTemplateProps>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=PhoneVerificationTemplate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PhoneVerificationTemplate.d.ts","sourceRoot":"","sources":["../../../src/components/KYCElements/PhoneVerificationTemplate.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,iBAAiB,EAAiB,MAAM,uBAAuB,CAAC;AAKzE,UAAU,8BAA8B;IACpC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,aAAa,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAAC;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAID,eAAO,MAAM,yBAAyB,EAAE,KAAK,CAAC,EAAE,CAAC,8BAA8B,CAuJ9E,CAAC"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
import React, { useState } from 'react';
|
|
2
|
+
import { View, Text, StyleSheet, TextInput, TouchableOpacity, Alert } from 'react-native';
|
|
3
|
+
import { useTemplateKYCFlowContext } from '../../hooks/useTemplateKYCFlow';
|
|
4
|
+
import { useI18n } from '../../hooks/useI18n';
|
|
5
|
+
import { Button } from '../ui/Button';
|
|
6
|
+
export const PhoneVerificationTemplate = ({ component, value, onValueChange, error: propError, }) => {
|
|
7
|
+
const { actions, getLocalizedText } = useTemplateKYCFlowContext();
|
|
8
|
+
const { t } = useI18n();
|
|
9
|
+
// const config = component.config as PhoneVerificationConfig;
|
|
10
|
+
// State
|
|
11
|
+
const [step, setStep] = useState('phone');
|
|
12
|
+
const [phone, setPhone] = useState('');
|
|
13
|
+
const [otp, setOtp] = useState('');
|
|
14
|
+
const [localError, setLocalError] = useState(null);
|
|
15
|
+
const [isSimulating, setIsSimulating] = useState(false);
|
|
16
|
+
const title = getLocalizedText(component.labels);
|
|
17
|
+
const instructions = getLocalizedText(component.instructions);
|
|
18
|
+
// Determine button text based on step
|
|
19
|
+
const verifyButtonText = getLocalizedText(component.ui.buttonText) || t('common.verify') || 'Verify';
|
|
20
|
+
const sendButtonText = t('common.sendCode') || 'Send Verification Code';
|
|
21
|
+
const buttonText = step === 'phone' ? sendButtonText : verifyButtonText;
|
|
22
|
+
const handleSendCode = () => {
|
|
23
|
+
if (!phone || phone.length < 5) {
|
|
24
|
+
setLocalError(t('errors.invalidPhone') || 'Please enter a valid phone number');
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
setLocalError(null);
|
|
28
|
+
setIsSimulating(true);
|
|
29
|
+
// Simulate API call to send code
|
|
30
|
+
setTimeout(() => {
|
|
31
|
+
setIsSimulating(false);
|
|
32
|
+
setStep('otp');
|
|
33
|
+
}, 1500);
|
|
34
|
+
};
|
|
35
|
+
const handleVerifyCode = () => {
|
|
36
|
+
if (!otp || otp.length < 4) {
|
|
37
|
+
setLocalError(t('errors.invalidCode') || 'Please enter the 6-digit code');
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
setLocalError(null);
|
|
41
|
+
setIsSimulating(true);
|
|
42
|
+
// Simulate verification API
|
|
43
|
+
setTimeout(() => {
|
|
44
|
+
setIsSimulating(false);
|
|
45
|
+
// Mock validation logic
|
|
46
|
+
if (otp === '123456') {
|
|
47
|
+
onValueChange({ phone, otp, verified: true });
|
|
48
|
+
actions.nextComponent();
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
setLocalError(t('errors.wrongCode') || 'Invalid verification code. Try 123456');
|
|
52
|
+
}
|
|
53
|
+
}, 1500);
|
|
54
|
+
};
|
|
55
|
+
const onChangePhone = (text) => {
|
|
56
|
+
setPhone(text);
|
|
57
|
+
if (localError)
|
|
58
|
+
setLocalError(null);
|
|
59
|
+
};
|
|
60
|
+
const onChangeOtp = (text) => {
|
|
61
|
+
setOtp(text);
|
|
62
|
+
if (localError)
|
|
63
|
+
setLocalError(null);
|
|
64
|
+
};
|
|
65
|
+
const handleBackToPhone = () => {
|
|
66
|
+
setStep('phone');
|
|
67
|
+
setOtp('');
|
|
68
|
+
setLocalError(null);
|
|
69
|
+
};
|
|
70
|
+
return (<View style={styles.container}>
|
|
71
|
+
<Text style={styles.title}>{title}</Text>
|
|
72
|
+
<Text style={styles.instructions}>
|
|
73
|
+
{step === 'phone' ? instructions : (t('kyc.enterCodeSent') || `Please enter the code sent to ${phone}`)}
|
|
74
|
+
</Text>
|
|
75
|
+
|
|
76
|
+
<View style={styles.contentContainer}>
|
|
77
|
+
{step === 'phone' ? (<View style={styles.inputContainer}>
|
|
78
|
+
<Text style={styles.label}>{t('common.phone') || 'Phone Number'}</Text>
|
|
79
|
+
<TextInput style={styles.input} placeholder="+1234567890" value={phone} onChangeText={onChangePhone} keyboardType="phone-pad" autoComplete="tel" editable={!isSimulating}/>
|
|
80
|
+
</View>) : (<View style={styles.inputContainer}>
|
|
81
|
+
<Text style={styles.label}>{t('common.verificationCode') || 'Verification Code'}</Text>
|
|
82
|
+
<TextInput style={styles.input} placeholder="123456" value={otp} onChangeText={onChangeOtp} keyboardType="number-pad" maxLength={6} editable={!isSimulating}/>
|
|
83
|
+
<TouchableOpacity onPress={handleBackToPhone} style={styles.changeLink}>
|
|
84
|
+
<Text style={styles.changeText}>{t('common.back') || 'Change number'}</Text>
|
|
85
|
+
</TouchableOpacity>
|
|
86
|
+
</View>)}
|
|
87
|
+
|
|
88
|
+
{(localError || propError) && (<Text style={styles.errorText}>{localError || propError}</Text>)}
|
|
89
|
+
|
|
90
|
+
<Button title={isSimulating ? (t('common.processing') || 'Processing...') : buttonText} onPress={step === 'phone' ? handleSendCode : handleVerifyCode} style={styles.button} disabled={isSimulating ||
|
|
91
|
+
(step === 'phone' ? !phone : !otp)}/>
|
|
92
|
+
|
|
93
|
+
{step === 'otp' && (<TouchableOpacity onPress={() => {
|
|
94
|
+
// Resend logic
|
|
95
|
+
Alert.alert(t('common.codeResent') || 'Code Resent', t('common.codeResentMessage', { email: phone }) || 'Code resent to ' + phone);
|
|
96
|
+
}} style={styles.resendButton} disabled={isSimulating}>
|
|
97
|
+
<Text style={styles.resendText}>{t('common.resendCode') || 'Resend Code'}</Text>
|
|
98
|
+
</TouchableOpacity>)}
|
|
99
|
+
</View>
|
|
100
|
+
</View>);
|
|
101
|
+
};
|
|
102
|
+
const styles = StyleSheet.create({
|
|
103
|
+
container: {
|
|
104
|
+
padding: 24,
|
|
105
|
+
backgroundColor: 'white',
|
|
106
|
+
borderRadius: 16,
|
|
107
|
+
margin: 16,
|
|
108
|
+
shadowColor: '#000',
|
|
109
|
+
shadowOffset: { width: 0, height: 4 },
|
|
110
|
+
shadowOpacity: 0.1,
|
|
111
|
+
shadowRadius: 12,
|
|
112
|
+
elevation: 5,
|
|
113
|
+
width: '95%',
|
|
114
|
+
},
|
|
115
|
+
title: {
|
|
116
|
+
fontSize: 24,
|
|
117
|
+
fontWeight: '700',
|
|
118
|
+
marginBottom: 8,
|
|
119
|
+
color: '#1a1a1a',
|
|
120
|
+
textAlign: 'center',
|
|
121
|
+
},
|
|
122
|
+
instructions: {
|
|
123
|
+
fontSize: 16,
|
|
124
|
+
color: '#666',
|
|
125
|
+
marginBottom: 32,
|
|
126
|
+
lineHeight: 24,
|
|
127
|
+
textAlign: 'center',
|
|
128
|
+
},
|
|
129
|
+
contentContainer: {
|
|
130
|
+
// width: '100%',
|
|
131
|
+
},
|
|
132
|
+
inputContainer: {
|
|
133
|
+
marginBottom: 24,
|
|
134
|
+
},
|
|
135
|
+
label: {
|
|
136
|
+
fontSize: 14,
|
|
137
|
+
fontWeight: '600',
|
|
138
|
+
color: '#333',
|
|
139
|
+
marginBottom: 8,
|
|
140
|
+
marginLeft: 4,
|
|
141
|
+
},
|
|
142
|
+
input: {
|
|
143
|
+
borderWidth: 1,
|
|
144
|
+
borderColor: '#e0e0e0',
|
|
145
|
+
padding: 16,
|
|
146
|
+
borderRadius: 12,
|
|
147
|
+
fontSize: 16,
|
|
148
|
+
backgroundColor: '#f8f9fa',
|
|
149
|
+
color: '#333',
|
|
150
|
+
},
|
|
151
|
+
errorText: {
|
|
152
|
+
color: '#dc2626',
|
|
153
|
+
marginBottom: 16,
|
|
154
|
+
fontSize: 14,
|
|
155
|
+
textAlign: 'center',
|
|
156
|
+
backgroundColor: '#fee2e2',
|
|
157
|
+
padding: 8,
|
|
158
|
+
borderRadius: 8,
|
|
159
|
+
overflow: 'hidden',
|
|
160
|
+
},
|
|
161
|
+
button: {
|
|
162
|
+
height: 50,
|
|
163
|
+
borderRadius: 12,
|
|
164
|
+
width: "100%"
|
|
165
|
+
},
|
|
166
|
+
changeLink: {
|
|
167
|
+
alignSelf: 'flex-end',
|
|
168
|
+
marginTop: 8,
|
|
169
|
+
},
|
|
170
|
+
changeText: {
|
|
171
|
+
color: '#2DBD60',
|
|
172
|
+
fontSize: 14,
|
|
173
|
+
fontWeight: '500',
|
|
174
|
+
},
|
|
175
|
+
resendButton: {
|
|
176
|
+
marginTop: 16,
|
|
177
|
+
alignItems: 'center',
|
|
178
|
+
},
|
|
179
|
+
resendText: {
|
|
180
|
+
color: '#666',
|
|
181
|
+
fontSize: 14,
|
|
182
|
+
textDecorationLine: 'underline',
|
|
183
|
+
},
|
|
184
|
+
});
|
|
185
|
+
//# sourceMappingURL=PhoneVerificationTemplate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PhoneVerificationTemplate.js","sourceRoot":"","sources":["../../../src/components/KYCElements/PhoneVerificationTemplate.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState } from 'react';\nimport { View, Text, StyleSheet, TextInput, TouchableOpacity, Alert } from 'react-native';\nimport { TemplateComponent, LocalizedText } from '../../types/KYC.types';\nimport { useTemplateKYCFlowContext } from '../../hooks/useTemplateKYCFlow';\nimport { useI18n } from '../../hooks/useI18n';\nimport { Button } from '../ui/Button';\n\ninterface PhoneVerificationTemplateProps {\n component: TemplateComponent;\n value?: any;\n onValueChange: (data: any) => void;\n error?: string;\n language?: string;\n}\n\ntype VerificationStep = 'phone' | 'otp';\n\nexport const PhoneVerificationTemplate: React.FC<PhoneVerificationTemplateProps> = ({\n component,\n value,\n onValueChange,\n error: propError,\n}) => {\n const { actions, getLocalizedText } = useTemplateKYCFlowContext();\n const { t } = useI18n();\n // const config = component.config as PhoneVerificationConfig;\n\n // State\n const [step, setStep] = useState<VerificationStep>('phone');\n const [phone, setPhone] = useState('');\n const [otp, setOtp] = useState('');\n const [localError, setLocalError] = useState<string | null>(null);\n const [isSimulating, setIsSimulating] = useState(false);\n\n const title = getLocalizedText(component.labels as LocalizedText);\n const instructions = getLocalizedText(component.instructions as LocalizedText);\n\n // Determine button text based on step\n const verifyButtonText = getLocalizedText((component.ui as any).buttonText) || t('common.verify') || 'Verify';\n const sendButtonText = t('common.sendCode') || 'Send Verification Code';\n const buttonText = step === 'phone' ? sendButtonText : verifyButtonText;\n\n const handleSendCode = () => {\n if (!phone || phone.length < 5) {\n setLocalError(t('errors.invalidPhone') || 'Please enter a valid phone number');\n return;\n }\n\n setLocalError(null);\n setIsSimulating(true);\n\n // Simulate API call to send code\n setTimeout(() => {\n setIsSimulating(false);\n setStep('otp');\n }, 1500);\n };\n\n const handleVerifyCode = () => {\n if (!otp || otp.length < 4) {\n setLocalError(t('errors.invalidCode') || 'Please enter the 6-digit code');\n return;\n }\n\n setLocalError(null);\n setIsSimulating(true);\n\n // Simulate verification API\n setTimeout(() => {\n setIsSimulating(false);\n\n // Mock validation logic\n if (otp === '123456') {\n onValueChange({ phone, otp, verified: true });\n actions.nextComponent();\n } else {\n setLocalError(t('errors.wrongCode') || 'Invalid verification code. Try 123456');\n }\n }, 1500);\n };\n\n const onChangePhone = (text: string) => {\n setPhone(text);\n if (localError) setLocalError(null);\n };\n\n const onChangeOtp = (text: string) => {\n setOtp(text);\n if (localError) setLocalError(null);\n };\n\n const handleBackToPhone = () => {\n setStep('phone');\n setOtp('');\n setLocalError(null);\n };\n\n return (\n <View style={styles.container}>\n <Text style={styles.title}>{title}</Text>\n <Text style={styles.instructions}>\n {step === 'phone' ? instructions : (t('kyc.enterCodeSent') || `Please enter the code sent to ${phone}`)}\n </Text>\n\n <View style={styles.contentContainer}>\n {step === 'phone' ? (\n <View style={styles.inputContainer}>\n <Text style={styles.label}>{t('common.phone') || 'Phone Number'}</Text>\n <TextInput\n style={styles.input}\n placeholder=\"+1234567890\"\n value={phone}\n onChangeText={onChangePhone}\n keyboardType=\"phone-pad\"\n autoComplete=\"tel\"\n editable={!isSimulating}\n />\n </View>\n ) : (\n <View style={styles.inputContainer}>\n <Text style={styles.label}>{t('common.verificationCode') || 'Verification Code'}</Text>\n <TextInput\n style={styles.input}\n placeholder=\"123456\"\n value={otp}\n onChangeText={onChangeOtp}\n keyboardType=\"number-pad\"\n maxLength={6}\n editable={!isSimulating}\n />\n <TouchableOpacity onPress={handleBackToPhone} style={styles.changeLink}>\n <Text style={styles.changeText}>{t('common.back') || 'Change number'}</Text>\n </TouchableOpacity>\n </View>\n )}\n\n {(localError || propError) && (\n <Text style={styles.errorText}>{localError || propError}</Text>\n )}\n\n <Button\n title={isSimulating ? (t('common.processing') || 'Processing...') : buttonText}\n onPress={step === 'phone' ? handleSendCode : handleVerifyCode}\n style={styles.button}\n disabled={\n isSimulating ||\n (step === 'phone' ? !phone : !otp)\n }\n />\n\n {step === 'otp' && (\n <TouchableOpacity\n onPress={() => {\n // Resend logic\n Alert.alert(\n t('common.codeResent') || 'Code Resent',\n t('common.codeResentMessage', { email: phone }) || 'Code resent to ' + phone\n );\n }}\n style={styles.resendButton}\n disabled={isSimulating}\n >\n <Text style={styles.resendText}>{t('common.resendCode') || 'Resend Code'}</Text>\n </TouchableOpacity>\n )}\n </View>\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n container: {\n padding: 24,\n backgroundColor: 'white',\n borderRadius: 16,\n margin: 16,\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 4 },\n shadowOpacity: 0.1,\n shadowRadius: 12,\n elevation: 5,\n width: '95%',\n },\n title: {\n fontSize: 24,\n fontWeight: '700',\n marginBottom: 8,\n color: '#1a1a1a',\n textAlign: 'center',\n },\n instructions: {\n fontSize: 16,\n color: '#666',\n marginBottom: 32,\n lineHeight: 24,\n textAlign: 'center',\n },\n contentContainer: {\n // width: '100%',\n },\n inputContainer: {\n marginBottom: 24,\n },\n label: {\n fontSize: 14,\n fontWeight: '600',\n color: '#333',\n marginBottom: 8,\n marginLeft: 4,\n },\n input: {\n borderWidth: 1,\n borderColor: '#e0e0e0',\n padding: 16,\n borderRadius: 12,\n fontSize: 16,\n backgroundColor: '#f8f9fa',\n color: '#333',\n },\n errorText: {\n color: '#dc2626',\n marginBottom: 16,\n fontSize: 14,\n textAlign: 'center',\n backgroundColor: '#fee2e2',\n padding: 8,\n borderRadius: 8,\n overflow: 'hidden',\n },\n button: {\n height: 50,\n borderRadius: 12,\n width: \"100%\"\n },\n changeLink: {\n alignSelf: 'flex-end',\n marginTop: 8,\n },\n changeText: {\n color: '#2DBD60',\n fontSize: 14,\n fontWeight: '500',\n },\n resendButton: {\n marginTop: 16,\n alignItems: 'center',\n },\n resendText: {\n color: '#666',\n fontSize: 14,\n textDecorationLine: 'underline',\n },\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelfieCapture.d.ts","sourceRoot":"","sources":["../../../src/components/KYCElements/SelfieCapture.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"SelfieCapture.d.ts","sourceRoot":"","sources":["../../../src/components/KYCElements/SelfieCapture.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAKxC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,UAAU,kBAAkB;IAC1B,OAAO,EAAE,UAAU,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAiHtD,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React, { useState } from 'react';
|
|
2
|
-
import { View, Text, TouchableOpacity, StyleSheet, Image
|
|
2
|
+
import { View, Text, TouchableOpacity, StyleSheet, Image } from 'react-native';
|
|
3
|
+
import { showAlert } from '../../utils/platformAlert';
|
|
3
4
|
import { EnhancedCameraView } from '../EnhancedCameraView';
|
|
4
5
|
export const SelfieCapture = ({ element, value, onValueChange, error, }) => {
|
|
5
6
|
const [capturedImage, setCapturedImage] = useState(value || null);
|
|
@@ -23,11 +24,11 @@ export const SelfieCapture = ({ element, value, onValueChange, error, }) => {
|
|
|
23
24
|
setShowCamera(false);
|
|
24
25
|
}
|
|
25
26
|
else {
|
|
26
|
-
|
|
27
|
+
showAlert('Erreur', result.error || 'Impossible de prendre le selfie');
|
|
27
28
|
}
|
|
28
29
|
};
|
|
29
30
|
const handleError = (event) => {
|
|
30
|
-
|
|
31
|
+
showAlert('Erreur', event.message);
|
|
31
32
|
setShowCamera(false);
|
|
32
33
|
};
|
|
33
34
|
const retakePicture = () => {
|