UNPKG

vant-fork

Version:

Lightweight Mobile UI Components built on Vue

122 lines (99 loc) 2.36 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import Vue from 'vue'; import VueToast from './Toast'; import { isObj } from '../utils'; var defaultOptions = { type: 'text', mask: false, message: '', value: true, duration: 3000, position: 'middle', loadingType: 'circular', forbidClick: false, overlayStyle: {} }; var parseOptions = function parseOptions(message) { return isObj(message) ? message : { message: message }; }; var queue = []; var singleton = true; var currentOptions = _extends({}, defaultOptions); function createInstance() { if (!queue.length || !singleton) { var toast = new (Vue.extend(VueToast))({ el: document.createElement('div') }); document.body.appendChild(toast.$el); queue.push(toast); } return queue[queue.length - 1]; } ; // transform toast options to popup props function transformer(options) { options.overlay = options.mask; return options; } function Toast(options) { if (options === void 0) { options = {}; } var toast = createInstance(); options = _extends({}, currentOptions, parseOptions(options), { clear: function clear() { toast.value = false; } }); _extends(toast, transformer(options)); clearTimeout(toast.timer); if (options.duration > 0) { toast.timer = setTimeout(function () { toast.clear(); }, options.duration); } return toast; } ; var createMethod = function createMethod(type) { return function (options) { return Toast(_extends({ type: type }, parseOptions(options))); }; }; ['loading', 'success', 'fail'].forEach(function (method) { Toast[method] = createMethod(method); }); Toast.clear = function (all) { if (queue.length) { if (all) { queue.forEach(function (toast) { toast.clear(); }); queue = []; } else if (singleton) { queue[0].clear(); } else { queue.shift().clear(); } } }; Toast.setDefaultOptions = function (options) { _extends(currentOptions, options); }; Toast.resetDefaultOptions = function () { currentOptions = _extends({}, defaultOptions); }; Toast.allowMultiple = function (allow) { if (allow === void 0) { allow = true; } singleton = !allow; }; Toast.install = function () { Vue.use(VueToast); }; Vue.prototype.$toast = Toast; export default Toast;