confirm.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
  2. import _extends from "@babel/runtime/helpers/esm/extends";
  3. import { createVNode as _createVNode } from "vue";
  4. import { createVNode, render as vueRender } from 'vue';
  5. import ConfirmDialog from './ConfirmDialog';
  6. import ConfigProvider, { globalConfigForApi } from '../config-provider';
  7. import omit from '../_util/omit';
  8. import { triggerVNodeUpdate } from '../_util/vnode';
  9. import { getConfirmLocale } from './locale';
  10. import destroyFns from './destroyFns';
  11. const confirm = config => {
  12. const container = document.createDocumentFragment();
  13. let currentConfig = _extends(_extends({}, omit(config, ['parentContext', 'appContext'])), {
  14. close,
  15. open: true
  16. });
  17. let confirmDialogInstance = null;
  18. function destroy() {
  19. if (confirmDialogInstance) {
  20. // destroy
  21. vueRender(null, container);
  22. confirmDialogInstance = null;
  23. }
  24. for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
  25. args[_key] = arguments[_key];
  26. }
  27. const triggerCancel = args.some(param => param && param.triggerCancel);
  28. if (config.onCancel && triggerCancel) {
  29. config.onCancel(() => {}, ...args.slice(1));
  30. }
  31. for (let i = 0; i < destroyFns.length; i++) {
  32. const fn = destroyFns[i];
  33. if (fn === close) {
  34. destroyFns.splice(i, 1);
  35. break;
  36. }
  37. }
  38. }
  39. function close() {
  40. for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
  41. args[_key2] = arguments[_key2];
  42. }
  43. currentConfig = _extends(_extends({}, currentConfig), {
  44. open: false,
  45. afterClose: () => {
  46. if (typeof config.afterClose === 'function') {
  47. config.afterClose();
  48. }
  49. destroy.apply(this, args);
  50. }
  51. });
  52. // Legacy support
  53. if (currentConfig.visible) {
  54. delete currentConfig.visible;
  55. }
  56. update(currentConfig);
  57. }
  58. function update(configUpdate) {
  59. if (typeof configUpdate === 'function') {
  60. currentConfig = configUpdate(currentConfig);
  61. } else {
  62. currentConfig = _extends(_extends({}, currentConfig), configUpdate);
  63. }
  64. if (confirmDialogInstance) {
  65. triggerVNodeUpdate(confirmDialogInstance, currentConfig, container);
  66. }
  67. }
  68. const Wrapper = p => {
  69. const global = globalConfigForApi;
  70. const rootPrefixCls = global.prefixCls;
  71. const prefixCls = p.prefixCls || `${rootPrefixCls}-modal`;
  72. const iconPrefixCls = global.iconPrefixCls;
  73. const runtimeLocale = getConfirmLocale();
  74. return _createVNode(ConfigProvider, _objectSpread(_objectSpread({}, global), {}, {
  75. "prefixCls": rootPrefixCls
  76. }), {
  77. default: () => [_createVNode(ConfirmDialog, _objectSpread(_objectSpread({}, p), {}, {
  78. "rootPrefixCls": rootPrefixCls,
  79. "prefixCls": prefixCls,
  80. "iconPrefixCls": iconPrefixCls,
  81. "locale": runtimeLocale,
  82. "cancelText": p.cancelText || runtimeLocale.cancelText
  83. }), null)]
  84. });
  85. };
  86. function render(props) {
  87. const vm = createVNode(Wrapper, _extends({}, props));
  88. vm.appContext = config.parentContext || config.appContext || vm.appContext;
  89. vueRender(vm, container);
  90. return vm;
  91. }
  92. confirmDialogInstance = render(currentConfig);
  93. destroyFns.push(close);
  94. return {
  95. destroy: close,
  96. update
  97. };
  98. };
  99. export default confirm;
  100. export function withWarn(props) {
  101. return _extends(_extends({}, props), {
  102. type: 'warning'
  103. });
  104. }
  105. export function withInfo(props) {
  106. return _extends(_extends({}, props), {
  107. type: 'info'
  108. });
  109. }
  110. export function withSuccess(props) {
  111. return _extends(_extends({}, props), {
  112. type: 'success'
  113. });
  114. }
  115. export function withError(props) {
  116. return _extends(_extends({}, props), {
  117. type: 'error'
  118. });
  119. }
  120. export function withConfirm(props) {
  121. return _extends(_extends({}, props), {
  122. type: 'confirm'
  123. });
  124. }