Issues list: reorder filter bar to State, Assignee, Labels, Milestone, Refresh #415

Closed
opened 2026-09-12 20:59:50 +00:00 by crueber · 3 comments
Owner

Reorder the issues-list filter bar: State, Assignee, Labels, Milestone, Refresh

What's requested

The issues-list filter bar should present its fields in this order:

  1. State
  2. Assignee
  3. Labels
  4. Milestone
  5. Refresh (button)

Evidence

web/src/pages/Issues.jsx, filter <form> (grid, aria-label "issue filters") currently renders in the order State → Labels → Assignee → Milestone → Refresh (the four <label> blocks at roughly lines 101–139, followed by the Refresh cell at line 140). State and Milestone bracket the two text inputs; Labels sits between State and Assignee. This is a layout-only reorder — no params, handlers, or endpoints change.

Architecture notes

  • The grid is grid-cols-2 … sm:grid-cols-4 lg:grid-cols-[…] with the Refresh cell spanning (col-span-2 … lg:col-span-1). Reordering the four labels inside the grid does not disturb the column template; verify the wide-screen column assignment still lines up per-field after the swap.
  • Comment on the form (line ~92) references #232's layout contract — update it if it names the field order.

Acceptance criteria

  • Filter bar field order is State, Assignee, Labels, Milestone, Refresh.
  • Filter behavior unchanged: same query params (state, assignee, labels, milestone), same endpoints, same setFilter reset behavior.
  • Grid layout intact at phone (2-col), mid (4-col), and wide (5-col with auto action) breakpoints; no field wraps into a broken row.
  • No test regressions in web/test/unit/ touching the issues list.
# Reorder the issues-list filter bar: State, Assignee, Labels, Milestone, Refresh ## What's requested The issues-list filter bar should present its fields in this order: 1. State 2. Assignee 3. Labels 4. Milestone 5. Refresh (button) ## Evidence `web/src/pages/Issues.jsx`, filter `<form>` (grid, aria-label "issue filters") currently renders in the order **State → Labels → Assignee → Milestone → Refresh** (the four `<label>` blocks at roughly lines 101–139, followed by the Refresh cell at line 140). State and Milestone bracket the two text inputs; Labels sits between State and Assignee. This is a layout-only reorder — no params, handlers, or endpoints change. ## Architecture notes - The grid is `grid-cols-2 … sm:grid-cols-4 lg:grid-cols-[…]` with the Refresh cell spanning (`col-span-2 … lg:col-span-1`). Reordering the four labels inside the grid does not disturb the column template; verify the wide-screen column assignment still lines up per-field after the swap. - Comment on the form (line ~92) references #232's layout contract — update it if it names the field order. ## Acceptance criteria - [ ] Filter bar field order is State, Assignee, Labels, Milestone, Refresh. - [ ] Filter behavior unchanged: same query params (`state`, `assignee`, `labels`, `milestone`), same endpoints, same `setFilter` reset behavior. - [ ] Grid layout intact at phone (2-col), mid (4-col), and wide (5-col with auto action) breakpoints; no field wraps into a broken row. - [ ] No test regressions in `web/test/unit/` touching the issues list.
crueber added this to the v1 milestone 2026-09-12 21:00:04 +00:00
Author
Owner

Fixed by PR #417 (#417): filter bar reordered to State, Assignee, Labels, Milestone, Refresh — layout-only, no params/handlers/endpoints change. New issues-filter-order.test.js green (3/3); issues-related suites 31/31 green; full web suite 826/828 with the 2 smoke.test.js failures pre-existing on clean origin/main (need a served dist); vite build clean. No new deps.

Fixed by PR #417 (https://git.packden.us/crueber/walhub/pulls/417): filter bar reordered to State, Assignee, Labels, Milestone, Refresh — layout-only, no params/handlers/endpoints change. New issues-filter-order.test.js green (3/3); issues-related suites 31/31 green; full web suite 826/828 with the 2 smoke.test.js failures pre-existing on clean origin/main (need a served dist); vite build clean. No new deps.
Author
Owner

Review of PR #417 (fix/issue-415) — verified in scratch worktree at origin/fix/issue-415 (d13c564). No browser used (node tests + reasoning only, per layout-only scope).

Acceptance criteria:

  1. Order State/Assignee/Labels/Milestone/Refresh — PASS. web/src/pages/Issues.jsx: the Assignee block now precedes the Labels block (swap at ~lines 113-130); Refresh cell untouched at ~140. New web/test/unit/issues-filter-order.test.js asserts sequential order and passes on the branch; confirmed it FAILS against main's file (discriminates, not tautological).
  2. Behavior unchanged — PASS. Diff is move-only: same placeholders, same value bindings, same setFilter('labels'/'assignee'/…) keys, same ctx.repoClient.issues.list(query()) endpoint, same query params. Grid column template string and Refresh cell classes byte-identical.
  3. Grid intact at breakpoints — PASS by inspection + template assertion in test (2-col / sm:4-col / lg:4+auto strings present and unmoved). No browser run (allowed for this layout-only change); wide-screen column assignment still lines up since every field is an identical min-w-0 flex column.
  4. No regressions — PASS with one pre-existing exception: full unit suite 826/828 on the branch; the 2 failures (smoke.test.js 'built SPA shell' + 'hashed assets', 401 !== 200 on /) fail identically on clean main with a built dist/ — pre-existing, unrelated to this PR. vite build + esbuild SDK bundle both succeed (chunk-size warning is pre-existing).

Other checks (AGENTS.md laws 1/8/12): no new deps (4 files only, no package.json); #232 comment (Issues.jsx:92-95) names no field order so correctly left alone; doc parentheticals in docs/features/02_issues.md:306 and 08_ui_sdk.md:33 updated to state/assignee/labels/milestone with #415 tag — accurate (note 02_issues still lists '/since' after milestone, matching the Since filter outside this reorder — fine).

#416 conflict note: #416 converts the Labels + Milestone internals to dropdowns. This PR moves the Labels block down ~10 lines without changing its contents, so a #416 branch based on main will conflict on the Labels hunk. No functional complication — merge #417 first, then rebase #416 onto it.

No fixes pushed (nothing to fix). Recommendation: ready to merge.

Review of PR #417 (fix/issue-415) — verified in scratch worktree at origin/fix/issue-415 (d13c564). No browser used (node tests + reasoning only, per layout-only scope). Acceptance criteria: 1. Order State/Assignee/Labels/Milestone/Refresh — PASS. web/src/pages/Issues.jsx: the Assignee <label> block now precedes the Labels block (swap at ~lines 113-130); Refresh cell untouched at ~140. New web/test/unit/issues-filter-order.test.js asserts sequential order and passes on the branch; confirmed it FAILS against main's file (discriminates, not tautological). 2. Behavior unchanged — PASS. Diff is move-only: same placeholders, same value bindings, same setFilter('labels'/'assignee'/…) keys, same ctx.repoClient.issues.list(query()) endpoint, same query params. Grid column template string and Refresh cell classes byte-identical. 3. Grid intact at breakpoints — PASS by inspection + template assertion in test (2-col / sm:4-col / lg:4+auto strings present and unmoved). No browser run (allowed for this layout-only change); wide-screen column assignment still lines up since every field is an identical min-w-0 flex column. 4. No regressions — PASS with one pre-existing exception: full unit suite 826/828 on the branch; the 2 failures (smoke.test.js 'built SPA shell' + 'hashed assets', 401 !== 200 on /) fail identically on clean main with a built dist/ — pre-existing, unrelated to this PR. vite build + esbuild SDK bundle both succeed (chunk-size warning is pre-existing). Other checks (AGENTS.md laws 1/8/12): no new deps (4 files only, no package.json); #232 comment (Issues.jsx:92-95) names no field order so correctly left alone; doc parentheticals in docs/features/02_issues.md:306 and 08_ui_sdk.md:33 updated to state/assignee/labels/milestone with #415 tag — accurate (note 02_issues still lists '/since' after milestone, matching the Since filter outside this reorder — fine). #416 conflict note: #416 converts the Labels + Milestone internals to dropdowns. This PR moves the Labels block down ~10 lines without changing its contents, so a #416 branch based on main will conflict on the Labels hunk. No functional complication — merge #417 first, then rebase #416 onto it. No fixes pushed (nothing to fix). Recommendation: ready to merge.
Author
Owner

Fixed by PR #417 (review clean — move-only diff, order test discriminates, #416 rebase noted), merged. Closing.

Fixed by PR #417 (review clean — move-only diff, order test discriminates, #416 rebase noted), merged. Closing.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
crueber/walhub#415
No description provided.