UNPKG

awesome-notifications

Version:

Lightweight library for beautifull and smooth notifications

107 lines (88 loc) 2.82 kB
import Options from "./options" import Toast from "./toast" import Popup from "./popup" import Elem from "./elem" import { tConsts } from "./constants" export default class Notifier { constructor(options = {}) { this.options = new Options(options) } tip(msg, options) { return this._addToast(msg, "tip", options).el } info(msg, options) { return this._addToast(msg, "info", options).el } success(msg, options) { return this._addToast(msg, "success", options).el } warning(msg, options) { return this._addToast(msg, "warning", options).el } alert(msg, options) { return this._addToast(msg, "alert", options).el } async (promise, onResolve, onReject, msg, options) { let asyncToast = this._addToast(msg, "async", options) return this._afterAsync(promise, onResolve, onReject, options, asyncToast) } confirm(msg, onOk, onCancel, options) { return this._addPopup(msg, "confirm", options, onOk, onCancel) } asyncBlock(promise, onResolve, onReject, msg, options) { let asyncBlock = this._addPopup(msg, "async-block", options) return this._afterAsync(promise, onResolve, onReject, options, asyncBlock) } modal(msg, className, options) { return this._addPopup(msg, className, options) } closeToasts() { let c = this.container while (c.firstChild) { c.removeChild(c.firstChild) } } // Tools _addPopup(msg, className, options, onOk, onCancel) { return new Popup(msg, className, this.options.override(options), onOk, onCancel) } _addToast(msg, type, options, old) { options = this.options.override(options) let newToast = new Toast(msg, type, options, this.container) if (old) { if (old instanceof Popup) return old.delete().then(() => newToast.insert()) let i = old.replace(newToast) return i } return newToast.insert() } _afterAsync(promise, onResolve, onReject, options, oldElement) { return promise.then( this._responseHandler(onResolve, "success", options, oldElement), this._responseHandler(onReject, "alert", options, oldElement) ) } _responseHandler(payload, toastName, options, oldElement) { return result => { switch (typeof payload) { case 'undefined': case 'string': let msg = toastName === 'alert' ? payload || result : payload this._addToast(msg, toastName, options, oldElement) break default: oldElement.delete().then(() => { if (payload) payload(result) }) } } } _createContainer() { return new Elem(document.body, tConsts.ids.container, `awn-${this.options.position}`).insert().el } get container() { return document.getElementById(tConsts.ids.container) || this._createContainer() } }