UNPKG

veui

Version:

Baidu Enterprise UI for Vue.js.

84 lines (69 loc) 1.9 kB
import Vue from 'vue' import { isString, isObject, isNumber } from 'lodash' import ToastList from '../components/ToastList' import warn from '../utils/warn' let Container = Vue.extend(ToastList) export class ToastManager { constructor () { this.container = new Container() } init () { let el = document.createElement('div') document.body.appendChild(el) this.container.$mount(el) this.el = el } add (option) { if (!this.el) { this.init() } let messages = [] if (Array.isArray(option)) { messages = option.map((item) => this.container.add(item)) } else if (isObject(option)) { messages = [this.container.add(option)] } else { warn('[toast-manager] Invalid arguments for Toasts.') } return () => messages.forEach((message) => this.container.remove(message)) } remove (index) { let container = this.container if (isNumber(index)) { container.remove(container.messages[index]) return } // no valid index, remove until empty while (container.messages.length) { this.remove(0) } } show (message, type) { let options = {} if (isObject(message)) { options = { ...message } } else if (isString(message)) { options.message = message } if (isObject(type)) { options = { ...options, ...type } } else if (isString(type)) { options.type = type } return this.add(options) } success (message, options) { return this.show(message, { ...options, type: 'success' }) } warn (message, options) { return this.show(message, { ...options, type: 'warning' }) } info (message, options) { return this.show(message, { ...options, type: 'info' }) } error (message, options) { return this.show(message, { ...options, type: 'error' }) } } let toast = new ToastManager() export default toast