import * as React from "react"; import { Snackbar, Alert, AlertColor } from "@mui/material"; interface ToastState { open: boolean; message: string; severity: AlertColor; } interface ToastContextValue { showToast: (message: string, severity?: AlertColor) => void; } const ToastContext = React.createContext(null); export function ToastProvider({ children }: { children: React.ReactNode }) { const [toast, setToast] = React.useState({ open: false, message: "", severity: "success" }); const timerRef = React.useRef | null>(null); const showToast = React.useCallback((message: string, severity: AlertColor = "success") => { if (timerRef.current) clearTimeout(timerRef.current); setToast({ open: true, message, severity }); timerRef.current = setTimeout(() => setToast((t) => ({ ...t, open: false })), 4000); }, []); const handleClose = (_?: React.SyntheticEvent | Event, reason?: string) => { if (reason === "clickaway") return; setToast((t) => ({ ...t, open: false })); }; return ( {children} {toast.message} ); } export function useToast(): ToastContextValue { const ctx = React.useContext(ToastContext); if (!ctx) throw new Error("useToast must be used within a ToastProvider"); return ctx; }