From 7b0daa34ca732f43b7fba33fa4b5cd3b762f61f7 Mon Sep 17 00:00:00 2001 From: Julian Leucker <leuckerj@gmail.com> Date: Fri, 18 Aug 2023 17:59:05 +0200 Subject: [PATCH] Show in slot for disabled markers whether an item is dragged --- src/DragGrid.vue | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/DragGrid.vue b/src/DragGrid.vue index 49bba44..08db555 100644 --- a/src/DragGrid.vue +++ b/src/DragGrid.vue @@ -3,7 +3,7 @@ droppable @dropmove="disabled || loading ? undefined : handleDragOver($event)" @drop.prevent="disabled || loading ? undefined : handleDrop($event)" - @dragleave="$refs.highlightContainer.style.display = 'none'" + @dragleave="handleDragLeave" class="grid" > <template v-if="loading"> @@ -56,7 +56,7 @@ :y="disabledField.y" :key="disabledField.x + '|' + disabledField.y" > - <slot name="disabledField"></slot> + <slot name="disabledField" :is-dragged-over="isDraggedOver"></slot> </GridItem> </template> <slot></slot> @@ -76,6 +76,11 @@ export default { DragContainer, }, emits: ["input", "itemChanged"], + data() { + return { + isDraggedOver: false, + }; + }, props: { rows: { type: Number, @@ -182,6 +187,8 @@ export default { return; } + this.isDraggedOver = true; + let newPositionValid = true; for (let x = coords.x; x < coords.x + element.w; x++) { @@ -204,6 +211,7 @@ export default { this.$refs.highlightContainer.style.gridRowEnd = "span " + element.h; }, handleDrop(event) { + this.isDraggedOver = false; this.$refs.highlightContainer.style.display = "none"; let data = event.relatedTarget.dataset.transfer; if (!data) return; @@ -267,6 +275,10 @@ export default { this.$emit("itemChanged", element); }, + handleDragLeave() { + this.isDraggedOver = false; + this.$refs.highlightContainer.style.display = "none"; + }, clamp: (min, num, max) => Math.min(Math.max(num, min), max), getCoords(x, y) { let rect = this.$el.getBoundingClientRect(); -- GitLab