2022-07-07 05:19:05 +08:00
|
|
|
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;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2022-08-21 19:30:36 +08:00
|
|
|
export function removeAllToasts() {
|
2022-07-07 05:19:05 +08:00
|
|
|
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);
|
|
|
|
}
|