Make Copilot switching discoverable with a dedicated Switch button on the Accounts page#93393
Conversation
Replace the implicit avatar/name press affordance on the Accounts header with an explicit Switch button in the slot previously held by the Status emoji picker. The avatar and name are no longer pressable, the Copilot access tooltip now anchors to the Switch button, and the Status entry is removed from the Accounts header (it already lives on the Profile page).
Codecov Report✅ Changes either increased or maintained existing code coverage, great job!
|
|
Tossing this one over to you @flaviadefaria as this is a project you're working on |
@wildan-m I'm not seeing this change, did you add it in? |
…t-switch-button # Conflicts: # Mobile-Expensify # android/app/build.gradle # config/eslint/eslint.seatbelt.tsv # docs/articles/new-expensify/concierge-ai/Support-Agent.md # docs/articles/new-expensify/concierge-ai/What-Concierge-Can-Do.md # ios/AppDelegate.swift # ios/NewExpensify/Info.plist # ios/NotificationServiceExtension/Info.plist # ios/ShareViewController/Info.plist # package-lock.json # package.json # patches/@shopify/flash-list/details.md # src/CONST/index.ts # src/ONYXKEYS.ts # src/ROUTES.ts # src/SCREENS.ts # src/components/AvatarWithDisplayName.tsx # src/components/Charts/BarChart/BarChartContent.tsx # src/components/Charts/LineChart/LineChartContent.tsx # src/components/DatePicker/DatePickerModal.tsx # src/components/FlashList/InvertedFlashList/index.tsx # src/components/MoneyReportHeaderActions/MoneyReportHeaderSecondaryActions.tsx # src/components/MoneyReportHeaderActions/MoneyReportHeaderSelectionDropdown.tsx # src/components/MoneyReportHeaderPrimaryAction/SubmitPrimaryAction.tsx # src/components/MoneyRequestConfirmationFields/Provider.tsx # src/components/MoneyRequestConfirmationFields/context.ts # src/components/MoneyRequestConfirmationList.tsx # src/components/MoneyRequestConfirmationList/sections/DescriptionField.tsx # src/components/MoneyRequestConfirmationListFooter.tsx # src/components/MoneyRequestReportView/SelectionToolbar/index.tsx # src/components/ReportActionItem/MoneyRequestReportPreview/MoneyRequestReportPreviewContent.tsx # src/components/ReportActionItem/MoneyRequestReportPreview/ReportPreviewActionButton.tsx # src/components/ReportActionItem/MoneyRequestReportPreview/SubmitActionButton.tsx # src/components/ReportSubmitToPopoverAnchor.tsx # src/components/Search/SearchList/ListItem/ExpenseReportListItem.tsx # src/components/Search/SearchList/ListItem/ExpenseReportListItemRow/ExpenseReportListItemRowWide.tsx # src/components/Search/SearchList/ListItem/ExpenseReportListItemRow/index.tsx # src/components/Search/SearchList/ListItem/ExpenseReportListItemRow/types.ts # src/components/Search/SearchList/ListItem/ReportListItemHeader.tsx # src/components/Search/SearchList/ListItem/TransactionListItem/TransactionListItemNarrow.tsx # src/components/Search/SearchList/ListItem/TransactionListItem/TransactionListItemWide.tsx # src/components/Search/SearchList/ListItem/TransactionListItem/index.tsx # src/components/Search/SearchList/ListItem/TransactionListItem/types.ts # src/components/Search/SearchRouter/SearchRouterContext.tsx # src/components/Search/index.tsx # src/components/SelectionList/components/Footer.tsx # src/components/SelectionList/types.ts # src/components/SubStepForms/AddressStep.tsx # src/components/Table/TableHeader.tsx # src/components/Table/TableRow.tsx # src/components/Table/middlewares/selection.ts # src/components/Table/types.ts # src/components/Tables/WorkspaceListTable/WorkspaceTableRow.tsx # src/components/TransactionItemRow/TransactionItemRowWide.tsx # src/components/TransactionItemRow/index.tsx # src/components/TransactionItemRow/types.ts # src/hooks/useExportActions.ts # src/hooks/useLifecycleActions.tsx # src/hooks/useMarkAsRead.ts # src/hooks/useProactiveAppReview.ts # src/hooks/useReportActionsVisibility.ts # src/hooks/useReportSubmitToPopover.tsx # src/hooks/useSearchBulkActions.ts # src/hooks/useSelectionModeReportActions.ts # src/hooks/useTransactionInlineEdit.ts # src/languages/de.ts # src/languages/en.ts # src/languages/es.ts # src/languages/fr.ts # src/languages/it.ts # src/languages/ja.ts # src/languages/nl.ts # src/languages/pl.ts # src/languages/pt-BR.ts # src/languages/zh-hans.ts # src/libs/API/parameters/SubmitReportParams.ts # src/libs/Navigation/AppNavigator/ModalStackNavigators/index.tsx # src/libs/Navigation/NavigationRoot.tsx # src/libs/Navigation/linkingConfig/OldRoutes.ts # src/libs/Navigation/linkingConfig/RELATIONS/WORKSPACE_TO_RHP.ts # src/libs/Navigation/linkingConfig/config.ts # src/libs/Navigation/types.ts # src/libs/OptionsListUtils/index.ts # src/libs/PersonalDetailsUtils.ts # src/libs/PolicyUtils.ts # src/libs/ReportUtils.ts # src/libs/SearchUIUtils.ts # src/libs/SidebarUtils.ts # src/libs/actions/App.ts # src/libs/actions/IOU/ReportWorkflow.ts # src/libs/actions/IOU/UpdateMoneyRequest.ts # src/libs/actions/OnyxDerived/ONYX_DERIVED_VALUES.ts # src/libs/actions/Search.ts # src/libs/actions/Task.ts # src/pages/DynamicReportDetailsPage.tsx # src/pages/OnboardingInterestedFeatures/BaseOnboardingInterestedFeatures.tsx # src/pages/ReportSubmitToContent.tsx # src/pages/Search/SearchPage.tsx # src/pages/Search/SearchTransactionsChangeReport.tsx # src/pages/inbox/HeaderView.tsx # src/pages/inbox/report/ReportActionCompose/useEditMessage.ts # src/pages/inbox/report/ReportActionsList.tsx # src/pages/inbox/report/ReportActionsView.tsx # src/pages/iou/request/IOURequestStartPage.tsx # src/pages/iou/request/step/IOURequestStepConfirmation.tsx # src/pages/iou/request/step/IOURequestStepDate.tsx # src/pages/iou/request/step/IOURequestStepDistanceRate.tsx # src/pages/iou/request/step/IOURequestStepReport/hooks/useReportSelectionActions.ts # src/pages/settings/InitialSettingsPage.tsx # src/pages/tasks/NewTaskPage.tsx # src/pages/workspace/WorkspaceMembersPage.tsx # src/pages/workspace/deleteWorkspace/DeleteWorkspaceFlow.tsx # src/pages/workspace/expensifyCard/WorkspaceExpensifyCardDetailsPage.tsx # src/pages/workspace/expensifyCard/issueNew/spendRules/SetSpendRulesStep.tsx # src/pages/workspace/rules/AgentRulesSection.tsx # src/pages/workspace/rules/SpendRules/SpendRulePageBase.tsx # src/pages/workspace/tags/DynamicWorkspaceEditTagsPage.tsx # src/pages/workspace/tags/WorkspaceTagsPage.tsx # src/pages/workspace/workflows/WorkspaceWorkflowsPage.tsx # src/selectors/Policy.ts # src/selectors/ReportAction.ts # src/styles/index.ts # tests/actions/IOUTest/ReportWorkflowTest.ts # tests/actions/ReportTest.ts # tests/ui/AgentRulesSectionTest.tsx # tests/ui/MoneyRequestReportPreview.test.tsx # tests/ui/ReportActionItemMessageEditTest.tsx # tests/ui/WorkspaceMembersTest.tsx # tests/unit/DateUtilsTest.ts # tests/unit/PolicyUtilsTest.ts # tests/unit/ReportUtilsTest.ts # tests/unit/Search/SearchUIUtilsTest.ts # tests/unit/hooks/useSelectionModeReportActions.test.ts
…t-switch-button # Conflicts: # src/pages/settings/InitialSettingsPage.tsx
|
🚧 inimaga has triggered a test Expensify/App build. You can view the workflow run here. |
|
✋ This PR was not deployed to staging yet because QA is ongoing. It will be automatically deployed to staging after the next production release. |
|
🧪🧪 Use the links below to test this adhoc build on Android, iOS, and Web. Happy testing! 🧪🧪
|
|
🚀 Deployed to staging by https://github.com/inimaga in version: 9.4.32-0 🚀
|
Help site review — yes, one doc update is needed 📝This PR replaces the pressable avatar/name at the top of the Account page with a dedicated Switch button for opening the account switcher. One help article documented that old interaction, so it's now inaccurate:
I created a draft help-site PR that updates that step to use the Switch button: ➡️ #95684 — Docs updates for E/A#93393 Copilot account switcher uses Switch button (labeled What I checked and left unchanged
Note: I couldn't auto-assign the draft PR to you — @wildan-m, please review the linked help site PR and confirm it reflects the current behavior. Then mark the linked help site PR |
|
Deploy Blocker #95693 was identified to be related to this PR. |
|
Deploy Blocker #95702 was identified to be related to this PR. |
|
Deploy Blocker ##95717 was identified to be related to this PR. |
|
🚀 Deployed to production by https://github.com/grgia in version: 9.4.32-3 🚀
Bundle Size Analysis (Sentry): |
Explanation of Change
Copilot account switching is hard to discover on the Accounts page: the only way to switch is pressing the avatar/name block, which carries no visible affordance beyond a small caret, while the most prominent spot in the header is occupied by the Status emoji picker.
The header now shows a dedicated Switch button whenever the account can switch (it reuses the existing Copilot-page label, so no new translations are needed). The button opens the same account-switcher popover, and both the Copilot Access tooltip and the first-time educational tooltip anchor to it. The avatar and name become plain, non-pressable content, and the Status picker is removed from this header — Status stays available through the Profile page, which already links to it. The now-unused status-picker telemetry label and a lazy-loaded icon entry are removed along with it.
Fixed Issues
$ #92253
PROPOSAL: #92253 (comment)
Tests
Switchbutton to the right of your avatar and name, and the Status emoji button is no longer there.Switchbutton. Dismiss it with the ✕ and verify it does not reappear on the next visit to the Accounts page.Switchbutton and verify theCopilot accesstooltip points at it.Switchand verify theSwitch accounts:popover opens, listing your account (selected) and the account(s) you can switch to.Switchbutton.Offline tests
Switchbutton still shows and opens the popover.QA Steps
Same as Tests.
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
Kapture.2026-06-20.at.10.16.13.mp4
Android: mWeb Chrome
Kapture.2026-06-20.at.10.20.13.mp4
iOS: Native
Kapture.2026-06-20.at.09.11.59.mp4
iOS: mWeb Safari
Kapture.2026-06-20.at.09.14.35.mp4
MacOS: Chrome / Safari
Kapture.2026-06-20.at.08.47.37.mp4