Repository navigation
feat(desktop): show the empty state on an empty workspace's Issues board - #3659
Merged
Merged
Conversation
An empty workspace's board stood five empty columns; it now shows the same "No issues yet" empty state as the List, with New issue as its one way on, unavailable when the toolbar's is. EmptyState's action gains `disabled`, and CollectionPage hands an empty or failed state the whole room, where its notice's spacers left it a sixth and clipped the button under the line. Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
luke-agent Bot
added a commit
that referenced
this pull request
Oct 18, 2026
Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
luke-agent Bot
added a commit
that referenced
this pull request
Oct 18, 2026
Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Item "Empty board shows EmptyState" of the Improve Issues board plan. The developer settled the plan's open question: a workspace with no issues shows the app's empty state on the board too, instead of five empty columns.
Summary
issues-page.tsx:listStatenow givesCOLLECTION_STATE.EMPTYto an empty workspace in both layouts, not only the List.CollectionPagethen draws the sameEmptyState("No issues yet",ListTodoIcon) on the board. The board's reading blocks (IssueBoardSkeleton) are unchanged. A workspace with issues still stands all five columns, empty ones included.EmptyState'sactionslot. It is wired to the toolbar's ownonCompose, so it opens the same card (on Backlog). It is disabled whenever the toolbar's New issue is: no workspace listed, or the card already open. It matches the Inbox'sNeedsYouEmpty, a label alone with no glyph. Factory and Automations have no action in their empty states. "New issue" is now one constant used by both buttons.@luke/uiEmptyStateActiongains an optionaldisabled, passed to itsButton. Without it, the empty state's button would vanish and reappear behind the card each time the card opened.@luke/uiCollectionPage(CSS only): the notice wrapping an empty or failed state no longer adds its own 2:3 spacers around anEmptyState. TheEmptyStatealready does that split itself, so the two stacked. That left the state a sixth of the room (about 115px on an 800px window) and clipped anything past the icon and line: this New issue, and a centredErrorState's Retry. The rule is scoped to:has(> .luke-empty-state). With the spacers gone, a line-only state sits about 20px higher than before, at the 2:3 point of the whole room.Shared component change
Two
@luke/uicomponents owned by @charleslpan change.EmptyStateAction.disabled(optional): passed straight to the action'sButton. Every existing caller (NotFound, the Inbox'sNeedsYouEmpty,ErrorState's Retry) leaves it out, so their buttons are unchanged.CollectionPage's notice spacers:.luke-collection-page-noticestands its content at the room's 2:3 point with::before/::after.EmptyState, and a centredErrorState, which is drawn as one, already does the same split inside aflex: 1 1 0box. Inside the notice, the two splits stacked: the state got a sixth of the room and scrolled what didn't fit. Onmainthat already hides Factory's Retry when its tasks could not be read (shots below), and it would have hidden this New issue. The new rule drops the notice's spacers only where its direct child is.luke-empty-state. Its callers:AdminPage, the accounts table, a day): these pass plain text, not anEmptyState, so:has(> .luke-empty-state)does not match and nothing moves.CollectionPage, so nothing changes there.main)Screenshots
These come from a throwaway, uncommitted jsdom test that rendered the real
IssuesPagewith an empty workspace. Headless Chromium then painted them at 1280×800 in.desktop-shell > main.desktop-main, with the sidebar folded, using the desktop stylesheet built frommain(before) and from this branch (after). This is the same method as #3559 and #3642.After filing the first issue, the board stands its five columns again:
Evidence
pnpm check:affected: typecheck, lint and knip pass, and the desktop and ui suites pass.discarded-effectran out of memory inside turbo's parallel group in this sandbox. Run alone, it passes ("No discarded Effect, Stream, or Layer in 2342 files"). The first run's one desktop failure wasapp-menu.test.ts, because the sandbox lacked Electron's binary. It passes once the binary is installed.issues-page.test.ts: the test "a workspace with no issue yet still stands the board's columns, each saying it holds none" is replaced by "a workspace with no issue yet says so on the board and in the list, its New issue opening the card, and the first issue filed stands the board's columns". The new test fails onmain("the empty state offers New issue"). The column-+ test now stands one issue first, since an empty workspace no longer draws column heads.empty-state.test.ts: new test "a way on unavailable for now still stands, and a press does nothing". It fails without thedisabledfield.Invariants
./scripts/check.shgreen. (CI)astype assertion outside the allowlisted files.Effect.runPromise/runSync/runForkoutside the runtime edges.setTimeout/setInterval/new Promise/AbortController/fs.watch.CLAUDE.md/AGENTS.mdsentence names a changed part.PRIVACY.mdunchanged.Notes
run.sh --previewrun is needed.Made with Luke