Skip to content

Add sortable list view with filters to the dashboard#562

Open
bborn wants to merge 1 commit into
mainfrom
task/4066-add-sortable-list-view-with-filters-to-k
Open

Add sortable list view with filters to the dashboard#562
bborn wants to merge 1 commit into
mainfrom
task/4066-add-sortable-list-view-with-filters-to-k

Conversation

@bborn
Copy link
Copy Markdown
Owner

@bborn bborn commented Jun 7, 2026

What

Adds a flat, sortable, filterable list view as an alternative to the kanban board. Press v to toggle between Board and List at any time — the same task stays focused across the switch.

This answers the question in the task ("could the board just be a list, sorted by whatever you want?") with a real table: one row per task, sortable columns, and filter chips at the top.

List view

Columns: # · Status · Title · Project · PR · Updated · Created

  • Sort by any column with ←/→, reverse direction with space. The active column is highlighted with a ▲/▼ arrow. Pinned tasks always float to the top (same as the board).
  • Filter chips across the top:
    • Status[ / ] (All · Backlog · In Progress · Blocked · Done)
    • Project{ / } (All · each project)
    • Updated within< / > (Any time · Today · 7 days · 30 days)
    • The existing / fuzzy filter (text, #id, [project]) still applies on top.
  • Open a task: Enter, a mouse click, or number keys 19. Up/Down inside the detail view walk rows in list order.

Status colours, project colours, PR badges, running () and needs-input (!) indicators all carry over from the board, so the list stays scannable.

Implementation notes

  • New internal/ui/list_view.go (ListView) owns its own selection, sort, and filter state but renders the same task data the board does. app.go feeds both renderers and routes navigation/selection through small mode-aware helpers.
  • --debug-state-file now reports dashboard.view_mode plus the list's sort/filter state and visible rows, so the QA harness can assert against it.
  • Unit tests in internal/ui/list_view_test.go cover sorting (each column + reverse), status/project filtering, pinned-float, selection preservation across refreshes, nav wrap, and responsive rendering at multiple widths.

QA

Verified by driving the real TUI against an isolated, seeded instance (12 tasks across 2 projects and every status) using the scripts/qa harness, rendered with VHS. Screenshots in the QA comment below.

  • go build ./..., go vet ./internal/ui/, gofmt clean
  • go test ./... passes

Closes the "sortable list view with filters" task.

🤖 Generated with Claude Code

Adds a flat, sortable, filterable table view as an alternative to the
kanban board. Press `v` to toggle between Board and List.

List view:
- Columns: #, Status, Title, Project, PR, Updated, Created
- Sort by any column with ←/→; reverse with space. Pinned tasks always
  float to the top, mirroring the board.
- Filter chips at the top: Status ([/]), Project ({/}), and "updated
  within" date (</>). Text/project filtering via the existing `/` filter
  still applies.
- Enter / click / 1-9 open a task's detail view; up/down in detail
  navigate rows in list order.

Both views share the same task data and selection, so toggling keeps the
same task focused. Debug state (--debug-state-file) now reports the active
view_mode plus the list's sort/filter state for the QA harness.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@bborn
Copy link
Copy Markdown
Owner Author

bborn commented Jun 7, 2026

QA evidence — real TUI screenshots

Driven against an isolated, seeded instance (12 tasks across 2 projects qa/webapp, every status, 2 pinned) via scripts/qa, rendered with VHS at 200×50.

Board view (for comparison) — note the new v board/list hint in the footer

board

List view — default sort (Updated ↓)

One row per task, pinned tasks (📌 #6, #5) floated to the top, then newest-updated first. Filter chips + key legend across the top.
list default

Sort by Title (←/→ to pick a column, ▲/▼ shows direction)

Title ↑ is highlighted; rows are alphabetical (pinned still float).
list sorted by title

Filter: Status = Blocked ([ / ])

Narrows to the 2 blocked tasks; the count (2) and Status: Blocked chip update.
list filtered by blocked status

Filter: Project = webapp ({ / })

Narrows to the 6 webapp tasks; Project: webapp chip highlighted.
list filtered by project


Also exercised (not all shown): space to reverse sort, < > date filter, Enter / click / 1-9 to open a task, and toggling v back and forth keeps the same task selected. go test ./... passes.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant