feat: redesign Todos tab — grouping, collapsible headers, cleaned columns
Implements the approved mockup from the UX debate report:
- new DisplayRow::TodoHeader variant: collapsible group headers, toggled
by Enter/Space, tracked in HubState.todo_group_collapsed
- [g] cycles grouping: status (default) -> project -> repo -> none
- [s] cycles which statuses are included before grouping: active
(open+in-progress, default) -> open -> done -> all
- table: dropped SRC/EST (near-always empty), code-scan todos show a dim
'no status icon' marker instead of a separate source column, project
name colored by the project's own color (was DarkGray, wasting the most
useful visual identifier in the tool), age now tracks updated_at not
created_at ('what's moving' beats 'what's old')
- right panel: added Repo/Difficulty/Estimate, previously only visible in
the table despite the panel having more room for them
- block title shows live counts + current view/group/code-scan state
Simplified vs. the literal ASCII mockup: [s] filters the underlying set
before grouping, so e.g. the default 'active' view omits Done/Cancelled
groups entirely rather than always showing them collapsed - a simpler,
more internally consistent model. Flagged for foksiu to request the exact
mockup behavior if he wants it.
Verified via pyte: group/status-view cycling, collapse/expand (arrow flips
and child rows appear/disappear), right panel on header vs. todo row.
This commit is contained in:
1 parent
3eb922559c
commit
6adc22d665
10 files changed
+288
-61
No files matched your search
@@ -618,10 +618,13 @@ pub fn open_action_menu(state: &mut HubState) {
|
||||
match state.tab {
|
||||
Tab::Todos => {
|
||||
entries.push(entry("Cycle todo status", "Space", kc(KeyCode::Char(' '))));
|
||||
entries.push(entry("Expand/collapse group","↵", kc(KeyCode::Enter)));
|
||||
entries.push(entry("Edit todo", "e", k('e')));
|
||||
entries.push(entry("Delete todo", "Del", kc(KeyCode::Delete)));
|
||||
entries.push(entry("New todo", "+", k('+')));
|
||||
entries.push(entry("Toggle code todos", "X", k('X')));
|
||||
entries.push(entry("Cycle status view", "s", k('s')));
|
||||
entries.push(entry("Cycle grouping", "g", k('g')));
|
||||
entries.push(entry("Toggle code todos", "c", k('c')));
|
||||
entries.push(entry("Scan repos for TODOs","T", k('T')));
|
||||
}
|
||||
Tab::PRs => {
|
||||
|
||||
Reference in new issue
Block a user