Skip to content

[Due for payment 2026-10-30] Android - Expense can´t be held while in table view. #104681

Closed

Description

@applause-bot

If you haven’t already, check out our contributing guidelines for onboarding. To join our Slack channel, fill out this form.


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.

  1. Open the Expensify app.
  2. Navigate to workspace chat.
  3. Create a manual expense.
  4. Open the expense report.
  5. Tap on "More" > "Switch to table view"
  6. Long tap and select the just created expense.
  7. Tap on dropdown menu > "Hold"
  8. Enter any reason and hold the expense.
  9. 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.

Workaround:

Unknown

Platforms:

  • Android: App
  • Android: mWeb Chrome
  • iOS: App
  • iOS: mWeb Safari
  • iOS: mWeb Chrome
  • Windows: Chrome
  • MacOS: Chrome Safari

Screenshots/Videos

Bug7292684_1792625256383.Table_Hold.mp4

View all open jobs on GitHub

Applause Internal Information
Exported by: Julia Ponikarchuk
Bug ID: 7292684

Issue OwnerCurrent Issue Owner: @daledah

Activity

  1. added
    DeployBlockerCashThis issue or pull request should block deployment
    BugSomething is broken. Auto assigns a BugZero manager.
    on Oct 22, 2026
  2. applause-bot commented on Oct 22, 2026

    @applause-bot
    Author

    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

  3. melvin-bot commented on Oct 22, 2026

    @melvin-bot

    You have been assigned to this deploy blocker because you recently merged this PR: #103703

  4. github-actions commented on Oct 22, 2026

    @github-actions
    Contributor

    👋 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:

    1. Identify the pull request that introduced this issue and revert it.
    2. Find someone who can quickly fix the issue.
    3. Fix the issue yourself.
  5. melvin-bot commented on Oct 22, 2026

    @melvin-bot

    @Beamanator @mountiny @lakchote @daledah you have been assigned to this deploy blocker because you reviewed the offending PR: #103703

  6. melvin-bot commented on Oct 22, 2026

    @melvin-bot

    💬 A slack conversation has been started in #expensify-open-source

  7. MelvinBot commented on Oct 22, 2026

    @MelvinBot
    Contributor

    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 isTransactionThread instead of the raw transactionThreadReportID:

    useEffect(() => {
        if (!isTransactionThread) {
            return;
        }
        clearSelectedTransactions(true);
    }, [isTransactionThread]); // eslint-disable-line react-hooks/exhaustive-deps
    Investigation details
    1. The PR enables selection mode for a single-expense report in table view: minTransactionsForSelection = shouldUseTableViewForSingleExpense ? 1 : 2 (MoneyReportHeader.tsx:153-156).
    2. 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.
    3. 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.
    4. 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.


    view run

  8. m-natarajan commented on Oct 22, 2026

    @m-natarajan

    PR reverted and feature "Switch to table view." not available. Samsung Galaxy A40/Android 11/Build 9.5.16-1

    MicrosoftTeams-video.45.mp4
  9. Beamanator commented on Oct 22, 2026

    @Beamanator
    Contributor

    thanks! closing!

  10. 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
  11. melvin-bot commented on Oct 23, 2026

    @melvin-bot

    @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]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

BugSomething is broken. Auto assigns a BugZero manager.DailyKSv2Engineering

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions