Skip to content

fix(view): locked repos always visible, de-emphasized when empty#74

Merged
wgordon17 merged 11 commits into
gordon-code:mainfrom
wgordon17:worktree-fix+always-visible-locked-repos
Apr 20, 2026
Merged

fix(view): locked repos always visible, de-emphasized when empty#74
wgordon17 merged 11 commits into
gordon-code:mainfrom
wgordon17:worktree-fix+always-visible-locked-repos

Conversation

@wgordon17
Copy link
Copy Markdown
Member

Summary

  • Locked repos remain in group list even when filters exclude all items
  • Empty locked repos render as minimal compact rows (repo name + lock controls)
  • Eliminates invisible-repo reorder bugs by keeping all locked repos present

Supersedes #73. Closes #71

ensureLockedRepoGroups injects empty group stubs for locked repos
filtered out by tab filters, so they remain in the group list at
their locked position. Empty groups render collapsed with muted
styling and 'No items match current filters' text.

This eliminates the class of bugs where invisible locked repos
cause confusing reorder behavior — moveLockedRepo stays with
simple adjacent swap since all locked repos are always present.

Closes gordon-code#71
Empty locked repos now render as a single compact row with just
the repo name and lock controls. Removes chevron, badges, icons,
and summary text. Reduced vertical padding and muted styling.
Adds invisible spacer matching ChevronIcon dimensions (h-3.5 w-3.5)
so empty rows align with populated repo group headers.
Moves px-4 from outer container to inner flex-1 span, mirroring
how RepoGroupHeader separates button padding from trailing content.
Uses py-1.5 for comfortable density and compact:py-0.5 for
compact, matching the density-adaptive pattern in RepoGroupHeader.
- Extract EmptyLockedRepoRow shared component from tripled inline markup
- Fix empty-state Show conditions: use sibling Shows with .length guards
  for mutual exclusivity (empty message vs locked stub rows)
- Add JSDoc to ensureLockedRepoGroups documenting pipeline coupling
- Fix Show child indentation across all three tab components
- Add compact stub row rendering tests for all three tabs
- Add isExpanded guard tests for all three tabs
- Add EmptyLockedRepoRow unit tests
Verify that the empty-state message and locked stub rows
are mutually exclusive: when only locked stubs exist (no
real items), the empty message must not render alongside
the stubs.
ActionsTab groups Show lacked the loading guard that IssuesTab and
PullRequestsTab have. During initial load with locked repos,
ensureLockedRepoGroups injects stubs that made repoGroups().length > 0,
rendering stubs alongside the loading skeleton.
Pinned repos now stay visible as de-emphasized rows when filters
exclude all their items. Updates the Repo Pinning section to
describe this behavior.
@wgordon17 wgordon17 marked this pull request as ready for review April 20, 2026 19:01
@wgordon17 wgordon17 merged commit f911ee1 into gordon-code:main Apr 20, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Reordering visible pinned repos has no effect when invisible pinned repos are between them

1 participant