UNPKG

@alifd/next

Version:

A configurable component library for web built on React.

251 lines (214 loc) 8.93 kB
'use strict'; exports.__esModule = true; var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); 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, _temp; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _overlay = require('../overlay'); var _overlay2 = _interopRequireDefault(_overlay); var _configProvider = require('../config-provider'); var _configProvider2 = _interopRequireDefault(_configProvider); var _util = require('../util'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /* eslint-disable react/prefer-stateless-function */ /** Loading */ var Loading = (_temp = _class = function (_React$Component) { (0, _inherits3.default)(Loading, _React$Component); function Loading() { (0, _classCallCheck3.default)(this, Loading); return (0, _possibleConstructorReturn3.default)(this, _React$Component.apply(this, arguments)); } Loading.prototype.render = function render() { var _classNames2, _classNames3, _classNames4; var _props = this.props, tip = _props.tip, visible = _props.visible, children = _props.children, className = _props.className, style = _props.style, indicator = _props.indicator, color = _props.color, prefix = _props.prefix, fullScreen = _props.fullScreen, disableScroll = _props.disableScroll, onVisibleChange = _props.onVisibleChange, tipAlign = _props.tipAlign, size = _props.size, inline = _props.inline, rtl = _props.rtl, safeNode = _props.safeNode; var indicatorDom = null; var dotCls = prefix + 'loading-dot'; if (indicator) { indicatorDom = indicator; } else { var _classNames; var backgroundColor = color; var fusionReactorCls = (0, _classnames2.default)((_classNames = {}, _classNames[prefix + 'loading-fusion-reactor'] = true, _classNames[prefix + 'loading-medium-fusion-reactor'] = size === 'medium', _classNames)); indicatorDom = _react2.default.createElement( 'div', { className: fusionReactorCls, dir: rtl ? 'rtl' : undefined }, _react2.default.createElement('span', { className: dotCls, style: { backgroundColor: backgroundColor } }), _react2.default.createElement('span', { className: dotCls, style: { backgroundColor: backgroundColor } }), _react2.default.createElement('span', { className: dotCls, style: { backgroundColor: backgroundColor } }), _react2.default.createElement('span', { className: dotCls, style: { backgroundColor: backgroundColor } }) ); } var loadingCls = (0, _classnames2.default)((_classNames2 = {}, _classNames2[prefix + 'loading'] = true, _classNames2[prefix + 'open'] = visible, _classNames2[prefix + 'loading-inline'] = inline, _classNames2[className] = className, _classNames2)); var tipCls = (0, _classnames2.default)((_classNames3 = {}, _classNames3[prefix + 'loading-tip'] = true, _classNames3[prefix + 'loading-tip-fullscreen'] = fullScreen, _classNames3[prefix + 'loading-right-tip'] = tipAlign === 'right', _classNames3)); var others = _util.obj.pickOthers(Loading.propTypes, this.props); var contentCls = (0, _classnames2.default)((_classNames4 = {}, _classNames4[prefix + 'loading-component'] = visible, _classNames4[prefix + 'loading-wrap'] = true, _classNames4)); return fullScreen ? [children, _react2.default.createElement( _overlay2.default, (0, _extends3.default)({ key: 'overlay', hasMask: true, align: 'cc cc', safeNode: safeNode, disableScroll: disableScroll }, others, { className: className, style: style, visible: visible, onRequestClose: onVisibleChange }), _react2.default.createElement( 'div', { className: tipCls }, _react2.default.createElement( 'div', { className: prefix + 'loading-indicator' }, indicatorDom ), _react2.default.createElement( 'div', { className: prefix + 'loading-tip-content' }, tip ), _react2.default.createElement( 'div', { className: prefix + 'loading-tip-placeholder' }, tip ) ) )] : _react2.default.createElement( 'div', (0, _extends3.default)({ className: loadingCls, style: style }, others), visible ? _react2.default.createElement( 'div', { className: tipCls }, _react2.default.createElement( 'div', { className: prefix + 'loading-indicator' }, indicatorDom ), _react2.default.createElement( 'div', { className: prefix + 'loading-tip-content' }, tip ), _react2.default.createElement( 'div', { className: prefix + 'loading-tip-placeholder' }, tip ) ) : null, _react2.default.createElement( 'div', { className: contentCls }, visible ? _react2.default.createElement('div', { className: prefix + 'loading-masker' }) : null, children ) ); }; return Loading; }(_react2.default.Component), _class.propTypes = (0, _extends3.default)({}, _configProvider2.default.propTypes, { /** * 样式前缀 */ prefix: _propTypes2.default.string, /** * 自定义内容,可以传入string或reactElement */ tip: _propTypes2.default.any, /** * 自定义内容位置 * @enumdesc 出现在动画右边, 出现在动画下面 */ tipAlign: _propTypes2.default.oneOf(['right', 'bottom']), /** * loading 状态, 默认 true */ visible: _propTypes2.default.bool, /** * 全屏模式下,loading弹层请求关闭时触发的回调函数 * @param {String} type 弹层关闭的来源 * @param {Object} e DOM 事件 */ onVisibleChange: _propTypes2.default.func, /** * 自定义class */ className: _propTypes2.default.string, /** * 自定义内联样式 */ style: _propTypes2.default.object, /** * 设置动画尺寸 * @description 仅仅对默认动画效果起作用 * @enumdesc 大号, 中号 */ size: _propTypes2.default.oneOf(['large', 'medium']), /** * 自定义动画 */ indicator: _propTypes2.default.any, /** * 动画颜色 */ color: _propTypes2.default.string, /** * 全屏展示 */ fullScreen: _propTypes2.default.bool, /** * 当点击 document 的时候,如果包含该节点则不会关闭弹层, * 如果是函数需要返回 ref,如果是字符串则是该 DOM 的 id,也可以直接传入 DOM 节点,或者以上值组成的数组 * 是否禁用滚动,仅在 fullScreen 模式下生效 */ disableScroll: _propTypes2.default.bool, /** * 安全节点,fullScreen时有效, */ safeNode: _propTypes2.default.any, /** * 子元素 */ children: _propTypes2.default.any, inline: _propTypes2.default.bool, rtl: _propTypes2.default.bool }), _class.defaultProps = { prefix: 'next-', visible: true, onVisibleChange: _util.func.noop, animate: null, tipAlign: 'bottom', size: 'large', inline: true, disableScroll: false }, _temp); Loading.displayName = 'Loading'; exports.default = _configProvider2.default.config(Loading); module.exports = exports['default'];