mirror of
https://gitee.com/ant-design-vue/ant-design-vue.git
synced 2024-12-06 05:59:46 +08:00
80 lines
2.2 KiB
JavaScript
80 lines
2.2 KiB
JavaScript
|
|
import RcDropdown from './src/index'
|
|
import DropdownButton from './dropdown-button'
|
|
// import warning from '../_util/warning'
|
|
import PropTypes from '../_util/vue-types'
|
|
import { cloneElement } from '../_util/vnode'
|
|
import { getOptionProps, getPropsData } from '../_util/props-util'
|
|
import getDropdownProps from './getDropdownProps'
|
|
const DropdownProps = getDropdownProps()
|
|
const Dropdown = {
|
|
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',
|
|
},
|
|
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, prefixCls, trigger, disabled, $listeners } = this
|
|
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, but multiple type can be selectable
|
|
const overlayProps = overlay && getPropsData(overlay)
|
|
let selectable = false
|
|
if (overlayProps) {
|
|
selectable = !!overlayProps.selectable || overlayProps.multiple
|
|
}
|
|
const fixedModeOverlay = overlay && cloneElement(overlay, {
|
|
props: {
|
|
mode: 'vertical',
|
|
selectable,
|
|
isRootMenu: false,
|
|
},
|
|
})
|
|
const dropdownProps = {
|
|
props: {
|
|
...getOptionProps(this),
|
|
transitionName: this.getTransitionName(),
|
|
trigger: disabled ? [] : trigger,
|
|
},
|
|
on: $listeners,
|
|
}
|
|
return (
|
|
<RcDropdown
|
|
{...dropdownProps}
|
|
>
|
|
{dropdownTrigger}
|
|
<template slot='overlay'>
|
|
{fixedModeOverlay}
|
|
</template>
|
|
</RcDropdown>
|
|
)
|
|
},
|
|
}
|
|
|
|
Dropdown.Button = DropdownButton
|
|
export default Dropdown
|
|
export { DropdownProps }
|
|
|