From c65eefebd3f363af8453ccd4a5aea5ad1395f6ed Mon Sep 17 00:00:00 2001 From: Rufai Ahmed Date: Tue, 23 Jun 2026 11:01:38 +0100 Subject: [PATCH] feat(web): use Sonner for toasts on discover/organizers pages --- apps/web/app/discover/page.tsx | 12 ++---------- apps/web/app/layout.tsx | 6 +++++- apps/web/app/organizers/page.tsx | 14 ++------------ 3 files changed, 9 insertions(+), 23 deletions(-) diff --git a/apps/web/app/discover/page.tsx b/apps/web/app/discover/page.tsx index 3eff5c15..8c2786df 100644 --- a/apps/web/app/discover/page.tsx +++ b/apps/web/app/discover/page.tsx @@ -7,17 +7,14 @@ import { PopularEventsSection } from "@/components/events/popular-events-section import { OrganizerComponent } from "@/components/events/organizer-component"; import { Footer } from "@/components/layout/footer"; import { fetchOrganizers, type DiscoverOrganizer } from "@/utils/api"; +import { toast } from "sonner"; export default function DiscoverPage() { - const [toastMessage, setToastMessage] = useState(null); const [activeCategory, setActiveCategory] = useState("All"); const [selectedOrganizer, setSelectedOrganizer] = useState(null); const [allOrganizers, setAllOrganizers] = useState([]); - const showErrorToast = (message: string) => { - setToastMessage(message); - window.setTimeout(() => setToastMessage(null), 3500); - }; + const showErrorToast = (message: string) => toast.error(message); // Load all organizers for filtering useEffect(() => { @@ -36,11 +33,6 @@ export default function DiscoverPage() { return (
- {toastMessage && ( -
- {toastMessage} -
- )}

Explore events

diff --git a/apps/web/app/layout.tsx b/apps/web/app/layout.tsx index 790c8928..0b001536 100644 --- a/apps/web/app/layout.tsx +++ b/apps/web/app/layout.tsx @@ -1,3 +1,7 @@ +// Toast notifications are powered by Sonner. The below mounts the +// single global toast portal for the whole app. Trigger toasts from any client +// component with `import { toast } from "sonner"` then `toast.success(...)` / +// `toast.error(...)`. Do not add additional instances. import type { Metadata } from "next"; import { Inter } from "next/font/google"; import { Toaster } from "sonner"; @@ -47,7 +51,7 @@ export default function RootLayout({ - + {children} diff --git a/apps/web/app/organizers/page.tsx b/apps/web/app/organizers/page.tsx index 12e1e31e..85c49f2c 100644 --- a/apps/web/app/organizers/page.tsx +++ b/apps/web/app/organizers/page.tsx @@ -3,24 +3,14 @@ import { Navbar } from "@/components/layout/navbar"; import { Footer } from "@/components/layout/footer"; import { OrganizerComponent } from "@/components/events/organizer-component"; -import { useState } from "react"; +import { toast } from "sonner"; export default function OrganizersPage() { - const [toastMessage, setToastMessage] = useState(null); - - const showErrorToast = (message: string) => { - setToastMessage(message); - window.setTimeout(() => setToastMessage(null), 3500); - }; + const showErrorToast = (message: string) => toast.error(message); return (
- {toastMessage && ( -
- {toastMessage} -
- )}

Explore organizers