UNPKG

linkmore-design

Version:

🌈 πŸš€lmη»„δ»ΆεΊ“γ€‚πŸš€

83 lines (80 loc) β€’ 2.67 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = createUseMessage; var _useNotification = _interopRequireDefault(require("rc-notification/lib/useNotification")); var React = _interopRequireWildcard(require("react")); var _ = require(".."); var _configProvider = require("../../config-provider"); function createUseMessage(getRcNotificationInstance, getRCNoticeProps) { const useMessage = () => { // We can only get content by render let getPrefixCls; let getPopupContainer; // We create a proxy to handle delay created instance let innerInstance = null; const proxy = { add: (noticeProps, holderCallback) => { innerInstance?.component.add(noticeProps, holderCallback); } }; const [hookNotify, holder] = (0, _useNotification.default)(proxy); function notify(args) { const { prefixCls: customizePrefixCls } = args; const mergedPrefixCls = getPrefixCls('message', customizePrefixCls); const rootPrefixCls = getPrefixCls(); const target = args.key || (0, _.getKeyThenIncreaseKey)(); const closePromise = new Promise(resolve => { const callback = () => { if (typeof args.onClose === 'function') { args.onClose(); } return resolve(true); }; getRcNotificationInstance({ ...args, prefixCls: mergedPrefixCls, rootPrefixCls, getPopupContainer }, ({ prefixCls, instance }) => { innerInstance = instance; hookNotify(getRCNoticeProps({ ...args, key: target, onClose: callback }, prefixCls)); }); }); const result = () => { if (innerInstance) { innerInstance.removeNotice(target); } }; result.then = (filled, rejected) => closePromise.then(filled, rejected); result.promise = closePromise; return result; } // Fill functions const hookApiRef = React.useRef({}); hookApiRef.current.open = notify; _.typeList.forEach(type => (0, _.attachTypeApi)(hookApiRef.current, type)); return [hookApiRef.current, /*#__PURE__*/React.createElement(_configProvider.ConfigConsumer, { key: "holder" }, context => { ({ getPrefixCls, getPopupContainer } = context); return holder; })]; }; return useMessage; }