Skip to content

[$175] [CFI][FE 5/7] Payment history: Activity list with the active user count #101832

Open

Description

@melvin-bot

Sub-task of [CFI] Add a "View payment history" page with historical billing receipts and monthly user activity.

Goal

The details page has an Activity section listing the members who were billed that month, with the total count shown under the Activity header.

Scope

  • Available for every row, including Failed months. This is a deliberate improvement over Classic, where Failed rows show only "View activity" and Cleared rows show only "View receipt".
  • The total count goes under the Activity header — never next to the billed amount. See the note in FE 2/7 for why.
  • The billed members come from the per-policy actor list on the purchase message (message.billablePolicies[*].actorList, already declared as a comma-separated email string in src/types/onyx/PurchaseList.ts). Dedupe across policies — the same person can be billed under more than one workspace.
  • Make the list searchable. These lists run to hundreds of emails on large accounts, and the mock included a search field.
  • Copy in every src/languages/*.ts locale. Use the "active users" wording here; the Collect-plan "members" variant is FE 7/7.

Acceptance criteria

  • Activity is reachable from every row, Failed and Cleared included.
  • The total count matches the number of deduped, billed members for that month.
  • Searching filters the list.
  • A month with no billed members renders an empty state rather than a blank section.
  • Renders correctly wide and narrow.

Depends on

FE 4/7, and a backend decision that needs confirming before this is built: whether the actor list ships with the table payload or is fetched when the details page opens. The actor list is the bulk of the payload and it is large for long-lived, high-headcount accounts, so the split is being decided in the backend issue. Check the agreed contract first.

Easy to get wrong

  • Counting the raw comma-separated string length per policy and summing it, which double-counts anyone billed under multiple workspaces.
  • Rendering hundreds of rows without a virtualised list.
Upwork Automation - Do Not Edit

Activity

  1. self-assigned this
    on Sep 25, 2026
  2. dukenv0307 commented on Oct 1, 2026

    @dukenv0307
    Contributor

    Not overdue

  3. 2 remaining items

  4. dukenv0307 commented on Oct 8, 2026

    @dukenv0307
    Contributor

    Not overdue

  5. dukenv0307 commented on Oct 12, 2026

    @dukenv0307
    Contributor

    Not overdue

  6. dukenv0307 commented on Oct 19, 2026

    @dukenv0307
    Contributor

    @MelvinBot Implement. Here's the parent issue: #101649 and make sure the activity list components are similar to

    Image
  7. MelvinBot commented on Oct 19, 2026

    @MelvinBot
    Contributor

    🤖 Draft PR created: [CFI] Payment history: Activity list with the active user count
    Please mark it as "Ready for review" or ask me to do that for you when it is ready for review.

    The Payment details page now has an Activity section that matches your mock: an Activity label, a "Find an active user" search field, and a rounded card. The card header shows the count (for example, "2 active users"), and each row shows the user's avatar, name, and email.

    • Every month has it, including Failed and Cleared. A month with no billed members shows "No active users this month." instead of a blank section.
    • Deduped. A person billed under two workspaces is counted and listed once.
    • Virtualized and searchable. The page now scrolls as one SelectionList, so long lists only render visible rows. Search filters by name or email.
    • Copy is added in every locale. The Collect-plan "members" variant is left for FE 7/7.
    Things to check
    • Data contract: the list reads purchase.activeUsers, the account IDs that OpenPaymentDetailsPage returns, as declared in PurchaseList.ts by FE 4/7. If the backend sends raw actorList emails instead, only the helper and the item mapping need to change.
    • Testing: typecheck, lint, format, spell check, React Compiler, and the unit tests plus a new UI test (35/35) all passed. I couldn't get browser screenshots: the shared web test session rendered a blank page, and test data couldn't be injected. Please verify the layout on web and native.
    • Fork: I couldn't push to your fork, so the branch is on upstream. Instructions to move it are in the PR comments.

    view run · no recording available

  8. changed the title [-][CFI][FE 5/7] Payment history: Activity list with the active user count[/-] [+][$175] [CFI][FE 5/7] Payment history: Activity list with the active user count[/+] on Oct 21, 2026
  9. melvin-bot commented on Oct 21, 2026

    @melvin-bot
    Author
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

Type

No type

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions