From 3e694958420082b102b1a8ec9a702eba7dae9358 Mon Sep 17 00:00:00 2001 From: SimonGschnell Date: Tue, 12 Aug 2025 09:53:45 +0200 Subject: [PATCH] fix(Dashboard drag&drop): behavior of dragged widgets when they exceed the grid limits, and ensures all widget clones are always deleted --- public/js/components/Drop/Grid.js | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/public/js/components/Drop/Grid.js b/public/js/components/Drop/Grid.js index 74d67e49d..ae1a6504c 100644 --- a/public/js/components/Drop/Grid.js +++ b/public/js/components/Drop/Grid.js @@ -439,7 +439,7 @@ export default { }) this.dragEnd(); this.dragCancel(); - } + } if (!this.active) return this.dragCancel(); this.checkPinnedWidgetAnimation(); @@ -454,14 +454,14 @@ export default { let x = this.x + this.draggedOffset[0]; let y = this.y + this.draggedOffset[1]; if (x < 0) { - this.draggedOffset[0] -= x; + this.draggedOffset[0] += x; x = 0; } else if (x + this.draggedItem.w > this.cols) { this.draggedOffset[0] += this.cols - this.draggedItem.w - x; x = this.cols - this.draggedItem.w; } if (y < 0) { - this.draggedOffset[1] -= y; + this.draggedOffset[1] += y; y = 0; } this.positionUpdates = this.dragGrid.move(this.draggedItem, x, y); @@ -481,6 +481,7 @@ export default { } }, dragCancel() { + this.removeWidgetClones(); this.additionalRowComputed = false; this.toggleDraggedItemOverlay(false); this.mode = MODE_IDLE; @@ -492,6 +493,7 @@ export default { }, dragEnd() { + this.removeWidgetClones(); if (this.mode == MODE_IDLE) return; // clean up unused classes @@ -501,10 +503,7 @@ export default { ele.classList.remove("denied-dragging-animation"); }) - let widgetClones = document.getElementsByClassName("widgetClone"); - for (let i=0; i = this.cols) return this.dragCancel(); @@ -597,6 +596,12 @@ export default { draggedItemNode.classList.remove("border-danger"); } }, + removeWidgetClones(){ + let widgetClones = Array.from(document.getElementsByClassName("widgetClone")); + for (let i = 0; i < widgetClones.length; i++) { + this.$refs.container.removeChild(widgetClones[i]); + } + }, mouseDown(){ this.mode = MODE_MOUSE_DOWN; },