Design of the pull request page and checks page #34

Closed
opened 2026-09-04 16:28:51 +00:00 by crueber · 4 comments
Owner

image

  • "No pull requests" should be a better call out and centered in that section. It needs to make better use of the white space. This same approach should be taken on the checks and releases pages, so that it makes better use of the white space and centering.
  • The open pull request box on the right is just ugly. Create a new page for opening pull requests that is more dynamic when opening a pull request from a branch.
![image](/attachments/15459861-ee65-4c8d-b64d-93c449926736) * "No pull requests" should be a better call out and centered in that section. It needs to make better use of the white space. This same approach should be taken on the checks and releases pages, so that it makes better use of the white space and centering. * The open pull request box on the right is just ugly. Create a new page for opening pull requests that is more dynamic when opening a pull request from a branch.
Author
Owner

Starting fix for #34 (empty-state callouts + dynamic open-PR page) on branch fix/issue-34, working in a scratch worktree so the dirty main worktree is untouched.

Starting fix for #34 (empty-state callouts + dynamic open-PR page) on branch fix/issue-34, working in a scratch worktree so the dirty main worktree is untouched.
Author
Owner

Fixed by PR #46 (#46): shared empty-state callouts on pulls/checks/releases (+issues, same pattern) and the sidebar open-PR box replaced by the dynamic /pulls/new flow (live ahead/behind + commit preview, branch prefill, swap). Ready for review — not merged.

Fixed by PR #46 (https://git.packden.us/crueber/walhub/pulls/46): shared empty-state callouts on pulls/checks/releases (+issues, same pattern) and the sidebar open-PR box replaced by the dynamic /pulls/new flow (live ahead/behind + commit preview, branch prefill, swap). Ready for review — not merged.
Author
Owner

PR #46 review (branch fix/issue-34, commit 3f0b692) — inspected via git diff origin/main...origin/fix/issue-34, verified in scratch worktree /tmp/pr46 (removed afterward). Main worktree untouched, nothing committed.

Empty component (web/src/components/Empty.jsx:42-55 + ui.css): centered max-w-xl callout, icon/title/hint/action, role=status with aria-label, action is a router link (keyboard-focusable, global :focus-visible ring). Consistent across Pulls/Checks/Releases/Issues; Checks correctly has no action (no new-check route), other three link to existing new routes (index.jsx:66,69,76). Dark+light variants present.

Sidebar removal (Pulls.jsx): dead open-PR code fully gone (no getTitle/open/reportError leftovers); New-PR button carries ?base/?head via newHref() (Pulls.jsx:44-52). Empty hint echoes active filters.

Dynamic composer (PullNew.jsx + lib/compare.js): 300ms debounce, one AbortController per run with onCleanup abort, monotonic run-id stale drop — logic sound, incl. early-return paths (previous ctl still aborted via cleanup). Intersection: head walk to baseSet + base walk to headSet; truncation flags only when meeting point missed AND page.more — exhausted windows stay exact. toShortRef strips only refs/heads/, tags/SHAs pass through. Title/body prefill gated on touched flags; swap is a plain signal swap (prefill guards preserved). No new backend: uses existing commits({ref,n},{signal}) (sdk repo.js:142, supports opts) + pulls.open. No dep changes (package.json/lock untouched). A11y: labelled pickers, fieldset/legend, aria-live=polite preview, role=alert errors, swap aria-label. Doc decision (12_web_ui.md) matches the code on all points (debounce, n=100, abort/stale-drop, lower-bound +, prefill-until-edit, no server endpoint).

Tests: node --test web/test/unit/*.test.js → 201/201 pass (incl. 11 compare tests); vite build → 102 modules, success.

No fixes needed, none pushed. MERGE RECOMMENDATION: ready to merge.

PR #46 review (branch fix/issue-34, commit 3f0b692) — inspected via git diff origin/main...origin/fix/issue-34, verified in scratch worktree /tmp/pr46 (removed afterward). Main worktree untouched, nothing committed. Empty component (web/src/components/Empty.jsx:42-55 + ui.css): centered max-w-xl callout, icon/title/hint/action, role=status with aria-label, action is a router link (keyboard-focusable, global :focus-visible ring). Consistent across Pulls/Checks/Releases/Issues; Checks correctly has no action (no new-check route), other three link to existing new routes (index.jsx:66,69,76). Dark+light variants present. Sidebar removal (Pulls.jsx): dead open-PR code fully gone (no getTitle/open/reportError leftovers); New-PR button carries ?base/?head via newHref() (Pulls.jsx:44-52). Empty hint echoes active filters. Dynamic composer (PullNew.jsx + lib/compare.js): 300ms debounce, one AbortController per run with onCleanup abort, monotonic run-id stale drop — logic sound, incl. early-return paths (previous ctl still aborted via cleanup). Intersection: head walk to baseSet + base walk to headSet; truncation flags only when meeting point missed AND page.more — exhausted windows stay exact. toShortRef strips only refs/heads/, tags/SHAs pass through. Title/body prefill gated on touched flags; swap is a plain signal swap (prefill guards preserved). No new backend: uses existing commits({ref,n},{signal}) (sdk repo.js:142, supports opts) + pulls.open. No dep changes (package.json/lock untouched). A11y: labelled pickers, fieldset/legend, aria-live=polite preview, role=alert errors, swap aria-label. Doc decision (12_web_ui.md) matches the code on all points (debounce, n=100, abort/stale-drop, lower-bound +, prefill-until-edit, no server endpoint). Tests: node --test web/test/unit/*.test.js → 201/201 pass (incl. 11 compare tests); vite build → 102 modules, success. No fixes needed, none pushed. MERGE RECOMMENDATION: ready to merge.
Author
Owner

Fixed by PR #46 (review clean; 201/201 node tests), merged. Closing.

Fixed by PR #46 (review clean; 201/201 node tests), merged. Closing.
crueber added this to the v1 milestone 2026-09-10 22:20:50 +00:00
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#34
No description provided.