feat: add close icon to header for concierge chat in desktop#78955
feat: add close icon to header for concierge chat in desktop#78955blimpich merged 2 commits intoExpensify:mainfrom
Conversation
There was a problem hiding this comment.
Pull request overview
This PR adds a close icon to the header for the Concierge chat when displayed in a side panel on desktop, replacing the standard back arrow. This provides a clearer user experience indicating that the Concierge chat can be closed rather than navigated back from.
- Conditionally displays a close (X) icon instead of a back arrow for Concierge chat in side panels on desktop
- Updates tooltip and accessibility labels to reflect "Close" vs "Back" based on the icon shown
- Maintains back arrow behavior on small screens and for non-Concierge chats
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| const shouldShowCloseButton = isInSidePanel && !shouldUseNarrowLayout && isConciergeChatReport(report); | ||
| const backButtonIcon = shouldShowCloseButton ? icons.Close : icons.BackArrow; | ||
| const backButtonLabel = shouldShowCloseButton ? translate('common.close') : translate('common.back'); |
There was a problem hiding this comment.
The new behavior for showing a close icon for concierge chat in the side panel lacks test coverage. Consider adding a test case that verifies the close icon is displayed when the header is rendered for a concierge chat in a side panel on desktop, and that the back arrow is shown in other scenarios.
| accessibilityLabel={translate('common.back')} | ||
| accessibilityLabel={backButtonLabel} | ||
| role={CONST.ROLE.BUTTON} | ||
| sentryLabel={CONST.SENTRY_LABEL.HEADER_VIEW.BACK_BUTTON} |
There was a problem hiding this comment.
The sentry label remains 'BACK_BUTTON' even when the button functions as a close button for the concierge chat. This could make analytics and error tracking less accurate. Consider using a conditional sentry label or adding a CLOSE_BUTTON constant to CONST.SENTRY_LABEL.HEADER_VIEW to differentiate between the two button types.
| sentryLabel={CONST.SENTRY_LABEL.HEADER_VIEW.BACK_BUTTON} | |
| sentryLabel={isChatUsedForOnboarding ? 'HEADER_VIEW.CLOSE_BUTTON' : CONST.SENTRY_LABEL.HEADER_VIEW.BACK_BUTTON} |
Reviewer Checklist
Screenshots/VideosAndroid: mWeb Chrome2026-01-07.10.43.24.mov |
|
Let me merge main to fix the performance check. |
|
LGTM! |
|
✋ 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/blimpich in version: 9.2.96-1 🚀
|
|
🚀 Deployed to production by https://github.com/arosiclair in version: 9.2.96-6 🚀
|
|
🚀 Deployed to production by https://github.com/arosiclair in version: 9.2.96-6 🚀
|
|
🚀 Deployed to production by https://github.com/arosiclair in version: 9.2.96-6 🚀
|




Explanation of Change
Fixed Issues
$ #78870
PROPOSAL: #78870 (comment)
Tests
Offline tests
Same as test
QA Steps
Same as test
// TODO: These must be filled out, or the issue title must include "[No QA]."
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
Android: Native
Android: mWeb Chrome
Android.mWeb.Chrome.mov
iOS: Native
iOS: mWeb Safari
IOS.mWeb.safari.mov
MacOS: Chrome / Safari
macOS.Chrome.mp4