diff --git a/apps/nowait-admin/src/hooks/useNewOrderToastStore.tsx b/apps/nowait-admin/src/hooks/useNewOrderToastStore.tsx index f93857a8..2b1a046c 100644 --- a/apps/nowait-admin/src/hooks/useNewOrderToastStore.tsx +++ b/apps/nowait-admin/src/hooks/useNewOrderToastStore.tsx @@ -1,4 +1,5 @@ import { create } from "zustand"; +import type { Order } from "../types/order"; type OrderStatus = "WAITING_FOR_PAYMENT" | "COOKING" | "COOKED"; @@ -21,6 +22,7 @@ type S = { toasts: Toast[]; pushToast: (t: Toast) => void; removeToast: (id: string) => void; + purgeNonWaiting: (orders: Order[]) => void; }; const DISMISSED_KEY = "toasts:dismissed"; @@ -72,4 +74,15 @@ export const useNewOrderToastStore = create((set, get) => ({ saveDismissed(dismissed); } }, + purgeNonWaiting: (orders) => { + const waitingIds = new Set( + orders.filter((o) => o.status === "WAITING_FOR_PAYMENT").map((o) => o.id) + ); + const { toasts, removeToast } = get(); + toasts.forEach((t) => { + if (!waitingIds.has(t.orderId)) { + removeToast(t.id); + } + }); + }, })); diff --git a/apps/nowait-admin/src/pages/AdminOrders/AdminOrders.tsx b/apps/nowait-admin/src/pages/AdminOrders/AdminOrders.tsx index 006208cf..cfce55e8 100644 --- a/apps/nowait-admin/src/pages/AdminOrders/AdminOrders.tsx +++ b/apps/nowait-admin/src/pages/AdminOrders/AdminOrders.tsx @@ -8,6 +8,7 @@ import { useGetOrderList } from "../../hooks/useGetOrderList"; import { useWindowWidth } from "../../hooks/useWindowWidth"; import type { Order } from "../../types/order"; import { DropdownLoader } from "@repo/ui"; +import { useNewOrderToastStore } from "../../hooks/useNewOrderToastStore"; const AdminOrders = () => { const { storeId: storeIdParam } = useParams<{ storeId: string }>(); @@ -44,6 +45,7 @@ const AdminOrders = () => { error, refetch, } = useGetOrderList(storeId); + const purgeNonWaiting = useNewOrderToastStore((s) => s.purgeNonWaiting); const getFormattedTime = (createdAt: string) => { const date = new Date(createdAt); @@ -161,6 +163,9 @@ const AdminOrders = () => { if (queryOrderId) return; setSelectedPayment(null); }, [activeTab, mobileActiveTab, queryOrderId]); + useEffect(() => { + if (orders?.length) purgeNonWaiting(orders); + }, [orders, purgeNonWaiting]); return (
{ integrations: [ Sentry.browserTracingIntegration(), Sentry.replayIntegration(), + Sentry.consoleLoggingIntegration({ levels: ["log", "warn", "error"] }), ], tracesSampleRate: 0.6, tracePropagationTargets: [