Skip to content

Commit 2b17182

Browse files
iamdavidhillHona
andauthored
tui: prevent project avatar popover flicker when switching projects (#18660)
Co-authored-by: LukeParkerDev <10430890+Hona@users.noreply.github.com>
1 parent 8dd8170 commit 2b17182

2 files changed

Lines changed: 49 additions & 3 deletions

File tree

packages/app/e2e/sidebar/sidebar-popover-actions.spec.ts

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
import { test, expect } from "../fixtures"
2-
import { cleanupSession, closeSidebar, hoverSessionItem } from "../actions"
2+
import {
3+
cleanupSession,
4+
cleanupTestProject,
5+
closeSidebar,
6+
createTestProject,
7+
hoverSessionItem,
8+
openSidebar,
9+
waitSession,
10+
} from "../actions"
311
import { projectSwitchSelector } from "../selectors"
12+
import { dirSlug } from "../utils"
413

514
test("collapsed sidebar popover stays open when archiving a session", async ({ page, slug, sdk, gotoSession }) => {
615
const stamp = Date.now()
@@ -37,3 +46,35 @@ test("collapsed sidebar popover stays open when archiving a session", async ({ p
3746
await cleanupSession({ sdk, sessionID: two.id })
3847
}
3948
})
49+
50+
test("open sidebar project popover stays closed after clicking avatar", async ({ page, withProject }) => {
51+
await page.setViewportSize({ width: 1400, height: 800 })
52+
53+
const other = await createTestProject()
54+
const slug = dirSlug(other)
55+
56+
try {
57+
await withProject(
58+
async () => {
59+
await openSidebar(page)
60+
61+
const project = page.locator(projectSwitchSelector(slug)).first()
62+
const card = page.locator('[data-component="hover-card-content"]')
63+
64+
await expect(project).toBeVisible()
65+
await project.hover()
66+
await expect(card.getByText(/recent sessions/i)).toBeVisible()
67+
68+
await page.mouse.down()
69+
await expect(card).toHaveCount(0)
70+
await page.mouse.up()
71+
72+
await waitSession(page, { directory: other })
73+
await expect(card).toHaveCount(0)
74+
},
75+
{ extra: [other] },
76+
)
77+
} finally {
78+
await cleanupTestProject(other)
79+
}
80+
})

packages/app/src/pages/layout/sidebar-project.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,8 +109,14 @@ const ProjectTile = (props: {
109109
"bg-surface-base-hover border border-border-weak-base": !props.selected() && props.active(),
110110
}}
111111
onPointerDown={(event) => {
112+
if (event.button === 0 && !event.ctrlKey) {
113+
props.setOpen(false)
114+
props.setSuppressHover(true)
115+
return
116+
}
112117
if (!props.overlay()) return
113118
if (event.button !== 2 && !(event.button === 0 && event.ctrlKey)) return
119+
props.setOpen(false)
114120
props.setSuppressHover(true)
115121
event.preventDefault()
116122
}}
@@ -130,12 +136,11 @@ const ProjectTile = (props: {
130136
props.onProjectFocus(props.project.worktree)
131137
}}
132138
onClick={() => {
139+
props.setOpen(false)
133140
if (props.selected()) {
134-
props.setSuppressHover(true)
135141
layout.sidebar.toggle()
136142
return
137143
}
138-
props.setSuppressHover(false)
139144
props.navigateToProject(props.project.worktree)
140145
}}
141146
onBlur={() => props.setOpen(false)}

0 commit comments

Comments
 (0)