UNPKG

choerodon-ui

Version:

An enterprise-class UI design language and React-based implementation

184 lines (160 loc) 5.52 kB
import React from 'react'; import isPromise from 'is-promise'; import noop from 'lodash/noop'; import isString from 'lodash/isString'; import { MessageManager } from 'choerodon-ui/shared'; import Icon from '../icon'; import Progress from '../progress'; import { ProgressType } from '../progress/enum'; import { Size } from '../_util/enum'; import { newNotificationInstance } from '../notification/Notification'; import { getPlacementStyle, getPlacementTransitionName } from './util'; import { getPrefixCls } from '../configure/utils'; var _config = MessageManager.config; function getCustomizePrefixCls() { return getPrefixCls('message', _config.prefixCls); } function getMessageInstance(placement, callback, contentClassName) { var instance = MessageManager.instance; if (instance) { if (isPromise(instance)) { instance.then(callback); return instance; } callback(instance); return Promise.resolve(instance); } var promise = new Promise(function (resolve) { newNotificationInstance({ prefixCls: getCustomizePrefixCls(), style: getPlacementStyle(placement, _config.top, _config.bottom), transitionName: getPlacementTransitionName(placement, _config.transitionName), getContainer: _config.getContainer, contentClassName: contentClassName, maxCount: _config.maxCount }, function (instance) { resolve(instance); MessageManager.instance = instance; callback(instance); }); }); MessageManager.instance = promise; return promise; } function notice(content) { var duration = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _config.duration; var type = arguments.length > 2 ? arguments[2] : undefined; var _onClose = arguments.length > 3 ? arguments[3] : undefined; var placement = arguments.length > 4 ? arguments[4] : undefined; var iconType = { info: 'info', success: 'check_circle', error: 'error', warning: 'warning', loading: 'loading' }[type]; if (isString(_onClose)) { placement = _onClose; _onClose = noop; } if (typeof duration === 'function') { _onClose = duration; duration = _config.duration; } else if (isString(duration)) { placement = duration; } var target = MessageManager.getUuid(); var prefixCls = getCustomizePrefixCls(); var icon = iconType === 'loading' ? /*#__PURE__*/React.createElement(Progress, { type: ProgressType.loading, size: Size.small }) : /*#__PURE__*/React.createElement(Icon, { type: iconType }); var promise; var closePromise = new Promise(function (resolve) { promise = getMessageInstance(placement || _config.placement, function (instance) { instance.notice({ key: target, duration: duration, style: {}, contentClassName: "".concat(prefixCls, "-content-").concat(type), children: /*#__PURE__*/React.createElement("div", { className: "".concat(prefixCls, "-custom-content ").concat(prefixCls, "-").concat(type) }, icon, /*#__PURE__*/React.createElement("span", null, content)), onClose: function onClose() { if (typeof _onClose === 'function') { _onClose(); } resolve(); } }); }, "".concat(prefixCls, "-content-").concat(type)); }); var result = function result() { if (promise) { promise.then(function (ins) { return ins.removeNotice(target); }); } }; result.then = function (filled, rejected) { return closePromise.then(filled, rejected); }; result.promise = closePromise; return result; } export default { info: function info(content, duration, onClose, placement) { return notice(content, duration, 'info', onClose, placement); }, success: function success(content, duration, onClose, placement) { return notice(content, duration, 'success', onClose, placement); }, error: function error(content, duration, onClose, placement) { return notice(content, duration, 'error', onClose, placement); }, // Departed usage, please use warning() warn: function warn(content, duration, onClose, placement) { return notice(content, duration, 'warning', onClose, placement); }, warning: function warning(content, duration, onClose, placement) { return notice(content, duration, 'warning', onClose, placement); }, loading: function loading(content, duration, onClose, placement) { return notice(content, duration, 'loading', onClose, placement); }, config: function config(options) { if (options.top !== undefined) { _config.top = options.top; MessageManager.clear(); } if (options.bottom !== undefined) { _config.bottom = options.bottom; MessageManager.clear(); } if (options.duration !== undefined) { _config.duration = options.duration; } if (options.prefixCls !== undefined) { _config.prefixCls = options.prefixCls; } if (options.getContainer !== undefined) { _config.getContainer = options.getContainer; } if (options.transitionName !== undefined) { _config.transitionName = options.transitionName; MessageManager.clear(); } if (options.placement !== undefined) { _config.placement = options.placement; } if (options.maxCount !== undefined) { _config.maxCount = options.maxCount; } }, destroy: function destroy() { MessageManager.clear(); } }; //# sourceMappingURL=index.js.map