[CP Staging] Fix skeleton loader flash after inviting a member on Company Cards page#83105
Conversation
Store policy.employeeList in a ref instead of including it in the loadPolicyCompanyCardsPage useCallback dependency array. This prevents the callback from being recreated when a new member is invited during the card assignment flow, which was causing an unnecessary re-fetch that briefly showed a skeleton loader above the card list. Co-authored-by: Chavda Sachin <ChavdaSachin@users.noreply.github.com>
|
@arosiclair 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] |
…AfterInviteMember
Updated the logic for determining when to show company cards in the WorkspaceCompanyCardsTable component. The condition now checks for a general loading state instead of just the loading feed, improving the accuracy of the loading indicator. Co-authored-by: Chavda Sachin <ChavdaSachin@users.noreply.github.com>
Reviewer Checklist
Screenshots/VideosScreen.Recording.2026-02-21.at.2.10.29.AM.movAndroid: HybridAppAndroid: mWeb ChromeiOS: HybridAppiOS: mWeb SafariMacOS: Chrome / Safari |
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
|
🚧 @carlosmiceli 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! 🧪🧪
|
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
…nviteMember [CP Staging] Fix skeleton loader flash after inviting a member on Company Cards page (cherry picked from commit 05e6ea7) (cherry-picked to staging by puneetlath)
|
🚀 Cherry-picked to staging by https://github.com/puneetlath in version: 9.3.24-2 🚀
|
|
Windows 10/ Chrome Repro.-.PR.83105.mp4 |
|
🚀 Deployed to production by https://github.com/puneetlath in version: 9.3.24-3 🚀
|
|
🚀 Cherry-picked to staging by https://github.com/puneetlath in version: 9.3.25-0 🚀
|
|
🚀 Deployed to production by https://github.com/puneetlath in version: 9.3.25-13 🚀
|
Explanation of Change
PR #82055 added
policy?.employeeListas a dependency of theloadPolicyCompanyCardsPageuseCallback(to build theemailListparameter foropenPolicyCompanyCardsPage). When a user invites a new member during the card assignment flow,addMembersToWorkspaceoptimistically updatespolicy.employeeList, which recreates the callback, re-fires theuseEffect, and callsopenPolicyCompanyCardsPage— which optimistically setsisLoading: trueonSHARED_NVP_PRIVATE_DOMAIN_MEMBER, causing a skeleton loader to flash above the card list.This PR stores
policy?.employeeListin a ref and reads from it inside the callback. This way, changes to the employee list no longer recreate the callback or trigger the effect, while the callback still has access to the latest employee list when it's actually called (on initial load, reconnect, etc.).Fixed Issues
$ #83084
PROPOSAL: #83084 (comment)
Tests
Offline tests
onReconnectcallback should still work)QA Steps
PR Author Checklist
### Fixed Issuessection aboveTestssectionOffline stepssectionQA stepssectioncanBeMissingparam foruseOnyxtoggleReportand 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
CleanShot.2026-02-20.at.21.05.45.mp4