NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/ant-design-vue/lib/vc-select/SelectTrigger.js
2023-09-14 14:47:11 +08:00

301 lines
9.3 KiB
JavaScript

'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _raf = require('raf');
var _raf2 = _interopRequireDefault(_raf);
var _vcTrigger = require('../vc-trigger');
var _vcTrigger2 = _interopRequireDefault(_vcTrigger);
var _vueTypes = require('../_util/vue-types');
var _vueTypes2 = _interopRequireDefault(_vueTypes);
var _DropdownMenu = require('./DropdownMenu');
var _DropdownMenu2 = _interopRequireDefault(_DropdownMenu);
var _util = require('./util');
var _BaseMixin = require('../_util/BaseMixin');
var _BaseMixin2 = _interopRequireDefault(_BaseMixin);
var _propsUtil = require('../_util/props-util');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
var BUILT_IN_PLACEMENTS = {
bottomLeft: {
points: ['tl', 'bl'],
offset: [0, 4],
overflow: {
adjustX: 0,
adjustY: 1
}
},
topLeft: {
points: ['bl', 'tl'],
offset: [0, -4],
overflow: {
adjustX: 0,
adjustY: 1
}
}
};
exports['default'] = {
name: 'SelectTrigger',
mixins: [_BaseMixin2['default']],
props: {
// onPopupFocus: PropTypes.func,
// onPopupScroll: PropTypes.func,
dropdownMatchSelectWidth: _vueTypes2['default'].bool,
defaultActiveFirstOption: _vueTypes2['default'].bool,
dropdownAlign: _vueTypes2['default'].object,
visible: _vueTypes2['default'].bool,
disabled: _vueTypes2['default'].bool,
showSearch: _vueTypes2['default'].bool,
dropdownClassName: _vueTypes2['default'].string,
dropdownStyle: _vueTypes2['default'].object,
dropdownMenuStyle: _vueTypes2['default'].object,
multiple: _vueTypes2['default'].bool,
inputValue: _vueTypes2['default'].string,
filterOption: _vueTypes2['default'].any,
empty: _vueTypes2['default'].bool,
options: _vueTypes2['default'].any,
prefixCls: _vueTypes2['default'].string,
popupClassName: _vueTypes2['default'].string,
value: _vueTypes2['default'].array,
// children: PropTypes.any,
showAction: _vueTypes2['default'].arrayOf(_vueTypes2['default'].string),
combobox: _vueTypes2['default'].bool,
animation: _vueTypes2['default'].string,
transitionName: _vueTypes2['default'].string,
getPopupContainer: _vueTypes2['default'].func,
backfillValue: _vueTypes2['default'].any,
menuItemSelectedIcon: _vueTypes2['default'].any,
dropdownRender: _vueTypes2['default'].func,
ariaId: _vueTypes2['default'].string
},
data: function data() {
return {
dropdownWidth: 0
};
},
created: function created() {
this.rafInstance = null;
this.saveDropdownMenuRef = (0, _util.saveRef)(this, 'dropdownMenuRef');
this.saveTriggerRef = (0, _util.saveRef)(this, 'triggerRef');
},
mounted: function mounted() {
var _this = this;
this.$nextTick(function () {
_this.setDropdownWidth();
});
},
updated: function updated() {
var _this2 = this;
this.$nextTick(function () {
_this2.setDropdownWidth();
});
},
beforeDestroy: function beforeDestroy() {
this.cancelRafInstance();
},
methods: {
setDropdownWidth: function setDropdownWidth() {
var _this3 = this;
this.cancelRafInstance();
this.rafInstance = (0, _raf2['default'])(function () {
var width = _this3.$el.offsetWidth;
if (width !== _this3.dropdownWidth) {
_this3.setState({ dropdownWidth: width });
}
});
},
cancelRafInstance: function cancelRafInstance() {
if (this.rafInstance) {
_raf2['default'].cancel(this.rafInstance);
}
},
getInnerMenu: function getInnerMenu() {
return this.dropdownMenuRef && this.dropdownMenuRef.$refs.menuRef;
},
getPopupDOMNode: function getPopupDOMNode() {
return this.triggerRef.getPopupDomNode();
},
getDropdownElement: function getDropdownElement(newProps) {
var h = this.$createElement;
var value = this.value,
firstActiveValue = this.firstActiveValue,
defaultActiveFirstOption = this.defaultActiveFirstOption,
dropdownMenuStyle = this.dropdownMenuStyle,
getDropdownPrefixCls = this.getDropdownPrefixCls,
backfillValue = this.backfillValue,
menuItemSelectedIcon = this.menuItemSelectedIcon;
var _getListeners = (0, _propsUtil.getListeners)(this),
menuSelect = _getListeners.menuSelect,
menuDeselect = _getListeners.menuDeselect,
popupScroll = _getListeners.popupScroll;
var props = this.$props;
var dropdownRender = props.dropdownRender,
ariaId = props.ariaId;
var dropdownMenuProps = {
props: (0, _extends3['default'])({}, newProps.props, {
ariaId: ariaId,
prefixCls: getDropdownPrefixCls(),
value: value,
firstActiveValue: firstActiveValue,
defaultActiveFirstOption: defaultActiveFirstOption,
dropdownMenuStyle: dropdownMenuStyle,
backfillValue: backfillValue,
menuItemSelectedIcon: menuItemSelectedIcon
}),
on: (0, _extends3['default'])({}, newProps.on, {
menuSelect: menuSelect,
menuDeselect: menuDeselect,
popupScroll: popupScroll
}),
directives: [{
name: 'ant-ref',
value: this.saveDropdownMenuRef
}]
};
var menuNode = h(_DropdownMenu2['default'], dropdownMenuProps);
if (dropdownRender) {
return dropdownRender(menuNode, props);
}
return null;
},
getDropdownTransitionName: function getDropdownTransitionName() {
var props = this.$props;
var transitionName = props.transitionName;
if (!transitionName && props.animation) {
transitionName = this.getDropdownPrefixCls() + '-' + props.animation;
}
return transitionName;
},
getDropdownPrefixCls: function getDropdownPrefixCls() {
return this.prefixCls + '-dropdown';
}
},
render: function render() {
var _popupClassName;
var h = arguments[0];
var $props = this.$props,
$slots = this.$slots;
var multiple = $props.multiple,
visible = $props.visible,
inputValue = $props.inputValue,
dropdownAlign = $props.dropdownAlign,
disabled = $props.disabled,
showSearch = $props.showSearch,
dropdownClassName = $props.dropdownClassName,
dropdownStyle = $props.dropdownStyle,
dropdownMatchSelectWidth = $props.dropdownMatchSelectWidth,
options = $props.options,
getPopupContainer = $props.getPopupContainer,
showAction = $props.showAction,
empty = $props.empty;
var _getListeners2 = (0, _propsUtil.getListeners)(this),
mouseenter = _getListeners2.mouseenter,
mouseleave = _getListeners2.mouseleave,
popupFocus = _getListeners2.popupFocus,
dropdownVisibleChange = _getListeners2.dropdownVisibleChange;
var dropdownPrefixCls = this.getDropdownPrefixCls();
var popupClassName = (_popupClassName = {}, (0, _defineProperty3['default'])(_popupClassName, dropdownClassName, !!dropdownClassName), (0, _defineProperty3['default'])(_popupClassName, dropdownPrefixCls + '--' + (multiple ? 'multiple' : 'single'), 1), (0, _defineProperty3['default'])(_popupClassName, dropdownPrefixCls + '--empty', empty), _popupClassName);
var popupElement = this.getDropdownElement({
props: {
menuItems: options,
multiple: multiple,
inputValue: inputValue,
visible: visible
},
on: {
popupFocus: popupFocus
}
});
var hideAction = void 0;
if (disabled) {
hideAction = [];
} else if ((0, _util.isSingleMode)($props) && !showSearch) {
hideAction = ['click'];
} else {
hideAction = ['blur'];
}
var popupStyle = (0, _extends3['default'])({}, dropdownStyle);
var widthProp = dropdownMatchSelectWidth ? 'width' : 'minWidth';
if (this.dropdownWidth) {
popupStyle[widthProp] = this.dropdownWidth + 'px';
}
var triggerProps = {
props: (0, _extends3['default'])({}, $props, {
showAction: disabled ? [] : showAction,
hideAction: hideAction,
ref: 'triggerRef',
popupPlacement: 'bottomLeft',
builtinPlacements: BUILT_IN_PLACEMENTS,
prefixCls: dropdownPrefixCls,
popupTransitionName: this.getDropdownTransitionName(),
popupAlign: dropdownAlign,
popupVisible: visible,
getPopupContainer: getPopupContainer,
popupClassName: (0, _classnames2['default'])(popupClassName),
popupStyle: popupStyle
}),
on: {
popupVisibleChange: dropdownVisibleChange
},
directives: [{
name: 'ant-ref',
value: this.saveTriggerRef
}]
};
if (mouseenter) {
triggerProps.on.mouseenter = mouseenter;
}
if (mouseleave) {
triggerProps.on.mouseleave = mouseleave;
}
return h(
_vcTrigger2['default'],
triggerProps,
[$slots['default'], h(
'template',
{ slot: 'popup' },
[popupElement]
)]
);
}
};