import React from 'react' import {ScrollView, TouchableOpacity, View} from 'react-native' import { FontAwesomeIcon, FontAwesomeIconStyle, } from '@fortawesome/react-native-fontawesome' import {useAnalytics} from 'lib/analytics/analytics' import {Text} from '../../util/text/Text' import {UserAvatar} from '../../util/UserAvatar' import {s, colors} from 'lib/styles' import {usePalette} from 'lib/hooks/usePalette' import {Trans, msg} from '@lingui/macro' import {useLingui} from '@lingui/react' import {styles} from './styles' import {useSession, useSessionApi, SessionAccount} from '#/state/session' import {useProfileQuery} from '#/state/queries/profile' import {useLoggedOutViewControls} from '#/state/shell/logged-out' import * as Toast from '#/view/com/util/Toast' function AccountItem({ account, onSelect, isCurrentAccount, }: { account: SessionAccount onSelect: (account: SessionAccount) => void isCurrentAccount: boolean }) { const pal = usePalette('default') const {_} = useLingui() const {data: profile} = useProfileQuery({did: account.did}) const onPress = React.useCallback(() => { onSelect(account) }, [account, onSelect]) return ( {profile?.displayName || account.handle}{' '} {account.handle} {isCurrentAccount ? ( ) : ( )} ) } export const ChooseAccountForm = ({ onSelectAccount, onPressBack, }: { onSelectAccount: (account?: SessionAccount) => void onPressBack: () => void }) => { const {track, screen} = useAnalytics() const pal = usePalette('default') const {_} = useLingui() const {accounts, currentAccount} = useSession() const {initSession} = useSessionApi() const {setShowLoggedOut} = useLoggedOutViewControls() React.useEffect(() => { screen('Choose Account') }, [screen]) const onSelect = React.useCallback( async (account: SessionAccount) => { if (account.accessJwt) { if (account.did === currentAccount?.did) { setShowLoggedOut(false) Toast.show(_(msg`Already signed in as @${account.handle}`)) } else { await initSession(account) track('Sign In', {resumedSession: true}) setTimeout(() => { Toast.show(_(msg`Signed in as @${account.handle}`)) }, 100) } } else { onSelectAccount(account) } }, [currentAccount, track, initSession, onSelectAccount, setShowLoggedOut, _], ) return ( Sign in as... {accounts.map(account => ( ))} onSelectAccount(undefined)} accessibilityRole="button" accessibilityLabel={_(msg`Login to account that is not listed`)} accessibilityHint=""> Other account Back ) }