77 lines
1.8 KiB
JavaScript
77 lines
1.8 KiB
JavaScript
|
import { writable } from "svelte/store";
|
||
|
import CommonHelper from "@/utils/CommonHelper";
|
||
|
|
||
|
export const toasts = writable([]);
|
||
|
|
||
|
export function addInfoToast(message, duration = 4000) {
|
||
|
return addToast(message, "info", duration);
|
||
|
}
|
||
|
|
||
|
export function addSuccessToast(message, duration = 3000) {
|
||
|
return addToast(message, "success", duration);
|
||
|
}
|
||
|
|
||
|
export function addErrorToast(message, duration = 4500) {
|
||
|
return addToast(message, "error", duration);
|
||
|
}
|
||
|
|
||
|
export function addWarningToast(message, duration = 4500) {
|
||
|
return addToast(message, "warning", duration);
|
||
|
}
|
||
|
|
||
|
export function addToast(message, type, duration) {
|
||
|
duration = duration || 4000;
|
||
|
const toast = {
|
||
|
message: message,
|
||
|
type: type,
|
||
|
duration: duration,
|
||
|
timeout: setTimeout(() => {
|
||
|
removeToast(toast);
|
||
|
}, duration)
|
||
|
};
|
||
|
|
||
|
toasts.update((t) => {
|
||
|
removeToastFromArray(t, toast.message)
|
||
|
|
||
|
CommonHelper.pushOrReplaceByKey(t, toast, "message");
|
||
|
|
||
|
return t;
|
||
|
});
|
||
|
}
|
||
|
|
||
|
export function removeToast(messageOrToast) {
|
||
|
toasts.update((t) => {
|
||
|
removeToastFromArray(t, messageOrToast);
|
||
|
|
||
|
return t;
|
||
|
});
|
||
|
}
|
||
|
|
||
|
export function removeAll() {
|
||
|
toasts.update((t) => {
|
||
|
for (let toast of t) {
|
||
|
removeToastFromArray(t, toast);
|
||
|
}
|
||
|
|
||
|
return [];
|
||
|
});
|
||
|
}
|
||
|
|
||
|
// Internal toast removal method (usually used to delete previous duplicated toasts).
|
||
|
// NB! This doesn't update the store value! Use `removeToast()` instead.
|
||
|
function removeToastFromArray(arr, messageOrToast) {
|
||
|
let toast;
|
||
|
if (typeof messageOrToast == "string") {
|
||
|
toast = CommonHelper.findByKey(arr, "message", messageOrToast);
|
||
|
} else {
|
||
|
toast = messageOrToast;
|
||
|
}
|
||
|
|
||
|
if (!toast) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
clearTimeout(toast.timeout);
|
||
|
CommonHelper.removeByKey(arr, "message", toast.message);
|
||
|
}
|