import { View, StyleSheet, Button, Text } from 'react-native'; import React, { memo, useCallback, useEffect, useState } from 'react'; import HintMessage from './HintMessage'; import { type GetIdSdk, GetidSdkTypes } from '@get-id/react-native-sdk'; type FaceScanProps = { sdk: GetIdSdk; onComplete?: () => void; onError?: (error: any) => void; }; type FaceScanFunctions = { takePicture?: Function; capture?: Function; stopCapture?: Function; }; const GetidSelfieScanWrapper = ({ sdk, onComplete, onError, }: FaceScanProps) => { const [hintMessage, setHintMessage] = useState(''); const [sdkFunctions, setSdkFunctions] = useState({}); const [captureClicked, setCaptureClicked] = useState(false); const [faceComponent, setFaceComponent] = useState(); const [isCameraReady, setIsCameraReady] = useState(false); const onCameraReady = useCallback(() => { setIsCameraReady(true); }, []); const onUserHintChange = useCallback((hint: GetidSdkTypes.SelfieUserHint) => { console.log(`onUserHintChange: ${hint}`); setHintMessage(hint); }, []); const onServerValidationStarted = useCallback(() => { console.log( 'onDocumentScanServerValidationStarted: Document scan server validation started' ); }, []); useEffect(() => { const initFaceScan = async () => { const initialiseFaceScan = sdk.initialiseSelfie; try { const { component, ...functions } = await initialiseFaceScan({ onServerValidationStarted, onCameraReady, onUserHintChange, useAutoCapture: true, }); setFaceComponent(component); setSdkFunctions(functions); } catch (e: any) { console.error('Error initialising face scan', e); onError?.(e); } }; initFaceScan(); }, [ sdk, onServerValidationStarted, onUserHintChange, onError, onCameraReady, ]); const startCapture = () => { setCaptureClicked(true); sdkFunctions .capture?.() .then(() => { console.log('Face image completed'); onComplete?.(); }) .catch((error: GetidSdkTypes.SelfieError) => { console.error('Error:', error.message); stopCapture(); }); }; const takePicture = () => { sdkFunctions.takePicture?.(); }; const stopCapture = () => { setCaptureClicked(false); sdkFunctions.stopCapture?.(); }; return ( <> {!isCameraReady && ( Loading... )} {faceComponent} Time for selfie {hintMessage && }