diff options
Diffstat (limited to 'src/App.native.tsx')
-rw-r--r-- | src/App.native.tsx | 90 |
1 files changed, 51 insertions, 39 deletions
diff --git a/src/App.native.tsx b/src/App.native.tsx index ac6c2e83d..9fa82e9cd 100644 --- a/src/App.native.tsx +++ b/src/App.native.tsx @@ -4,7 +4,6 @@ import 'view/icons' import React, {useEffect, useState} from 'react' import {GestureHandlerRootView} from 'react-native-gesture-handler' -import {KeyboardProvider} from 'react-native-keyboard-controller' import {RootSiblingParent} from 'react-native-root-siblings' import { initialWindowMetrics, @@ -16,6 +15,7 @@ import {useLingui} from '@lingui/react' import {useQueryClient} from '@tanstack/react-query' 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' @@ -34,6 +34,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' @@ -53,8 +54,9 @@ import {listenSessionDropped} from './state/events' SplashScreen.preventAutoHideAsync() function InnerApp() { - const {isInitialLoad, currentAccount} = useSession() - const {resumeSession} = useSessionApi() + const [isReady, setIsReady] = React.useState(false) + const {currentAccount} = useSession() + const {initSession} = useSessionApi() const theme = useColorModeTheme() const {_} = useLingui() @@ -62,49 +64,61 @@ function InnerApp() { // init useEffect(() => { - listenSessionDropped(() => { - Toast.show(_(msg`Sorry! Your session expired. Please log in again.`)) - }) - + 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]) + + useEffect(() => { + return listenSessionDropped(() => { + Toast.show(_(msg`Sorry! Your session expired. Please log in again.`)) + }) + }, [_]) return ( <SafeAreaProvider initialMetrics={initialWindowMetrics}> <Alf theme={theme}> - <Splash isReady={!isInitialLoad}> - <React.Fragment - // Resets the entire tree below when it changes: - key={currentAccount?.did}> - <QueryProvider currentDid={currentAccount?.did}> - <PushNotificationsListener> - <StatsigProvider> - {/* LabelDefsProvider MUST come before ModerationOptsProvider */} - <LabelDefsProvider> - <ModerationOptsProvider> - <LoggedOutViewProvider> - <SelectedFeedProvider> - <UnreadNotifsProvider> - <ThemeProvider theme={theme}> - {/* All components should be within this provider */} - <RootSiblingParent> + <ThemeProvider theme={theme}> + <Splash isReady={isReady}> + <RootSiblingParent> + <React.Fragment + // Resets the entire tree below when it changes: + key={currentAccount?.did}> + <QueryProvider currentDid={currentAccount?.did}> + <PushNotificationsListener> + <StatsigProvider> + {/* LabelDefsProvider MUST come before ModerationOptsProvider */} + <LabelDefsProvider> + <ModerationOptsProvider> + <LoggedOutViewProvider> + <SelectedFeedProvider> + <UnreadNotifsProvider> <GestureHandlerRootView style={s.h100pct}> <TestCtrls /> <Shell /> </GestureHandlerRootView> - </RootSiblingParent> - </ThemeProvider> - </UnreadNotifsProvider> - </SelectedFeedProvider> - </LoggedOutViewProvider> - </ModerationOptsProvider> - </LabelDefsProvider> - </StatsigProvider> - </PushNotificationsListener> - </QueryProvider> - </React.Fragment> - </Splash> + </UnreadNotifsProvider> + </SelectedFeedProvider> + </LoggedOutViewProvider> + </ModerationOptsProvider> + </LabelDefsProvider> + </StatsigProvider> + </PushNotificationsListener> + </QueryProvider> + </React.Fragment> + </RootSiblingParent> + </Splash> + </ThemeProvider> </Alf> </SafeAreaProvider> ) @@ -142,9 +156,7 @@ function App() { <LightboxStateProvider> <I18nProvider> <PortalProvider> - <KeyboardProvider> - <InnerApp /> - </KeyboardProvider> + <InnerApp /> </PortalProvider> </I18nProvider> </LightboxStateProvider> |