From 06ebde3894bad68123188eeff08ebc0145999535 Mon Sep 17 00:00:00 2001 From: Jakub Domeracki Date: Tue, 28 Apr 2026 10:37:16 +0200 Subject: [PATCH] fix(site): close terminal window on command confirmation cancel (#24765) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follow-up to #24650. Canceling the terminal command confirmation dialog now calls `window.close()` instead of stripping the `?command=` query parameter and opening a plain terminal. The terminal always opens in a new tab, so closing it is the expected UX when the user declines. > 🤖 Generated by Coder Agents --- site/src/pages/TerminalPage/TerminalPage.test.tsx | 8 +++----- site/src/pages/TerminalPage/TerminalPage.tsx | 3 +-- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/site/src/pages/TerminalPage/TerminalPage.test.tsx b/site/src/pages/TerminalPage/TerminalPage.test.tsx index 2156cec244..74f5caabc7 100644 --- a/site/src/pages/TerminalPage/TerminalPage.test.tsx +++ b/site/src/pages/TerminalPage/TerminalPage.test.tsx @@ -238,17 +238,15 @@ describe("TerminalPage", () => { expect(resizeReq.width).toBeGreaterThan(0); }); - it("removes command param on cancel", async () => { - createWorkspaceTerminalWebSocket(); + it("closes window on cancel", async () => { + const closeSpy = vi.spyOn(window, "close").mockImplementation(() => {}); renderTerminalRaw( `/${MockUserOwner.username}/${MockWorkspace.name}/terminal?command=echo+hello`, ); await userEvent.click( await screen.findByRole("button", { name: "Cancel" }), ); - await waitFor(() => - expect(screen.queryByRole("dialog")).not.toBeInTheDocument(), - ); + expect(closeSpy).toHaveBeenCalled(); }); it("skips confirmation dialog for trusted app commands", async () => { diff --git a/site/src/pages/TerminalPage/TerminalPage.tsx b/site/src/pages/TerminalPage/TerminalPage.tsx index 38a65a8d83..3e00fc802f 100644 --- a/site/src/pages/TerminalPage/TerminalPage.tsx +++ b/site/src/pages/TerminalPage/TerminalPage.tsx @@ -213,8 +213,7 @@ const TerminalPage: FC = () => { setCommandConfirmed(true); }} onDeny={() => { - searchParams.delete("command"); - navigate({ search: searchParams.toString() }, { replace: true }); + window.close(); }} /> )}