Skip to content

[Due for payment 2025-12-03] [$250] Inbox - On larger screens, some clickable elements appear in blank spaces #74827

Closed

Description

@lanitochka17

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: 9.2.49-1
Reproducible in staging?: Y
Reproducible in production?: Y
If this was caught during regression testing, add the test name, ID and link from TestRail: N/A
Email or phone of affected tester (no customers): biruknew45+186ssas5@gmail.com
Issue reported by: Applause - Internal Team

Action Performed:

Precondition -
On a Larger Screen

  1. Go to https://staging.new.expensify.com/
  2. Go to a 1:1 chat
  3. Create two expenses
  4. Click on the "View" button to open the expenses.
  5. Click on any expense
  6. Send a message to the chat
  7. Attempt to click on the blank area below the message

Expected Result:

Blank areas should be completely inactive — no clickable or interactive elements should appear

Actual Result:

On larger screens, blank areas below the main content contain clickable or interactive elements

Workaround:

Unknown

Platforms:

Select the officially supported platforms where the issue was reproduced:

  • Android: App
  • Android: mWeb Chrome
  • iOS: App
  • iOS: mWeb Safari
  • iOS: mWeb Chrome
  • Windows: Chrome
  • MacOS: Chrome / Safari
  • MacOS: Desktop
Platforms Tested: On which of our officially supported platforms was this issue tested:
  • Android: App
  • Android: mWeb Chrome
  • iOS: App
  • iOS: mWeb Safari
  • iOS: mWeb Chrome
  • Windows: Chrome
  • MacOS: Chrome / Safari
  • MacOS: Desktop

Screenshots/Videos

Add any screenshot/video evidence
Bug7000677_1762874089652.bandicam_2025-11-11_17-50-12-817.mp4

View all open jobs on GitHub

Upwork Automation - Do Not Edit
  • Upwork Job URL: https://www.upwork.com/jobs/~021989314796236370370
  • Upwork Job ID: 1989314796236370370
  • Last Price Increase: 2025-11-14
Issue OwnerCurrent Issue Owner: @bfitzexpensify

Activity

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

    @melvin-bot

    Triggered auto assignment to @bfitzexpensify (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. abbasifaizan70 commented on Nov 11, 2025

    @abbasifaizan70
    Contributor

    Proposal

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

    On larger screens, blank areas below the main chat content are clickable/interactive when they should be completely inactive. This occurs when viewing a 1:1 chat with expenses - clicking on blank areas triggers unintended interactions with invisible elements.

    What is the root cause of that problem?

    In ReportActionsList.tsx, on larger screens when shouldScrollToEndAfterLayout is true, the component renders both:

    1. renderTopReportActions() - visible content shown at the top
    2. InvertedFlatList - hidden with opacity: 0 but still in the DOM

    The InvertedFlatList with opacity: 0 (line 866) remains interactive and captures click events on what appears to be "blank areas" below the visible content. The opacity CSS property only controls visibility, not interactivity - elements with opacity: 0 can still receive pointer events and block clicks.

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

    Add the pointerEvents prop to the InvertedFlatList to disable pointer events when the list is hidden. Setting pointerEvents="none" prevents the invisible list from capturing any click or touch events while keeping it in the DOM for layout calculations.

    Changes in src/pages/home/report/ReportActionsList.tsx:

    --- a/src/pages/home/report/ReportActionsList.tsx
    +++ b/src/pages/home/report/ReportActionsList.tsx
    @@ -856,6 +856,7 @@
                     <InvertedFlatList
                         accessibilityLabel={translate('sidebarScreen.listOfChatMessages')}
                         ref={reportScrollManager.ref}
    +                    pointerEvents={shouldScrollToEndAfterLayout ? 'none' : 'auto'}
                         testID="report-actions-list"
                         style={styles.overscrollBehaviorContain}
                         data={sortedVisibleReportActions}

    What alternative solutions did you explore? (Optional)

    Alternative 1: Replace opacity with display: none

    Could change the style from opacity: 0 to display: none when hidden:

    shouldScrollToEndAfterLayout ? styles.dNone : styles.dFlex

    However, this approach:

    • Completely removes the element from the layout flow, which might affect scroll calculations
    • Could cause layout shifts during the transition from hidden to visible
    • May break any dependencies that rely on the FlatList being rendered (even if invisible) for measuring purposes

    Alternative 2: Conditionally render the InvertedFlatList

    Could use {!shouldScrollToEndAfterLayout && <InvertedFlatList ... />} to completely unmount when not visible. However:

    • Causes expensive unmount/remount cycles
    • Loses internal state of the FlatList component
    • Forces re-initialization of scroll position and measurements
    • Much more complex change affecting component lifecycle

    Alternative 3: Wrap in View with pointerEvents="box-none"

    Could wrap the FlatList in a View with controlled pointer events. However:

    • Adds unnecessary nesting
    • The pointerEvents prop works directly on FlatList, so wrapper is redundant
  4. mukhrr commented on Nov 11, 2025

    @mukhrr
    Contributor

    Proposal

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

    On larger screens, some clickable elements appear in blank spaces

    What is the root cause of that problem?

    In our case, in larger screens, shouldScrollToEndAfterLayout‎ is true and we render renderTopReportActions() and just hide InvertedFlatList (which has the same content with renderTopReportActions) with opacity: 0.

    {shouldScrollToEndAfterLayout && topReportAction ? renderTopReportActions() : undefined}
    <InvertedFlatList
    accessibilityLabel={translate('sidebarScreen.listOfChatMessages')}
    ref={reportScrollManager.ref}
    testID="report-actions-list"
    style={styles.overscrollBehaviorContain}
    data={sortedVisibleReportActions}
    renderItem={renderItem}
    renderScrollComponent={renderActionSheetAwareScrollView}
    contentContainerStyle={[
    styles.chatContentScrollView,
    shouldScrollToEndAfterLayout ? styles.opacity0 : styles.opacity1,
    shouldFocusToTopOnMount ? styles.justifyContentEnd : undefined,
    ]}

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

    We can use visiblity style instead of opacity

                        contentContainerStyle={[
                            styles.chatContentScrollView,
                            shouldScrollToEndAfterLayout ? styles.visibilityHidden : styles.visibilityVisible,
                            shouldFocusToTopOnMount ? styles.justifyContentEnd : undefined,
                        ]}

    What alternative solutions did you explore? (Optional)

    Or we can use display: block instead of flex when shouldScrollToEndAfterLayout is false

  5. added
    ExternalAdded to denote the issue can be worked on by a contributor
    on Nov 14, 2025
  6. melvin-bot commented on Nov 14, 2025

    @melvin-bot
  7. changed the title [-]Inbox - On larger screens, some clickable elements appear in blank spaces[/-] [+][$250] Inbox - On larger screens, some clickable elements appear in blank spaces[/+] on Nov 14, 2025
  8. added
    Help WantedApply this label when an issue is open to proposals by contributors
    on Nov 14, 2025
  9. melvin-bot commented on Nov 14, 2025

    @melvin-bot

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

  10. jjcoffee commented on Nov 14, 2025

    @jjcoffee
    Contributor

    Thanks for the proposals! Can either of you explain what the InvertedFlatlist is meant to be displaying? On the OP video it looks like it opens a date field.

  11. 20 remaining items

  12. changed the title [-][$250] Inbox - On larger screens, some clickable elements appear in blank spaces[/-] [+][Due for payment 2025-12-03] [$250] Inbox - On larger screens, some clickable elements appear in blank spaces[/+] on Nov 26, 2025
  13. melvin-bot commented on Nov 26, 2025

    @melvin-bot

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

  14. melvin-bot commented on Nov 26, 2025

    @melvin-bot

    The solution for this issue has been 🚀 deployed to production 🚀 in version 9.2.63-8 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-03. 🎊

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

    • @jjcoffee requires payment through NewDot Manual Requests
    • @mukhrr requires payment (Needs manual offer from BZ)
  15. melvin-bot commented on Nov 26, 2025

    @melvin-bot

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

  16. bfitzexpensify commented on Dec 3, 2025

    @bfitzexpensify
    Contributor

    $250 paid to @mukhrr ✅

    @jjcoffee, please complete the BZ checklist

  17. mukhrr commented on Dec 3, 2025

    @mukhrr
    Contributor

    @bfitzexpensify thanks! Accepted

  18. melvin-bot commented on Dec 3, 2025

    @melvin-bot

    Payment Summary

    Upwork Job

    • Reviewer: @jjcoffee owed $250 via NewDot
    • ROLE: @mukhrr paid $(AMOUNT) via Upwork (LINK)

    BugZero Checklist (@bfitzexpensify)

    • (if NewFeature) I have created a PR for any necessary HelpDot updates, or I confirmed no updates are necessary.
    • I have verified the correct assignees and roles are listed above and updated the necessary manual offers
    • I have verified that there are no duplicate or incorrect contracts on Upwork for this job (https://www.upwork.com/ab/applicants/1989314796236370370/hired)
    • I have verified the PR was not reverted
    • I have applied any discounts due to bugs/regressions introduced by this PR
    • I have paid out the Upwork contracts or cancelled the ones that are incorrect
    • I have verified the payment summary above is correct
  19. jjcoffee commented on Dec 4, 2025

    @jjcoffee
    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/71084/files#r2588079656

    • [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: N/A

    • [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:

    1. Go to a 1:1 chat
    2. Create two expenses
    3. Click on the "View" button to open the expenses.
    4. Click on any expense
    5. Send a message to the chat
    6. Attempt to click on the blank area below the message
    7. Verify you cannot click anything in the blank space

    Do we agree 👍 or 👎

  20. trjExpensify commented on Dec 5, 2025

    @trjExpensify
    Contributor

    approved $250 for @jjcoffee.

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

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions