[Home Page] Only show the skeleton loader for Home's For you page on initial load, no subsequent loads#91720
Conversation
Gates the Home > For you skeleton on HAS_LOADED_APP so it only renders on the OpenApp cold-start path. ReconnectApp also flips IS_LOADING_REPORT_DATA optimistically, which was causing the section to flash the skeleton every time the app came back from the background. Other home sections (Your spend, etc.) already update in place; this brings For you in line. Fixes Expensify#91575
|
@ZhenjaHorbach Please copy/paste the Reviewer Checklist from here into a new comment on this PR and complete it. If you have the K2 extension, you can simply click: [this button] |
|
@adamgrzybowski |
Reviewer Checklist
Screenshots/VideosAndroid: HybridApp2026-05-27.11.19.01.movAndroid: mWeb Chrome2026-05-27.11.03.57.moviOS: HybridApp2026-05-27.11.06.32.moviOS: mWeb Safari2026-05-27.11.03.57.movMacOS: Chrome / Safari2026-05-27.11.00.06.mov |
|
LGTM! |
|
@ZhenjaHorbach done |
|
@grgia |
|
@grgia looks like this was merged without a test passing. Please add a note explaining why this was done and remove the |
|
Merged from my phone before the final reviewer check finished. |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚧 @grgia has triggered a test Expensify/App build. You can view the workflow run here. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
🚀 Deployed to staging by https://github.com/grgia in version: 9.3.84-0 🚀
Bundle Size Analysis (Sentry): |
|
I reviewed the changes in this PR. The diff modifies only No help site documentation changes are required. @adamgrzybowski, no help site PR was created since the changes don't affect any documented user-facing behavior. |
|
🚀 Deployed to staging by https://github.com/grgia in version: 9.3.86-0 🚀
Bundle Size Analysis (Sentry): |
|
No help site changes are required for this PR. This PR fixes an internal UI behavior — it gates the skeleton loader in the "For You" section to only appear on the initial cold-start load, preventing it from flashing on every foreground/reconnect. This is a code-level loading optimization that doesn't change any user-facing features, settings, workflows, or terminology documented on the help site. @adamgrzybowski, please review the linked help site PR and confirm it reflects the current behavior. Then mark the linked help site PR |
|
🚀 Deployed to staging by https://github.com/grgia in version: 9.3.88-0 🚀
Bundle Size Analysis (Sentry): |
|
I reviewed the changes in this PR against the help site articles under No help site changes are required. This PR is a bug fix that changes the internal loading/skeleton behavior of the For you section on Home. Specifically, it gates the skeleton loader on The two relevant help articles — Understanding the For you Section and Expensify Home Overview — describe what the For you section shows and how it works at a conceptual level. They do not document loading states or skeleton behavior, so they remain accurate as-is. @adamgrzybowski, please review the linked help site PR and confirm it reflects the current behavior. Then mark the linked help site PR |
|
🚀 Deployed to production by https://github.com/mountiny in version: 9.3.88-2 🚀
|
Explanation of Change
IS_LOADING_REPORT_DATA, whichReconnectAppflips totrueoptimistically each time the app returns from the background.ONYXKEYS.HAS_LOADED_APPinsrc/pages/home/ForYouSection/index.tsxand gated the skeleton on!hasLoadedApp && (isLoadingApp || isLoadingReportData || reportCounts === undefined)so it only renders on the initialOpenAppcold-start path.OpenAppcompletes,HAS_LOADED_APPstaystruefor the rest of the session (preserved across reconnects), so subsequentReconnectApprefreshes update in place and the section keeps showing its previous content.TopBarloading bar (already wired toisLoadingApp || isLoadingReportDatainHomePage.tsx) continues to indicate a refresh is in flight, matching the Inbox behavior referenced in the issue.hasLoadedAppto the skeleton'sreasonAttributesso Sentry skeleton spans can be filtered/triaged accurately.Fixed Issues
$ #91575
PROPOSAL:
Tests
Offline tests
QA Steps
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectiontoggleReportand notonIconClick)src/languages/*files and using the translation methodSTYLE.md) were followedAvatar, 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.ScrollViewcomponent to make it scrollable when more elements are added to the page.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
Screen.Recording.2026-05-26.at.14.37.38.mov
iOS: mWeb Safari
MacOS: Chrome / Safari