25 lines
564 B
TypeScript
25 lines
564 B
TypeScript
import { create } from 'zustand';
|
|
|
|
interface ToastItem {
|
|
id: number;
|
|
message: string;
|
|
}
|
|
|
|
interface ToastState {
|
|
toasts: ToastItem[];
|
|
show: (message: string) => void;
|
|
dismiss: (id: number) => void;
|
|
}
|
|
|
|
let counter = 0;
|
|
|
|
export const useToastStore = create<ToastState>((set, get) => ({
|
|
toasts: [],
|
|
show: (message) => {
|
|
const id = ++counter;
|
|
set((s) => ({ toasts: [...s.toasts, { id, message }] }));
|
|
window.setTimeout(() => get().dismiss(id), 2200);
|
|
},
|
|
dismiss: (id) => set((s) => ({ toasts: s.toasts.filter((t) => t.id !== id) })),
|
|
}));
|