Bluesky app fork with some witchin' additions 馃挮
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 59 lines 2.1 kB view raw
1import {useCallback, useState} from 'react' 2import {msg} from '@lingui/core/macro' 3import {useLingui} from '@lingui/react' 4 5import {logger} from '#/logger' 6import {type SessionAccount, useSessionApi} from '#/state/session' 7import {useLoggedOutViewControls} from '#/state/shell/logged-out' 8import * as Toast from '#/components/Toast' 9import {useAnalytics} from '#/analytics' 10import {type Metrics} from '#/analytics/metrics' 11import {storeNavigationStateForAccountSwitch} from '#/Navigation' 12 13export function useAccountSwitcher() { 14 const ax = useAnalytics() 15 const [pendingDid, setPendingDid] = useState<string | null>(null) 16 const {_} = useLingui() 17 const {resumeSession} = useSessionApi() 18 const {requestSwitchToAccount} = useLoggedOutViewControls() 19 20 const onPressSwitchAccount = useCallback( 21 async ( 22 account: SessionAccount, 23 logContext: Metrics['account:loggedIn']['logContext'], 24 ) => { 25 if (pendingDid) { 26 // The session API isn't resilient to race conditions so let's just ignore this. 27 return 28 } 29 try { 30 setPendingDid(account.did) 31 if (account.accessJwt) { 32 // Store navigation state before switching so user stays on the same page 33 storeNavigationStateForAccountSwitch() 34 await resumeSession(account, true) 35 ax.metric('account:loggedIn', {logContext, withPassword: false}) 36 Toast.show(_(msg`Signed in as @${account.handle}`)) 37 } else { 38 requestSwitchToAccount({requestedAccount: account.did}) 39 Toast.show(_(msg`Please sign in as @${account.handle}`), { 40 type: 'warning', 41 }) 42 } 43 } catch (e: any) { 44 logger.error(`switch account: selectAccount failed`, { 45 message: e.message, 46 }) 47 requestSwitchToAccount({requestedAccount: account.did}) 48 Toast.show(_(msg`Please sign in as @${account.handle}`), { 49 type: 'warning', 50 }) 51 } finally { 52 setPendingDid(null) 53 } 54 }, 55 [_, ax, resumeSession, requestSwitchToAccount, pendingDid], 56 ) 57 58 return {onPressSwitchAccount, pendingDid} 59}