diff --git a/src/Expensify.tsx b/src/Expensify.tsx index ad8d2eb07523e..587e529ec8a4a 100644 --- a/src/Expensify.tsx +++ b/src/Expensify.tsx @@ -202,6 +202,10 @@ function Expensify() { // If the app is opened from a deep link, get the reportID (if exists) from the deep link and navigate to the chat report Linking.getInitialURL().then((url) => { + // We use custom deeplink handler in setup/hybridApp + if (CONFIG.IS_HYBRID_APP) { + return; + } setInitialUrl(url); Report.openReportFromDeepLink(url ?? ''); }); diff --git a/src/libs/actions/Report.ts b/src/libs/actions/Report.ts index a0286a152c5c7..ed0f092672ee8 100644 --- a/src/libs/actions/Report.ts +++ b/src/libs/actions/Report.ts @@ -3407,7 +3407,7 @@ function openReportFromDeepLink(url: string) { // We don't want to navigate to the exitTo route when creating a new workspace from a deep link, // because we already handle creating the optimistic policy and navigating to it in App.setUpPoliciesAndNavigate, // which is already called when AuthScreens mounts. - if (url && new URL(url).searchParams.get('exitTo') === ROUTES.WORKSPACE_NEW) { + if (!CONFIG.IS_HYBRID_APP && url && new URL(url).searchParams.get('exitTo') === ROUTES.WORKSPACE_NEW) { return; } @@ -3428,10 +3428,6 @@ function openReportFromDeepLink(url: string) { return; } - if (isAuthenticated) { - return; - } - // Check if the report exists in the collection const report = allReports?.[`${ONYXKEYS.COLLECTION.REPORT}${reportID}`]; // If the report does not exist, navigate to the last accessed report or Concierge chat diff --git a/src/setup/hybridApp/index.native.ts b/src/setup/hybridApp/index.native.ts index 85a08f6caa035..0285d9fda4b56 100644 --- a/src/setup/hybridApp/index.native.ts +++ b/src/setup/hybridApp/index.native.ts @@ -1,28 +1,12 @@ -import {findFocusedRoute} from '@react-navigation/native'; import {Linking} from 'react-native'; -import Navigation, {navigationRef} from '@navigation/Navigation'; +import Navigation from '@navigation/Navigation'; +import {openReportFromDeepLink} from '@userActions/Report'; import CONFIG from '@src/CONFIG'; import type {Route} from '@src/ROUTES'; -import ROUTES from '@src/ROUTES'; -import SCREENS from '@src/SCREENS'; if (CONFIG.IS_HYBRID_APP) { Linking.addEventListener('url', (state) => { - handleHybridUrlNavigation(state.url as Route); - }); -} - -function handleHybridUrlNavigation(url: Route) { - const parsedUrl = Navigation.parseHybridAppUrl(url); - - Navigation.isNavigationReady().then(() => { - if (parsedUrl.startsWith(`/${ROUTES.SHARE_ROOT}`)) { - const focusRoute = findFocusedRoute(navigationRef.getRootState()); - if (focusRoute?.name === SCREENS.SHARE.SHARE_DETAILS || focusRoute?.name === SCREENS.SHARE.SUBMIT_DETAILS) { - Navigation.goBack(ROUTES.SHARE_ROOT); - return; - } - } - Navigation.navigate(parsedUrl); + const parsedUrl = Navigation.parseHybridAppUrl(state.url as Route); + openReportFromDeepLink(parsedUrl); }); }