import RcDropdown from '../vc-dropdown/src/index' import DropdownButton from './dropdown-button' import PropTypes from '../_util/vue-types' import { cloneElement } from '../_util/vnode' import { getOptionProps, getPropsData } from '../_util/props-util' import getDropdownProps from './getDropdownProps' import Icon from '../icon' const DropdownProps = getDropdownProps() const Dropdown = { name: 'ADropdown', props: { ...DropdownProps, prefixCls: PropTypes.string.def('ant-dropdown'), mouseEnterDelay: PropTypes.number.def(0.15), mouseLeaveDelay: PropTypes.number.def(0.1), placement: DropdownProps.placement.def('bottomLeft'), }, model: { prop: 'visible', event: 'visibleChange', }, inject: { configProvider: { default: {}}, }, methods: { getTransitionName () { const { placement = '', transitionName } = this.$props if (transitionName !== undefined) { return transitionName } if (placement.indexOf('top') >= 0) { return 'slide-down' } return 'slide-up' }, }, render () { const { $slots, $listeners } = this const props = getOptionProps(this) const { prefixCls, trigger, disabled, getPopupContainer, } = props const { getPopupContainer: getContextPopupContainer } = this.configProvider const dropdownTrigger = cloneElement($slots.default, { class: `${prefixCls}-trigger`, disabled, }) const overlay = this.overlay || $slots.overlay && $slots.overlay[0] // menu cannot be selectable in dropdown defaultly // menu should be focusable in dropdown defaultly const overlayProps = overlay && getPropsData(overlay) const { selectable = false, focusable = true } = overlayProps || {} const expandIcon = ( ) const fixedModeOverlay = overlay && overlay.componentOptions ? cloneElement(overlay, { props: { mode: 'vertical', selectable, focusable, expandIcon, }, }) : overlay const triggerActions = disabled ? [] : trigger let alignPoint if (triggerActions && triggerActions.indexOf('contextmenu') !== -1) { alignPoint = true } const dropdownProps = { props: { alignPoint, ...props, getPopupContainer: getPopupContainer || getContextPopupContainer, transitionName: this.getTransitionName(), trigger: triggerActions, }, on: $listeners, } return ( {dropdownTrigger} ) }, } Dropdown.Button = DropdownButton export default Dropdown export { DropdownProps }