@@ -65,6 +65,7 @@ const emit = defineEmits<{
65
65
66
66
const attrs = useAttrs ();
67
67
68
+ const isDragging = ref (false );
68
69
const containerRef = ref <HTMLElement | null >(null );
69
70
const sortable = ref <Sortable | null >(null );
70
71
const getKey = computed (() => {
@@ -73,16 +74,30 @@ const getKey = computed(() => {
73
74
return props .itemKey ;
74
75
});
75
76
76
- defineExpose ({ containerRef , sortable: <Ref <Sortable | null >>sortable });
77
+ defineExpose ({
78
+ containerRef ,
79
+ sortable: <Ref <Sortable | null >>sortable ,
80
+ isDragging ,
81
+ });
77
82
78
83
watch (containerRef , (newDraggable ) => {
79
84
if (newDraggable ) {
80
85
sortable .value = new Sortable (newDraggable , {
81
86
... props .options ,
82
87
onChoose : (event ) => emit (" choose" , event ),
83
88
onUnchoose : (event ) => emit (" unchoose" , event ),
84
- onStart : (event ) => emit (" start" , event ),
85
- onEnd : (event ) => emit (" end" , event ),
89
+ onStart : (event ) => {
90
+ isDragging .value = true ;
91
+ emit (" start" , event );
92
+ },
93
+ onEnd : (event ) => {
94
+ // This is a hack to move the event to the end of the event queue.
95
+ // cf this issue: https://github.com/SortableJS/Sortable/issues/1184
96
+ setTimeout (() => {
97
+ isDragging .value = false ;
98
+ emit (" end" , event );
99
+ });
100
+ },
86
101
onAdd : (event ) => emit (" add" , event ),
87
102
onUpdate : (event ) => emit (" update" , event ),
88
103
onSort : (event ) => emit (" sort" , event ),
@@ -117,7 +132,6 @@ onUnmounted(() => {
117
132
sortable .value = null ;
118
133
}
119
134
});
120
-
121
135
</script >
122
136
123
137
<template >
0 commit comments