diff options
author | Eric Bailey <git@esb.lol> | 2023-11-09 17:14:51 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-11-09 15:14:51 -0800 |
commit | 625cbc435f15bc0d611661b44dbf8add990dff7d (patch) | |
tree | c0bdafd65783a52410c874721510f73fbc9a9828 /src/App.native.tsx | |
parent | 664e7a91a96dfea08d47162ce67adb04412696c0 (diff) | |
download | voidsky-625cbc435f15bc0d611661b44dbf8add990dff7d.tar.zst |
First pass at a session handler (#1850)
* First pass at a session handler * TODOs * Fix recursion * Couple more things * Add back resume session concept * Handle ready * Cleanup of initial loading states * Handle init failure * Cleanup * Remove account * Add updateCurrentAccount * Remove log * Cleanup * Integrate removeAccount * Add hasSession * Add to App.native, harden migration * Use effect to persist data
Diffstat (limited to 'src/App.native.tsx')
-rw-r--r-- | src/App.native.tsx | 41 |
1 files changed, 29 insertions, 12 deletions
diff --git a/src/App.native.tsx b/src/App.native.tsx index 9f38d133d..8479465fd 100644 --- a/src/App.native.tsx +++ b/src/App.native.tsx @@ -26,6 +26,12 @@ import {Provider as ModalStateProvider} from 'state/modals' import {Provider as MutedThreadsProvider} from 'state/muted-threads' import {Provider as InvitesStateProvider} from 'state/invites' import {Provider as PrefsStateProvider} from 'state/preferences' +import { + Provider as SessionProvider, + useSession, + useSessionApi, +} from 'state/session' +import * as persisted from '#/state/persisted' import {i18n} from '@lingui/core' import {I18nProvider} from '@lingui/react' import {messages} from './locale/locales/en/messages' @@ -36,6 +42,8 @@ SplashScreen.preventAutoHideAsync() const InnerApp = observer(function AppImpl() { const colorMode = useColorMode() + const {isInitialLoad} = useSession() + const {resumeSession} = useSessionApi() const [rootStore, setRootStore] = useState<RootStoreModel | undefined>( undefined, ) @@ -52,10 +60,17 @@ const InnerApp = observer(function AppImpl() { }) }, []) + useEffect(() => { + const account = persisted.get('session').currentAccount + resumeSession(account) + }, [resumeSession]) + // show nothing prior to init - if (!rootStore) { + if (!rootStore || isInitialLoad) { + // TODO add a loading state return null } + return ( <QueryClientProvider client={queryClient}> <ThemeProvider theme={colorMode}> @@ -88,17 +103,19 @@ function App() { } return ( - <ShellStateProvider> - <PrefsStateProvider> - <MutedThreadsProvider> - <InvitesStateProvider> - <ModalStateProvider> - <InnerApp /> - </ModalStateProvider> - </InvitesStateProvider> - </MutedThreadsProvider> - </PrefsStateProvider> - </ShellStateProvider> + <SessionProvider> + <ShellStateProvider> + <PrefsStateProvider> + <MutedThreadsProvider> + <InvitesStateProvider> + <ModalStateProvider> + <InnerApp /> + </ModalStateProvider> + </InvitesStateProvider> + </MutedThreadsProvider> + </PrefsStateProvider> + </ShellStateProvider> + </SessionProvider> ) } |