Repository navigation
Use one-color Concierge icon in page header top right - #100832
Conversation
Co-authored-by: Shawn Borton <shawnborton@users.noreply.github.com>
|
🚧 shawnborton has triggered a test Expensify/App build. You can view the workflow run here. |
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
… check Co-authored-by: Shawn Borton <shawnborton@users.noreply.github.com>
This comment has been minimized.
This comment has been minimized.
|
🤖 Fixed the failing check.
The rendered icon is unchanged:
While I was here I also closed the verification gap the PR description flagged — the earlier run couldn't reach a live build, so I ran the change in the app this time. 🤖 Web test steps verification results: ✅ passThe Inbox header top-right now shows the one-color grey Concierge icon matching the search icon in size, color, and alignment, and clicking it still opens the Concierge side panel. No console errors. The |
|
🤖 Android test steps verification results: ✅ pass The Inbox and chat-report headers on Android now show the flat one-color gray Concierge icon matching the search icon's size and fill, tapping it opens the Concierge chat, and no redbox or JS errors appeared during the flow. The "Explain" context-menu item (gated on Note: the |
|
@MelvinBot please add test/QA/offline steps to the PR description, fill out checklist as best you can, and mark ready for review please. |
|
🤖 Web test steps verification results: The one-color Concierge icon renders correctly, matches the search icon's 20x20 size and Note: the view run · no recording available |
|
Done — description updated, checklist filled in, and the PR is out of draft and ready for review. What I added to the description
I also ran the web pass, since only Android had been verified before. The icon renders correctly at 20x20 with Please read the unchecked boxes before approving. I put a callout in the description listing every one and why, but the ones that matter to you:
I added the One behavior worth knowing about since it may read as a bug during review: the inbox view run · no recording available |
dannymcclain
left a comment
There was a problem hiding this comment.
Looks good to me too 👍
|
I feel we can merge this one as is without full review @shawnborton |
|
Your call on that, but that's fine by me! |
Reviewer Checklist
Screenshots/VideosAndroid: HybridAppScreen.Recording.2026-09-11.at.14.59.09.movAndroid: mWeb ChromeScreen.Recording.2026-09-11.at.15.02.10.moviOS: HybridAppScreen.Recording.2026-09-11.at.15.04.47.moviOS: mWeb SafariScreen.Recording.2026-09-11.at.15.05.23.movMacOS: Chrome / SafariScreen.Recording.2026-09-11.at.14.53.33.mov |
huult
left a comment
There was a problem hiding this comment.
LGTM.
Screen.Recording.2026-09-11.at.15.08.11.mov
This is what it will look like after the update.
|
@shawnborton ready to merge |
|
Sweet, are the honors mine or who merges? |
|
Going to merge since we have all approvals |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🚧 shawnborton 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/shawnborton in version: 9.4.78-0 🚀
|
|
🤖 No help site changes are required for this PR — so I did not create a draft docs PR. This change is purely visual: it swaps the multi-color Concierge avatar for a one-color Concierge icon in the page header's top right. No label, tab name, navigation path, or behavior changed. What I checked in
|
|
🚀 Deployed to production by https://github.com/luacmartins in version: 9.4.78-3 🚀
Bundle Size Analysis (Sentry): |












Explanation of Change
The top-right of our page header bars is about to also hold the account avatar, so the Concierge/help button needs to read as an app action rather than as an avatar. This swaps it to a one-color Concierge icon styled exactly like the search icon next to it.
Two parts:
assets/images/concierge.svgoverwritten with the one-color SVG attached to the issue (sparkles on both sides, sharp triangle corners), per Shawn's note that the existing icon can be overwritten. The file was run through the repo'ssvgoand renders pixel-identically to the designer's export.SidePanelButton(web + native) now rendersConciergeinstead ofConciergeAvatar, withfill={theme.icon}and no explicitwidth/height— so it inherits the default 20x20 size. That makes it identical toSearchButton: same 40x40touchableButtonImagepressable, same 20x20 icon, sametheme.iconfill. Only the icon and its size/fill changed; the press behavior, tooltip, and accessibility label are untouched.Relevant code:
src/components/SidePanel/SidePanelButton/SidePanelButtonBase.tsx:36-40andsrc/components/SidePanel/SidePanelButton/index.native.tsx:45-52.Because
SidePanelButtonis shared, this updates the icon everywhere it appears:TopBar,HeaderWithBackButton,HeaderWithBackButtonComposed, and the inboxHeaderView.The one-color icon also now shows in the report action context menu's "Explain" item, which already used
Expensicons.Concierge.Note: the inbox
HeaderViewgates the help button on!isConciergeChat(src/pages/inbox/HeaderView.tsx:503), so the Concierge chat's own header has no icon. That is pre-existing behavior, unchanged by this PR.Fixed Issues
$ #100827
PROPOSAL:
Tests
HeaderWithBackButtonpage). Verify its header shows the same one-color Concierge icon.Offline tests
The icon is a bundled local SVG asset, so it must render with no network at all.
QA Steps
Same as the Tests section above — every step can be run against staging with no special account setup or data.
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.Important
Unchecked boxes above, and why — please read before approving:
tests/unit/components/SidePanelsuite covers the component and passes.AI tests run locally
npm run lint-changednpm run typechecknpm run spell-changednpm run react-compiler-compliance-check check <changed files>npm test(tests/unit/components/SidePanel,useSidePanelContext,useConciergeSidePanelReportActions,AvatarTest)The full Jest suite was not run; only the suites covering the changed components were.
npm run prettieris not an App script and App has no prettier config, so formatting is covered bylint-changed.Screenshots/Videos
Android: Native
Inbox header — one-color Concierge icon next to the search icon, and a zoomed crop of the same header:
Tapping the icon opens the Concierge chat:
Chat report header with back button, plus a zoomed crop:
Android: mWeb Chrome
Not tested — needs a human pass.
iOS: Native
Not tested — needs a human pass.
iOS: mWeb Safari
Not tested — needs a human pass.
MacOS: Chrome / Safari
Inbox header and a zoomed crop showing the Concierge icon matching the search icon's size and gray fill:
Non-Concierge chat header, and a zoomed crop confirming the flat gray fill:
Clicking the icon opens the help side panel:
Narrow layout — header with back button:
Settings > Account header: