mirror of
https://github.com/nextcloud/server.git
synced 2026-04-23 07:08:34 -04:00
fix(files): right click actions menu flicker
Signed-off-by: skjnldsv <skjnldsv@protonmail.com>
This commit is contained in:
parent
f7d5edfb5f
commit
ab0a6f0e00
2 changed files with 39 additions and 19 deletions
|
|
@ -22,8 +22,9 @@
|
|||
type="tertiary"
|
||||
:force-menu="enabledInlineActions.length === 0 /* forceMenu only if no inline actions */"
|
||||
:inline="enabledInlineActions.length"
|
||||
:open.sync="openedMenu"
|
||||
@close="openedSubmenu = null">
|
||||
:open="openedMenu"
|
||||
@close="onMenuClose"
|
||||
@closed="onMenuClosed">
|
||||
<!-- Default actions list-->
|
||||
<NcActionButton v-for="action, index in enabledMenuActions"
|
||||
:key="action.id"
|
||||
|
|
@ -230,7 +231,7 @@ export default defineComponent({
|
|||
},
|
||||
|
||||
watch: {
|
||||
// Close any submenu when the menu is closed
|
||||
// Close any submenu when the menu state changes
|
||||
openedMenu() {
|
||||
this.openedSubmenu = null
|
||||
},
|
||||
|
|
@ -302,6 +303,20 @@ export default defineComponent({
|
|||
this.openedMenu = true
|
||||
}
|
||||
},
|
||||
|
||||
onMenuClose() {
|
||||
// We reset the submenu state when the menu is closing
|
||||
this.openedSubmenu = null
|
||||
},
|
||||
|
||||
onMenuClosed() {
|
||||
// TODO: remove timeout once https://github.com/nextcloud-libraries/nextcloud-vue/pull/6683 is merged
|
||||
// and updated on server.
|
||||
setTimeout(() => {
|
||||
// We reset the actions menu state when the menu is finally closed
|
||||
this.openedMenu = false
|
||||
}, 100)
|
||||
},
|
||||
},
|
||||
})
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -178,7 +178,16 @@ export default defineComponent({
|
|||
return this.actionsMenuStore.opened === this.uniqueId.toString()
|
||||
},
|
||||
set(opened) {
|
||||
this.actionsMenuStore.opened = opened ? this.uniqueId.toString() : null
|
||||
// If the menu is opened on another file entry, we ignore closed events
|
||||
if (opened === false && this.actionsMenuStore.opened !== this.uniqueId.toString()) {
|
||||
return
|
||||
}
|
||||
|
||||
// If opened, we specify the current file id
|
||||
// else we set it to null to close the menu
|
||||
this.actionsMenuStore.opened = opened
|
||||
? this.uniqueId.toString()
|
||||
: null
|
||||
},
|
||||
},
|
||||
|
||||
|
|
@ -245,21 +254,16 @@ export default defineComponent({
|
|||
},
|
||||
|
||||
openedMenu() {
|
||||
if (this.openedMenu === false) {
|
||||
// TODO: This timeout can be removed once `close` event only triggers after the transition
|
||||
// ref: https://github.com/nextcloud-libraries/nextcloud-vue/pull/6065
|
||||
window.setTimeout(() => {
|
||||
if (this.openedMenu) {
|
||||
// was reopened while the animation run
|
||||
return
|
||||
}
|
||||
// Reset any right menu position potentially set
|
||||
const root = document.getElementById('app-content-vue')
|
||||
if (root !== null) {
|
||||
root.style.removeProperty('--mouse-pos-x')
|
||||
root.style.removeProperty('--mouse-pos-y')
|
||||
}
|
||||
}, 300)
|
||||
// Checking if the menu is really closed and not
|
||||
// just a change in the open state to another file entry.
|
||||
if (this.actionsMenuStore.opened === null) {
|
||||
// Reset any right menu position potentially set
|
||||
logger.debug('All actions menu closed, resetting right menu position...')
|
||||
const root = this.$el?.closest('main.app-content') as HTMLElement
|
||||
if (root !== null) {
|
||||
root.style.removeProperty('--mouse-pos-x')
|
||||
root.style.removeProperty('--mouse-pos-y')
|
||||
}
|
||||
}
|
||||
},
|
||||
},
|
||||
|
|
@ -297,6 +301,7 @@ export default defineComponent({
|
|||
const contentRect = root.getBoundingClientRect()
|
||||
// Using Math.min/max to prevent the menu from going out of the AppContent
|
||||
// 200 = max width of the menu
|
||||
logger.debug('Setting actions menu position...')
|
||||
root.style.setProperty('--mouse-pos-x', Math.max(0, event.clientX - contentRect.left - 200) + 'px')
|
||||
root.style.setProperty('--mouse-pos-y', Math.max(0, event.clientY - contentRect.top) + 'px')
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Reference in a new issue