Skip to content

[Due for payment 2025-10-15] [$250] Expense - Avatar is not displayed next to the selected attendee #69744

Closed

Description

@nlemma

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.1-0
Reproducible in staging?: Yes
Reproducible in production?: No
If this was caught during regression testing, add the test name, ID and link from TestRail: https://test-management.browserstack.com/projects/2219752/test-runs/TR-645/41236908/874218196?q=attendee&issue_type=jira
Email or phone of affected tester (no customers): dssoinjsoisdjoi@gmail.com
Issue reported by: Applause Internal Team
Device used: Mac 15.5 / Chrome
App Component: Money Requests

Action Performed:

Precondition:

  • Rules are enabled.
  • "Attendee tracking" is enabled in workspace settings > Rules.
  1. Go to staging.expensify.com
  2. Go to workspace chat.
  3. Click + > Create expense > Manual.
  4. Enter amount > Next.
  5. On confirm page, enter merchant and select category.
  6. Click Attendees field.
  7. Enter a random name and select the user.
  8. Click Save.
  9. Click Create expense.
  10. Open the transaction thread.
  11. Click Attendees field.

Expected Result:

Fallback avatar will be displayed next to the selected attendee.

Actual Result:

Avatar is not displayed next to the selected attendee.

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

Bug6933939_1756877089932.Screen_Recording_2025-09-03_at_13.20.04.mp4
Image

View all open jobs on GitHub

Upwork Automation - Do Not Edit
  • Upwork Job URL: https://www.upwork.com/jobs/~021968293448193698988
  • Upwork Job ID: 1968293448193698988
  • Last Price Increase: 2025-09-17
  • Automatic offers:
    • daledah | Contributor | 108879563
Issue OwnerCurrent Issue Owner: @eVoloshchak

Activity

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

    @melvin-bot

    Triggered auto assignment to @adelekennedy (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. daledah commented on Sep 3, 2025

    @daledah
    Contributor

    Proposal

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

    Avatar is not displayed next to the selected attendee.

    What is the root cause of that problem?

    For random name attendees, there's no reportID and accountID, so the avatar is not displayed here

    {(!!item.reportID || !!accountID) && (

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

    Since we already has fallback avatar for nonexistent accountID, we can expand the condition here:

    {(!!item.reportID || !!accountID) && (

    {(!!item.reportID || !!accountID || !!item.text || !!item.alternateText) && (

    What specific scenarios should we cover in automated tests to prevent reintroducing this issue in the future?

    None

    What alternative solutions did you explore? (Optional)

    NA

    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.

  4. ganzz4 commented on Sep 5, 2025

    @ganzz4
    Contributor

    Proposal

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

    Avatar is not displayed next to the selected attendee when a random name (non-existing user) is entered in the attendees field of a transaction.

    What is the root cause of that problem?

    For random name attendees, there's no reportID and accountID, so the avatar is not displayed due to the conditional rendering in InviteMemberListItem.tsx:

    {(!!item.reportID || !!accountID) && (
    <ReportActionAvatars
    subscriptAvatarBorderColor={hovered && !isFocused ? hoveredBackgroundColor : subscriptAvatarBorderColor}
    shouldShowTooltip={showTooltip}
    secondaryAvatarContainerStyle={[
    StyleUtils.getBackgroundAndBorderStyle(theme.sidebar),
    isFocused ? StyleUtils.getBackgroundAndBorderStyle(focusedBackgroundColor) : undefined,
    hovered && !isFocused ? StyleUtils.getBackgroundAndBorderStyle(hoveredBackgroundColor) : undefined,
    ]}
    fallbackDisplayName={item.text ?? item.alternateText ?? undefined}
    singleAvatarContainerStyle={[styles.actionAvatar, styles.mr3]}
    reportID={item.reportID}
    accountIDs={accountID ? [accountID] : undefined}
    />
    )}

    When users enter a random name that doesn't correspond to an existing user, both item.reportID and accountID are undefined, causing the entire ReportActionAvatars component to not render.

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

    Remove the conditional rendering and always show the ReportActionAvatars component:

    <ReportActionAvatars

    {(!!item.reportID || !!accountID) && (
    <ReportActionAvatars

    This approach leverages the existing fallback mechanism in ReportActionAvatars which already has comprehensive logic for handling cases where no accountID or reportID is provided. The component will automatically display a fallback avatar using the fallbackDisplayName prop.

    Important Context: This conditional rendering was initially added in PR #67913 to fix deploy blockers. However, PR #68015 later introduced improved fallback avatar mechanisms, making this condition unnecessary. I have tested all potential regressions mentioned in the original PR #67913 and confirmed that removing this condition does not break any existing functionality. The fallback system now handles all edge cases properly.

    Note: We could also review other components for similar conditional rendering issues to ensure consistent avatar display behavior.

    What specific scenarios should we cover in automated tests to prevent reintroducing this issue in the future?

    1. Random name attendee test: Verify that when a random name (non-existing user) is added as an attendee, a fallback avatar is displayed in the attendee list.

    2. Existing user attendee test: Verify that existing users continue to show their profile avatars correctly.

    What alternative solutions did you explore? (Optional)

    Result:

    fix.mp4
  5. melvin-bot commented on Sep 8, 2025

    @melvin-bot

    @adelekennedy Eep! 4 days overdue now. Issues have feelings too...

  6. removed their assignment
    on Sep 12, 2025
  7. added
    BugSomething is broken. Auto assigns a BugZero manager.
    and removed
    BugSomething is broken. Auto assigns a BugZero manager.
    on Sep 12, 2025
  8. melvin-bot commented on Sep 12, 2025

    @melvin-bot

    Triggered auto assignment to @heyjennahay (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.

  9. 32 remaining items

  10. melvin-bot commented on Oct 8, 2025

    @melvin-bot

    The solution for this issue has been 🚀 deployed to production 🚀 in version 9.2.26-7 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-10-15. 🎊

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

  11. melvin-bot commented on Oct 8, 2025

    @melvin-bot

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

  12. heyjennahay commented on Oct 15, 2025

    @heyjennahay
    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:

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

    Regression Test Proposal Template
    • [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

    Precondition:

    Test:

    Do we agree 👍 or 👎

  13. heyjennahay commented on Oct 30, 2025

    @heyjennahay
    Contributor

    Assigning to @eVoloshchak to complete the checklist please

  14. eVoloshchak commented on Nov 3, 2025

    @eVoloshchak
    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: this wasn't implemented initially

    • [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: regression wasn't critical

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

    Regression Test Proposal Template

    Regression Test Proposal

    Precondition:

    • Rules are enabled
    • Attendee tracking is enabled.

    Test:

    1. Start create expense flow until confirmation screen
    2. Select attendees field
    3. Enter an nonexistent account and click save
    4. Create the expense
    5. Open expense report
    6. Select attendees field
    7. Verify that: fallback avatar is displayed for nonexistent account.

    Do we agree 👍 or 👎

  15. heyjennahay commented on Nov 4, 2025

    @heyjennahay
    Contributor

    Confirming payment summary:

  16. melvin-bot commented on Nov 28, 2025

    @melvin-bot

    This issue has not been updated in over 15 days. @eVoloshchak, @heyjennahay, @blimpich, @daledah eroding to Monthly issue.

    P.S. Is everyone reading this sure this is really a near-term priority? Be brave: if you disagree, go ahead and close it out. If someone disagrees, they'll reopen it, and if they don't: one less thing to do!

  17. garrettmknight commented on Dec 1, 2025

    @garrettmknight
    Contributor

    $250 approved for @eVoloshchak

  18. heyjennahay commented on Jan 5, 2026

    @heyjennahay
    Contributor

    Closing this out. Thanks everyone!

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.ExternalAdded to denote the issue can be worked on by a contributorMonthlyKSv2

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions