"use client"; import { createContext, useCallback, useContext, useEffect, useMemo, useState, } from "react"; type ToastContextValue = { message: string | null; showToast: (message: string) => void; clearToast: () => void; }; const ToastContext = createContext(null); export function ToastProvider({ children }: { children: React.ReactNode }) { const [message, setMessage] = useState(null); const showToast = useCallback((next: string) => { setMessage(next); }, []); const clearToast = useCallback(() => setMessage(null), []); useEffect(() => { if (!message) return; const timer = window.setTimeout(() => setMessage(null), 3200); return () => window.clearTimeout(timer); }, [message]); const value = useMemo( () => ({ message, showToast, clearToast }), [message, showToast, clearToast], ); return ( {children} {message ? (
{message}
) : null}
); } export function useToast() { const ctx = useContext(ToastContext); if (!ctx) throw new Error("useToast must be used within ToastProvider"); return ctx; }