index.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. import _extends from "@babel/runtime/helpers/esm/extends";
  2. import Vue from 'vue';
  3. import VueToast from './Toast';
  4. import { isObj, isServer, isInDocument } from '../utils';
  5. var defaultOptions = {
  6. type: 'text',
  7. mask: false,
  8. value: true,
  9. message: '',
  10. className: '',
  11. onClose: null,
  12. duration: 3000,
  13. position: 'middle',
  14. forbidClick: false,
  15. loadingType: 'circular',
  16. getContainer: 'body',
  17. overlayStyle: null
  18. };
  19. var parseOptions = function parseOptions(message) {
  20. return isObj(message) ? message : {
  21. message: message
  22. };
  23. };
  24. var queue = [];
  25. var multiple = false;
  26. var currentOptions = _extends({}, defaultOptions);
  27. function createInstance() {
  28. /* istanbul ignore if */
  29. if (isServer) {
  30. return {};
  31. }
  32. if (!queue.length || multiple || !isInDocument(queue[0].$el)) {
  33. var toast = new (Vue.extend(VueToast))({
  34. el: document.createElement('div')
  35. });
  36. queue.push(toast);
  37. }
  38. return queue[queue.length - 1];
  39. } // transform toast options to popup props
  40. function transformer(options) {
  41. options.overlay = options.mask;
  42. return options;
  43. }
  44. function Toast(options) {
  45. if (options === void 0) {
  46. options = {};
  47. }
  48. var toast = createInstance(); // should add z-index if previous toast has not disappeared
  49. if (toast.value) {
  50. toast.updateZIndex();
  51. }
  52. options = _extends({}, currentOptions, parseOptions(options), {
  53. clear: function clear() {
  54. toast.value = false;
  55. if (options.onClose) {
  56. options.onClose();
  57. }
  58. if (multiple && !isServer) {
  59. clearTimeout(toast.timer);
  60. queue = queue.filter(function (item) {
  61. return item !== toast;
  62. });
  63. var parent = toast.$el.parentNode;
  64. if (parent) {
  65. parent.removeChild(toast.$el);
  66. }
  67. toast.$destroy();
  68. }
  69. }
  70. });
  71. _extends(toast, transformer(options));
  72. clearTimeout(toast.timer);
  73. if (options.duration > 0) {
  74. toast.timer = setTimeout(function () {
  75. toast.clear();
  76. }, options.duration);
  77. }
  78. return toast;
  79. }
  80. var createMethod = function createMethod(type) {
  81. return function (options) {
  82. return Toast(_extends({
  83. type: type
  84. }, parseOptions(options)));
  85. };
  86. };
  87. ['loading', 'success', 'fail'].forEach(function (method) {
  88. Toast[method] = createMethod(method);
  89. });
  90. Toast.clear = function (all) {
  91. if (queue.length) {
  92. if (all) {
  93. queue.forEach(function (toast) {
  94. toast.clear();
  95. });
  96. queue = [];
  97. } else if (!multiple) {
  98. queue[0].clear();
  99. } else {
  100. queue.shift().clear();
  101. }
  102. }
  103. };
  104. Toast.setDefaultOptions = function (options) {
  105. _extends(currentOptions, options);
  106. };
  107. Toast.resetDefaultOptions = function () {
  108. currentOptions = _extends({}, defaultOptions);
  109. };
  110. Toast.allowMultiple = function (value) {
  111. if (value === void 0) {
  112. value = true;
  113. }
  114. multiple = value;
  115. };
  116. Toast.install = function () {
  117. Vue.use(VueToast);
  118. };
  119. Vue.prototype.$toast = Toast;
  120. export default Toast;