MotirBuilding in public
MOTIR · moooon
onMotir
You’re viewing a public project. Anyone can view it — no account needed. Sign in to submit, upvote, or comment on requests.View-only — you can’t edit work items
MOTIR-115

2.5.4 Filter bar — kind · status · assignee · text (URL-driven)

Done
Description

Estimate: 14m · Depends on: 2.5.3, 2.5.9

Wire the [Filter] affordance into a working filter bar over the tree: a Popover (or inline bar) exposing kind (issue-type multi-select), status (the project's workflow statuses), assignee (workspace members + "Unassigned"), and a text quick-filter (identifier + title). Each filter feeds getProjectTree's context-preserving filter (2.5.1) so matches keep their ancestor chain.

Durable shape: state lives in the URL. Filters serialize to query params (e.g. ?kind=bug&status=in_progress&assignee=…&q=…) so a filtered view is shareable / bookmarkable / reload-safe, and the Server Component reads them directly — this is the exact serialization Epic 6's saved filters will persist, so v1's filter URL is the forward-compatible substrate, not a throwaway. A "clear filters" affordance resets to the full tree; an active-filter count shows on the Filter button. Reuse the shared pickers (Combobox / StatusPicker options source / member combobox) — no new picker components.

Acceptance criteria

  • Filter by kind / status / assignee / text narrows the tree; a matching descendant keeps its ancestors visible; "Unassigned" is selectable; clear resets.
  • Filter state is reflected in the URL query and is reload-/share-safe; the Server Component reads it and re-queries; the Filter button shows an active count.
  • Pickers are the shared primitives (no parallel components); options come from the project workflow + workspace members already in context.
  • Component test (happy-dom): toggling a filter updates the query + calls back; clear resets. (Tree re-query proven in 2.5.1; end-to-end in 2.5.6.)

Context refs

  • Design reference (REQUIRED): design/work-items/filter.mock.html + design-notes.md — produced by the type: design subtask 2.5.9 (in depends_on); match its popover layout, the four filter groups, the active-count badge, and the clear affordance.
  • 2.5.1 getProjectTree filter contract; 2.5.3 route (where the bar mounts)
  • components/ui/Combobox / Popover; StatusPicker option source; the workspace-member combobox used by AssigneePicker; ISSUE_TYPE_META
  • next/navigation useSearchParams / useRouter URL-state pattern; the workflow-settings filter UI for prior art
Status
Done
Type
Sub-task