Skip to content

feat: Virtualized lists for large campaign/participant/leaderboard sets #629

@joelpeace48-cell

Description

@joelpeace48-cell

Background & current state

Lists (campaigns, leaderboard CampaignLeaderboard.jsx, participants) render all rows. At thousands of rows this will jank and bloat the DOM. No virtualization is used.

Goal

Virtualize large lists (campaign list, leaderboard, participants) so large datasets scroll smoothly.

Technical design

Edge cases

  • Variable row heights → measured/estimated sizes.
  • Sticky headers + virtualization.
  • Accessibility (screen readers) with windowed rows.
  • Combined with filters/sort (NEW-110).

Task breakdown

  • Virtualize campaign list, leaderboard, participants.
  • Infinite scroll over cursor pagination.
  • A11y preserved.
  • Perf profile in test (10k rows @ 60fps).

Acceptance criteria

  • 10k rows scroll at ~60fps without DOM bloat.

Testing & verification

  • Perf profiling test; a11y check.

Out of scope

  • Server pagination (exists).

Dependencies / related

Difficulty: medium · Effort: M · performance

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions