Repository navigation
Closed
Labels
Description
Navigation waitForTransition
Refer to README.md for more information what's the overall strategy and why we're migrating away from InteractionManager.runAfterInteractions.
Strategy
Use Navigation.navigate/goBack/dismissModal with { waitForTransition: true }
These call sites wrap Navigation.navigate, Navigation.goBack, or Navigation.dismissModal in InteractionManager.runAfterInteractions. Since navigate, goBack, and dismissModal now accept a waitForTransition option that internally defers through TransitionTracker.runAfterTransitions, the InteractionManager wrapper can be removed and replaced with the option.
Instead of:
InteractionManager.runAfterInteractions(() => {
Navigation.navigate(ROUTES.SOME_ROUTE);
});Use:
Navigation.navigate(ROUTES.SOME_ROUTE, { waitForTransition: true });Instead of:
InteractionManager.runAfterInteractions(() => {
Navigation.goBack(ROUTES.SOME_ROUTE);
});Use:
Navigation.goBack(ROUTES.SOME_ROUTE, { waitForTransition: true });Navigation Utility Files
These utility files exist solely to wrap navigation calls in InteractionManager and should be removed entirely once the migration is complete.
| File | Line | Current | Migration | PR |
|---|---|---|---|---|
navigateAfterInteraction/index.ios.ts |
10 | iOS wrapper deferring navigation | Remove file — waitForTransition replaces this |
#56865 |
navigateAfterInteraction/index.ts |
1 | Non-iOS passthrough | Remove file | #56865 |
Usages
| File | Line | Current | Migration | PR |
|---|---|---|---|---|
ImportedMembersPage.tsx |
204 | InteractionManager wrapping Navigation.goBack in onModalHide |
Navigation.goBack(route, { waitForTransition: true }) |
#69436 |
ImportedMembersConfirmationPage.tsx |
210 | InteractionManager wrapping Navigation.goBack in onModalHide |
Navigation.goBack(route, { waitForTransition: true }) |
#75515 |
AdminTestDriveModal.tsx |
21 | InteractionManager wrapping Navigation.navigate |
Navigation.navigate(route, { waitForTransition: true }) |
#60997 |
EmployeeTestDriveModal.tsx |
110 | InteractionManager wrapping Navigation.navigate after goBack |
Navigation.navigate(route, { waitForTransition: true }) |
#63260 |
TaskAssigneeSelectorModal.tsx |
181 | InteractionManager wrapping Navigation.dismissModalWithReport |
Remove InteractionManager wrapper (delegates to navigate/dismissModal internally) |
#81320 |
TaskAssigneeSelectorModal.tsx |
194 | InteractionManager wrapping Navigation.goBack |
Navigation.goBack(route, { waitForTransition: true }) |
#81320 |
IOU/index.ts |
1154 | InteractionManager wrapping Navigation.navigate after dismissModal |
Navigation.navigate(route, { waitForTransition: true }) |
#81580 |
Report/index.ts |
5912 | InteractionManager wrapping Navigation.navigate |
Navigation.navigate(route, { waitForTransition: true }) |
#66890 |
SubmitDetailsPage.tsx |
263 | navigateAfterInteraction call |
Navigation.navigate(route, { waitForTransition: true }) |
#58834 |
TestToolsModalPage.tsx |
73 | navigateAfterInteraction call |
Navigation.navigate(route, { waitForTransition: true }) |
#64717 |
IOURequestStepConfirmation.tsx |
1390, 1396 | navigateAfterInteraction calls |
Navigation.navigate(route, { waitForTransition: true }) |
#58422 |
DiscardChangesConfirmation/index.tsx |
32, 62 | Toggle visibility after discard | Navigation.navigate(route, { waitForTransition: true }) |
#58422 |
WorkspaceMemberDetailsPage.tsx |
170 | Go back after member action | Navigation.goBack(route, { waitForTransition: true }) |
#79597 |
FloatingActionButtonAndPopover.tsx |
702 | FAB menu item action | Navigation.navigate(route, { waitForTransition: true }) |
#56865 |
Session/index.ts |
1248 | Navigate after sign-in | Navigation.navigate(route, { waitForTransition: true }) |
#30269 |
Link.ts |
305 | Deep link navigation | Navigation.navigate(route, { waitForTransition: true }) |
#74237 |
Tour.ts |
9 | Tour navigation | Navigation.navigate(route, { waitForTransition: true }) |
#67348 |
TestDriveDemo.tsx |
68, 76 | Set visibility / go back | Navigation.goBack({ waitForTransition: true }) |
#60085 |
WorkspaceDowngradePage.tsx |
70, 84 | Navigate after downgrade | Navigation.navigate/dismissModal({ waitForTransition: true }) |
#71333 |
AccountDetailsPage.tsx |
87 | Navigate after useFocusEffect triggers |
Navigation.navigate(route, { waitForTransition: true }) |
#59911 |
AccountDetailsPage.tsx |
116 | Navigate after useFocusEffect triggers |
Navigation.navigate(route, { waitForTransition: true }) |
#65834 |
AccountValidatePage.tsx |
128 | Navigate after useFocusEffect triggers |
Navigation.navigate(route, { waitForTransition: true }) |
#79597 |
IOURequestStepReport.tsx |
156 | Report selection + navigate | Navigation.goBack(route, { waitForTransition: true }) |
#67048 |
IOURequestStepReport.tsx |
211 | Report selection + navigate | Navigation.goBack(route, { waitForTransition: true }) |
#67925 |
IOURequestStepScan/index.native.tsx |
374 | Scan step navigation | Navigation.navigate(route, { waitForTransition: true }) |
#63451 |
IOURequestStepScan/ReceiptView/index.tsx |
70 | Receipt view navigation | Navigation.navigate(route, { waitForTransition: true }) |
#63352 |
IOURequestStepScan/index.tsx |
624 | Scan step navigation | Navigation.navigate(route, { waitForTransition: true }) |
#63451 |
SplitExpensePage.tsx |
392 | Split expense navigation | Navigation.navigate(route, { waitForTransition: true }) |
#79597 |
IOURequestStepCategory.tsx |
210 | Category selection + keyboard dismiss | Navigation.navigate(route, { waitForTransition: true }) |
#53316 |
IOURequestStepDestination.tsx |
201 | Keyboard dismiss + navigate | KeyboardUtils.dismiss({afterTransition: () => Navigation.goBack()}) |
#66747 |
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fieldsDone
Activity
blazejkustra commentedon Feb 20, 2026
Please do not post proposals, since this will be implemented by Software Mansion team or later distributed to externals. Thank you!
melvin-bot commentedon May 18, 2026
@blazejkustra, this Monthly task hasn't been acted upon in 6 weeks; closing.
If you disagree, feel encouraged to reopen it -- but pick your least important issue to close instead.
[-][BATCH 3] Migrate Navigation usage v2[/-][+][Due for payment 2026-06-19] [BATCH 3] Migrate Navigation usage v2[/+]5 remaining items
[-][Due for payment 2026-06-19] [BATCH 3] Migrate Navigation usage v2[/-][+][Due for payment 2026-06-24] [Due for payment 2026-06-19] [BATCH 3] Migrate Navigation usage v2[/+]melvin-bot commentedon Jun 17, 2026
Reviewinglabel has been removed, please complete the "BugZero Checklist".melvin-bot commentedon Jun 17, 2026
The solution for this issue has been 🚀 deployed to production 🚀 in version 9.4.9-0 and is now subject to a 7-day regression period 📆. Here is the list of pull requests that resolve this issue:
If no regressions arise, payment will be issued on 2026-06-24. 🎊
[-][Due for payment 2026-06-24] [Due for payment 2026-06-19] [BATCH 3] Migrate Navigation usage v2[/-][+][Due for payment 2026-07-03] [Due for payment 2026-06-24] [Due for payment 2026-06-19] [BATCH 3] Migrate Navigation usage v2[/+]melvin-bot commentedon Jun 26, 2026
Reviewinglabel has been removed, please complete the "BugZero Checklist".melvin-bot commentedon Jun 26, 2026
The solution for this issue has been 🚀 deployed to production 🚀 in version 9.4.20-1 and is now subject to a 7-day regression period 📆. Here is the list of pull requests that resolve this issue:
If no regressions arise, payment will be issued on 2026-07-03. 🎊