UNPKG

@dfinity/gix-components

Version:
48 lines (47 loc) 1.52 kB
import { nonNullish } from "@dfinity/utils"; import { writable } from "svelte/store"; /** * Toast messages. * * - show: display a message in toast component * - hide: remove the toast message with that timestamp or the first one. * - update: update the existed toast content. * - reset: empty all toasts or optionally only those that match particular levels */ const initToastsStore = () => { const { subscribe, update, set } = writable([]); return { subscribe, show({ id, ...rest }) { const toastId = id ?? Symbol("toast"); update((messages) => { return [...messages, { ...rest, id: toastId }]; }); return toastId; }, hide(idToHide) { update((messages) => messages.filter(({ id }) => id !== idToHide)); }, update({ id, content, }) { update((messages) => // use map to preserve order messages.map((message) => { if (message.id !== id) { return message; } return { ...message, ...content, }; })); }, reset(levels) { if (nonNullish(levels) && levels.length > 0) { update((messages) => messages.filter(({ level }) => !levels.includes(level))); return; } set([]); }, }; }; export const toastsStore = initToastsStore();