UNPKG

ant-design-vue

Version:

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

206 lines (176 loc) 5.68 kB
'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'];