import React from 'react' import {View} from 'react-native' import {useSafeAreaInsets} from 'react-native-safe-area-context' import {msg, Trans} from '@lingui/macro' import {useLingui} from '@lingui/react' import {useFocusEffect} from '@react-navigation/native' import {useQueryClient} from '@tanstack/react-query' import {useAccountSwitcher} from '#/lib/hooks/useAccountSwitcher' import {logger} from '#/logger' import {isWeb} from '#/platform/detection' import { type SessionAccount, useAgent, useSession, useSessionApi, } from '#/state/session' import {useSetMinimalShellMode} from '#/state/shell' import {useLoggedOutViewControls} from '#/state/shell/logged-out' import {ScrollView} from '#/view/com/util/Views' import {Logo} from '#/view/icons/Logo' import {atoms as a, useTheme} from '#/alf' import {AccountList} from '#/components/AccountList' import {Button, ButtonIcon, ButtonText} from '#/components/Button' import {Divider} from '#/components/Divider' import {CircleInfo_Stroke2_Corner0_Rounded as CircleInfo} from '#/components/icons/CircleInfo' import {Loader} from '#/components/Loader' import {Text} from '#/components/Typography' const COL_WIDTH = 400 export function Deactivated() { const {_} = useLingui() const t = useTheme() const insets = useSafeAreaInsets() const {currentAccount, accounts} = useSession() const {onPressSwitchAccount, pendingDid} = useAccountSwitcher() const {setShowLoggedOut} = useLoggedOutViewControls() const hasOtherAccounts = accounts.length > 1 const setMinimalShellMode = useSetMinimalShellMode() const {logoutCurrentAccount} = useSessionApi() const agent = useAgent() const [pending, setPending] = React.useState(false) const [error, setError] = React.useState() const queryClient = useQueryClient() useFocusEffect( React.useCallback(() => { setMinimalShellMode(true) }, [setMinimalShellMode]), ) const onSelectAccount = React.useCallback( (account: SessionAccount) => { if (account.did !== currentAccount?.did) { onPressSwitchAccount(account, 'SwitchAccount') } }, [currentAccount, onPressSwitchAccount], ) const onPressAddAccount = React.useCallback(() => { setShowLoggedOut(true) }, [setShowLoggedOut]) const onPressLogout = React.useCallback(() => { if (isWeb) { // We're switching accounts, which remounts the entire app. // On mobile, this gets us Home, but on the web we also need reset the URL. // We can't change the URL via a navigate() call because the navigator // itself is about to unmount, and it calls pushState() too late. // So we change the URL ourselves. The navigator will pick it up on remount. history.pushState(null, '', '/') } logoutCurrentAccount('Deactivated') }, [logoutCurrentAccount]) const handleActivate = React.useCallback(async () => { try { setPending(true) await agent.com.atproto.server.activateAccount() await queryClient.resetQueries() await agent.resumeSession(agent.session!) } catch (e: any) { switch (e.message) { case 'Bad token scope': setError( _( msg`You're logged in with an App Password. Please log in with your main password to continue deactivating your account.`, ), ) break default: setError(_(msg`Something went wrong, please try again`)) break } logger.error(e, { context: 'Failed to activate account', }) } finally { setPending(false) } }, [_, agent, setPending, setError, queryClient]) return ( Welcome back! You previously deactivated @{currentAccount?.handle}. You can reactivate your account to continue logging in. Your profile and posts will be visible to other users. {error && ( {error} )} {hasOtherAccounts ? ( <> Or, log into one of your other accounts. ) : ( <> Or, continue with another account. )} ) }