summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-02-10 14:45:52 -0600
committerGitHub <[email protected]>2026-02-10 14:45:52 -0600
commit92a77b72fb67f2a80663a5ee3599c5d044255934 (patch)
tree0853e9cf03f206e9aa983f2479c8635ca5b04126
parent4f6b9297840d242bdee25691959cd1ccfcd732fa (diff)
downloadopencode-92a77b72fb67f2a80663a5ee3599c5d044255934.tar.gz
opencode-92a77b72fb67f2a80663a5ee3599c5d044255934.zip
fix(app): don't close sidebar on session change (#13013)
-rw-r--r--packages/app/e2e/sidebar/sidebar-popover-actions.spec.ts36
-rw-r--r--packages/app/src/pages/layout.tsx14
2 files changed, 36 insertions, 14 deletions
diff --git a/packages/app/e2e/sidebar/sidebar-popover-actions.spec.ts b/packages/app/e2e/sidebar/sidebar-popover-actions.spec.ts
new file mode 100644
index 000000000..e37f94f3a
--- /dev/null
+++ b/packages/app/e2e/sidebar/sidebar-popover-actions.spec.ts
@@ -0,0 +1,36 @@
+import { test, expect } from "../fixtures"
+import { closeSidebar, hoverSessionItem } from "../actions"
+import { projectSwitchSelector, sessionItemSelector } from "../selectors"
+
+test("collapsed sidebar popover stays open when archiving a session", async ({ page, slug, sdk, gotoSession }) => {
+ const stamp = Date.now()
+
+ const one = await sdk.session.create({ title: `e2e sidebar popover archive 1 ${stamp}` }).then((r) => r.data)
+ const two = await sdk.session.create({ title: `e2e sidebar popover archive 2 ${stamp}` }).then((r) => r.data)
+
+ if (!one?.id) throw new Error("Session create did not return an id")
+ if (!two?.id) throw new Error("Session create did not return an id")
+
+ try {
+ await gotoSession(one.id)
+ await closeSidebar(page)
+
+ const project = page.locator(projectSwitchSelector(slug)).first()
+ await expect(project).toBeVisible()
+ await project.hover()
+
+ await expect(page.locator(sessionItemSelector(one.id)).first()).toBeVisible()
+ await expect(page.locator(sessionItemSelector(two.id)).first()).toBeVisible()
+
+ const item = await hoverSessionItem(page, one.id)
+ await item
+ .getByRole("button", { name: /archive/i })
+ .first()
+ .click()
+
+ await expect(page.locator(sessionItemSelector(two.id)).first()).toBeVisible()
+ } finally {
+ await sdk.session.delete({ sessionID: one.id }).catch(() => undefined)
+ await sdk.session.delete({ sessionID: two.id }).catch(() => undefined)
+ }
+})
diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx
index c55a3719d..a18b7ef23 100644
--- a/packages/app/src/pages/layout.tsx
+++ b/packages/app/src/pages/layout.tsx
@@ -181,20 +181,6 @@ export default function Layout(props: ParentProps) {
aim.reset()
})
- createEffect(
- on(
- () => ({ dir: params.dir, id: params.id }),
- () => {
- if (layout.sidebar.opened()) return
- if (!state.hoverProject) return
- aim.reset()
- setState("hoverSession", undefined)
- setState("hoverProject", undefined)
- },
- { defer: true },
- ),
- )
-
const autoselecting = createMemo(() => {
if (params.dir) return false
if (!state.autoselect) return false