Skip to content

Commit c1f5357

Browse files
authored
Merge pull request Expensify#66944 from Ahmedklai/fix/64962
Fix Firefox Navigation Issue
2 parents cb64fbb + a063f5d commit c1f5357

2 files changed

Lines changed: 31 additions & 6 deletions

File tree

src/libs/Navigation/Navigation.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -543,6 +543,10 @@ function getReportRouteByID(reportID?: string, routes: NavigationRoute[] = navig
543543
const dismissModal = (ref = navigationRef) => {
544544
isNavigationReady().then(() => {
545545
ref.dispatch({type: CONST.NAVIGATION.ACTION_TYPE.DISMISS_MODAL});
546+
// Let React Navigation finish modal transition
547+
InteractionManager.runAfterInteractions(() => {
548+
fireModalDismissed();
549+
});
546550
});
547551
};
548552

@@ -634,6 +638,20 @@ function isOnboardingFlow() {
634638
return isOnboardingFlowName(currentFocusedRoute?.name);
635639
}
636640

641+
const modalDismissedListeners: Array<() => void> = [];
642+
643+
function onModalDismissedOnce(callback: () => void) {
644+
modalDismissedListeners.push(callback);
645+
}
646+
647+
// Wrap modal dismissal so listeners get called
648+
function fireModalDismissed() {
649+
while (modalDismissedListeners.length) {
650+
const cb = modalDismissedListeners.pop();
651+
cb?.();
652+
}
653+
}
654+
637655
export default {
638656
setShouldPopToSidebar,
639657
getShouldPopToSidebar,
@@ -666,6 +684,8 @@ export default {
666684
replaceWithSplitNavigator,
667685
isTopmostRouteModalScreen,
668686
isOnboardingFlow,
687+
onModalDismissedOnce,
688+
fireModalDismissed,
669689
};
670690

671691
export {navigationRef};

src/libs/actions/Report.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ import getEnvironment from '@libs/Environment/getEnvironment';
6969
import type EnvironmentType from '@libs/Environment/getEnvironment/types';
7070
import {getMicroSecondOnyxErrorWithTranslationKey} from '@libs/ErrorUtils';
7171
import fileDownload from '@libs/fileDownload';
72-
import getIsNarrowLayout from '@libs/getIsNarrowLayout';
7372
import HttpUtils from '@libs/HttpUtils';
7473
import isPublicScreenRoute from '@libs/isPublicScreenRoute';
7574
import * as Localize from '@libs/Localize';
@@ -1357,14 +1356,20 @@ function navigateToAndOpenReport(
13571356
const report = isEmptyObject(chat) ? newChat : chat;
13581357

13591358
if (shouldDismissModal) {
1360-
if (getIsNarrowLayout() && report?.reportID) {
1361-
Navigation.dismissModalWithReport({reportID: report.reportID});
1362-
return;
1363-
}
1359+
Navigation.onModalDismissedOnce(() => {
1360+
Navigation.onModalDismissedOnce(() => {
1361+
if (!report?.reportID) {
1362+
return;
1363+
}
1364+
1365+
Navigation.navigate(ROUTES.REPORT_WITH_ID.getRoute(report.reportID));
1366+
});
1367+
});
13641368

13651369
Navigation.dismissModal();
1370+
} else if (report?.reportID) {
1371+
Navigation.navigate(ROUTES.REPORT_WITH_ID.getRoute(report.reportID));
13661372
}
1367-
13681373
// In some cases when RHP modal gets hidden and then we navigate to report Composer focus breaks, wrapping navigation in setTimeout fixes this
13691374
setTimeout(() => {
13701375
Navigation.isNavigationReady().then(() => Navigation.navigate(ROUTES.REPORT_WITH_ID.getRoute(report?.reportID)));

0 commit comments

Comments
 (0)