Added disabled, isOpen, openMenu, closeMenu to Dropdown

This commit is contained in:
Grzegorz Leoniec 2019-01-10 10:29:02 +01:00
parent a7010d32cf
commit 78978e9bdb
No known key found for this signature in database
GPG Key ID: 3AA43686D4EB1377

View File

@ -3,10 +3,16 @@
:open.sync="isPopoverOpen"
:open-group="Math.random().toString()"
:placement="placement"
:disabled="disabled"
trigger="manual"
:offset="offset"
>
<slot :toggleMenu="toggleMenu" />
<slot
:toggleMenu="toggleMenu"
:openMenu="openMenu"
:closeMenu="closeMenu"
:isOpen="isOpen"
/>
<div
slot="popover"
@mouseover="popoverMouseEnter"
@ -15,6 +21,9 @@
<slot
name="popover"
:toggleMenu="toggleMenu"
:openMenu="openMenu"
:closeMenu="closeMenu"
:isOpen="isOpen"
/>
</div>
</v-popover>
@ -29,6 +38,7 @@ let mouseLeaveTimer = null
export default {
props: {
placement: { type: String, default: 'bottom-end' },
disabled: { type: Boolean, default: false },
offset: { type: [String, Number], default: '16' }
},
data() {
@ -36,6 +46,11 @@ export default {
isPopoverOpen: false
}
},
computed: {
isOpen() {
return this.isPopoverOpen
}
},
watch: {
isPopoverOpen: {
immediate: true,
@ -43,11 +58,13 @@ export default {
console.log('isOpen', isOpen)
try {
if (isOpen) {
setTimeout(() => {
document
.getElementsByTagName('body')[0]
.classList.add('dropdown-open')
}, 10)
this.$nextTick(() => {
setTimeout(() => {
document
.getElementsByTagName('body')[0]
.classList.add('dropdown-open')
}, 20)
})
} else {
document
.getElementsByTagName('body')[0]
@ -63,9 +80,37 @@ export default {
},
methods: {
toggleMenu() {
if (this.disabled) {
return
}
clearTimeout(mouseEnterTimer)
clearTimeout(mouseLeaveTimer)
this.isPopoverOpen = !this.isPopoverOpen
},
openMenu(useTimeout) {
if (this.disabled) {
return
}
if (useTimeout) {
this.popoverMouseEnter()
} else {
this.isPopoverOpen = true
}
},
closeMenu(useTimeout) {
if (this.disabled) {
return
}
if (useTimeout) {
this.popoveMouseLeave()
} else {
this.isPopoverOpen = false
}
},
popoverMouseEnter() {
if (this.disabled) {
return
}
clearTimeout(mouseEnterTimer)
clearTimeout(mouseLeaveTimer)
if (!this.isPopoverOpen) {
@ -75,6 +120,9 @@ export default {
}
},
popoveMouseLeave() {
if (this.disabled) {
return
}
clearTimeout(mouseEnterTimer)
clearTimeout(mouseLeaveTimer)
if (this.isPopoverOpen) {