From 31caa5652b0d3d68660c914a85af5101c057f6a0 Mon Sep 17 00:00:00 2001 From: Jake Leventhal Date: Sat, 18 Jul 2026 07:18:18 -0400 Subject: [PATCH] Fix reopening existing Diff tab (#3973) Co-authored-by: Julius Marminge --- apps/web/src/components/ChatView.tsx | 12 +++++++++++- apps/web/src/rightPanelStore.test.ts | 15 +++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/apps/web/src/components/ChatView.tsx b/apps/web/src/components/ChatView.tsx index 69292e7e6aa3bd7fbf0c3c738443f14bbf72343a..8d39c6b69acf370a1b9c41d3da714f1c1b5fd6d0 100644 --- a/apps/web/src/components/ChatView.tsx +++ b/apps/web/src/components/ChatView.tsx @@ -2916,9 +2916,19 @@ function ChatViewContent(props: ChatViewProps) { }, [activeThreadRef, openPreview]); const addDiffSurface = useCallback(() => { if (!activeThreadRef || !isServerThread || !isGitRepo) return; + if (planSidebarOpen) { + dismissPlanSidebarForCurrentTurn(); + } useRightPanelStore.getState().open(activeThreadRef, "diff"); onDiffPanelOpen?.(); - }, [activeThreadRef, isGitRepo, isServerThread, onDiffPanelOpen]); + }, [ + activeThreadRef, + dismissPlanSidebarForCurrentTurn, + isGitRepo, + isServerThread, + onDiffPanelOpen, + planSidebarOpen, + ]); const addFilesSurface = useCallback(() => { if (!activeThreadRef || !activeProject) return; useRightPanelStore.getState().open(activeThreadRef, "files"); diff --git a/apps/web/src/rightPanelStore.test.ts b/apps/web/src/rightPanelStore.test.ts index b48f6e7ebb56458908189b28dbdfe058cf5d2ff6..c7457cfd3040325cd9732b93f3d4eb54135b934d 100644 --- a/apps/web/src/rightPanelStore.test.ts +++ b/apps/web/src/rightPanelStore.test.ts @@ -117,6 +117,21 @@ describe("rightPanelStore", () => { ).toHaveLength(2); }); + it("reopening an inactive singleton activates its existing surface", () => { + useRightPanelStore.getState().open(refA, "diff"); + useRightPanelStore.getState().open(refA, "plan"); + useRightPanelStore.getState().open(refA, "diff"); + + expect(selectThreadRightPanelState(useRightPanelStore.getState().byThreadKey, refA)).toEqual({ + isOpen: true, + activeSurfaceId: "diff", + surfaces: [ + { id: "diff", kind: "diff" }, + { id: "plan", kind: "plan" }, + ], + }); + }); + it("keeps files as a singleton surface", () => { useRightPanelStore.getState().open(refA, "files"); useRightPanelStore.getState().open(refA, "files"); -- 2.54.0