method.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. var vue = require('vue');
  4. var message$2 = require('./message2.js');
  5. var message$1 = require('./message.js');
  6. var instance = require('./instance.js');
  7. var configProvider = require('../../config-provider/src/config-provider.js');
  8. var core = require('@vueuse/core');
  9. var types = require('../../../utils/types.js');
  10. var shared = require('@vue/shared');
  11. var error = require('../../../utils/error.js');
  12. let seed = 1;
  13. const normalizeOptions = (params) => {
  14. const options = !params || shared.isString(params) || vue.isVNode(params) || shared.isFunction(params) ? { message: params } : params;
  15. const normalized = {
  16. ...message$1.messageDefaults,
  17. ...options
  18. };
  19. if (!normalized.appendTo) {
  20. normalized.appendTo = document.body;
  21. } else if (shared.isString(normalized.appendTo)) {
  22. let appendTo = document.querySelector(normalized.appendTo);
  23. if (!types.isElement(appendTo)) {
  24. error.debugWarn("ElMessage", "the appendTo option is not an HTMLElement. Falling back to document.body.");
  25. appendTo = document.body;
  26. }
  27. normalized.appendTo = appendTo;
  28. }
  29. if (types.isBoolean(configProvider.messageConfig.grouping) && !normalized.grouping) {
  30. normalized.grouping = configProvider.messageConfig.grouping;
  31. }
  32. if (types.isNumber(configProvider.messageConfig.duration) && normalized.duration === 3e3) {
  33. normalized.duration = configProvider.messageConfig.duration;
  34. }
  35. if (types.isNumber(configProvider.messageConfig.offset) && normalized.offset === 16) {
  36. normalized.offset = configProvider.messageConfig.offset;
  37. }
  38. if (types.isBoolean(configProvider.messageConfig.showClose) && !normalized.showClose) {
  39. normalized.showClose = configProvider.messageConfig.showClose;
  40. }
  41. return normalized;
  42. };
  43. const closeMessage = (instance$1) => {
  44. const idx = instance.instances.indexOf(instance$1);
  45. if (idx === -1)
  46. return;
  47. instance.instances.splice(idx, 1);
  48. const { handler } = instance$1;
  49. handler.close();
  50. };
  51. const createMessage = ({ appendTo, ...options }, context) => {
  52. const id = `message_${seed++}`;
  53. const userOnClose = options.onClose;
  54. const container = document.createElement("div");
  55. const props = {
  56. ...options,
  57. id,
  58. onClose: () => {
  59. userOnClose == null ? void 0 : userOnClose();
  60. closeMessage(instance);
  61. },
  62. onDestroy: () => {
  63. vue.render(null, container);
  64. }
  65. };
  66. const vnode = vue.createVNode(message$2["default"], props, shared.isFunction(props.message) || vue.isVNode(props.message) ? {
  67. default: shared.isFunction(props.message) ? props.message : () => props.message
  68. } : null);
  69. vnode.appContext = context || message._context;
  70. vue.render(vnode, container);
  71. appendTo.appendChild(container.firstElementChild);
  72. const vm = vnode.component;
  73. const handler = {
  74. close: () => {
  75. vm.exposed.close();
  76. }
  77. };
  78. const instance = {
  79. id,
  80. vnode,
  81. vm,
  82. handler,
  83. props: vnode.component.props
  84. };
  85. return instance;
  86. };
  87. const message = (options = {}, context) => {
  88. if (!core.isClient)
  89. return { close: () => void 0 };
  90. const normalized = normalizeOptions(options);
  91. if (normalized.grouping && instance.instances.length) {
  92. const instance2 = instance.instances.find(({ vnode: vm }) => {
  93. var _a;
  94. return ((_a = vm.props) == null ? void 0 : _a.message) === normalized.message;
  95. });
  96. if (instance2) {
  97. instance2.props.repeatNum += 1;
  98. instance2.props.type = normalized.type;
  99. return instance2.handler;
  100. }
  101. }
  102. if (types.isNumber(configProvider.messageConfig.max) && instance.instances.length >= configProvider.messageConfig.max) {
  103. return { close: () => void 0 };
  104. }
  105. const instance$1 = createMessage(normalized, context);
  106. instance.instances.push(instance$1);
  107. return instance$1.handler;
  108. };
  109. message$1.messageTypes.forEach((type) => {
  110. message[type] = (options = {}, appContext) => {
  111. const normalized = normalizeOptions(options);
  112. return message({ ...normalized, type }, appContext);
  113. };
  114. });
  115. function closeAll(type) {
  116. const instancesToClose = [...instance.instances];
  117. for (const instance of instancesToClose) {
  118. if (!type || type === instance.props.type) {
  119. instance.handler.close();
  120. }
  121. }
  122. }
  123. message.closeAll = closeAll;
  124. message._context = null;
  125. exports.closeAll = closeAll;
  126. exports["default"] = message;
  127. //# sourceMappingURL=method.js.map