diff --git a/src/components/toast/ToasterWithMax.tsx b/src/components/toast/ToasterWithMax.tsx new file mode 100644 index 00000000..f688704b --- /dev/null +++ b/src/components/toast/ToasterWithMax.tsx @@ -0,0 +1,31 @@ +import React, { useEffect, useState } from 'react'; +import toast, { Toaster, useToasterStore } from 'react-hot-toast'; + +export default function ToasterWithMax() { + const { toasts } = useToasterStore(); + const [toastLimit, setToastLimit] = useState(2); + + useEffect(() => { + toasts + .filter((t) => t.visible) + .filter((_, i) => i >= toastLimit) + .forEach((t) => toast.dismiss(t.id)); + }, [toasts, toastLimit]); + + return ( + <> + + + ); +} diff --git a/src/pages/_app.tsx b/src/pages/_app.tsx index 7279fd84..77e46b8c 100644 --- a/src/pages/_app.tsx +++ b/src/pages/_app.tsx @@ -7,6 +7,7 @@ import { Analytics } from '@vercel/analytics/react'; import { CookiesProvider } from 'react-cookie'; import { Toaster } from 'react-hot-toast'; import Layout from '@/components/layout'; +import ToasterWithMax from '@/components/toast/ToasterWithMax'; const queryClient = new QueryClient({ defaultOptions: { @@ -42,20 +43,7 @@ export default function App({ Component, pageProps }: AppProps) { - + ); }