diff options
Diffstat (limited to 'src/screens')
-rw-r--r-- | src/screens/Login/ChooseAccountForm.tsx | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/screens/Login/ChooseAccountForm.tsx b/src/screens/Login/ChooseAccountForm.tsx index 8a58ac03d..e097e0db8 100644 --- a/src/screens/Login/ChooseAccountForm.tsx +++ b/src/screens/Login/ChooseAccountForm.tsx @@ -22,7 +22,7 @@ export const ChooseAccountForm = ({ onSelectAccount: (account?: SessionAccount) => void onPressBack: () => void }) => { - const [isSwitchingAccounts, setIsSwitchingAccounts] = React.useState(false) + const [pendingDid, setPendingDid] = React.useState<string | null>(null) const {track, screen} = useAnalytics() const {_} = useLingui() const {currentAccount} = useSession() @@ -35,13 +35,17 @@ export const ChooseAccountForm = ({ const onSelect = React.useCallback( async (account: SessionAccount) => { + if (pendingDid) { + // The session API isn't resilient to race conditions so let's just ignore this. + return + } if (account.accessJwt) { if (account.did === currentAccount?.did) { setShowLoggedOut(false) Toast.show(_(msg`Already signed in as @${account.handle}`)) } else { try { - setIsSwitchingAccounts(true) + setPendingDid(account.did) await initSession(account) logEvent('account:loggedIn', { logContext: 'ChooseAccountForm', @@ -57,14 +61,22 @@ export const ChooseAccountForm = ({ }) onSelectAccount(account) } finally { - setIsSwitchingAccounts(false) + setPendingDid(null) } } } else { onSelectAccount(account) } }, - [currentAccount, track, initSession, onSelectAccount, setShowLoggedOut, _], + [ + currentAccount, + track, + initSession, + pendingDid, + onSelectAccount, + setShowLoggedOut, + _, + ], ) return ( @@ -78,7 +90,7 @@ export const ChooseAccountForm = ({ <AccountList onSelectAccount={onSelect} onSelectOther={() => onSelectAccount()} - isSwitchingAccounts={isSwitchingAccounts} + pendingDid={pendingDid} /> </View> <View style={[a.flex_row]}> |