pocketbase/ui/src/stores/toasts.js

77 lines
1.8 KiB
JavaScript
Raw Normal View History

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;
});
}
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);
}