Fix extra/missing RBRs on company card feed selector - #89457
Conversation
The feed selector button previously showed RBR based on the currently selected feed's errors. This caused missing RBR when another feed had a broken connection, and extra RBR when only the selected feed was broken. The selector now checks if any other feed has errors, since the current feed's issues are already visible via the error banner.
Add tests verifying per-feed RBR granularity in workspaces with multiple feeds. Covers broken/healthy feed combinations, RBR clearing after fix, and mixed feed-level errors.
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: d5992a2655
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppScreen.Recording.2026-05-14.at.6.59.05.PM.movAndroid: mWeb ChromeScreen.Recording.2026-05-14.at.7.00.59.PM.moviOS: HybridAppiOS: mWeb SafariScreen.Recording.2026-05-14.at.6.40.42.PM.movMacOS: Chrome / SafariScreen.Recording.2026-05-14.at.6.34.29.PM.movScreen.Recording.2026-05-14.at.6.30.12.PM.movScreen.Recording.2026-05-14.at.6.29.14.PM.mov |
The inline banner only covers isFeedConnectionBroken and hasFeedErrors, so workspace-level errors on the current feed need to still surface via the feed selector RBR.
|
@ShridharGoel Friendly Bump for review. |
|
🚧 @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. |
|
🚀 Deployed to staging by https://github.com/carlosmiceli in version: 9.3.74-7 🚀
Bundle Size Analysis (Sentry): |
|
No help site changes are required for this PR. This PR fixes an internal UI bug with the RBR (Red Brick Road) error indicator on the company card feed selector button — it corrects when the red dot appears/disappears relative to which feed is currently selected. No user-facing workflows, feature names, settings, or documented behavior changed. The existing help site articles under |
|
🚀 Deployed to production by https://github.com/Beamanator in version: 9.3.74-7 🚀
|
Explanation of Change
The feed selector button previously showed its RBR indicator based solely on the currently selected feed's error state. This caused two issues:
The fix changes the feed selector RBR to check if any other feed (besides the currently selected one) has errors. The selected feed's issues remain visible via the inline error banner (
isFeedConnectionBroken || hasFeedErrors), so the RBR on the selector now purely serves as a navigation guide: "there's a broken feed elsewhere — click to switch."Fixed Issues
$ #87988
PROPOSAL:
Tests
Prerequisites: You need a workspace with at least two company card feeds. You can set this up by connecting two feeds via the "Add cards" flow (e.g., a Plaid feed and a direct bank feed like Mock Bank or Chase).
Scenario 1 — Missing RBR (healthy selected feed, broken other feed)
lastScrapeResultto403)Scenario 2 — No extra RBR (broken selected feed, healthy other feed)
lastScrapeResultback to200)lastScrapeResultto403)Scenario 3 — Both feeds broken
Scenario 4 — All feeds healthy
Offline tests
QA Steps
// TODO: These must be filled out, or the issue title must include "[No QA]."
Same as Tests above. To simulate broken connections on staging, use the browser console:
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
CleanShot.2026-05-04.at.13.35.42.mp4
Android: Native
Android: mWeb Chrome
iOS: Native
iOS: mWeb Safari
MacOS: Chrome / Safari