UNPKG

ant-design-vue

Version:

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

223 lines (185 loc) 7.15 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.SpinProps = exports.SpinSize = undefined; var _babelHelperVueJsxMergeProps = require('babel-helper-vue-jsx-merge-props'); var _babelHelperVueJsxMergeProps2 = _interopRequireDefault(_babelHelperVueJsxMergeProps); var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); var _defineProperty3 = _interopRequireDefault(_defineProperty2); var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties'); var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); exports.setDefaultIndicator = setDefaultIndicator; var _vueTypes = require('../_util/vue-types'); var _vueTypes2 = _interopRequireDefault(_vueTypes); var _BaseMixin = require('../_util/BaseMixin'); var _BaseMixin2 = _interopRequireDefault(_BaseMixin); var _propsUtil = require('../_util/props-util'); var _getTransitionProps = require('../_util/getTransitionProps'); var _getTransitionProps2 = _interopRequireDefault(_getTransitionProps); var _vnode = require('../_util/vnode'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var SpinSize = exports.SpinSize = _vueTypes2['default'].oneOf(['small', 'default', 'large']); var SpinProps = exports.SpinProps = function SpinProps() { return { prefixCls: _vueTypes2['default'].string, spinning: _vueTypes2['default'].bool, size: SpinSize, wrapperClassName: _vueTypes2['default'].string, tip: _vueTypes2['default'].string, delay: _vueTypes2['default'].number, indicator: _vueTypes2['default'].any }; }; // Render indicator var defaultIndicator = void 0; function setDefaultIndicator(content) { defaultIndicator = typeof content.indicator === 'function' ? content.indicator : function (h) { return h(content.indicator); }; } exports['default'] = { name: 'ASpin', mixins: [_BaseMixin2['default']], props: (0, _propsUtil.initDefaultProps)(SpinProps(), { prefixCls: 'ant-spin', size: 'default', spinning: true, wrapperClassName: '' }), data: function data() { var spinning = this.spinning; return { stateSpinning: spinning, debounceTimeout: null, delayTimeout: null }; }, methods: { getChildren: function getChildren() { if (this.$slots && this.$slots['default']) { return (0, _propsUtil.filterEmpty)(this.$slots['default']); } return null; }, renderIndicator: function renderIndicator(h, props) { // const h = this.$createElement var prefixCls = props.prefixCls; var dotClassName = prefixCls + '-dot'; var indicator = (0, _propsUtil.getComponentFromProp)(this, 'indicator'); if (Array.isArray(indicator)) { indicator = (0, _propsUtil.filterEmpty)(indicator); indicator = indicator.length === 1 ? indicator[0] : indicator; } if ((0, _propsUtil.isValidElement)(indicator)) { return (0, _vnode.cloneElement)(indicator, { 'class': dotClassName }); } if (defaultIndicator && (0, _propsUtil.isValidElement)(defaultIndicator(h))) { return (0, _vnode.cloneElement)(defaultIndicator(h), { 'class': dotClassName }); } return h( 'span', { 'class': dotClassName + ' ' + prefixCls + '-dot-spin' }, [h('i'), h('i'), h('i'), h('i')] ); } }, mounted: function mounted() { var _this = this; this.$nextTick(function () { var spinning = _this.spinning, delay = _this.delay; if (spinning && delay && !isNaN(Number(delay))) { _this.setState({ stateSpinning: false }); _this.delayTimeout = window.setTimeout(function () { return _this.setState({ stateSpinning: spinning }); }, delay); } }); }, beforeDestroy: function beforeDestroy() { if (this.debounceTimeout) { clearTimeout(this.debounceTimeout); } if (this.delayTimeout) { clearTimeout(this.delayTimeout); } }, watch: { spinning: function spinning() { var _this2 = this; var delay = this.delay, spinning = this.spinning; if (this.debounceTimeout) { clearTimeout(this.debounceTimeout); } if (!spinning) { this.debounceTimeout = window.setTimeout(function () { return _this2.setState({ stateSpinning: spinning }); }, 200); if (this.delayTimeout) { clearTimeout(this.delayTimeout); } } else { if (spinning && delay && !isNaN(Number(delay))) { if (this.delayTimeout) { clearTimeout(this.delayTimeout); } this.delayTimeout = window.setTimeout(function () { return _this2.setState({ stateSpinning: spinning }); }, delay); } else { this.setState({ stateSpinning: spinning }); } } } }, render: function render(h) { var _spinClassName; var _$props = this.$props, size = _$props.size, prefixCls = _$props.prefixCls, tip = _$props.tip, wrapperClassName = _$props.wrapperClassName, restProps = (0, _objectWithoutProperties3['default'])(_$props, ['size', 'prefixCls', 'tip', 'wrapperClassName']); var stateSpinning = this.stateSpinning; var spinClassName = (_spinClassName = {}, (0, _defineProperty3['default'])(_spinClassName, prefixCls, true), (0, _defineProperty3['default'])(_spinClassName, prefixCls + '-sm', size === 'small'), (0, _defineProperty3['default'])(_spinClassName, prefixCls + '-lg', size === 'large'), (0, _defineProperty3['default'])(_spinClassName, prefixCls + '-spinning', stateSpinning), (0, _defineProperty3['default'])(_spinClassName, prefixCls + '-show-text', !!tip), _spinClassName); var spinElement = h( 'div', (0, _babelHelperVueJsxMergeProps2['default'])([restProps, { 'class': spinClassName }]), [this.renderIndicator(h, this.$props), tip ? h( 'div', { 'class': prefixCls + '-text' }, [tip] ) : null] ); var children = this.getChildren(); if (children) { var _containerClassName; var animateClassName = prefixCls + '-nested-loading'; if (wrapperClassName) { animateClassName += ' ' + wrapperClassName; } var containerClassName = (_containerClassName = {}, (0, _defineProperty3['default'])(_containerClassName, prefixCls + '-container', true), (0, _defineProperty3['default'])(_containerClassName, prefixCls + '-blur', stateSpinning), _containerClassName); return h( 'transition-group', (0, _babelHelperVueJsxMergeProps2['default'])([(0, _getTransitionProps2['default'])('fade', { appear: false }), { attrs: { tag: 'div' }, 'class': animateClassName }]), [stateSpinning && h( 'div', { key: 'loading' }, [spinElement] ), h( 'div', { 'class': containerClassName, key: 'container' }, [children] )] ); } return spinElement; } };