// @/components/ui/use-toast.tsx import { useState } from "react"; import type { ToastActionElement, ToastProps } from "@/components/ui/toast"; interface ToasterToast extends ToastProps { id: string; description?: string; onOpenChange?: (open: boolean) => void; } const useToast = () => { const [toasts, setToasts] = useState([]); const showToast = (props: ToastProps) => { const id = Math.random().toString(36).substr(2, 9); const newToast: ToasterToast = { ...props, id, onOpenChange: (open) => { if (!open) dismiss(id); }, }; setToasts((prevToasts) => [...prevToasts, newToast]); // 设置定时器,五秒后移除该 Toast setTimeout(() => { removeToast(id); }, 2000); }; const removeToast = (id: string) => { setToasts((prevToasts) => prevToasts.filter((toast) => toast.id !== id)); }; const dismiss = (id: string) => { setToasts((prevToasts) => prevToasts.map((toast) => toast.id === id ? { ...toast, onOpenChange: undefined } : toast ) ); }; return { toasts, showToast, removeToast }; }; export { useToast, ToastProps, ToastActionElement };