From 7484d66959eb9ff658e7a7c27e3f09828b61da13 Mon Sep 17 00:00:00 2001 From: "Builder.io" Date: Fri, 26 Sep 2025 21:48:47 +0000 Subject: [PATCH] Throttle and dedupe toasts; reduce duration cgen-558a229471864edaae7048c0c8d3e756 --- client/hooks/use-toast.ts | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/client/hooks/use-toast.ts b/client/hooks/use-toast.ts index 5b4bab06..10cb4c39 100644 --- a/client/hooks/use-toast.ts +++ b/client/hooks/use-toast.ts @@ -3,7 +3,8 @@ import * as React from "react"; import type { ToastActionElement, ToastProps } from "@/components/ui/toast"; const TOAST_LIMIT = 1; -const TOAST_REMOVE_DELAY = 6000; +const TOAST_REMOVE_DELAY = 4000; +const TOAST_MIN_INTERVAL = 800; type ToasterToast = ToastProps & { id: string; @@ -20,6 +21,8 @@ const actionTypes = { } as const; let count = 0; +let lastToastTimestamp = 0; +let lastToastSignature = ""; function genId() { count = (count + 1) % Number.MAX_SAFE_INTEGER; @@ -137,6 +140,18 @@ function dispatch(action: Action) { type Toast = Omit; function toast({ ...props }: Toast) { + const now = Date.now(); + const signature = `${props.variant ?? "default"}|${String(props.title ?? "")}|${String(props.description ?? "")}`; + if (now - lastToastTimestamp < TOAST_MIN_INTERVAL && signature === lastToastSignature) { + return { + id: "-1", + dismiss: () => undefined, + update: () => undefined, + }; + } + lastToastTimestamp = now; + lastToastSignature = signature; + const id = genId(); const update = (props: ToasterToast) =>