1b308f7a7797b48557bdf215808db138404145736472eeb457316a18baf2dd07c063176e8dfc6d4deacd6a9d95342c4ee209efde4821a37dd3488aa5bc81f2 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. 'use strict';
  2. Object.defineProperty(exports, '__esModule', { value: true });
  3. var vue = require('vue');
  4. var index = require('./index.js');
  5. var core = require('@vueuse/core');
  6. var shared = require('@vue/shared');
  7. var types = require('../../../utils/types.js');
  8. const messageInstance = /* @__PURE__ */ new Map();
  9. const getAppendToElement = (props) => {
  10. let appendTo = document.body;
  11. if (props.appendTo) {
  12. if (shared.isString(props.appendTo)) {
  13. appendTo = document.querySelector(props.appendTo);
  14. }
  15. if (types.isElement(props.appendTo)) {
  16. appendTo = props.appendTo;
  17. }
  18. if (!types.isElement(appendTo)) {
  19. appendTo = document.body;
  20. }
  21. }
  22. return appendTo;
  23. };
  24. const initInstance = (props, container, appContext = null) => {
  25. const vnode = vue.createVNode(index["default"], props, shared.isFunction(props.message) || vue.isVNode(props.message) ? {
  26. default: shared.isFunction(props.message) ? props.message : () => props.message
  27. } : null);
  28. vnode.appContext = appContext;
  29. vue.render(vnode, container);
  30. getAppendToElement(props).appendChild(container.firstElementChild);
  31. return vnode.component;
  32. };
  33. const genContainer = () => {
  34. return document.createElement("div");
  35. };
  36. const showMessage = (options, appContext) => {
  37. const container = genContainer();
  38. options.onVanish = () => {
  39. vue.render(null, container);
  40. messageInstance.delete(vm);
  41. };
  42. options.onAction = (action) => {
  43. const currentMsg = messageInstance.get(vm);
  44. let resolve;
  45. if (options.showInput) {
  46. resolve = { value: vm.inputValue, action };
  47. } else {
  48. resolve = action;
  49. }
  50. if (options.callback) {
  51. options.callback(resolve, instance.proxy);
  52. } else {
  53. if (action === "cancel" || action === "close") {
  54. if (options.distinguishCancelAndClose && action !== "cancel") {
  55. currentMsg.reject("close");
  56. } else {
  57. currentMsg.reject("cancel");
  58. }
  59. } else {
  60. currentMsg.resolve(resolve);
  61. }
  62. }
  63. };
  64. const instance = initInstance(options, container, appContext);
  65. const vm = instance.proxy;
  66. for (const prop in options) {
  67. if (shared.hasOwn(options, prop) && !shared.hasOwn(vm.$props, prop)) {
  68. if (prop === "closeIcon" && shared.isObject(options[prop])) {
  69. vm[prop] = vue.markRaw(options[prop]);
  70. } else {
  71. vm[prop] = options[prop];
  72. }
  73. }
  74. }
  75. vm.visible = true;
  76. return vm;
  77. };
  78. function MessageBox(options, appContext = null) {
  79. if (!core.isClient)
  80. return Promise.reject();
  81. let callback;
  82. if (shared.isString(options) || vue.isVNode(options)) {
  83. options = {
  84. message: options
  85. };
  86. } else {
  87. callback = options.callback;
  88. }
  89. return new Promise((resolve, reject) => {
  90. const vm = showMessage(options, appContext != null ? appContext : MessageBox._context);
  91. messageInstance.set(vm, {
  92. options,
  93. callback,
  94. resolve,
  95. reject
  96. });
  97. });
  98. }
  99. const MESSAGE_BOX_VARIANTS = ["alert", "confirm", "prompt"];
  100. const MESSAGE_BOX_DEFAULT_OPTS = {
  101. alert: { closeOnPressEscape: false, closeOnClickModal: false },
  102. confirm: { showCancelButton: true },
  103. prompt: { showCancelButton: true, showInput: true }
  104. };
  105. MESSAGE_BOX_VARIANTS.forEach((boxType) => {
  106. MessageBox[boxType] = messageBoxFactory(boxType);
  107. });
  108. function messageBoxFactory(boxType) {
  109. return (message, title, options, appContext) => {
  110. let titleOrOpts = "";
  111. if (shared.isObject(title)) {
  112. options = title;
  113. titleOrOpts = "";
  114. } else if (types.isUndefined(title)) {
  115. titleOrOpts = "";
  116. } else {
  117. titleOrOpts = title;
  118. }
  119. return MessageBox(Object.assign({
  120. title: titleOrOpts,
  121. message,
  122. type: "",
  123. ...MESSAGE_BOX_DEFAULT_OPTS[boxType]
  124. }, options, {
  125. boxType
  126. }), appContext);
  127. };
  128. }
  129. MessageBox.close = () => {
  130. messageInstance.forEach((_, vm) => {
  131. vm.doClose();
  132. });
  133. messageInstance.clear();
  134. };
  135. MessageBox._context = null;
  136. exports["default"] = MessageBox;
  137. //# sourceMappingURL=messageBox.js.map