From f1e04d2466e2febdcc554c3bee01fc58282bff6f Mon Sep 17 00:00:00 2001 From: thesiti92 Date: Tue, 27 Oct 2026 14:14:05 -0400 Subject: [PATCH] Let notifications close after a set time Agent-Session: f949acce-5c96-46f0-92af-57fc57a137fd Agent-Session: 8625c3c9-675e-4237-9d72-b6ea7df04976 Agent-Session: 778ba399-e5fb-4c16-a31b-3c8632db2fcd Agent-Session: fea01a6a-bba5-4058-b6c6-dbaccc15cd9c Agent-Session: 5625cb14-3381-4fef-8d68-2cdc27ef7155 Agent-Session: 283ceb25-3b3b-471c-b900-b0a825d8588b Agent-Session: 4e9794ef-5a99-4635-ae45-1af0c43d14da --- .../code-oss/src/vs/review/browser/reviewNotification.ts | 6 +++++- packages/review-protocol/src/contracts.ts | 1 + packages/review/app/src/agent-selection.test.tsx | 1 + packages/review/app/src/agent-selection.tsx | 1 + packages/review/app/src/ask-setup.tsx | 1 + packages/review/app/src/bug-report-dialog.browser.test.tsx | 1 + packages/review/app/src/bug-report-dialog.tsx | 1 + packages/review/app/src/onboarding/draw-flow.tsx | 1 + packages/review/app/src/review-home-view.tsx | 1 + 9 files changed, 13 insertions(+), 1 deletion(-) diff --git a/apps/review-desktop/code-oss/src/vs/review/browser/reviewNotification.ts b/apps/review-desktop/code-oss/src/vs/review/browser/reviewNotification.ts index dbc138e6c..450c8f5c7 100644 --- a/apps/review-desktop/code-oss/src/vs/review/browser/reviewNotification.ts +++ b/apps/review-desktop/code-oss/src/vs/review/browser/reviewNotification.ts @@ -5,7 +5,7 @@ import type { ReviewDisposable, ReviewNotification } from "../common/reviewProto export function showReviewNotification( notifications: Pick, - { kind, text, actions, onClose }: ReviewNotification, + { kind, text, actions, closeAfterMs, onClose }: ReviewNotification, ): ReviewDisposable { const handle = notifications.notify({ severity: kind === "error" ? Severity.Error : Severity.Info, @@ -14,6 +14,10 @@ export function showReviewNotification( ? { primary: actions.map((action, index) => toAction({ id: `review.notification.${index}`, label: action.label, run: () => action.run() })) } : undefined, }); + if (closeAfterMs !== undefined) { + const timer = setTimeout(() => handle.close(), closeAfterMs); + Event.once(handle.onDidClose)(() => clearTimeout(timer)); + } if (onClose) Event.once(handle.onDidClose)(onClose); return { dispose: () => handle.close() }; } diff --git a/packages/review-protocol/src/contracts.ts b/packages/review-protocol/src/contracts.ts index 3d6d0e21d..313ee01f4 100644 --- a/packages/review-protocol/src/contracts.ts +++ b/packages/review-protocol/src/contracts.ts @@ -370,6 +370,7 @@ export interface ReviewNotification { kind: "success" | "error"; text: string; actions?: readonly { label: string; run(): void }[]; + closeAfterMs?: number; onClose?(): void; } diff --git a/packages/review/app/src/agent-selection.test.tsx b/packages/review/app/src/agent-selection.test.tsx index 739ea2418..dcf55047f 100644 --- a/packages/review/app/src/agent-selection.test.tsx +++ b/packages/review/app/src/agent-selection.test.tsx @@ -137,6 +137,7 @@ it("copies only on click or Shift+Cmd+C, reports failures, and clears on revisio expect(notify).toHaveBeenLastCalledWith({ kind: "success", text: expect.stringContaining("copied to clipboard"), + closeAfterMs: 5_000, }); expect(container.querySelector('[role="status"]')).toBeNull(); await act(async () => { diff --git a/packages/review/app/src/agent-selection.tsx b/packages/review/app/src/agent-selection.tsx index b0bcb5406..d5e1380a3 100644 --- a/packages/review/app/src/agent-selection.tsx +++ b/packages/review/app/src/agent-selection.tsx @@ -235,6 +235,7 @@ export function AgentSelectionProvider({ notify({ kind: "success", text: "Selection copied to clipboard. Paste into your agent to chat about it.", + closeAfterMs: 5_000, }); } catch { setCopiedSelection(null); diff --git a/packages/review/app/src/ask-setup.tsx b/packages/review/app/src/ask-setup.tsx index ffcf29d98..1c2627079 100644 --- a/packages/review/app/src/ask-setup.tsx +++ b/packages/review/app/src/ask-setup.tsx @@ -34,6 +34,7 @@ export function AskSetup({ notify({ kind: "success", text: "Selection copied to clipboard. Paste into your agent to chat about it.", + closeAfterMs: 5_000, }); } catch { notify({ diff --git a/packages/review/app/src/bug-report-dialog.browser.test.tsx b/packages/review/app/src/bug-report-dialog.browser.test.tsx index 9ccd5addc..6b2b0cf7f 100644 --- a/packages/review/app/src/bug-report-dialog.browser.test.tsx +++ b/packages/review/app/src/bug-report-dialog.browser.test.tsx @@ -70,6 +70,7 @@ describe("BugReportControl", () => { expect(notify).toHaveBeenCalledWith({ kind: "success", text: "Bug report was sent.", + closeAfterMs: 5_000, }); expect(container.querySelector("dialog")).toBeNull(); }); diff --git a/packages/review/app/src/bug-report-dialog.tsx b/packages/review/app/src/bug-report-dialog.tsx index 5949d7b28..b9dd8bf76 100644 --- a/packages/review/app/src/bug-report-dialog.tsx +++ b/packages/review/app/src/bug-report-dialog.tsx @@ -132,6 +132,7 @@ export function BugReportControl({ notify({ kind: "success", text: "Bug report was sent.", + closeAfterMs: 5_000, }); reset(); setOpen(false); diff --git a/packages/review/app/src/onboarding/draw-flow.tsx b/packages/review/app/src/onboarding/draw-flow.tsx index e60b27458..b6c37d3e8 100644 --- a/packages/review/app/src/onboarding/draw-flow.tsx +++ b/packages/review/app/src/onboarding/draw-flow.tsx @@ -71,6 +71,7 @@ export function DrawFlow({ ? { kind: "success", text: "Prompt copied. Paste it into your agent.", + closeAfterMs: 5_000, } : { kind: "error", diff --git a/packages/review/app/src/review-home-view.tsx b/packages/review/app/src/review-home-view.tsx index b2a95a76e..4d94d196e 100644 --- a/packages/review/app/src/review-home-view.tsx +++ b/packages/review/app/src/review-home-view.tsx @@ -955,6 +955,7 @@ function ReviewHomeBody({ ? { kind: "success", text: "Copied 'founders@dev.fast' to clipboard", + closeAfterMs: 5_000, } : { kind: "error", text: "Couldn't copy email. Please try again." }, );