UNPKG

ant-design-vue

Version:

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

245 lines (207 loc) 8.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _vue = require("vue"); var _vueTypes = _interopRequireDefault(require("../../_util/vue-types")); var _vcTrigger = _interopRequireDefault(require("../../vc-trigger")); var _placements = _interopRequireDefault(require("./placements")); var _propsUtil = require("../../_util/props-util"); var _BaseMixin = _interopRequireDefault(require("../../_util/BaseMixin")); var _vnode = require("../../_util/vnode"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } var __rest = void 0 && (void 0).__rest || function (s, e) { var t = {}; for (var p in s) { if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; } if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; var _default2 = (0, _vue.defineComponent)({ mixins: [_BaseMixin.default], props: { minOverlayWidthMatchTrigger: _vueTypes.default.looseBool, prefixCls: _vueTypes.default.string.def('rc-dropdown'), transitionName: _vueTypes.default.string, overlayClassName: _vueTypes.default.string.def(''), openClassName: _vueTypes.default.string, animation: _vueTypes.default.any, align: _vueTypes.default.object, overlayStyle: _vueTypes.default.object.def(function () { return {}; }), placement: _vueTypes.default.string.def('bottomLeft'), overlay: _vueTypes.default.any, trigger: _vueTypes.default.array.def(['hover']), alignPoint: _vueTypes.default.looseBool, showAction: _vueTypes.default.array.def([]), hideAction: _vueTypes.default.array.def([]), getPopupContainer: _vueTypes.default.func, visible: _vueTypes.default.looseBool, defaultVisible: _vueTypes.default.looseBool.def(false), mouseEnterDelay: _vueTypes.default.number.def(0.15), mouseLeaveDelay: _vueTypes.default.number.def(0.1) }, data: function data() { var sVisible = this.defaultVisible; if ((0, _propsUtil.hasProp)(this, 'visible')) { sVisible = this.visible; } return { sVisible: sVisible }; }, watch: { visible: function visible(val) { if (val !== undefined) { this.setState({ sVisible: val }); } } }, methods: { onClick: function onClick(e) { var overlayProps = this.getOverlayElement().props; // do no call onVisibleChange, if you need click to hide, use onClick and control visible if (!(0, _propsUtil.hasProp)(this, 'visible')) { this.setState({ sVisible: false }); } this.__emit('overlayClick', e); if (overlayProps.onClick) { overlayProps.onClick(e); } }, onVisibleChange: function onVisibleChange(visible) { if (!(0, _propsUtil.hasProp)(this, 'visible')) { this.setState({ sVisible: visible }); } this.__emit('update:visible', visible); this.__emit('visibleChange', visible); }, getMinOverlayWidthMatchTrigger: function getMinOverlayWidthMatchTrigger() { var props = (0, _propsUtil.getOptionProps)(this); var minOverlayWidthMatchTrigger = props.minOverlayWidthMatchTrigger, alignPoint = props.alignPoint; if ('minOverlayWidthMatchTrigger' in props) { return minOverlayWidthMatchTrigger; } return !alignPoint; }, getOverlayElement: function getOverlayElement() { var overlay = (0, _propsUtil.getComponent)(this, 'overlay'); return Array.isArray(overlay) ? overlay[0] : overlay; }, getMenuElement: function getMenuElement() { var _this = this; var onClick = this.onClick, prefixCls = this.prefixCls; var overlayElement = this.getOverlayElement(); var extraOverlayProps = { prefixCls: "".concat(prefixCls, "-menu"), getPopupContainer: function getPopupContainer() { return _this.getPopupDomNode(); }, onClick: onClick }; if (overlayElement && overlayElement.type === _vue.Text) { delete extraOverlayProps.prefixCls; } return (0, _vnode.cloneElement)(overlayElement, extraOverlayProps); }, getMenuElementOrLambda: function getMenuElementOrLambda() { var overlay = this.overlay || this.$slots.overlay; if (typeof overlay === 'function') { return this.getMenuElement; } return this.getMenuElement(); }, getPopupDomNode: function getPopupDomNode() { return this.triggerRef.getPopupDomNode(); }, getOpenClassName: function getOpenClassName() { var _this$$props = this.$props, openClassName = _this$$props.openClassName, prefixCls = _this$$props.prefixCls; if (openClassName !== undefined) { return openClassName; } return "".concat(prefixCls, "-open"); }, afterVisibleChange: function afterVisibleChange(visible) { if (visible && this.getMinOverlayWidthMatchTrigger()) { var overlayNode = this.getPopupDomNode(); var rootNode = (0, _propsUtil.findDOMNode)(this); if (rootNode && overlayNode && rootNode.offsetWidth > overlayNode.offsetWidth) { overlayNode.style.minWidth = "".concat(rootNode.offsetWidth, "px"); if (this.triggerRef && this.triggerRef._component && this.triggerRef._component.alignInstance) { this.triggerRef._component.alignInstance.forceAlign(); } } } }, renderChildren: function renderChildren() { var children = (0, _propsUtil.getSlot)(this); var sVisible = this.sVisible; return sVisible && children ? (0, _vnode.cloneElement)(children[0], { class: this.getOpenClassName() }, false) : children; }, saveTrigger: function saveTrigger(node) { this.triggerRef = node; } }, render: function render() { var _this2 = this; var _a = this.$props, prefixCls = _a.prefixCls, transitionName = _a.transitionName, animation = _a.animation, align = _a.align, placement = _a.placement, getPopupContainer = _a.getPopupContainer, showAction = _a.showAction, hideAction = _a.hideAction, overlayClassName = _a.overlayClassName, overlayStyle = _a.overlayStyle, trigger = _a.trigger, otherProps = __rest(_a, ["prefixCls", "transitionName", "animation", "align", "placement", "getPopupContainer", "showAction", "hideAction", "overlayClassName", "overlayStyle", "trigger"]); var triggerHideAction = hideAction; if (!triggerHideAction && trigger.indexOf('contextmenu') !== -1) { triggerHideAction = ['click']; } var triggerProps = _extends(_extends({}, otherProps), { prefixCls: prefixCls, popupClassName: overlayClassName, popupStyle: overlayStyle, builtinPlacements: _placements.default, action: trigger, showAction: showAction, hideAction: triggerHideAction || [], popupPlacement: placement, popupAlign: align, popupTransitionName: transitionName, popupAnimation: animation, popupVisible: this.sVisible, afterPopupVisibleChange: this.afterVisibleChange, getPopupContainer: getPopupContainer, onPopupVisibleChange: this.onVisibleChange, popup: this.getMenuElementOrLambda(), ref: this.saveTrigger }); return (0, _vue.createVNode)(_vcTrigger.default, triggerProps, { default: function _default() { return [_this2.renderChildren()]; } }); } }); exports.default = _default2;