Add multiselect board filters and letter-jump on picker menus.

Persist comma-separated list filters per project, toggle with space, and jump by first letter in board and project pickers.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Skruecken
2026-10-19 10:42:59 +02:00
co-authored by Cursor
parent aa8f89b43a
commit 41feba11de
9 changed files with 305 additions and 39 deletions
+35
View File
@@ -41,3 +41,38 @@ func TestBoardListDefaultStatus(t *testing.T) {
t.Fatal("all default")
}
}
func TestBoardFilterMultiSelect(t *testing.T) {
f := ticket.ParseBoardLists("backlog,done")
if !f.Matches(ticket.StatusTodo) || !f.Matches(ticket.StatusDone) {
t.Fatalf("expected backlog+done match, got %v", f)
}
if f.Matches(ticket.StatusInProgress) {
t.Fatal("should not match in progress")
}
if got := ticket.FormatBoardLists(f); got != "backlog,done" {
t.Fatalf("format = %q", got)
}
}
func TestBoardFilterAllDominatesNormalize(t *testing.T) {
f := ticket.NormalizeFilter(ticket.BoardFilter{ticket.BoardAll, ticket.BoardBacklog})
if len(f) != 1 || f[0] != ticket.BoardBacklog {
t.Fatalf("got %v", f)
}
}
func TestBoardListShortcut(t *testing.T) {
if ticket.BoardAll.Shortcut() != 'a' {
t.Fatal("all")
}
if ticket.BoardBacklog.Shortcut() != 'b' {
t.Fatal("backlog")
}
if ticket.BoardInProgress.Shortcut() != 'i' {
t.Fatal("in progress")
}
if ticket.BoardDone.Shortcut() != 'd' {
t.Fatal("done")
}
}