borders/services/alert.service.js

56 lines
1.2 KiB
JavaScript

import { Subject } from "rxjs";
import { filter } from "rxjs/operators";
export const alertService = {
onAlert,
success,
error,
info,
warn,
alert,
clear,
};
export const AlertType = {
Success: "Success",
Error: "Error",
Info: "Info",
Warning: "Warning",
};
const alertSubject = new Subject();
const defaultId = "default-alert";
// enable subscribing to alerts observable
function onAlert(id = defaultId) {
return alertSubject.asObservable().pipe(filter((x) => x && x.id === id));
}
// convenience methods
function success(message, options) {
alert({ ...options, type: AlertType.Success, message });
}
function error(message, options) {
alert({ ...options, type: AlertType.Error, message });
}
function info(message, options) {
alert({ ...options, type: AlertType.Info, message });
}
function warn(message, options) {
alert({ ...options, type: AlertType.Warning, message });
}
// core alert method
function alert(alert) {
alert.id = alert.id || defaultId;
alert.autoClose = alert.autoClose === undefined ? true : alert.autoClose;
alertSubject.next(alert);
}
// clear alerts
function clear(id = defaultId) {
alertSubject.next({ id });
}