Skip to content

[Due for payment 2025-12-17] [$250] Reports - Select All and Uncategorized are not greyed out when creating a report in offline mode #76352

Closed

Description

@jponikarchuk

If you haven’t already, check out our contributing guidelines for onboarding and email contributors@expensify.com to request to join our Slack channel!


Version Number: v9.2.66-0
Reproducible in staging?: Yes
Reproducible in production?: Yes
If this was caught during regression testing, add the test name, ID and link from BrowserStack: Bug found around #70534
Email or phone of affected tester (no customers): agexptest+pr281125@gmail.com
Issue reported by: Applause Internal Team
Device used: Windows 11/ Chrome, Samsung S23FE/ Android 16, iPhone 13 Mini/ iOS 26.1
App Component: Money Requests

Action Performed:

  1. Go to staging.new.expensify.com
  2. Go offline
  3. Create a report with two manual expenses and any category (Uncategorized appears when there is no category in workspace settings > Categories)
  4. Go to the report thread
  5. Resize the window until the "Select all" label appears (only on Web)

Expected Result:

Select All and Uncategorized are greyed out.

Actual Result:

Select All and Uncategorized are not greyed out as all other IU components.

Workaround:

Unknown

Platforms:

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

Screenshots/Videos

1.mp4

View all open jobs on GitHub

Upwork Automation - Do Not Edit
  • Upwork Job URL: https://www.upwork.com/jobs/~021995419000651655992
  • Upwork Job ID: 1995419000651655992
  • Last Price Increase: 2025-12-01
  • Automatic offers:
    • linhvovan29546 | Reviewer | 109693296
    • nyomanjyotisa | Contributor | 109693300
Issue OwnerCurrent Issue Owner: @jliexpensify

Activity

  1. added
    BugSomething is broken. Auto assigns a BugZero manager.
    on Dec 1, 2025
  2. melvin-bot commented on Dec 1, 2025

    @melvin-bot

    Triggered auto assignment to @jliexpensify (Bug), see https://stackoverflow.com/c/expensify/questions/14418 for more details. Please add this bug to a GH project, as outlined in the SO.

  3. jliexpensify commented on Dec 1, 2025

    @jliexpensify
    Contributor

    @dominictb / @dmkt9 - is this a regression from your PR?

  4. nyomanjyotisa commented on Dec 1, 2025

    @nyomanjyotisa
    Member

    Proposal

    Please re-state the problem that we are trying to solve in this issue.

    Select All and Uncategorized are not greyed out when creating a report in offline mode

    What is the root cause of that problem?

    "Select All" and "Uncategorized" section is rendered without checking offline status

    <View style={[styles.dFlex, styles.flexRow, styles.pv2, styles.pr4, StyleUtils.getPaddingLeft(variables.w12)]}>
    <Checkbox
    onPress={() => {
    if (selectedTransactionIDs.length !== 0) {
    clearSelectedTransactions(true);
    } else {
    setSelectedTransactions(transactionsWithoutPendingDelete.map((t) => t.transactionID));
    }
    }}
    accessibilityLabel={CONST.ROLE.CHECKBOX}
    isIndeterminate={selectedTransactionIDs.length > 0 && selectedTransactionIDs.length !== transactionsWithoutPendingDelete.length}
    isChecked={selectedTransactionIDs.length > 0 && selectedTransactionIDs.length === transactionsWithoutPendingDelete.length}
    />
    {isMediumScreenWidth && <Text style={[styles.textStrong, styles.ph3]}>{translate('workspace.people.selectAll')}</Text>}

    return (
    <View style={[styles.reportLayoutGroupHeader, conditionalHeight, style]}>
    <View style={[styles.flexRow, styles.alignItemsCenter, styles.flex1]}>
    {shouldShowCheckbox && (
    <Checkbox
    isChecked={isSelected}
    isIndeterminate={isIndeterminate}
    onPress={handleToggleSelection}
    accessibilityLabel={translate('reportLayout.selectGroup', {groupName: displayName})}
    style={styles.mr2}
    />
    )}
    <Text
    style={[styles.textBold, textStyle, styles.flexShrink1, shouldShowCheckbox && styles.ml2]}
    shouldUseDefaultLineHeight={false}
    numberOfLines={1}
    >
    {displayName}
    </Text>

    What changes do you think we should make in order to solve the problem?

    We can apply styles.buttonOpacityDisabled or styles.opacitySemiTransparent style to grey out the "Select All" and "Uncategorized" sections

    <View style={[styles.dFlex, styles.flexRow, styles.pv2, styles.pr4, StyleUtils.getPaddingLeft(variables.w12), isOffline && styles.buttonOpacityDisabled]}>
        ...
    </View>

    <View style={[styles.dFlex, styles.flexRow, styles.pv2, styles.pr4, StyleUtils.getPaddingLeft(variables.w12)]}>
    <Checkbox
    onPress={() => {
    if (selectedTransactionIDs.length !== 0) {
    clearSelectedTransactions(true);
    } else {
    setSelectedTransactions(transactionsWithoutPendingDelete.map((t) => t.transactionID));
    }
    }}
    accessibilityLabel={CONST.ROLE.CHECKBOX}
    isIndeterminate={selectedTransactionIDs.length > 0 && selectedTransactionIDs.length !== transactionsWithoutPendingDelete.length}
    isChecked={selectedTransactionIDs.length > 0 && selectedTransactionIDs.length === transactionsWithoutPendingDelete.length}
    />
    {isMediumScreenWidth && <Text style={[styles.textStrong, styles.ph3]}>{translate('workspace.people.selectAll')}</Text>}

    <View style={[styles.reportLayoutGroupHeader, conditionalHeight, style, isOffline && styles.buttonOpacityDisabled]}>
        ...
    </View>

    return (
    <View style={[styles.reportLayoutGroupHeader, conditionalHeight, style]}>
    <View style={[styles.flexRow, styles.alignItemsCenter, styles.flex1]}>
    {shouldShowCheckbox && (
    <Checkbox
    isChecked={isSelected}
    isIndeterminate={isIndeterminate}
    onPress={handleToggleSelection}
    accessibilityLabel={translate('reportLayout.selectGroup', {groupName: displayName})}
    style={styles.mr2}
    />
    )}
    <Text
    style={[styles.textBold, textStyle, styles.flexShrink1, shouldShowCheckbox && styles.ml2]}
    shouldUseDefaultLineHeight={false}
    numberOfLines={1}
    >
    {displayName}
    </Text>

    What alternative solutions did you explore? (Optional)

    We can wrap it with OfflineWithFeedback

  5. dmkt9 commented on Dec 1, 2025

    @dmkt9
    Contributor

    @dominictb / @dmkt9 - is this a regression from your PR?

    My PR isn't in production yet, so I guess not.

  6. added
    ExternalAdded to denote the issue can be worked on by a contributor
    on Dec 1, 2025
  7. changed the title [-]Reports - Select All and Uncategorized are not greyed out when creating a report in offline mode[/-] [+][$250] Reports - Select All and Uncategorized are not greyed out when creating a report in offline mode[/+] on Dec 1, 2025
  8. melvin-bot commented on Dec 1, 2025

    @melvin-bot
  9. added
    Help WantedApply this label when an issue is open to proposals by contributors
    on Dec 1, 2025
  10. melvin-bot commented on Dec 1, 2025

    @melvin-bot

    Triggered auto assignment to Contributor-plus team member for initial proposal review - @linhvovan29546 (External)

  11. nkdengineer commented on Dec 1, 2025

    @nkdengineer
    Contributor

    🚨 Edited by proposal-police: This proposal was edited at 2025-12-03 03:57:32 UTC.

    Proposal

    Please re-state the problem that we are trying to solve in this issue.

    Select All and Uncategorized are not greyed out as all other IU components.

    What is the root cause of that problem?

    We don't wrap the MoneyRequestReportGroupHeader and the checkbox with OfflineWithFeedback

    What changes do you think we should make in order to solve the problem?

    Since the MoneyRequestReportView already has an OfflineWithFeedback here, we should only add the pending action on MoneyRequestReportTransactionList if we're on the report screen which is not search report screen

    pendingAction={reportPendingAction}

    We should wrap these components with OfflineWithFeedback like the same as add expense button here. We can check for other components like sort table header/ total spend to apply the same fix if needed

    const isOnSearchMoneyRequestReport = isOnSearchMoneyRequestReportPage();
    <OfflineWithFeedback pendingAction={isOnSearchMoneyRequestReport ? undefined : reportPendingAction}>
      <MoneyRequestReportGroupHeader
          group={group}
          isGroupedByTag={currentGroupBy === CONST.REPORT_LAYOUT.GROUP_BY.TAG}
          isSelectionModeEnabled={isMobileSelectionModeEnabled}
          isSelected={selectionState.isSelected}
          isIndeterminate={selectionState.isIndeterminate}
          onToggleSelection={toggleGroupSelection}
          groupKey={group.groupKey}
      />
    </OfflineWithFeedback>
    

    <OfflineWithFeedback pendingAction={isOnSearchMoneyRequestReport ? undefined : reportPendingAction}>    
                                <Checkbox
                                    onPress={() => {
                                        if (selectedTransactionIDs.length !== 0) {
                                            clearSelectedTransactions(true);
                                        } else {
                                            setSelectedTransactions(transactionsWithoutPendingDelete.map((t) => t.transactionID));
                                        }
                                    }}
                                    accessibilityLabel={CONST.ROLE.CHECKBOX}
                                    isIndeterminate={selectedTransactionIDs.length > 0 && selectedTransactionIDs.length !== transactionsWithoutPendingDelete.length}
                                    isChecked={selectedTransactionIDs.length > 0 && selectedTransactionIDs.length === transactionsWithoutPendingDelete.length}
                                />
                                {isMediumScreenWidth && <Text style={[styles.textStrong, styles.ph3]}>{translate('workspace.people.selectAll')}</Text>}
                            </OfflineWithFeedback>
    

    What alternative solutions did you explore? (Optional)

    We can update pendingAction here to undefined to fix the double opacity problem and we need to add OfflineWithFeedback to each child component which isn't handled.

    pendingAction={reportPendingAction}

    Reminder: Please use plain English, be brief and avoid jargon. Feel free to use images, charts or pseudo-code if necessary. Do not post large multi-line diffs or write walls of text. Do not create PRs unless you have been hired for this job.

  12. 21 remaining items

  13. changed the title [-][$250] Reports - Select All and Uncategorized are not greyed out when creating a report in offline mode[/-] [+][Due for payment 2025-12-17] [$250] Reports - Select All and Uncategorized are not greyed out when creating a report in offline mode[/+] on Dec 10, 2025
  14. melvin-bot commented on Dec 10, 2025

    @melvin-bot

    Reviewing label has been removed, please complete the "BugZero Checklist".

  15. melvin-bot commented on Dec 10, 2025

    @melvin-bot

    The solution for this issue has been 🚀 deployed to production 🚀 in version 9.2.74-12 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 2025-12-17. 🎊

    For reference, here are some details about the assignees on this issue:

  16. melvin-bot commented on Dec 10, 2025

    @melvin-bot

    @linhvovan29546 @jliexpensify The PR fixing this issue has been merged! The following checklist (instructions) will need to be completed before the issue can be closed. Please copy/paste the BugZero 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]

  17. jliexpensify commented on Dec 16, 2025

    @jliexpensify
    Contributor

    Bump @linhvovan29546 for checklist please

  18. linhvovan29546 commented on Dec 16, 2025

    @linhvovan29546
    Contributor

    BugZero Checklist:

    • [Contributor] The offending PR has been commented on, pointing out the bug it caused and why, so the author and reviewers can learn from the mistake.

      Link to comment: https://github.com/Expensify/App/pull/58360/changes#r2622746221

    • [Contributor] If the regression was CRITICAL (e.g. interrupts a core flow) A discussion in #expensify-open-source has been started about whether any other steps should be taken (e.g. updating the PR review checklist) in order to catch this type of bug sooner.

      Link to discussion:

    • [Contributor] If it was decided to create a regression test for the bug, please propose the regression test steps using the template below to ensure the same bug will not reach production again.

    • [BugZero Assignee] Create a GH issue for creating/updating the regression test once above steps have been agreed upon.

      Link to issue:

    Regression Test Proposal

    Test:

    This bug has low impact. So I'm not sure we need to create a regression test, I've written the test steps below in case we decide to create it

    1. Open ND.
    2. Go offline.
    3. Create a report with two manual expenses and any category.
    4. Open the report thread.
    5. In the web, resize the browser window to a medium screen and verify that the 'Select all' section are greyed out.
    6. In the mobile app, repeat steps 1–4.
    7. Long-press any item to enter selection mode.
    8. Verify that the "Select all" section are greyed out on mobile.

    Do we agree 👍 or 👎

  19. linhvovan29546 commented on Dec 16, 2025

    @linhvovan29546
    Contributor

    Bump @linhvovan29546 for checklist please

    Thanks. I've created the checklist

  20. jliexpensify commented on Dec 18, 2025

    @jliexpensify
    Contributor

    Payment Summary

    Upwork job

  21. jliexpensify commented on Dec 18, 2025

    @jliexpensify
    Contributor

    Paid and job closed.

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

Metadata

Metadata

Labels

Awaiting PaymentAuto-added when associated PR is deployed to productionBugSomething is broken. Auto assigns a BugZero manager.DailyKSv2ExternalAdded to denote the issue can be worked on by a contributor

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions