method.js 3.9 KB

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