Files
Website/resources/js/store/ToastStore.ts
2023-02-28 13:33:53 +10:00

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
);
},
},
});