"use client"; import { createContext, useCallback, useContext, useMemo, useState, type ReactNode, } from "react"; import { cn } from "@/lib/utils"; type ToastVariant = "default" | "success" | "error"; type ToastMessage = { id: number; title: string; variant: ToastVariant; }; type ToastContextValue = { toast: (title: string, variant?: ToastVariant) => void; }; const ToastContext = createContext(null); export function ToastProvider({ children }: { children: ReactNode }) { const [messages, setMessages] = useState([]); const toast = useCallback((title: string, variant: ToastVariant = "default") => { const id = Date.now() + Math.random(); setMessages((current) => [...current, { id, title, variant }]); window.setTimeout(() => { setMessages((current) => current.filter((message) => message.id !== id)); }, 3200); }, []); const value = useMemo(() => ({ toast }), [toast]); return ( {children}
{messages.map((message) => (
{message.title}
))}
); } export function useToast() { const context = useContext(ToastContext); if (!context) { throw new Error("useToast must be used within ToastProvider."); } return context; }