import { NativeStackScreenProps } from '@react-navigation/native-stack' import BigNumber from 'bignumber.js' import React, { useEffect } from 'react' import { Trans, useTranslation } from 'react-i18next' import { BackHandler, ScrollView, StyleSheet, Text, View } from 'react-native' import { SafeAreaView, useSafeAreaInsets } from 'react-native-safe-area-context' import AppAnalytics from 'src/analytics/AppAnalytics' import { KeylessBackupEvents } from 'src/analytics/Events' import Button, { BtnSizes, BtnTypes } from 'src/components/Button' import Dialog from 'src/components/Dialog' import TokenDisplay from 'src/components/TokenDisplay' import CustomHeader from 'src/components/header/CustomHeader' import GreenLoadingSpinner from 'src/icons/GreenLoadingSpinner' import GreenLoadingSpinnerToCheck from 'src/icons/GreenLoadingSpinnerToCheck' import Help from 'src/icons/Help' import RedLoadingSpinnerToInfo from 'src/icons/RedLoadingSpinnerToInfo' import { keylessBackupStatusSelector } from 'src/keylessBackup/selectors' import { keylessBackupAcceptZeroBalance, keylessBackupBail } from 'src/keylessBackup/slice' import { KeylessBackupFlow, KeylessBackupOrigin, KeylessBackupStatus, } from 'src/keylessBackup/types' import { useDollarsToLocalAmount, useLocalCurrencyCode } from 'src/localCurrency/hooks' import { HeaderTitleWithSubtitle } from 'src/navigator/Headers' import { ensurePincode, navigate, navigateHome } from 'src/navigator/NavigationService' import { Screens } from 'src/navigator/Screens' import { TopBarTextButton } from 'src/navigator/TopBarButton' import { StackParamList } from 'src/navigator/types' import { getOnboardingStepValues, goToNextOnboardingScreen, onboardingPropsSelector, } from 'src/onboarding/steps' import { totalPositionsBalanceUsdSelector } from 'src/positions/selectors' import { useDispatch, useSelector } from 'src/redux/hooks' import colors from 'src/styles/colors' import { typeScale } from 'src/styles/fonts' import { Spacing } from 'src/styles/styles' import variables from 'src/styles/variables' import { useTotalTokenBalance } from 'src/tokens/hooks' import Logger from 'src/utils/Logger' const TAG = 'keylessBackup/KeylessBackupProgress' function KeylessBackupProgress({ route, }: NativeStackScreenProps) { const { keylessBackupFlow, origin } = route.params // Disable back button on Android useEffect(() => { const backPressListener = () => true BackHandler.addEventListener('hardwareBackPress', backPressListener) return () => BackHandler.removeEventListener('hardwareBackPress', backPressListener) }, []) if (keylessBackupFlow === KeylessBackupFlow.Restore) { return } else { return } } function Restore() { const keylessBackupStatus = useSelector(keylessBackupStatusSelector) const localCurrencyCode = useLocalCurrencyCode() const onboardingProps = useSelector(onboardingPropsSelector) // TODO(ACT-1095): Update these to filter out unsupported networks once positions support non-Celo chains const totalTokenBalanceLocal = useTotalTokenBalance() ?? new BigNumber(0) const totalPositionsBalanceUsd = useSelector(totalPositionsBalanceUsdSelector) const totalPositionsBalanceLocal = useDollarsToLocalAmount(totalPositionsBalanceUsd) const totalBalanceLocal = totalTokenBalanceLocal?.plus(totalPositionsBalanceLocal ?? 0) const iconMarginTop = { marginTop: variables.height / 4 } const { t } = useTranslation() const dispatch = useDispatch() const onPressHelp = () => { AppAnalytics.track(KeylessBackupEvents.cab_restore_failed_help) navigate(Screens.SupportContact) } const onPressTryAgain = () => { dispatch(keylessBackupBail()) AppAnalytics.track(KeylessBackupEvents.cab_restore_failed_try_again, { keylessBackupStatus }) navigate(Screens.ImportSelect) } const onPressCreateNewWallet = () => { dispatch(keylessBackupBail()) AppAnalytics.track(KeylessBackupEvents.cab_restore_failed_create_new_wallet, { keylessBackupStatus, }) navigate(Screens.Welcome) } switch (keylessBackupStatus) { case KeylessBackupStatus.InProgress: { return ( {t('keylessBackupStatus.restore.inProgress.title')} ) } case KeylessBackupStatus.RestoreZeroBalance: { return ( } isVisible={true} actionText={t('importExistingKey.emptyWalletDialog.action')} actionPress={() => { AppAnalytics.track(KeylessBackupEvents.cab_restore_zero_balance_accept) dispatch(keylessBackupAcceptZeroBalance()) }} secondaryActionText={t('goBack')} secondaryActionPress={() => { AppAnalytics.track(KeylessBackupEvents.cab_restore_zero_balance_bail) dispatch(keylessBackupBail()) }} testID="ConfirmUseAccountDialog" > {t('importExistingKey.emptyWalletDialog.description')} ) } case KeylessBackupStatus.Completed: { return ( {t('keylessBackupStatus.restore.completed.title')} {totalBalanceLocal.gt(0) ? ( ) : ( t('keylessBackupStatus.restore.completed.bodyZeroBalance') )}