about summary refs log tree commit diff
path: root/src/App.web.tsx
diff options
context:
space:
mode:
authordan <dan.abramov@gmail.com>2024-05-02 18:17:53 +0100
committerGitHub <noreply@github.com>2024-05-02 18:17:53 +0100
commit5ec945b7625a8daff3baaf76826c2f9e3c12e279 (patch)
tree0de1fcb4a7350410ef7f82760707ab4422d92021 /src/App.web.tsx
parentdadf27fd2f417584093fb344cdacd9dbe332dade (diff)
downloadvoidsky-5ec945b7625a8daff3baaf76826c2f9e3c12e279.tar.zst
[Session] Extract resumeSession out (#3811)
Diffstat (limited to 'src/App.web.tsx')
-rw-r--r--src/App.web.tsx22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/App.web.tsx b/src/App.web.tsx
index bc9cd01f1..cf28421c9 100644
--- a/src/App.web.tsx
+++ b/src/App.web.tsx
@@ -6,6 +6,7 @@ import {RootSiblingParent} from 'react-native-root-siblings'
 import {SafeAreaProvider} from 'react-native-safe-area-context'
 
 import {Provider as StatsigProvider} from '#/lib/statsig/statsig'
+import {logger} from '#/logger'
 import {init as initPersistedState} from '#/state/persisted'
 import {Provider as LabelDefsProvider} from '#/state/preferences/label-defs'
 import {Provider as ModerationOptsProvider} from '#/state/preferences/moderation-opts'
@@ -22,6 +23,7 @@ import {Provider as PrefsStateProvider} from 'state/preferences'
 import {Provider as UnreadNotifsProvider} from 'state/queries/notifications/unread'
 import {
   Provider as SessionProvider,
+  SessionAccount,
   useSession,
   useSessionApi,
 } from 'state/session'
@@ -36,19 +38,31 @@ import {Provider as PortalProvider} from '#/components/Portal'
 import I18nProvider from './locale/i18nProvider'
 
 function InnerApp() {
-  const {isInitialLoad, currentAccount} = useSession()
-  const {resumeSession} = useSessionApi()
+  const [isReady, setIsReady] = React.useState(false)
+  const {currentAccount} = useSession()
+  const {initSession} = useSessionApi()
   const theme = useColorModeTheme()
   useIntentHandler()
 
   // init
   useEffect(() => {
+    async function resumeSession(account?: SessionAccount) {
+      try {
+        if (account) {
+          await initSession(account)
+        }
+      } catch (e) {
+        logger.error(`session: resumeSession failed`, {message: e})
+      } finally {
+        setIsReady(true)
+      }
+    }
     const account = readLastActiveAccount()
     resumeSession(account)
-  }, [resumeSession])
+  }, [initSession])
 
   // wait for session to resume
-  if (isInitialLoad) return null
+  if (!isReady) return null
 
   return (
     <Alf theme={theme}>