@dfinity/gix-components
Version:
A UI kit developed by the GIX team
48 lines (47 loc) • 1.52 kB
JavaScript
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();