diff --git a/src/components/InitialURLContextProvider.tsx b/src/components/InitialURLContextProvider.tsx index adf361a2573d..8042786ff8af 100644 --- a/src/components/InitialURLContextProvider.tsx +++ b/src/components/InitialURLContextProvider.tsx @@ -1,8 +1,10 @@ import React, {createContext, useEffect, useMemo, useState} from 'react'; import type {ReactNode} from 'react'; import {Linking} from 'react-native'; +import {useOnyx} from 'react-native-onyx'; import {signInAfterTransitionFromOldDot} from '@libs/actions/Session'; import CONST from '@src/CONST'; +import ONYXKEYS from '@src/ONYXKEYS'; import type {Route} from '@src/ROUTES'; import {useSplashScreenStateContext} from '@src/SplashScreenStateContext'; @@ -28,10 +30,13 @@ type InitialURLContextProviderProps = { function InitialURLContextProvider({children, url}: InitialURLContextProviderProps) { const [initialURL, setInitialURL] = useState(); const {setSplashScreenState} = useSplashScreenStateContext(); - + const [initialLastUpdateIDAppliedToClient, metadata] = useOnyx(ONYXKEYS.ONYX_UPDATES_LAST_UPDATE_ID_APPLIED_TO_CLIENT); useEffect(() => { + if (metadata.status !== 'loaded') { + return; + } if (url) { - signInAfterTransitionFromOldDot(url).then((route) => { + signInAfterTransitionFromOldDot(url, initialLastUpdateIDAppliedToClient).then((route) => { setInitialURL(route); setSplashScreenState(CONST.BOOT_SPLASH_STATE.READY_TO_BE_HIDDEN); }); @@ -40,7 +45,7 @@ function InitialURLContextProvider({children, url}: InitialURLContextProviderPro Linking.getInitialURL().then((initURL) => { setInitialURL(initURL as Route); }); - }, [setSplashScreenState, url]); + }, [initialLastUpdateIDAppliedToClient, metadata.status, setSplashScreenState, url]); const initialUrlContext = useMemo( () => ({ @@ -56,4 +61,5 @@ function InitialURLContextProvider({children, url}: InitialURLContextProviderPro InitialURLContextProvider.displayName = 'InitialURLContextProvider'; export default InitialURLContextProvider; + export {InitialURLContext}; diff --git a/src/libs/actions/Session/index.ts b/src/libs/actions/Session/index.ts index eda761b9637b..2efba1a63393 100644 --- a/src/libs/actions/Session/index.ts +++ b/src/libs/actions/Session/index.ts @@ -481,7 +481,7 @@ function signUpUser() { API.write(WRITE_COMMANDS.SIGN_UP_USER, params, {optimisticData, successData, failureData}); } -function signInAfterTransitionFromOldDot(transitionURL: string) { +function signInAfterTransitionFromOldDot(transitionURL: string, lastUpdateId?: number) { const [route, queryParams] = transitionURL.split('?'); const { @@ -528,7 +528,14 @@ function signInAfterTransitionFromOldDot(transitionURL: string) { [ONYXKEYS.NVP_TRYNEWDOT]: {classicRedirect: {completedHybridAppOnboarding: completedHybridAppOnboarding === 'true'}}, }), ) - .then(App.openApp) + .then(() => { + if (clearOnyxOnStart === 'true') { + // We clear Onyx when this flag is set to true so we have to download all data + App.openApp(); + } else { + App.reconnectApp(lastUpdateId); + } + }) .catch((error) => { Log.hmmm('[HybridApp] Initialization of HybridApp has failed. Forcing transition', {error}); })