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] Android - Expense can´t be held while in table view. #104681
Version Number: 9.5.16-0 Reproducible in staging?: Yes Reproducible in production?: N/A - new feature, doesn't exist in prod If this was caught during regression testing, add the test name, ID and link from BrowserStack:#103703 Email or phone of affected tester (no customers):[email protected] Issue reported by: Applause Internal Team Bug source: Exploratory - Significant User Experience Deterioration Device used: Motorola MotoG60 / Android 12 (Hybrid app) App Component: Money Requests
Action Performed:
Prerequisite: Account has at least one workspace.
Open the Expensify app.
Navigate to workspace chat.
Create a manual expense.
Open the expense report.
Tap on "More" > "Switch to table view"
Long tap and select the just created expense.
Tap on dropdown menu > "Hold"
Enter any reason and hold the expense.
Note that after returning to report, expense is not displayed as held.
Expected Result:
User should be able to hold an expense while in table view.
Actual Result:
User can complete the process to hold an expense while on table view, but no violation appears after it and expense is not held.
👋 Friendly reminder that deploy blockers are time-sensitive ⏱ issues! Check out the open `StagingDeployCash` deploy checklist to see the list of PRs included in this release, then work quickly to do one of the following:
Identify the pull request that introduced this issue and revert it.
Root cause: On narrow layouts, the selected expense is cleared before the hold page submits. The hold then runs on zero transactions.
Recommendation: Roll forward with a one-line fix. Revert #103703 if the fix can't land before the deploy. The feature is new and not in production, so a revert is a safe fallback.
The PR enables selection mode for a single-expense report in table view: minTransactionsForSelection = shouldUseTableViewForSingleExpense ? 1 : 2 (MoneyReportHeader.tsx:153-156).
On narrow layouts, while selection mode is on and the report is focused, the header shows "Select multiple" and does not render MoneyReportHeaderActions (MoneyReportHeader.tsx:147-171). Opening the hold page removes focus, so the normal header and MoneyReportHeaderActions mount again.
On mount, MoneyReportHeaderActions calls clearSelectedTransactions(true) whenever transactionThreadReportID is set (index.tsx:65-71). That ID is set for any one-expense report, even in table view. The PR updated isTransactionThread just above (index.tsx:61-63) to account for table view, but left this effect unchanged.
The hold page reads the now-empty selectedTransactionIDs (SearchHoldReasonPage.tsx:91-107). putTransactionsOnHold loops over nothing (Hold.ts:400-421). The form closes, but nothing is held.
Scope:
Affected: narrow layouts (Android, iOS, likely mobile web).
Not affected: desktop web, because MoneyReportHeaderActions stays mounted. Multi-expense reports, because transactionThreadReportID is undefined.
Likely also affected: other bulk actions that open a page reading the shared selection (Move/Change report, Reject). QA these after the fix.
Other suspects ruled out:#103703 is the only hold-related PR on the open deploy checklist.
Next Steps: Reply with @MelvinBot implement this to create a draft PR, or @MelvinBot <your feedback> to refine this analysis.
changed the title [-]Android - Expense can´t be held while in table view.[/-][+][Due for payment 2026-10-30] Android - Expense can´t be held while in 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:
If no regressions arise, payment will be issued on 2026-10-30. 🎊
The following checklist (instructions) will need to be completed before the issue can be closed. Please copy/paste the Contributor+ Checklist from here into a new comment on this GH and complete it. If you have the K2 extension, you can simply click: [this button]. If no checklist is needed for this issue, you can click: [no checklist button]
Activity
applause-bot commentedon Oct 22, 2026
While Applause doesn't embed attachments for this bug, here are the links for quick view:
https://platform.applause.com/services/links/v1/external/2ccfafa80a520860badc1f5a85f144f2f16f1d2c6d70d52bf252ee5aac73ded8
melvin-bot commentedon Oct 22, 2026
You have been assigned to this deploy blocker because you recently merged this PR: #103703
github-actions commentedon Oct 22, 2026
👋 Friendly reminder that deploy blockers are time-sensitive ⏱ issues! Check out the open `StagingDeployCash` deploy checklist to see the list of PRs included in this release, then work quickly to do one of the following:
melvin-bot commentedon Oct 22, 2026
@Beamanator @mountiny @lakchote @daledah you have been assigned to this deploy blocker because you reviewed the offending PR: #103703
melvin-bot commentedon Oct 22, 2026
💬 A slack conversation has been started in #expensify-open-source
MelvinBot commentedon Oct 22, 2026
Deploy Blocker Analysis
Causing PR: Reapply "Add a More menu option to switch single-expense reports between expense view and table view" (
Expensify/App#103703). Confidence: high, from code tracing. I did not reproduce it on a device.Root cause: On narrow layouts, the selected expense is cleared before the hold page submits. The hold then runs on zero transactions.
Recommendation: Roll forward with a one-line fix. Revert #103703 if the fix can't land before the deploy. The feature is new and not in production, so a revert is a safe fallback.
Fix: In MoneyReportHeaderActions/index.tsx:65-71, key the clearing effect on
isTransactionThreadinstead of the rawtransactionThreadReportID:Investigation details
minTransactionsForSelection = shouldUseTableViewForSingleExpense ? 1 : 2(MoneyReportHeader.tsx:153-156).MoneyReportHeaderActions(MoneyReportHeader.tsx:147-171). Opening the hold page removes focus, so the normal header andMoneyReportHeaderActionsmount again.MoneyReportHeaderActionscallsclearSelectedTransactions(true)whenevertransactionThreadReportIDis set (index.tsx:65-71). That ID is set for any one-expense report, even in table view. The PR updatedisTransactionThreadjust above (index.tsx:61-63) to account for table view, but left this effect unchanged.selectedTransactionIDs(SearchHoldReasonPage.tsx:91-107).putTransactionsOnHoldloops over nothing (Hold.ts:400-421). The form closes, but nothing is held.Scope:
MoneyReportHeaderActionsstays mounted. Multi-expense reports, becausetransactionThreadReportIDisundefined.Other suspects ruled out: #103703 is the only hold-related PR on the open deploy checklist.
Next Steps: Reply with
@MelvinBot implement thisto create a draft PR, or@MelvinBot <your feedback>to refine this analysis.view run
m-natarajan commentedon Oct 22, 2026
PR reverted and feature "Switch to table view." not available. Samsung Galaxy A40/Android 11/Build 9.5.16-1
MicrosoftTeams-video.45.mp4
Beamanator commentedon Oct 22, 2026
thanks! closing!
[-]Android - Expense can´t be held while in table view.[/-][+][Due for payment 2026-10-30] Android - Expense can´t be held while in 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. 🎊
The following checklist (instructions) will need to be completed before the issue can be closed. Please copy/paste the Contributor+ Checklist from here into a new comment on this GH and complete it. If you have the K2 extension, you can simply click: [this button]. If no checklist is needed for this issue, you can click: [no checklist button]