perf: defer central report list on Inbox tab navigation#96374
Draft
BartekObudzinski wants to merge 5 commits into
Draft
perf: defer central report list on Inbox tab navigation#96374BartekObudzinski wants to merge 5 commits into
BartekObudzinski wants to merge 5 commits into
Conversation
Codecov Report❌ Looks like you've decreased code coverage for some files. Please write tests to increase, or at least maintain, the existing level of code coverage. See our documentation here for how to interpret this table.
|
BartekObudzinski
force-pushed
the
perf/inbox-tab-defer-central-report
branch
2 times, most recently
from
July 17, 2026 13:20
3948493 to
2e7566c
Compare
BartekObudzinski
force-pushed
the
perf/inbox-tab-defer-central-report
branch
from
July 17, 2026 13:27
2e7566c to
727d764
Compare
DylanDylann
reviewed
Jul 18, 2026
| } | ||
|
|
||
| return ( | ||
| <NavigationDeferredMount |
Contributor
There was a problem hiding this comment.
@BartekObudzinski Let's put ReportActionsWithInboxTabDeferredMount into src/pages/inbox/ReportActions.tsx
Contributor
|
@BartekObudzinski I love the idea. The transition is now smoother since we no longer perform the navigate function. I also noticed that the change fixes some flickers during the transition that happen when using the navigate function Screen.Recording.2026-07-18.at.17.37.25.mov |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Explanation of Change
On wide layout, tapping the Inbox tab navigates to the last opened report. The current URL-based navigation rebuilds the nested report route, so React remounts the central
ReportScreenand its heavy report actions list in the same commit as the LHN. TheManualNavigateToInboxTabspan ends when the LHN lays out, but that layout cannot paint until the report list commit finishes.This PR follows the cached navigation architecture used by the Search and Spend tab:
TabActions.jumpToaction. Omitting nested params preserves the mountedReportScreen, report list, route key, report params, and URL.ReportActionsbehindNavigationDeferredMount, allowing the LHN to paint before the heavy list hydrates.ReportScreenslot. After the first hydration,react-freezepreserves that state. Subsequent Home to Inbox navigations reuse the same report list and do not show the skeleton again.The deferral remains scoped to an in-flight
ManualNavigateToInboxTabspan. Opening a report from the LHN, a deep link, or Search does not start that span and renders the report immediately.Benchmark results
Wide web with warm cached data.
First warm Inbox mount, 8 measured runs:
Subsequent cached Inbox visits, 12 measured runs:
The skeleton appears only during the first mount. Subsequent Home to Inbox navigations preserve the same
ReportScreenand report list with no skeleton.Fixed Issues
$ #96398
PROPOSAL:
Tests
/r/:reportID.Offline tests
QA Steps
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectionAvatar, I verified the components usingAvatarare working as expected)StyleUtils.getBackgroundAndBorderStyle(theme.componentBG))npm run compress-svg)Avataris modified, I verified thatAvataris working as expected in all cases)Designlabel and/or tagged@Expensify/designso the design team can review the changes.mainbranch was merged into this PR after a review, I tested again and verified the outcome was still expected according to theTeststeps.Screenshots/Videos
Android: Native
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari