diff --git a/src/libs/Navigation/Navigation.ts b/src/libs/Navigation/Navigation.ts index 92dd4a9f0555..32f97106ea48 100644 --- a/src/libs/Navigation/Navigation.ts +++ b/src/libs/Navigation/Navigation.ts @@ -544,10 +544,6 @@ function getReportRouteByID(reportID?: string, routes: NavigationRoute[] = navig const dismissModal = (ref = navigationRef) => { isNavigationReady().then(() => { ref.dispatch({type: CONST.NAVIGATION.ACTION_TYPE.DISMISS_MODAL}); - // Let React Navigation finish modal transition - InteractionManager.runAfterInteractions(() => { - fireModalDismissed(); - }); }); }; @@ -639,20 +635,6 @@ function isOnboardingFlow() { return isOnboardingFlowName(currentFocusedRoute?.name); } -const modalDismissedListeners: Array<() => void> = []; - -function onModalDismissedOnce(callback: () => void) { - modalDismissedListeners.push(callback); -} - -// Wrap modal dismissal so listeners get called -function fireModalDismissed() { - while (modalDismissedListeners.length) { - const cb = modalDismissedListeners.pop(); - cb?.(); - } -} - export default { setShouldPopToSidebar, getShouldPopToSidebar, @@ -685,8 +667,6 @@ export default { replaceWithSplitNavigator, isTopmostRouteModalScreen, isOnboardingFlow, - onModalDismissedOnce, - fireModalDismissed, }; export {navigationRef}; diff --git a/src/libs/actions/Report.ts b/src/libs/actions/Report.ts index 1c1cb0a946ec..b1ef04d1cdab 100644 --- a/src/libs/actions/Report.ts +++ b/src/libs/actions/Report.ts @@ -70,6 +70,7 @@ import getEnvironment from '@libs/Environment/getEnvironment'; import type EnvironmentType from '@libs/Environment/getEnvironment/types'; import {getMicroSecondOnyxErrorWithTranslationKey, getMicroSecondTranslationErrorWithTranslationKey} from '@libs/ErrorUtils'; import fileDownload from '@libs/fileDownload'; +import getIsNarrowLayout from '@libs/getIsNarrowLayout'; import HttpUtils from '@libs/HttpUtils'; import isPublicScreenRoute from '@libs/isPublicScreenRoute'; import * as Localize from '@libs/Localize'; @@ -1367,24 +1368,16 @@ function navigateToAndOpenReport( const report = isEmptyObject(chat) ? newChat : chat; if (shouldDismissModal) { - Navigation.onModalDismissedOnce(() => { - Navigation.onModalDismissedOnce(() => { - if (!report?.reportID) { - return; - } - - Navigation.navigate(ROUTES.REPORT_WITH_ID.getRoute(report.reportID)); - }); - }); + if (getIsNarrowLayout() && report?.reportID) { + Navigation.dismissModalWithReport({reportID: report.reportID}); + return; + } Navigation.dismissModal(); - } else if (report?.reportID) { - Navigation.navigate(ROUTES.REPORT_WITH_ID.getRoute(report.reportID)); } - // In some cases when RHP modal gets hidden and then we navigate to report Composer focus breaks, wrapping navigation in setTimeout fixes this - setTimeout(() => { + InteractionManager.runAfterInteractions(() => { Navigation.isNavigationReady().then(() => Navigation.navigate(ROUTES.REPORT_WITH_ID.getRoute(report?.reportID))); - }, 0); + }); } /**