fix(sidebar): show collapse chevron on pinned section headers (#12147)

This commit is contained in:
Neil
2026-08-02 16:56:08 -07:00
committed by GitHub
parent 7c7167028c
commit 040734b18e
2 changed files with 29 additions and 2 deletions
@@ -917,6 +917,30 @@ describe('WorktreeList lineage child card renderer', () => {
expect(markup).toContain('aria-expanded="true"')
})
it('renders a collapse chevron on the pinned section header with worktrees', async () => {
setPinnedFixtureState()
const markup = await renderWorktreeListMarkup()
expect(markup).toContain('Pinned')
expect(markup).toContain('data-workspace-pin-drop-target=""')
expect(markup).toContain('data-repo-header-collapse-affordance=""')
expect(markup).toContain('aria-expanded="true"')
})
it('renders collapsed pinned section header affordance state', async () => {
setPinnedFixtureState()
mockStore.state = {
...mockStore.state,
collapsedGroups: new Set(['pinned'])
}
const markup = await renderWorktreeListMarkup()
expect(markup).toContain('data-workspace-pin-drop-target=""')
expect(markup).toContain('data-repo-header-collapse-affordance=""')
expect(markup).toContain('aria-expanded="false"')
expect(markup).toContain('-rotate-90')
})
it('renders a collapse chevron on grouped repo headers with worktrees', async () => {
setLineageFixtureState('repo')
const markup = await renderWorktreeListMarkup()
@@ -4196,10 +4196,13 @@ const VirtualizedWorktreeViewport = React.memo(function VirtualizedWorktreeViewp
projectGroupPathStatus.reason === 'ambiguous-connection')
const projectGroupDepth = row.projectGroupDepth ?? 0
const isHeaderCollapsed = collapsedGroups.has(row.key)
// Why: repo/project and status headers share compact section chrome; flat "All" stays a simple label.
// Why: repo/project/status/pinned share compact section chrome; flat "All" stays a simple label.
const showHeaderCollapseAffordance =
row.count > 0 &&
(isRepoHeader || isProjectGroupHeader || headerWorkspaceStatus !== null)
(isRepoHeader ||
isProjectGroupHeader ||
headerWorkspaceStatus !== null ||
isPinnedHeader)
// Why: non-project headers like "All" are flat-list labels; don't reserve project hierarchy indent.
const headerPaddingLeft =
isRepoHeader || isProjectGroupHeader