Skip to content

sortable, filterable milestones board table with URL-synced state #1098

Description

@mikewheeleer

Summary

The milestones board list has no sorting, filtering, or shareable state. Build a data table with column sorting, filtering, pagination, and full URL-state sync so views are shareable and restorable.

Why this matters

A real data view needs sort/filter/paging that survive reload and can be shared. URL-syncing makes state a first-class, testable citizen.

Requirements

  • Column sorting (asc/desc/none), text/enum filtering, and pagination on the milestones board table.
  • Reflect sort/filter/page in the URL query and restore from it on load.
  • Debounce filter input and keep interactions keyboard-accessible.
  • Empty/filtered-empty states are distinct and clear.

Technical guidance

  • Treat the URL as the source of truth for view state.
  • Memoize derived rows so unrelated state changes don't re-render them.

Edge cases — each must have a test

  • sort a column -> rows reorder and URL updates
  • filter -> rows narrow and URL updates
  • reload with query params -> state restored
  • filtered to empty -> distinct empty state
  • sort is stable for equal keys

Acceptance criteria

  • All requirements and every edge case above implemented and covered by tests
  • New unit and integration tests; existing tests still pass and no regressions
  • Structured, typed errors (no leaked internals; stable codes)
  • npm run lint, npm test, and npm run build all pass locally
  • Code follows the repo's existing conventions; no duplication or dead code
  • Short docs/comments explaining the design and any non-obvious decisions
  • PR description explains the approach and includes Closes #<issue>

Out of scope

  • Server-side sorting/filtering
  • Column reordering/resizing

Rewards

Part of the GrantFox OSS / Official Campaign (FWC26) — this task may be rewarded. PR quality is assessed by AI: depth, correctness under edge cases, meaningful tests, and clean design are what earn the reward. Shallow changes (typos, formatting, trivial docs) do not qualify.

Activity

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions