confirm.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. "use strict";
  2. "use client";
  3. var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
  4. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
  5. Object.defineProperty(exports, "__esModule", {
  6. value: true
  7. });
  8. exports.default = confirm;
  9. exports.modalGlobalConfig = modalGlobalConfig;
  10. exports.withConfirm = withConfirm;
  11. exports.withError = withError;
  12. exports.withInfo = withInfo;
  13. exports.withSuccess = withSuccess;
  14. exports.withWarn = withWarn;
  15. var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
  16. var _react = _interopRequireWildcard(require("react"));
  17. var _warning = _interopRequireDefault(require("../_util/warning"));
  18. var _configProvider = _interopRequireWildcard(require("../config-provider"));
  19. var _UnstableContext = require("../config-provider/UnstableContext");
  20. var _ConfirmDialog = _interopRequireDefault(require("./ConfirmDialog"));
  21. var _destroyFns = _interopRequireDefault(require("./destroyFns"));
  22. var _locale = require("./locale");
  23. let defaultRootPrefixCls = '';
  24. function getRootPrefixCls() {
  25. return defaultRootPrefixCls;
  26. }
  27. const ConfirmDialogWrapper = props => {
  28. var _a, _b;
  29. const {
  30. prefixCls: customizePrefixCls,
  31. getContainer,
  32. direction
  33. } = props;
  34. const runtimeLocale = (0, _locale.getConfirmLocale)();
  35. const config = (0, _react.useContext)(_configProvider.ConfigContext);
  36. const rootPrefixCls = getRootPrefixCls() || config.getPrefixCls();
  37. // because Modal.config set rootPrefixCls, which is different from other components
  38. const prefixCls = customizePrefixCls || `${rootPrefixCls}-modal`;
  39. let mergedGetContainer = getContainer;
  40. if (mergedGetContainer === false) {
  41. mergedGetContainer = undefined;
  42. if (process.env.NODE_ENV !== 'production') {
  43. process.env.NODE_ENV !== "production" ? (0, _warning.default)(false, 'Modal', 'Static method not support `getContainer` to be `false` since it do not have context env.') : void 0;
  44. }
  45. }
  46. return /*#__PURE__*/_react.default.createElement(_ConfirmDialog.default, Object.assign({}, props, {
  47. rootPrefixCls: rootPrefixCls,
  48. prefixCls: prefixCls,
  49. iconPrefixCls: config.iconPrefixCls,
  50. theme: config.theme,
  51. direction: direction !== null && direction !== void 0 ? direction : config.direction,
  52. locale: (_b = (_a = config.locale) === null || _a === void 0 ? void 0 : _a.Modal) !== null && _b !== void 0 ? _b : runtimeLocale,
  53. getContainer: mergedGetContainer
  54. }));
  55. };
  56. function confirm(config) {
  57. const global = (0, _configProvider.globalConfig)();
  58. if (process.env.NODE_ENV !== 'production' && !global.holderRender) {
  59. (0, _configProvider.warnContext)('Modal');
  60. }
  61. const container = document.createDocumentFragment();
  62. let currentConfig = Object.assign(Object.assign({}, config), {
  63. close,
  64. open: true
  65. });
  66. let timeoutId;
  67. let reactUnmount;
  68. function destroy(...args) {
  69. var _a;
  70. const triggerCancel = args.some(param => param === null || param === void 0 ? void 0 : param.triggerCancel);
  71. if (triggerCancel) {
  72. var _a2;
  73. (_a = config.onCancel) === null || _a === void 0 ? void 0 : (_a2 = _a).call.apply(_a2, [config, () => {}].concat((0, _toConsumableArray2.default)(args.slice(1))));
  74. }
  75. for (let i = 0; i < _destroyFns.default.length; i++) {
  76. const fn = _destroyFns.default[i];
  77. if (fn === close) {
  78. _destroyFns.default.splice(i, 1);
  79. break;
  80. }
  81. }
  82. reactUnmount();
  83. }
  84. function render(props) {
  85. clearTimeout(timeoutId);
  86. /**
  87. * https://github.com/ant-design/ant-design/issues/23623
  88. *
  89. * Sync render blocks React event. Let's make this async.
  90. */
  91. timeoutId = setTimeout(() => {
  92. const rootPrefixCls = global.getPrefixCls(undefined, getRootPrefixCls());
  93. const iconPrefixCls = global.getIconPrefixCls();
  94. const theme = global.getTheme();
  95. const dom = /*#__PURE__*/_react.default.createElement(ConfirmDialogWrapper, Object.assign({}, props));
  96. const reactRender = (0, _UnstableContext.unstableSetRender)();
  97. reactUnmount = reactRender(/*#__PURE__*/_react.default.createElement(_configProvider.default, {
  98. prefixCls: rootPrefixCls,
  99. iconPrefixCls: iconPrefixCls,
  100. theme: theme
  101. }, global.holderRender ? global.holderRender(dom) : dom), container);
  102. });
  103. }
  104. function close(...args) {
  105. currentConfig = Object.assign(Object.assign({}, currentConfig), {
  106. open: false,
  107. afterClose: () => {
  108. if (typeof config.afterClose === 'function') {
  109. config.afterClose();
  110. }
  111. // @ts-ignore
  112. destroy.apply(this, args);
  113. }
  114. });
  115. // Legacy support
  116. if (currentConfig.visible) {
  117. delete currentConfig.visible;
  118. }
  119. render(currentConfig);
  120. }
  121. function update(configUpdate) {
  122. if (typeof configUpdate === 'function') {
  123. currentConfig = configUpdate(currentConfig);
  124. } else {
  125. currentConfig = Object.assign(Object.assign({}, currentConfig), configUpdate);
  126. }
  127. render(currentConfig);
  128. }
  129. render(currentConfig);
  130. _destroyFns.default.push(close);
  131. return {
  132. destroy: close,
  133. update
  134. };
  135. }
  136. function withWarn(props) {
  137. return Object.assign(Object.assign({}, props), {
  138. type: 'warning'
  139. });
  140. }
  141. function withInfo(props) {
  142. return Object.assign(Object.assign({}, props), {
  143. type: 'info'
  144. });
  145. }
  146. function withSuccess(props) {
  147. return Object.assign(Object.assign({}, props), {
  148. type: 'success'
  149. });
  150. }
  151. function withError(props) {
  152. return Object.assign(Object.assign({}, props), {
  153. type: 'error'
  154. });
  155. }
  156. function withConfirm(props) {
  157. return Object.assign(Object.assign({}, props), {
  158. type: 'confirm'
  159. });
  160. }
  161. function modalGlobalConfig({
  162. rootPrefixCls
  163. }) {
  164. process.env.NODE_ENV !== "production" ? (0, _warning.default)(false, 'Modal', 'Modal.config is deprecated. Please use ConfigProvider.config instead.') : void 0;
  165. defaultRootPrefixCls = rootPrefixCls;
  166. }