update
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
// @/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<ToasterToast[]>([]);
|
||||
|
||||
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 };
|
||||
Reference in New Issue
Block a user