346fe4e04bf349361c6175e5dc3adcbd58e0e66b53dd691048a18d08c7d9bb90aeb5fd0af31ed5afca577a12f440c1eea861ce6f462c400a6ee0b2a840a8e0 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. var vue = require('vue');
  4. var message$2 = require('./message.js');
  5. var message$1 = require('./message2.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 normalizeAppendTo = (normalized) => {
  14. const appendTo = normalized.appendTo;
  15. if (!appendTo) {
  16. normalized.appendTo = document.body;
  17. } else if (shared.isString(normalized.appendTo)) {
  18. let appendTo2 = document.querySelector(normalized.appendTo);
  19. if (!types.isElement(appendTo2)) {
  20. appendTo2 = document.body;
  21. }
  22. normalized.appendTo = appendTo2;
  23. }
  24. };
  25. const normalizePlacement = (normalized) => {
  26. if (!normalized.placement && shared.isString(configProvider.messageConfig.placement) && configProvider.messageConfig.placement) {
  27. normalized.placement = configProvider.messageConfig.placement;
  28. }
  29. if (!normalized.placement) {
  30. normalized.placement = message$1.MESSAGE_DEFAULT_PLACEMENT;
  31. }
  32. if (!message$1.messagePlacement.includes(normalized.placement)) {
  33. error.debugWarn("ElMessage", `Invalid placement: ${normalized.placement}. Falling back to '${message$1.MESSAGE_DEFAULT_PLACEMENT}'.`);
  34. normalized.placement = message$1.MESSAGE_DEFAULT_PLACEMENT;
  35. }
  36. };
  37. const normalizeOptions = (params) => {
  38. const options = !params || shared.isString(params) || vue.isVNode(params) || shared.isFunction(params) ? { message: params } : params;
  39. const normalized = {
  40. ...message$1.messageDefaults,
  41. ...options
  42. };
  43. normalizeAppendTo(normalized);
  44. normalizePlacement(normalized);
  45. if (types.isBoolean(configProvider.messageConfig.grouping) && !normalized.grouping) {
  46. normalized.grouping = configProvider.messageConfig.grouping;
  47. }
  48. if (types.isNumber(configProvider.messageConfig.duration) && normalized.duration === 3e3) {
  49. normalized.duration = configProvider.messageConfig.duration;
  50. }
  51. if (types.isNumber(configProvider.messageConfig.offset) && normalized.offset === 16) {
  52. normalized.offset = configProvider.messageConfig.offset;
  53. }
  54. if (types.isBoolean(configProvider.messageConfig.showClose) && !normalized.showClose) {
  55. normalized.showClose = configProvider.messageConfig.showClose;
  56. }
  57. if (types.isBoolean(configProvider.messageConfig.plain) && !normalized.plain) {
  58. normalized.plain = configProvider.messageConfig.plain;
  59. }
  60. return normalized;
  61. };
  62. const closeMessage = (instance$1) => {
  63. const placement = instance$1.props.placement || message$1.MESSAGE_DEFAULT_PLACEMENT;
  64. const instances = instance.placementInstances[placement];
  65. const idx = instances.indexOf(instance$1);
  66. if (idx === -1)
  67. return;
  68. instances.splice(idx, 1);
  69. const { handler } = instance$1;
  70. handler.close();
  71. };
  72. const createMessage = ({ appendTo, ...options }, context) => {
  73. const id = `message_${seed++}`;
  74. const userOnClose = options.onClose;
  75. const container = document.createElement("div");
  76. const props = {
  77. ...options,
  78. id,
  79. onClose: () => {
  80. userOnClose == null ? void 0 : userOnClose();
  81. closeMessage(instance);
  82. },
  83. onDestroy: () => {
  84. vue.render(null, container);
  85. }
  86. };
  87. const vnode = vue.createVNode(message$2["default"], props, shared.isFunction(props.message) || vue.isVNode(props.message) ? {
  88. default: shared.isFunction(props.message) ? props.message : () => props.message
  89. } : null);
  90. vnode.appContext = context || message._context;
  91. vue.render(vnode, container);
  92. appendTo.appendChild(container.firstElementChild);
  93. const vm = vnode.component;
  94. const handler = {
  95. close: () => {
  96. vm.exposed.close();
  97. }
  98. };
  99. const instance = {
  100. id,
  101. vnode,
  102. vm,
  103. handler,
  104. props: vnode.component.props
  105. };
  106. return instance;
  107. };
  108. const message = (options = {}, context) => {
  109. if (!core.isClient)
  110. return { close: () => void 0 };
  111. const normalized = normalizeOptions(options);
  112. const instances = instance.getOrCreatePlacementInstances(normalized.placement || message$1.MESSAGE_DEFAULT_PLACEMENT);
  113. if (normalized.grouping && instances.length) {
  114. const instance2 = instances.find(({ vnode: vm }) => {
  115. var _a;
  116. return ((_a = vm.props) == null ? void 0 : _a.message) === normalized.message;
  117. });
  118. if (instance2) {
  119. instance2.props.repeatNum += 1;
  120. instance2.props.type = normalized.type;
  121. return instance2.handler;
  122. }
  123. }
  124. if (types.isNumber(configProvider.messageConfig.max) && instances.length >= configProvider.messageConfig.max) {
  125. return { close: () => void 0 };
  126. }
  127. const instance$1 = createMessage(normalized, context);
  128. instances.push(instance$1);
  129. return instance$1.handler;
  130. };
  131. message$1.messageTypes.forEach((type) => {
  132. message[type] = (options = {}, appContext) => {
  133. const normalized = normalizeOptions(options);
  134. return message({ ...normalized, type }, appContext);
  135. };
  136. });
  137. function closeAll(type) {
  138. for (const placement in instance.placementInstances) {
  139. if (shared.hasOwn(instance.placementInstances, placement)) {
  140. const instances = [...instance.placementInstances[placement]];
  141. for (const instance of instances) {
  142. if (!type || type === instance.props.type) {
  143. instance.handler.close();
  144. }
  145. }
  146. }
  147. }
  148. }
  149. function closeAllByPlacement(placement) {
  150. if (!instance.placementInstances[placement])
  151. return;
  152. const instances = [...instance.placementInstances[placement]];
  153. instances.forEach((instance) => instance.handler.close());
  154. }
  155. message.closeAll = closeAll;
  156. message.closeAllByPlacement = closeAllByPlacement;
  157. message._context = null;
  158. exports.closeAll = closeAll;
  159. exports.closeAllByPlacement = closeAllByPlacement;
  160. exports["default"] = message;
  161. //# sourceMappingURL=method.js.map