123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263 |
- "use strict";
- "use client";
- var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = exports.actWrapper = exports.actDestroy = void 0;
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
- var _react = _interopRequireWildcard(require("react"));
- var _context = require("../app/context");
- var _configProvider = _interopRequireWildcard(require("../config-provider"));
- var _UnstableContext = require("../config-provider/UnstableContext");
- var _PurePanel = _interopRequireDefault(require("./PurePanel"));
- var _useMessage = _interopRequireWildcard(require("./useMessage"));
- var _util = require("./util");
- let message = null;
- let act = callback => callback();
- let taskQueue = [];
- let defaultGlobalConfig = {};
- function getGlobalContext() {
- const {
- getContainer,
- duration,
- rtl,
- maxCount,
- top
- } = defaultGlobalConfig;
- const mergedContainer = (getContainer === null || getContainer === void 0 ? void 0 : getContainer()) || document.body;
- return {
- getContainer: () => mergedContainer,
- duration,
- rtl,
- maxCount,
- top
- };
- }
- const GlobalHolder = /*#__PURE__*/_react.default.forwardRef((props, ref) => {
- const {
- messageConfig,
- sync
- } = props;
- const {
- getPrefixCls
- } = (0, _react.useContext)(_configProvider.ConfigContext);
- const prefixCls = defaultGlobalConfig.prefixCls || getPrefixCls('message');
- const appConfig = (0, _react.useContext)(_context.AppConfigContext);
- const [api, holder] = (0, _useMessage.useInternalMessage)(Object.assign(Object.assign(Object.assign({}, messageConfig), {
- prefixCls
- }), appConfig.message));
- _react.default.useImperativeHandle(ref, () => {
- const instance = Object.assign({}, api);
- Object.keys(instance).forEach(method => {
- instance[method] = (...args) => {
- sync();
- return api[method].apply(api, args);
- };
- });
- return {
- instance,
- sync
- };
- });
- return holder;
- });
- const GlobalHolderWrapper = /*#__PURE__*/_react.default.forwardRef((_, ref) => {
- const [messageConfig, setMessageConfig] = _react.default.useState(getGlobalContext);
- const sync = () => {
- setMessageConfig(getGlobalContext);
- };
- _react.default.useEffect(sync, []);
- const global = (0, _configProvider.globalConfig)();
- const rootPrefixCls = global.getRootPrefixCls();
- const rootIconPrefixCls = global.getIconPrefixCls();
- const theme = global.getTheme();
- const dom = /*#__PURE__*/_react.default.createElement(GlobalHolder, {
- ref: ref,
- sync: sync,
- messageConfig: messageConfig
- });
- return /*#__PURE__*/_react.default.createElement(_configProvider.default, {
- prefixCls: rootPrefixCls,
- iconPrefixCls: rootIconPrefixCls,
- theme: theme
- }, global.holderRender ? global.holderRender(dom) : dom);
- });
- const flushMessageQueue = () => {
- if (!message) {
- const holderFragment = document.createDocumentFragment();
- const newMessage = {
- fragment: holderFragment
- };
- message = newMessage;
- // Delay render to avoid sync issue
- act(() => {
- const reactRender = (0, _UnstableContext.unstableSetRender)();
- reactRender(/*#__PURE__*/_react.default.createElement(GlobalHolderWrapper, {
- ref: node => {
- const {
- instance,
- sync
- } = node || {};
- // React 18 test env will throw if call immediately in ref
- Promise.resolve().then(() => {
- if (!newMessage.instance && instance) {
- newMessage.instance = instance;
- newMessage.sync = sync;
- flushMessageQueue();
- }
- });
- }
- }), holderFragment);
- });
- return;
- }
- // Notification not ready
- if (!message.instance) {
- return;
- }
- // >>> Execute task
- taskQueue.forEach(task => {
- const {
- type,
- skipped
- } = task;
- // Only `skipped` when user call notice but cancel it immediately
- // and instance not ready
- if (!skipped) {
- switch (type) {
- case 'open':
- {
- act(() => {
- const closeFn = message.instance.open(Object.assign(Object.assign({}, defaultGlobalConfig), task.config));
- closeFn === null || closeFn === void 0 ? void 0 : closeFn.then(task.resolve);
- task.setCloseFn(closeFn);
- });
- break;
- }
- case 'destroy':
- act(() => {
- message === null || message === void 0 ? void 0 : message.instance.destroy(task.key);
- });
- break;
- // Other type open
- default:
- {
- act(() => {
- var _message$instance;
- const closeFn = (_message$instance = message.instance)[type].apply(_message$instance, (0, _toConsumableArray2.default)(task.args));
- closeFn === null || closeFn === void 0 ? void 0 : closeFn.then(task.resolve);
- task.setCloseFn(closeFn);
- });
- }
- }
- }
- });
- // Clean up
- taskQueue = [];
- };
- // ==============================================================================
- // == Export ==
- // ==============================================================================
- function setMessageGlobalConfig(config) {
- defaultGlobalConfig = Object.assign(Object.assign({}, defaultGlobalConfig), config);
- // Trigger sync for it
- act(() => {
- var _a;
- (_a = message === null || message === void 0 ? void 0 : message.sync) === null || _a === void 0 ? void 0 : _a.call(message);
- });
- }
- function open(config) {
- const result = (0, _util.wrapPromiseFn)(resolve => {
- let closeFn;
- const task = {
- type: 'open',
- config,
- resolve,
- setCloseFn: fn => {
- closeFn = fn;
- }
- };
- taskQueue.push(task);
- return () => {
- if (closeFn) {
- act(() => {
- closeFn();
- });
- } else {
- task.skipped = true;
- }
- };
- });
- flushMessageQueue();
- return result;
- }
- function typeOpen(type, args) {
- const global = (0, _configProvider.globalConfig)();
- if (process.env.NODE_ENV !== 'production' && !global.holderRender) {
- (0, _configProvider.warnContext)('message');
- }
- const result = (0, _util.wrapPromiseFn)(resolve => {
- let closeFn;
- const task = {
- type,
- args,
- resolve,
- setCloseFn: fn => {
- closeFn = fn;
- }
- };
- taskQueue.push(task);
- return () => {
- if (closeFn) {
- act(() => {
- closeFn();
- });
- } else {
- task.skipped = true;
- }
- };
- });
- flushMessageQueue();
- return result;
- }
- const destroy = key => {
- taskQueue.push({
- type: 'destroy',
- key
- });
- flushMessageQueue();
- };
- const methods = ['success', 'info', 'warning', 'error', 'loading'];
- const baseStaticMethods = {
- open,
- destroy,
- config: setMessageGlobalConfig,
- useMessage: _useMessage.default,
- _InternalPanelDoNotUseOrYouWillBeFired: _PurePanel.default
- };
- const staticMethods = baseStaticMethods;
- methods.forEach(type => {
- staticMethods[type] = (...args) => typeOpen(type, args);
- });
- // ==============================================================================
- // == Test ==
- // ==============================================================================
- const noop = () => {};
- let _actWrapper = noop;
- if (process.env.NODE_ENV === 'test') {
- _actWrapper = wrapper => {
- act = wrapper;
- };
- }
- const actWrapper = exports.actWrapper = _actWrapper;
- let _actDestroy = noop;
- if (process.env.NODE_ENV === 'test') {
- _actDestroy = () => {
- message = null;
- };
- }
- const actDestroy = exports.actDestroy = _actDestroy;
- var _default = exports.default = staticMethods;
|