61 lines
1.5 KiB
JavaScript
61 lines
1.5 KiB
JavaScript
// SPDX-FileCopyrightText: 2021 Johannes Loher
|
|
//
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
import { logger } from "../utils/logger";
|
|
import { getNotificationsSafe } from "../utils/utils";
|
|
|
|
/**
|
|
* @typedef {Object} NotificationOptions
|
|
* @property {boolean} [permanent=false]
|
|
* @property {boolean} [log=false]
|
|
*/
|
|
|
|
/**
|
|
* @typedef {(message: string, options?: NotificationOptions) => void} NotificationFunction
|
|
*/
|
|
|
|
/**
|
|
* @typedef {"info" | "warn" | "error"} NotificationType
|
|
*/
|
|
|
|
/**
|
|
* @param {NotificationType} type The type of the notification
|
|
* @returns {NotificationFunction}
|
|
*/
|
|
function getNotificationFunction(type) {
|
|
return (message, { permanent = false, log = false } = {}) => {
|
|
if (ui.notifications) {
|
|
ui.notifications[type](message, { permanent });
|
|
if (log) {
|
|
logger[type](message);
|
|
}
|
|
} else {
|
|
logger[type](message);
|
|
}
|
|
};
|
|
}
|
|
|
|
/**
|
|
* @param {string} message
|
|
* @param {NotificationType} type
|
|
* @param {NotificationOptions} [options={}]
|
|
*/
|
|
function notify(message, type, { permanent = false, log = false } = {}) {
|
|
const notifications = getNotificationsSafe();
|
|
if (notifications) {
|
|
notifications.notify(message, type, { permanent });
|
|
if (log) {
|
|
logger.getLoggingFunction(type)(message);
|
|
}
|
|
} else {
|
|
logger.getLoggingFunction(type)(message);
|
|
}
|
|
}
|
|
|
|
export const notifications = Object.freeze({
|
|
info: getNotificationFunction("info"),
|
|
warn: getNotificationFunction("warn"),
|
|
error: getNotificationFunction("error"),
|
|
notify,
|
|
});
|