feat: add toasts

This commit is contained in:
Sam 2023-03-14 23:59:02 +01:00
parent 1a7186061a
commit 87e6e2809e
Signed by: sam
GPG key ID: B4EF20DDE721CAA1
3 changed files with 55 additions and 0 deletions

View file

@ -0,0 +1,13 @@
<script lang="ts">
import { Toast } from "sveltestrap";
export let header: string | undefined = undefined;
export let body: string;
let isOpen = true;
const toggle = () => (isOpen = !isOpen);
</script>
<Toast {isOpen} {header} body class="m-3" {toggle}>
{body}
</Toast>

35
frontend/src/lib/toast.ts Normal file
View file

@ -0,0 +1,35 @@
import { writable } from "svelte/store";
export interface ToastData {
header?: string;
body: string;
duration?: number;
}
interface IdToastData extends ToastData {
id: number;
}
export const toastStore = writable<IdToastData[]>([]);
let maxId = 0;
export const addToast = (data: ToastData) => {
const id = maxId++;
console.log(id);
toastStore.update((toasts) => (toasts = [...toasts, { ...data, id }]));
if (data.duration !== -1) {
setTimeout(() => {
toastStore.update((toasts) => (toasts = toasts.filter((toast) => toast.id !== id)));
}, data.duration ?? 5000);
}
return id;
};
export const delToast = (id: number) => {
toastStore.update((toasts) => (toasts = toasts.filter((toast) => toast.id !== id)));
};