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