From 1133d87be043ab999be5002380584b21653e09c4 Mon Sep 17 00:00:00 2001
From: Adam <2363879+adamdotdevin@users.noreply.github.com>
Date: Wed, 18 Feb 2026 13:38:46 -0600
Subject: [PATCH] chore: cleanup
---
.../app/src/pages/session/helpers.test.ts | 33 ++++++++++++++++++-
packages/app/src/pages/session/helpers.ts | 21 ++++++++++++
.../src/pages/session/session-side-panel.tsx | 19 +++++------
3 files changed, 62 insertions(+), 11 deletions(-)
diff --git a/packages/app/src/pages/session/helpers.test.ts b/packages/app/src/pages/session/helpers.test.ts
index 8b9746507..7d357e657 100644
--- a/packages/app/src/pages/session/helpers.test.ts
+++ b/packages/app/src/pages/session/helpers.test.ts
@@ -1,5 +1,5 @@
import { describe, expect, test } from "bun:test"
-import { createOpenReviewFile, focusTerminalById, getTabReorderIndex } from "./helpers"
+import { createOpenReviewFile, createOpenSessionFileTab, focusTerminalById, getTabReorderIndex } from "./helpers"
describe("createOpenReviewFile", () => {
test("opens and loads selected review file", () => {
@@ -20,6 +20,37 @@ describe("createOpenReviewFile", () => {
})
})
+describe("createOpenSessionFileTab", () => {
+ test("activates the opened file tab", () => {
+ const calls: string[] = []
+ const openTab = createOpenSessionFileTab({
+ normalizeTab: (value) => {
+ calls.push(`normalize:${value}`)
+ return `file://${value}`
+ },
+ openTab: (tab) => calls.push(`open:${tab}`),
+ pathFromTab: (tab) => {
+ calls.push(`path:${tab}`)
+ return tab.slice("file://".length)
+ },
+ loadFile: (path) => calls.push(`load:${path}`),
+ openReviewPanel: () => calls.push("review"),
+ setActive: (tab) => calls.push(`active:${tab}`),
+ })
+
+ openTab("src/a.ts")
+
+ expect(calls).toEqual([
+ "normalize:src/a.ts",
+ "open:file://src/a.ts",
+ "path:file://src/a.ts",
+ "load:src/a.ts",
+ "review",
+ "active:file://src/a.ts",
+ ])
+ })
+})
+
describe("focusTerminalById", () => {
test("focuses textarea when present", () => {
document.body.innerHTML = `
`
diff --git a/packages/app/src/pages/session/helpers.ts b/packages/app/src/pages/session/helpers.ts
index 5ca355d1d..995f6eb19 100644
--- a/packages/app/src/pages/session/helpers.ts
+++ b/packages/app/src/pages/session/helpers.ts
@@ -35,6 +35,27 @@ export const createOpenReviewFile = (input: {
}
}
+export const createOpenSessionFileTab = (input: {
+ normalizeTab: (tab: string) => string
+ openTab: (tab: string) => void
+ pathFromTab: (tab: string) => string | undefined
+ loadFile: (path: string) => void
+ openReviewPanel: () => void
+ setActive: (tab: string) => void
+}) => {
+ return (value: string) => {
+ const next = input.normalizeTab(value)
+ input.openTab(next)
+
+ const path = input.pathFromTab(next)
+ if (!path) return
+
+ input.loadFile(path)
+ input.openReviewPanel()
+ input.setActive(next)
+ }
+}
+
export const getTabReorderIndex = (tabs: readonly string[], from: string, to: string) => {
const fromIndex = tabs.indexOf(from)
const toIndex = tabs.indexOf(to)
diff --git a/packages/app/src/pages/session/session-side-panel.tsx b/packages/app/src/pages/session/session-side-panel.tsx
index 68dfc346f..7f2d4fc76 100644
--- a/packages/app/src/pages/session/session-side-panel.tsx
+++ b/packages/app/src/pages/session/session-side-panel.tsx
@@ -23,7 +23,7 @@ import { useLayout } from "@/context/layout"
import { useSync } from "@/context/sync"
import { createFileTabListSync } from "@/pages/session/file-tab-scroll"
import { FileTabContent } from "@/pages/session/file-tabs"
-import { getTabReorderIndex } from "@/pages/session/helpers"
+import { createOpenSessionFileTab, getTabReorderIndex } from "@/pages/session/helpers"
import { StickyAddButton } from "@/pages/session/review-tab"
import { setSessionHandoff } from "@/pages/session/handoff"
@@ -96,15 +96,14 @@ export function SessionSidePanel(props: {
if (!view().reviewPanel.opened()) view().reviewPanel.open()
}
- const openTab = (value: string) => {
- const next = normalizeTab(value)
- tabs().open(next)
-
- const path = file.pathFromTab(next)
- if (!path) return
- file.load(path)
- openReviewPanel()
- }
+ const openTab = createOpenSessionFileTab({
+ normalizeTab,
+ openTab: tabs().open,
+ pathFromTab: file.pathFromTab,
+ loadFile: file.load,
+ openReviewPanel,
+ setActive: tabs().setActive,
+ })
const contextOpen = createMemo(() => tabs().active() === "context" || tabs().all().includes("context"))
const openedTabs = createMemo(() =>