specs/004-dashboard-filtering/data-model.md
Ref: Size: 1.7 KiB
# Data Model: Dashboard Filtering ## New Types ### StatusFilter (enum) Replaces `show_all: bool` on `App`. | Variant | Meaning | |----------|------------------------------------| | `Open` | Show only open items (default) | | `Closed` | Show only closed items | | `All` | Show all items regardless of status| **Cycling order**: Open → All → Closed → Open (via `a` key). ## Modified Types ### App (struct) | Field | Old Type | New Type | Notes | |-----------------|----------------|-----------------|------------------------------------------| | `show_all` | `bool` | *removed* | Replaced by `status_filter` | | `status_filter` | — | `StatusFilter` | New field, defaults to `StatusFilter::Open` | | `search_query` | — | `String` | New field, current search text | | `search_active` | — | `bool` | New field, whether search mode is active | ## Unchanged Types (read-only usage) - `IssueStatus` — used to match against `StatusFilter` - `PatchStatus` — used to match against `StatusFilter` (maps Open→Open, Closed/Merged→Closed) - `IssueState.title` — matched against `search_query` - `PatchState.title` — matched against `search_query` ## State Transitions ``` Normal Mode: '/' pressed → search_active = true, search_query = "" 'a' pressed → status_filter cycles to next variant Search Mode: Escape pressed → search_active = false, search_query = "" Backspace pressed → search_query.pop() Printable char pressed → search_query.push(char) (all other keys ignored while in search mode) ```