about summary refs log tree commit diff
path: root/src/view
diff options
context:
space:
mode:
Diffstat (limited to 'src/view')
-rw-r--r--src/view/com/auth/LoggedOut.tsx24
-rw-r--r--src/view/com/auth/login/Login.tsx24
2 files changed, 40 insertions, 8 deletions
diff --git a/src/view/com/auth/LoggedOut.tsx b/src/view/com/auth/LoggedOut.tsx
index 030ae68b1..fcff4f782 100644
--- a/src/view/com/auth/LoggedOut.tsx
+++ b/src/view/com/auth/LoggedOut.tsx
@@ -14,6 +14,10 @@ import {useAnalytics} from 'lib/analytics/analytics'
 import {SplashScreen} from './SplashScreen'
 import {useSetMinimalShellMode} from '#/state/shell/minimal-mode'
 import {useWebMediaQueries} from 'lib/hooks/useWebMediaQueries'
+import {
+  useLoggedOutView,
+  useLoggedOutViewControls,
+} from '#/state/shell/logged-out'
 
 enum ScreenState {
   S_LoginOrCreateAccount,
@@ -26,16 +30,27 @@ export function LoggedOut({onDismiss}: {onDismiss?: () => void}) {
   const pal = usePalette('default')
   const setMinimalShellMode = useSetMinimalShellMode()
   const {screen} = useAnalytics()
+  const {requestedAccountSwitchTo} = useLoggedOutView()
   const [screenState, setScreenState] = React.useState<ScreenState>(
-    ScreenState.S_LoginOrCreateAccount,
+    requestedAccountSwitchTo
+      ? ScreenState.S_Login
+      : ScreenState.S_LoginOrCreateAccount,
   )
   const {isMobile} = useWebMediaQueries()
+  const {clearRequestedAccount} = useLoggedOutViewControls()
 
   React.useEffect(() => {
     screen('Login')
     setMinimalShellMode(true)
   }, [screen, setMinimalShellMode])
 
+  const onPressDismiss = React.useCallback(() => {
+    if (onDismiss) {
+      onDismiss()
+    }
+    clearRequestedAccount()
+  }, [clearRequestedAccount, onDismiss])
+
   return (
     <View
       testID="noSessionView"
@@ -62,7 +77,7 @@ export function LoggedOut({onDismiss}: {onDismiss?: () => void}) {
               backgroundColor: pal.text.color,
               borderRadius: 100,
             }}
-            onPress={onDismiss}>
+            onPress={onPressDismiss}>
             <FontAwesomeIcon
               icon="x"
               size={12}
@@ -83,9 +98,10 @@ export function LoggedOut({onDismiss}: {onDismiss?: () => void}) {
         ) : undefined}
         {screenState === ScreenState.S_Login ? (
           <Login
-            onPressBack={() =>
+            onPressBack={() => {
               setScreenState(ScreenState.S_LoginOrCreateAccount)
-            }
+              clearRequestedAccount()
+            }}
           />
         ) : undefined}
         {screenState === ScreenState.S_CreateAccount ? (
diff --git a/src/view/com/auth/login/Login.tsx b/src/view/com/auth/login/Login.tsx
index 67d0afdf1..bc931ac04 100644
--- a/src/view/com/auth/login/Login.tsx
+++ b/src/view/com/auth/login/Login.tsx
@@ -14,6 +14,7 @@ import {useLingui} from '@lingui/react'
 import {msg} from '@lingui/macro'
 import {useSession, SessionAccount} from '#/state/session'
 import {useServiceQuery} from '#/state/queries/service'
+import {useLoggedOutView} from '#/state/shell/logged-out'
 
 enum Forms {
   Login,
@@ -24,16 +25,31 @@ enum Forms {
 }
 
 export const Login = ({onPressBack}: {onPressBack: () => void}) => {
+  const {_} = useLingui()
   const pal = usePalette('default')
+
   const {accounts} = useSession()
   const {track} = useAnalytics()
-  const {_} = useLingui()
+  const {requestedAccountSwitchTo} = useLoggedOutView()
+  const requestedAccount = accounts.find(
+    a => a.did === requestedAccountSwitchTo,
+  )
+
   const [error, setError] = useState<string>('')
-  const [serviceUrl, setServiceUrl] = useState<string>(DEFAULT_SERVICE)
-  const [initialHandle, setInitialHandle] = useState<string>('')
+  const [serviceUrl, setServiceUrl] = useState<string>(
+    requestedAccount?.service || DEFAULT_SERVICE,
+  )
+  const [initialHandle, setInitialHandle] = useState<string>(
+    requestedAccount?.handle || '',
+  )
   const [currentForm, setCurrentForm] = useState<Forms>(
-    accounts.length ? Forms.ChooseAccount : Forms.Login,
+    requestedAccount
+      ? Forms.Login
+      : accounts.length
+      ? Forms.ChooseAccount
+      : Forms.Login,
   )
+
   const {
     data: serviceDescription,
     error: serviceError,