import React, { useEffect } from 'react'; import { Platform, View, ViewStyle, } from 'react-native'; import { UNComponentsError, UNComponentsErrorCodes, UNComponentsErrorData } from '../../types/shared'; import { useIsJailbrokeDevice } from '../../hooks/useIsJailbrokeDevice'; import { useSnapshotProtection } from '../../hooks/useSnapshotProtection'; import { RootState } from '../../store'; import { useSelector } from 'react-redux'; type UnitSecureViewProps = { style?: ViewStyle; children: React.ReactNode; onLoadError?: (error: UNComponentsError) => void; fallback?: React.ReactNode; }; const UNBaseView = (props: UnitSecureViewProps) => { useSnapshotProtection(); const customerToken = useSelector((state: RootState) => state.configuration.customerToken); const isJailbroke = useIsJailbrokeDevice(); useEffect(() => { if (isJailbroke) { props.onLoadError && props.onLoadError({errors: [{title: 'Device is Jailbroke'}]}); } }, [props, isJailbroke]); if (isJailbroke) { return null; } if (props.onLoadError && !customerToken) { props.onLoadError( { errors: [{ code: UNComponentsErrorCodes.MISSING_TOKEN } as UNComponentsErrorData] } ); if (props.fallback) { return <>{props.fallback}; } } if (Platform.OS == 'android') { // eslint-disable-next-line @typescript-eslint/no-var-requires const UnitAndroidSecureView = require('../UNSecureView/UNSecureViewNativeComponent.android').default; return ; } else { return ( ); } }; export default UNBaseView;