From e97b2f5044d451b6c246ff6c91819e57fc0a02fc Mon Sep 17 00:00:00 2001
From: Julian Leucker <leuckerj@gmail.com>
Date: Wed, 25 Oct 2023 13:28:12 +0200
Subject: [PATCH] Emit Drag events of dragged elements (passed through
 DragGrid)

---
 src/DragContainer.vue |  4 ++++
 src/DragGrid.vue      | 10 +++++++++-
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/src/DragContainer.vue b/src/DragContainer.vue
index 6d62d98..7f58883 100644
--- a/src/DragContainer.vue
+++ b/src/DragContainer.vue
@@ -15,6 +15,7 @@
 <script>
 export default {
   name: "DragContainer",
+  emits: ["dragstart", "dragmove", "dragend"],
   methods: {
     handleDragStart(event) {
       if (this.isDisabled) return;
@@ -33,15 +34,18 @@ export default {
       };
       // Now the element is on top of everything else inside the grid (not on top of other grids though)
       this.zIndex = 999999;
+      this.$emit("dragstart", this.dataTransfer);
     },
     handleDragEnd() {
       this.offsetX = 0;
       this.offsetY = 0;
       this.zIndex = "auto";
+      this.$emit("dragend", this.dataTransfer);
     },
     handleDragMove(event) {
       this.offsetX += event.dx;
       this.offsetY += event.dy;
+      this.$emit("dragmove", this.dataTransfer);
     },
   },
   props: {
diff --git a/src/DragGrid.vue b/src/DragGrid.vue
index 1572374..0a57125 100644
--- a/src/DragGrid.vue
+++ b/src/DragGrid.vue
@@ -35,6 +35,8 @@
         :context="context"
         :grid-id="gridId"
         :disabled="disabled || loading || item.disabled"
+        @dragstart="emitContainerDragStart"
+        @dragend="emitContainerDragEnd"
       >
         <slot v-bind="transformItem(item)" :raw-item="item" name="item">
           <dl>
@@ -75,7 +77,7 @@ export default {
     GridItem,
     DragContainer,
   },
-  emits: ["input", "itemChanged"],
+  emits: ["input", "itemChanged", "containerDragStart", "containerDragEnd"],
   data() {
     return {
       isDraggedOver: false,
@@ -312,6 +314,12 @@ export default {
       newItem.data = this.getObject("data", item);
       return newItem;
     },
+    emitContainerDragStart(dataTransfer) {
+      this.$emit("containerDragStart", dataTransfer);
+    },
+    emitContainerDragEnd(dataTransfer) {
+      this.$emit("containerDragEnd", dataTransfer);
+    },
   },
   computed: {
     gridData() {
-- 
GitLab