From 96a109a57c808943f3ab6121ff3e830b12e82d96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Milorad=20FIlipovi=C4=87?= Date: Fri, 27 May 2022 17:04:14 +0200 Subject: [PATCH] fix(editor): Fix conflicting hover states between sticky button and node view (#3368) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 🐛 Fixing conflicting hover states between sticky button and node view. * 🔨 Updating and optimizing sticky menu hover logic * 📇 Removing redundant comments from `NodeView`. --- packages/editor-ui/src/views/NodeView.vue | 50 +++++++++++++++++++---- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/packages/editor-ui/src/views/NodeView.vue b/packages/editor-ui/src/views/NodeView.vue index 9b1820dd848d7..28b4e926fd622 100644 --- a/packages/editor-ui/src/views/NodeView.vue +++ b/packages/editor-ui/src/views/NodeView.vue @@ -60,12 +60,20 @@
- -
+ +
@@ -385,6 +393,7 @@ export default mixins( pullConnActive: false, dropPrevented: false, renamingActive: false, + showStickyButton: false, }; }, beforeDestroy () { @@ -395,6 +404,29 @@ export default mixins( document.removeEventListener('keyup', this.keyUp); }, methods: { + onCreateMenuHoverIn(mouseinEvent: MouseEvent) { + const buttonsWrapper = mouseinEvent.target as Element; + + // Once the popup menu is hovered, it's pointer events are disabled so it's not interfering with element underneath it. + this.showStickyButton = true; + const moveCallback = (mousemoveEvent: MouseEvent) => { + if(buttonsWrapper) { + const wrapperBounds = buttonsWrapper.getBoundingClientRect(); + const wrapperH = wrapperBounds.height; + const wrapperW = wrapperBounds.width; + const wrapperLeftNear = wrapperBounds.left; + const wrapperLeftFar = wrapperLeftNear + wrapperW; + const wrapperTopNear = wrapperBounds.top; + const wrapperTopFar = wrapperTopNear + wrapperH; + const inside = ((mousemoveEvent.pageX > wrapperLeftNear && mousemoveEvent.pageX < wrapperLeftFar) && (mousemoveEvent.pageY > wrapperTopNear && mousemoveEvent.pageY < wrapperTopFar)); + if(!inside) { + this.showStickyButton = false; + document.removeEventListener('mousemove', moveCallback, false); + } + } + }; + document.addEventListener('mousemove', moveCallback, false); + }, clearExecutionData () { this.$store.commit('setWorkflowExecutionData', null); this.updateNodesExecutionIssues(); @@ -2937,6 +2969,10 @@ export default mixins( bottom: 10px; } +.no-events { + pointer-events: none; +} + .node-buttons-wrapper { position: fixed; width: 150px; @@ -2952,10 +2988,9 @@ export default mixins( transition-timing-function: linear; } - &:hover { - .add-sticky-button { - opacity: 1; - } + .visible-button { + opacity: 1; + pointer-events: all; } } @@ -2964,6 +2999,7 @@ export default mixins( text-align: center; top: 80px; right: 20px; + pointer-events: all !important; } .node-creator-button button {