UNPKG

8.93 kBJavaScriptView Raw
1'use strict';
2
3exports.__esModule = true;
4
5var _extends2 = require('babel-runtime/helpers/extends');
6
7var _extends3 = _interopRequireDefault(_extends2);
8
9var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
10
11var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
12
13var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn');
14
15var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2);
16
17var _inherits2 = require('babel-runtime/helpers/inherits');
18
19var _inherits3 = _interopRequireDefault(_inherits2);
20
21var _class, _temp;
22
23var _react = require('react');
24
25var _react2 = _interopRequireDefault(_react);
26
27var _propTypes = require('prop-types');
28
29var _propTypes2 = _interopRequireDefault(_propTypes);
30
31var _classnames = require('classnames');
32
33var _classnames2 = _interopRequireDefault(_classnames);
34
35var _overlay = require('../overlay');
36
37var _overlay2 = _interopRequireDefault(_overlay);
38
39var _configProvider = require('../config-provider');
40
41var _configProvider2 = _interopRequireDefault(_configProvider);
42
43var _util = require('../util');
44
45function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
46
47/* eslint-disable react/prefer-stateless-function */
48
49/** Loading */
50var Loading = (_temp = _class = function (_React$Component) {
51 (0, _inherits3.default)(Loading, _React$Component);
52
53 function Loading() {
54 (0, _classCallCheck3.default)(this, Loading);
55 return (0, _possibleConstructorReturn3.default)(this, _React$Component.apply(this, arguments));
56 }
57
58 Loading.prototype.render = function render() {
59 var _classNames2, _classNames3, _classNames4;
60
61 var _props = this.props,
62 tip = _props.tip,
63 visible = _props.visible,
64 children = _props.children,
65 className = _props.className,
66 style = _props.style,
67 indicator = _props.indicator,
68 color = _props.color,
69 prefix = _props.prefix,
70 fullScreen = _props.fullScreen,
71 disableScroll = _props.disableScroll,
72 onVisibleChange = _props.onVisibleChange,
73 tipAlign = _props.tipAlign,
74 size = _props.size,
75 inline = _props.inline,
76 rtl = _props.rtl,
77 safeNode = _props.safeNode;
78
79
80 var indicatorDom = null;
81 var dotCls = prefix + 'loading-dot';
82
83 if (indicator) {
84 indicatorDom = indicator;
85 } else {
86 var _classNames;
87
88 var backgroundColor = color;
89 var fusionReactorCls = (0, _classnames2.default)((_classNames = {}, _classNames[prefix + 'loading-fusion-reactor'] = true, _classNames[prefix + 'loading-medium-fusion-reactor'] = size === 'medium', _classNames));
90 indicatorDom = _react2.default.createElement(
91 'div',
92 { className: fusionReactorCls, dir: rtl ? 'rtl' : undefined },
93 _react2.default.createElement('span', { className: dotCls, style: { backgroundColor: backgroundColor } }),
94 _react2.default.createElement('span', { className: dotCls, style: { backgroundColor: backgroundColor } }),
95 _react2.default.createElement('span', { className: dotCls, style: { backgroundColor: backgroundColor } }),
96 _react2.default.createElement('span', { className: dotCls, style: { backgroundColor: backgroundColor } })
97 );
98 }
99
100 var loadingCls = (0, _classnames2.default)((_classNames2 = {}, _classNames2[prefix + 'loading'] = true, _classNames2[prefix + 'open'] = visible, _classNames2[prefix + 'loading-inline'] = inline, _classNames2[className] = className, _classNames2));
101
102 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));
103
104 var others = _util.obj.pickOthers(Loading.propTypes, this.props);
105
106 var contentCls = (0, _classnames2.default)((_classNames4 = {}, _classNames4[prefix + 'loading-component'] = visible, _classNames4[prefix + 'loading-wrap'] = true, _classNames4));
107
108 return fullScreen ? [children, _react2.default.createElement(
109 _overlay2.default,
110 (0, _extends3.default)({
111 key: 'overlay',
112 hasMask: true,
113 align: 'cc cc',
114 safeNode: safeNode,
115 disableScroll: disableScroll
116 }, others, {
117 className: className,
118 style: style,
119 visible: visible,
120 onRequestClose: onVisibleChange
121 }),
122 _react2.default.createElement(
123 'div',
124 { className: tipCls },
125 _react2.default.createElement(
126 'div',
127 { className: prefix + 'loading-indicator' },
128 indicatorDom
129 ),
130 _react2.default.createElement(
131 'div',
132 { className: prefix + 'loading-tip-content' },
133 tip
134 ),
135 _react2.default.createElement(
136 'div',
137 { className: prefix + 'loading-tip-placeholder' },
138 tip
139 )
140 )
141 )] : _react2.default.createElement(
142 'div',
143 (0, _extends3.default)({ className: loadingCls, style: style }, others),
144 visible ? _react2.default.createElement(
145 'div',
146 { className: tipCls },
147 _react2.default.createElement(
148 'div',
149 { className: prefix + 'loading-indicator' },
150 indicatorDom
151 ),
152 _react2.default.createElement(
153 'div',
154 { className: prefix + 'loading-tip-content' },
155 tip
156 ),
157 _react2.default.createElement(
158 'div',
159 { className: prefix + 'loading-tip-placeholder' },
160 tip
161 )
162 ) : null,
163 _react2.default.createElement(
164 'div',
165 { className: contentCls },
166 visible ? _react2.default.createElement('div', { className: prefix + 'loading-masker' }) : null,
167 children
168 )
169 );
170 };
171
172 return Loading;
173}(_react2.default.Component), _class.propTypes = (0, _extends3.default)({}, _configProvider2.default.propTypes, {
174 /**
175 * 样式前缀
176 */
177 prefix: _propTypes2.default.string,
178 /**
179 * 自定义内容,可以传入string或reactElement
180 */
181 tip: _propTypes2.default.any,
182 /**
183 * 自定义内容位置
184 * @enumdesc 出现在动画右边, 出现在动画下面
185 */
186 tipAlign: _propTypes2.default.oneOf(['right', 'bottom']),
187 /**
188 * loading 状态, 默认 true
189 */
190 visible: _propTypes2.default.bool,
191 /**
192 * 全屏模式下,loading弹层请求关闭时触发的回调函数
193 * @param {String} type 弹层关闭的来源
194 * @param {Object} e DOM 事件
195 */
196 onVisibleChange: _propTypes2.default.func,
197 /**
198 * 自定义class
199 */
200 className: _propTypes2.default.string,
201 /**
202 * 自定义内联样式
203 */
204 style: _propTypes2.default.object,
205 /**
206 * 设置动画尺寸
207 * @description 仅仅对默认动画效果起作用
208 * @enumdesc 大号, 中号
209 */
210 size: _propTypes2.default.oneOf(['large', 'medium']),
211 /**
212 * 自定义动画
213 */
214 indicator: _propTypes2.default.any,
215 /**
216 * 动画颜色
217 */
218 color: _propTypes2.default.string,
219 /**
220 * 全屏展示
221 */
222 fullScreen: _propTypes2.default.bool,
223 /**
224 * 当点击 document 的时候,如果包含该节点则不会关闭弹层,
225 * 如果是函数需要返回 ref,如果是字符串则是该 DOM 的 id,也可以直接传入 DOM 节点,或者以上值组成的数组
226 * 是否禁用滚动,仅在 fullScreen 模式下生效
227 */
228 disableScroll: _propTypes2.default.bool,
229 /**
230 * 安全节点,fullScreen时有效,
231 */
232 safeNode: _propTypes2.default.any,
233 /**
234 * 子元素
235 */
236 children: _propTypes2.default.any,
237 inline: _propTypes2.default.bool,
238 rtl: _propTypes2.default.bool
239}), _class.defaultProps = {
240 prefix: 'next-',
241 visible: true,
242 onVisibleChange: _util.func.noop,
243 animate: null,
244 tipAlign: 'bottom',
245 size: 'large',
246 inline: true,
247 disableScroll: false
248}, _temp);
249Loading.displayName = 'Loading';
250exports.default = _configProvider2.default.config(Loading);
251module.exports = exports['default'];
\No newline at end of file