authorgravatar for jakeleventhal@me.comJake Leventhal <jakeleventhal@me.com> 2026-07-18 07:18:18-04:00
committergravatar for noreply@github.comGitHub <noreply@github.com> 2026-07-18 13:18:18+02:00
log31caa5652b0d3d68660c914a85af5101c057f6a0
tree9aa00429fbc6af1a1366717c768abbc28f16ed32
parente350c0a07be43cbdad95dfe7367e572eddfb7d48
signature Signed by PGP key B5690EEEBB952194

Fix reopening existing Diff tab (#3973)

Co-authored-by: Julius Marminge <julius0216@outlook.com>

2 files changed, 26 insertions(+), 1 deletions(-)

apps/web/src/components/ChatView.tsx+11-1
......@@ -2916,9 +2916,19 @@ function ChatViewContent(props: ChatViewProps) {
29162916 }, [activeThreadRef, openPreview]);
29172917 const addDiffSurface = useCallback(() => {
29182918 if (!activeThreadRef || !isServerThread || !isGitRepo) return;
2919 if (planSidebarOpen) {
2920 dismissPlanSidebarForCurrentTurn();
2921 }
29192922 useRightPanelStore.getState().open(activeThreadRef, "diff");
29202923 onDiffPanelOpen?.();
2921 }, [activeThreadRef, isGitRepo, isServerThread, onDiffPanelOpen]);
2924 }, [
2925 activeThreadRef,
2926 dismissPlanSidebarForCurrentTurn,
2927 isGitRepo,
2928 isServerThread,
2929 onDiffPanelOpen,
2930 planSidebarOpen,
2931 ]);
29222932 const addFilesSurface = useCallback(() => {
29232933 if (!activeThreadRef || !activeProject) return;
29242934 useRightPanelStore.getState().open(activeThreadRef, "files");
apps/web/src/rightPanelStore.test.ts+15
......@@ -117,6 +117,21 @@ describe("rightPanelStore", () => {
117117 ).toHaveLength(2);
118118 });
119119
120 it("reopening an inactive singleton activates its existing surface", () => {
121 useRightPanelStore.getState().open(refA, "diff");
122 useRightPanelStore.getState().open(refA, "plan");
123 useRightPanelStore.getState().open(refA, "diff");
124
125 expect(selectThreadRightPanelState(useRightPanelStore.getState().byThreadKey, refA)).toEqual({
126 isOpen: true,
127 activeSurfaceId: "diff",
128 surfaces: [
129 { id: "diff", kind: "diff" },
130 { id: "plan", kind: "plan" },
131 ],
132 });
133 });
134
120135 it("keeps files as a singleton surface", () => {
121136 useRightPanelStore.getState().open(refA, "files");
122137 useRightPanelStore.getState().open(refA, "files");