bfe196bac5
* WIP * Add shell state * Integrate new shell state for drawer and minimal shell mode * Replace isDrawerSwipeDisabled * Split shell state into separate contexts to avoid needless re-renders * Fix typo --------- Co-authored-by: Paul Frazee <pfrazee@gmail.com>
44 lines
1.5 KiB
TypeScript
44 lines
1.5 KiB
TypeScript
import {useCallback, useState} from 'react'
|
|
import {useStores} from 'state/index'
|
|
import {useAnalytics} from 'lib/analytics/analytics'
|
|
import {StackActions, useNavigation} from '@react-navigation/native'
|
|
import {NavigationProp} from 'lib/routes/types'
|
|
import {AccountData} from 'state/models/session'
|
|
import {reset as resetNavigation} from '../../Navigation'
|
|
import * as Toast from 'view/com/util/Toast'
|
|
import {useSetDrawerOpen} from '#/state/shell/drawer-open'
|
|
|
|
export function useAccountSwitcher(): [
|
|
boolean,
|
|
(v: boolean) => void,
|
|
(acct: AccountData) => Promise<void>,
|
|
] {
|
|
const {track} = useAnalytics()
|
|
const store = useStores()
|
|
const setDrawerOpen = useSetDrawerOpen()
|
|
const [isSwitching, setIsSwitching] = useState(false)
|
|
const navigation = useNavigation<NavigationProp>()
|
|
|
|
const onPressSwitchAccount = useCallback(
|
|
async (acct: AccountData) => {
|
|
track('Settings:SwitchAccountButtonClicked')
|
|
setIsSwitching(true)
|
|
const success = await store.session.resumeSession(acct)
|
|
setDrawerOpen(false)
|
|
store.shell.closeAllActiveElements()
|
|
if (success) {
|
|
resetNavigation()
|
|
Toast.show(`Signed in as ${acct.displayName || acct.handle}`)
|
|
} else {
|
|
Toast.show('Sorry! We need you to enter your password.')
|
|
navigation.navigate('HomeTab')
|
|
navigation.dispatch(StackActions.popToTop())
|
|
store.session.clear()
|
|
}
|
|
},
|
|
[track, setIsSwitching, navigation, store, setDrawerOpen],
|
|
)
|
|
|
|
return [isSwitching, setIsSwitching, onPressSwitchAccount]
|
|
}
|