54 lines
1.1 KiB
TypeScript
54 lines
1.1 KiB
TypeScript
import { defineStore } from "pinia";
|
|
|
|
export interface ToastOptions {
|
|
id?: number;
|
|
title?: string;
|
|
content: string;
|
|
type?: string;
|
|
}
|
|
|
|
export interface ToastItem {
|
|
id: number;
|
|
title: string;
|
|
content: string;
|
|
type: string;
|
|
}
|
|
|
|
export interface ToastStore {
|
|
toasts: ToastItem[];
|
|
}
|
|
|
|
export const defaultToastItem: ToastItem = {
|
|
id: 0,
|
|
title: "",
|
|
content: "",
|
|
type: "primary",
|
|
};
|
|
|
|
export const useToastStore = defineStore({
|
|
id: "toasts",
|
|
state: (): ToastStore => ({
|
|
toasts: [],
|
|
}),
|
|
|
|
actions: {
|
|
addToast(toast: ToastOptions) {
|
|
if (!toast.id || toast.id == 0) {
|
|
toast.id =
|
|
Math.floor(Math.random() * Number.MAX_SAFE_INTEGER) + 1;
|
|
}
|
|
|
|
toast.title = toast.title || defaultToastItem.title;
|
|
toast.type = toast.type || defaultToastItem.type;
|
|
|
|
this.toasts.push(toast);
|
|
},
|
|
|
|
clearToast(id: number) {
|
|
this.toasts = this.toasts.filter(
|
|
(item: ToastItem) => item.id !== id
|
|
);
|
|
},
|
|
},
|
|
});
|