UNPKG

@alifd/next

Version:

A configurable component library for web built on React.

400 lines (333 loc) 12.2 kB
'use strict'; exports.__esModule = true; exports.withContext = undefined; var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties'); var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _class, _temp2; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _reactDom = require('react-dom'); var _reactDom2 = _interopRequireDefault(_reactDom); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _overlay = require('../overlay'); var _overlay2 = _interopRequireDefault(_overlay); var _configProvider = require('../config-provider'); var _configProvider2 = _interopRequireDefault(_configProvider); var _util = require('../util'); var _message = require('./message'); var _message2 = _interopRequireDefault(_message); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var config = _configProvider2.default.config; var instance = void 0; var timeouts = {}; var Mask = (_temp2 = _class = function (_React$Component) { (0, _inherits3.default)(Mask, _React$Component); function Mask() { var _temp, _this, _ret; (0, _classCallCheck3.default)(this, Mask); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = (0, _possibleConstructorReturn3.default)(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = { visible: true }, _this.handleClose = function () { var silent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; _this.setState({ visible: false }); if (!silent) { _this.props.onClose && _this.props.onClose(); } }, _temp), (0, _possibleConstructorReturn3.default)(_this, _ret); } Mask.prototype.componentWillUnmount = function componentWillUnmount() { var timeoutId = this.props.timeoutId; if (timeoutId in timeouts) { var timeout = timeouts[timeoutId]; clearTimeout(timeout); delete timeouts[timeoutId]; } }; Mask.prototype.render = function render() { /* eslint-disable no-unused-vars */ var _props = this.props, prefix = _props.prefix, type = _props.type, title = _props.title, content = _props.content, align = _props.align, offset = _props.offset, hasMask = _props.hasMask, afterClose = _props.afterClose, animation = _props.animation, overlayProps = _props.overlayProps, timeoutId = _props.timeoutId, className = _props.className, style = _props.style, others = (0, _objectWithoutProperties3.default)(_props, ['prefix', 'type', 'title', 'content', 'align', 'offset', 'hasMask', 'afterClose', 'animation', 'overlayProps', 'timeoutId', 'className', 'style']); /* eslint-enable */ var visible = this.state.visible; return _react2.default.createElement( _overlay2.default, (0, _extends3.default)({}, overlayProps, { prefix: prefix, animation: animation, visible: visible, align: align, offset: offset, hasMask: hasMask, afterClose: afterClose }), _react2.default.createElement( _message2.default, (0, _extends3.default)({}, others, { prefix: prefix, visible: true, type: type, shape: 'toast', title: title, style: style, className: prefix + 'message-wrapper ' + className, onClose: this.handleClose }), content ) ); }; return Mask; }(_react2.default.Component), _class.contextTypes = { prefix: _propTypes2.default.string }, _class.propTypes = { prefix: _propTypes2.default.string, type: _propTypes2.default.string, title: _propTypes2.default.node, content: _propTypes2.default.node, align: _propTypes2.default.string, offset: _propTypes2.default.array, hasMask: _propTypes2.default.bool, afterClose: _propTypes2.default.func, animation: _propTypes2.default.oneOfType([_propTypes2.default.object, _propTypes2.default.bool]), overlayProps: _propTypes2.default.object, onClose: _propTypes2.default.func, timeoutId: _propTypes2.default.string, style: _propTypes2.default.object, className: _propTypes2.default.string }, _class.defaultProps = { prefix: 'next-', align: 'tc tc', offset: [0, 30], hasMask: false, animation: { in: 'pulse', out: 'zoomOut' }, style: {}, className: '' }, _temp2); Mask.displayName = 'Mask'; var NewMask = config(Mask); var create = function create(props) { /* eslint-disable no-unused-vars */ var duration = props.duration, afterClose = props.afterClose, contextConfig = props.contextConfig, others = (0, _objectWithoutProperties3.default)(props, ['duration', 'afterClose', 'contextConfig']); /* eslint-enable no-unused-vars */ var div = document.createElement('div'); document.body.appendChild(div); var closeChain = function closeChain() { _reactDom2.default.unmountComponentAtNode(div); document.body.removeChild(div); afterClose && afterClose(); }; var newContext = contextConfig; if (!newContext) newContext = _configProvider2.default.getContext(); var mask = void 0, myRef = void 0, destroyed = false; var destroy = function destroy() { var inc = mask && mask.getInstance(); inc && inc.handleClose(true); destroyed = true; }; _reactDom2.default.render(_react2.default.createElement( _configProvider2.default, newContext, _react2.default.createElement(NewMask, (0, _extends3.default)({ afterClose: closeChain }, others, { ref: function ref(_ref) { myRef = _ref; } })) ), div, function () { mask = myRef; if (mask && destroyed) { destroy(); } }); return { component: mask, destroy: destroy }; }; function handleConfig(config, type) { var newConfig = {}; if (typeof config === 'string' || _react2.default.isValidElement(config)) { newConfig.title = config; } else if (isObject(config)) { newConfig = (0, _extends3.default)({}, config); } if (typeof newConfig.duration !== 'number') { newConfig.duration = 3000; } if (type) { newConfig.type = type; } return newConfig; } function isObject(obj) { return {}.toString.call(obj) === '[object Object]'; } function open(config, type) { close(); config = handleConfig(config, type); var timeoutId = (0, _util.guid)(); instance = create((0, _extends3.default)({}, config, { timeoutId: timeoutId })); if (config.duration > 0) { var timeout = setTimeout(close, config.duration); timeouts[timeoutId] = timeout; } } function close() { if (instance) { instance.destroy(); instance = null; } } /** * 创建提示弹层 * @exportName show * @param {Object} props 属性对象 */ function _show(config) { open(config); } /** * 关闭提示弹层 * @exportName hide */ function hide() { close(); } /** * 创建成功提示弹层 * @exportName success * @param {Object} props 属性对象 */ function _success(config) { open(config, 'success'); } /** * 创建警告提示弹层 * @exportName warning * @param {Object} props 属性对象 */ function _warning(config) { open(config, 'warning'); } /** * 创建错误提示弹层 * @exportName error * @param {Object} props 属性对象 */ function _error(config) { open(config, 'error'); } /** * 创建帮助提示弹层 * @exportName help * @param {Object} props 属性对象 */ function _help(config) { open(config, 'help'); } /** * 创建加载中提示弹层 * @exportName loading * @param {Object} props 属性对象 */ function _loading(config) { open(config, 'loading'); } /** * 创建通知提示弹层 * @exportName notice * @param {Object} props 属性对象 */ function _notice(config) { open(config, 'notice'); } exports.default = { show: _show, hide: hide, success: _success, warning: _warning, error: _error, help: _help, loading: _loading, notice: _notice }; var withContext = exports.withContext = function withContext(WrappedComponent) { var HOC = function HOC(props) { return _react2.default.createElement( _configProvider2.default.Consumer, null, function (contextConfig) { return _react2.default.createElement(WrappedComponent, (0, _extends3.default)({}, props, { contextMessage: { show: function show() { var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return _show((0, _extends3.default)({}, config, { contextConfig: contextConfig })); }, hide: hide, success: function success() { var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return _success((0, _extends3.default)({}, config, { contextConfig: contextConfig })); }, warning: function warning() { var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return _warning((0, _extends3.default)({}, config, { contextConfig: contextConfig })); }, error: function error() { var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return _error((0, _extends3.default)({}, config, { contextConfig: contextConfig })); }, help: function help() { var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return _help((0, _extends3.default)({}, config, { contextConfig: contextConfig })); }, loading: function loading() { var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return _loading((0, _extends3.default)({}, config, { contextConfig: contextConfig })); }, notice: function notice() { var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; return _notice((0, _extends3.default)({}, config, { contextConfig: contextConfig })); } } })); } ); }; return HOC; };