You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Due for payment 2026-10-30] [$175] Add a More menu option to switch single-expense reports between expense view and table view #102910
When a report has only one expense, we open it in the single-expense view. When it has more than one, we open it in the table view. Admins and approvers have told us the switch between these two layouts is confusing:
Each time they open a report, they stop to work out which layout they're looking at and where things are.
Some approvers find it easier to review in the table view, where expense-level fields appear as table columns.
Users also mix up whether they're looking at an expense or a report.
Proposal
On single-expense reports, add an option to the More menu that switches the layout:
In the single-expense view, the option says Switch to table view.
In the table view, the option says Switch to expense view.
The option shows only on reports with one expense. Reports with more than one expense keep opening in the table view.
When a user picks an option, we save it as their default. Every single-expense report they open after that uses the view they chose, until they switch back.
This setting applies only to the user who picks it. It isn't a workspace setting.
changed the title [-]Add a More menu option to switch single-expense reports between expense view and table view[/-][+][$175] Add a More menu option to switch single-expense reports between expense view and table view[/+]on Oct 2, 2026
Please re-state the problem that we are trying to solve in this issue.
Users find the automatic layout switching between single-expense view and table view disorienting when reviewing single-expense reports. They need a persistent option in the More menu to view single-expense reports in table view across all their devices.
What is the root cause of that problem?
In src/libs/MoneyRequestReportUtils.ts, shouldDisplayReportTableView(report, transactions) evaluates !isReportTransactionThread(report) && !isSingleTransactionReport(report, transactions), forcing single-transaction reports into the single-expense view regardless of user preference.
There is no user-level Name-Value Pair (NVP) to persist this display preference across devices (ONYXKEYS.NVP_SINGLE_EXPENSE_TABLE_VIEW).
MoneyReportHeaderSecondaryActions.tsx lacks a contextual toggle item for single-transaction reports.
What changes do you think we should make in order to solve the problem?
User Preference Storage (ReportLayout.ts & ONYXKEYS.ts):
Add NVP_SINGLE_EXPENSE_TABLE_VIEW: 'nvp_expensify_singleExpenseTableView' in src/ONYXKEYS.ts.
In src/libs/actions/ReportLayout.ts, implement setSingleExpenseTableView(shouldUseTableView: boolean, previousValue?: boolean) using the standard API.write(WRITE_COMMANDS.SET_NAME_VALUE_PAIRS, ...) with optimistic and failure rollback data.
More Menu Toggle (MoneyReportHeaderSecondaryActions.tsx):
Subscribe to ONYXKEYS.NVP_SINGLE_EXPENSE_TABLE_VIEW.
When isSingleTransactionReport(moneyRequestReport, nonPendingDeleteTransactions) is true, insert a toggle action:
Update shouldDisplayReportTableView to accept a shouldUseTableViewForSingleExpense preference and respect it for single-transaction reports (while still returning false for transaction threads).
Pass the preference through the main entry points: MoneyRequestReportView.tsx, ReportActions.tsx, search views, and related RHP paths.
Suppress the wide receipt panel (WideRHPReceiptPanel.tsx) when the single-expense table view preference is enabled.
Navigation Edge Case (OneTransactionThreadRedirectHandler.tsx):
MoneyRequestReportPreview can navigate using childReportID, which may represent the transaction thread rather than the parent report.
The redirect bypass must be scoped carefully so that enabling table view on the parent single-expense report does not break legitimate transaction-thread deep links or navigation flows.
Localization & Unit Tests:
Add keys for reportLayout.viewAsTable and reportLayout.viewAsSingleExpense (English source + existing translation process).
Add unit tests for the preference action, the updated layout resolver, menu visibility, and the redirect behavior.
What alternative solutions did you explore? (Optional)
Creating a dedicated backend command: Unnecessary — Expensify standardizes user preferences via SET_NAME_VALUE_PAIRS.
Client-only local storage: Rejected because the setting must persist and sync across devices.
📣 @mohamad-shafeez! 📣
Hey, it seems we don’t have your contributor details yet! You'll only have to do this once, and this is how we'll hire you on Upwork.
Please follow these steps:
Get the email address used to login to your Expensify account. If you don't already have an Expensify account, create one here. If you have multiple accounts (e.g. one for testing), please use your main account email.
Get the link to your Upwork profile. It's necessary because we only pay via Upwork. You can access it by logging in, and then clicking on your name. It'll look like this. If you don't already have an account, sign up for one here.
Copy the format below and paste it in a comment on this issue. Replace the placeholder text with your actual details.
Format:
Contributor details
Your Expensify account email: <REPLACE EMAIL HERE>
Upwork Profile Link: <REPLACE LINK HERE>
changed the title [-][$175] Add a More menu option to switch single-expense reports between expense view and table view[/-][+][Due for payment 2026-10-30] [$175] Add a More menu option to switch single-expense reports between expense view and table view[/+]on Oct 23, 2026
The solution for this issue has been 🚀 deployed to production 🚀 in version 9.5.18-1 and is now subject to a 7-day regression period 📆. Here is the list of pull requests that resolve this issue:
Activity
melvin-bot commentedon Oct 2, 2026
Triggered auto assignment to Design team member for new feature review - @dannymcclain (
NewFeature)melvin-bot commentedon Oct 2, 2026
Triggered auto assignment to Contributor-plus team member for initial proposal review - @daledah (
External)[-]Add a More menu option to switch single-expense reports between expense view and table view[/-][+][$175] Add a More menu option to switch single-expense reports between expense view and table view[/+]melvin-bot commentedon Oct 2, 2026
Job added to Upwork: https://www.upwork.com/jobs/~022106061195817943488
mohamad-shafeez commentedon Oct 2, 2026
Proposal
Please re-state the problem that we are trying to solve in this issue.
Users find the automatic layout switching between single-expense view and table view disorienting when reviewing single-expense reports. They need a persistent option in the More menu to view single-expense reports in table view across all their devices.
What is the root cause of that problem?
src/libs/MoneyRequestReportUtils.ts,shouldDisplayReportTableView(report, transactions)evaluates!isReportTransactionThread(report) && !isSingleTransactionReport(report, transactions), forcing single-transaction reports into the single-expense view regardless of user preference.ONYXKEYS.NVP_SINGLE_EXPENSE_TABLE_VIEW).MoneyReportHeaderSecondaryActions.tsxlacks a contextual toggle item for single-transaction reports.What changes do you think we should make in order to solve the problem?
User Preference Storage (
ReportLayout.ts&ONYXKEYS.ts):NVP_SINGLE_EXPENSE_TABLE_VIEW: 'nvp_expensify_singleExpenseTableView'insrc/ONYXKEYS.ts.src/libs/actions/ReportLayout.ts, implementsetSingleExpenseTableView(shouldUseTableView: boolean, previousValue?: boolean)using the standardAPI.write(WRITE_COMMANDS.SET_NAME_VALUE_PAIRS, ...)with optimistic and failure rollback data.More Menu Toggle (
MoneyReportHeaderSecondaryActions.tsx):ONYXKEYS.NVP_SINGLE_EXPENSE_TABLE_VIEW.isSingleTransactionReport(moneyRequestReport, nonPendingDeleteTransactions)is true, insert a toggle action:shouldUseTableView ? translate('reportLayout.viewAsSingleExpense') : translate('reportLayout.viewAsTable')shouldUseTableView ? Expensicons.Receipt : Expensicons.TableonSelected: CallsetSingleExpenseTableView(!shouldUseTableView, shouldUseTableView).Centralized Layout Resolution (
src/libs/MoneyRequestReportUtils.ts):shouldDisplayReportTableViewto accept ashouldUseTableViewForSingleExpensepreference and respect it for single-transaction reports (while still returning false for transaction threads).MoneyRequestReportView.tsx,ReportActions.tsx, search views, and related RHP paths.WideRHPReceiptPanel.tsx) when the single-expense table view preference is enabled.Navigation Edge Case (
OneTransactionThreadRedirectHandler.tsx):MoneyRequestReportPreviewcan navigate usingchildReportID, which may represent the transaction thread rather than the parent report.Localization & Unit Tests:
reportLayout.viewAsTableandreportLayout.viewAsSingleExpense(English source + existing translation process).What alternative solutions did you explore? (Optional)
SET_NAME_VALUE_PAIRS.melvin-bot commentedon Oct 2, 2026
📣 @mohamad-shafeez! 📣
Hey, it seems we don’t have your contributor details yet! You'll only have to do this once, and this is how we'll hire you on Upwork.
Please follow these steps:
Format:
mohamad-shafeez commentedon Oct 2, 2026
Contributor details
Your Expensify account email: [email protected]
Upwork Profile Link: https://www.upwork.com/freelancers/~01ede4d9cba5c66ae0
65 remaining items
melvin-bot commentedon Oct 21, 2026
If you are the assigned CME please investigate whether the linked PR caused a regression and leave a comment with the results.
If a regression has occurred and you are the assigned CM follow the instructions here.
If this regression could have been avoided please consider also proposing a recommendation to the PR checklist so that we can avoid it in the future.
melvin-bot commentedon Oct 22, 2026
If you are the assigned CME please investigate whether the linked PR caused a regression and leave a comment with the results.
If a regression has occurred and you are the assigned CM follow the instructions here.
If this regression could have been avoided please consider also proposing a recommendation to the PR checklist so that we can avoid it in the future.
jponikarchuk commentedon Oct 22, 2026
Deploy Blocker #104676 was identified to be related to the PR #103703 that attempted to fix this issue.
jponikarchuk commentedon Oct 22, 2026
Deploy Blocker #104678 was identified to be related to the PR #103703 that attempted to fix this issue.
jponikarchuk commentedon Oct 22, 2026
Deploy Blocker #104681 was identified to be related to the PR #103703 that attempted to fix this issue.
melvin-bot commentedon Oct 22, 2026
If you are the assigned CME please investigate whether the linked PR caused a regression and leave a comment with the results.
If a regression has occurred and you are the assigned CM follow the instructions here.
If this regression could have been avoided please consider also proposing a recommendation to the PR checklist so that we can avoid it in the future.
jponikarchuk commentedon Oct 22, 2026
Deploy Blocker #104682 was identified to be related to the PR #103703 that attempted to fix this issue.
melvin-bot commentedon Oct 22, 2026
If you are the assigned CME please investigate whether the linked PR caused a regression and leave a comment with the results.
If a regression has occurred and you are the assigned CM follow the instructions here.
If this regression could have been avoided please consider also proposing a recommendation to the PR checklist so that we can avoid it in the future.
[-][$175] Add a More menu option to switch single-expense reports between expense view and table view[/-][+][Due for payment 2026-10-30] [$175] Add a More menu option to switch single-expense reports between expense view and table view[/+]melvin-bot commentedon Oct 23, 2026
@daledah
The solution for this issue has been 🚀 deployed to production 🚀 in version 9.5.18-1 and is now subject to a 7-day regression period 📆. Here is the list of pull requests that resolve this issue:
If no regressions arise, payment will be issued on 2026-10-30. 🎊
Contributor+ Checklist: The following checklist (instructions) needs to be completed before this issue can be closed:
If no checklist is needed for this issue, use the K2 [no checklist button].