ant-design-vue
Version:
An enterprise-class UI design language and Vue-based implementation
206 lines (176 loc) • 5.68 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
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 _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _vueTypes = require('../_util/vue-types');
var _vueTypes2 = _interopRequireDefault(_vueTypes);
var _icon = require('../icon');
var _icon2 = _interopRequireDefault(_icon);
var _getTransitionProps = require('../_util/getTransitionProps');
var _getTransitionProps2 = _interopRequireDefault(_getTransitionProps);
var _omit = require('omit.js');
var _omit2 = _interopRequireDefault(_omit);
var _wave = require('../_util/wave');
var _wave2 = _interopRequireDefault(_wave);
var _propsUtil = require('../_util/props-util');
var _BaseMixin = require('../_util/BaseMixin');
var _BaseMixin2 = _interopRequireDefault(_BaseMixin);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
exports['default'] = {
name: 'ATag',
mixins: [_BaseMixin2['default']],
props: {
prefixCls: _vueTypes2['default'].string.def('ant-tag'),
color: _vueTypes2['default'].string,
closable: _vueTypes2['default'].bool,
visible: _vueTypes2['default'].bool,
afterClose: _vueTypes2['default'].func
},
model: {
prop: 'visible',
event: 'close.visible'
},
data: function data() {
var props = (0, _propsUtil.getOptionProps)(this);
var state = {};
if ('visible' in props) {
state = {
_visible: props.visible,
_closed: !props.visible
};
}
state = (0, _extends3['default'])({
_closing: false,
_closed: false,
_visible: true
}, state);
this.pre_visible = state._visible;
return state;
},
watch: {
visible: function visible(val) {
this.setState({
_visible: val
});
}
},
updated: function updated() {
var _this = this;
this.$nextTick(function () {
var preVisible = _this.pre_visible;
_this.pre_visible = _this.$data._visible;
if (preVisible && !_this.$data._visible) {
_this.close();
} else if (!preVisible && _this.$data._visible) {
_this.show();
}
});
},
methods: {
handleIconClick: function handleIconClick(e) {
this.$emit('close', e);
this.$emit('close.visible', false);
if (e.defaultPrevented || (0, _propsUtil.hasProp)(this, 'visible')) {
return;
}
this.setState({ _visible: false });
this.$forceUpdate();
},
close: function close() {
if (this.$data._closing || this.$data._closed) {
return;
}
var dom = this.$el;
dom.style.width = dom.getBoundingClientRect().width + 'px';
// It's Magic Code, don't know why
dom.style.width = dom.getBoundingClientRect().width + 'px';
this.setState({
_closing: true
});
},
show: function show() {
this.setState({
_closed: false
});
},
animationEnd: function animationEnd(_, existed) {
if (!existed && !this.$data._closed) {
this.setState({
_closed: true,
_closing: false
});
var afterClose = this.afterClose;
if (afterClose) {
afterClose();
}
} else {
this.setState({
_closed: false
});
}
},
isPresetColor: function isPresetColor(color) {
if (!color) {
return false;
}
return (/^(pink|red|yellow|orange|cyan|green|blue|purple|geekblue|magenta|volcano|gold|lime)(-inverse)?$/.test(color)
);
}
},
render: function render() {
var _cls,
_this2 = this;
var h = arguments[0];
var _$props = this.$props,
prefixCls = _$props.prefixCls,
closable = _$props.closable,
color = _$props.color;
var closeIcon = closable ? h(_icon2['default'], {
attrs: { type: 'close' },
on: {
'click': this.handleIconClick
}
}) : '';
var isPresetColor = this.isPresetColor(color);
var cls = (_cls = {}, (0, _defineProperty3['default'])(_cls, '' + prefixCls, true), (0, _defineProperty3['default'])(_cls, prefixCls + '-' + color, isPresetColor), (0, _defineProperty3['default'])(_cls, prefixCls + '-has-color', color && !isPresetColor), (0, _defineProperty3['default'])(_cls, prefixCls + '-close', this.$data._closing), _cls);
var tagStyle = {
backgroundColor: color && !isPresetColor ? color : null
};
var tag = h(
'div',
(0, _babelHelperVueJsxMergeProps2['default'])([{
directives: [{
name: 'show',
value: !this.$data._closing
}],
attrs: {
'data-show': !this.$data._closing
}
}, { on: (0, _omit2['default'])(this.$listeners, ['close']) }, {
'class': cls,
style: tagStyle
}]),
[this.$slots['default'], closeIcon]
);
var transitionProps = (0, _getTransitionProps2['default'])(prefixCls + '-zoom', {
afterLeave: function afterLeave() {
return _this2.animationEnd(undefined, false);
},
afterEnter: function afterEnter() {
return _this2.animationEnd(undefined, true);
}
});
return h(_wave2['default'], [this.$data._closed ? h('span') : h(
'transition',
transitionProps,
[tag]
)]);
}
};
module.exports = exports['default'];