import React, {useEffect, useState} from 'react'; import {TFunction, useTranslation} from 'react-i18next'; import QRCode from 'react-native-qrcode-svg'; import {Centered, Button, Column, Text} from '../../components/ui'; import {Theme} from '../../components/ui/styleUtils'; import {useRequestScreen} from './RequestScreenController'; import BluetoothStateManager from 'react-native-bluetooth-state-manager'; import {Platform} from 'react-native'; import Storage from '../../shared/storage'; import {ErrorMessageOverlay} from '../../components/MessageOverlay'; import { NavigationProp, useFocusEffect, useNavigation, } from '@react-navigation/native'; import {MainBottomTabParamList} from '../../routes/main'; import {BOTTOM_TAB_ROUTES} from '../../routes/routesConstants'; type RequestStackParamList = { RequestScreen: undefined; ReceiveVcScreen: undefined; }; type RequestLayoutNavigation = NavigationProp< RequestStackParamList & MainBottomTabParamList >; export const RequestScreen: React.FC = () => { const {t} = useTranslation('RequestScreen'); const controller = useRequestScreen(); const props: RequestScreenProps = {t, controller}; const [isBluetoothOn, setIsBluetoothOn] = useState(false); const navigation = useNavigation(); useEffect(() => { (async () => { await BluetoothStateManager.onStateChange(state => { if (state === 'PoweredOff') { setIsBluetoothOn(false); } else { setIsBluetoothOn(true); } }, true); })(); }, [isBluetoothOn]); return ( {loadQRCode()} {controller.isMinimumStorageLimitReached && ( { navigation.navigate(BOTTOM_TAB_ROUTES.home); }} translationPath="RequestScreen" /> )} ); function loadQRCode() { if (controller.isNearByDevicesPermissionDenied) { return ; } if ( (controller.isBluetoothDenied || !isBluetoothOn) && controller.isReadyForBluetoothStateCheck ) { return ; } if ( !controller.isCheckingBluetoothService && !controller.isBluetoothDenied ) { return ( {controller.isWaitingForConnection && } ); } } }; const BluetoothPrompt: React.FC = ({t}) => { return ( {t( Platform.OS === 'ios' ? 'bluetoothStateIos' : 'bluetoothStateAndroid', )} ); }; const NearByPrompt: React.FC = ({t, controller}) => { return ( {t('errors.nearbyDevicesPermissionDenied.message')}