@@ -46,7 +46,7 @@ export function useSortable<T>(
46
46
47
47
const defaultOptions : Options = {
48
48
onUpdate : ( e ) => {
49
- moveArrayElement ( list , e . oldIndex ! , e . newIndex ! )
49
+ moveArrayElement ( list , e . oldIndex ! , e . newIndex ! , e )
50
50
} ,
51
51
}
52
52
@@ -80,11 +80,43 @@ export function useSortable<T>(
80
80
}
81
81
}
82
82
83
+ /**
84
+ * Inserts a element into the DOM at a given index.
85
+ * @param parentElement
86
+ * @param element
87
+ * @param {number } index
88
+ * @see https://github.com/Alfred-Skyblue/vue-draggable-plus/blob/a3829222095e1949bf2c9a20979d7b5930e66f14/src/utils/index.ts#L81C1-L94C2
89
+ */
90
+ export function insertNodeAt (
91
+ parentElement : Element ,
92
+ element : Element ,
93
+ index : number ,
94
+ ) {
95
+ const refElement = parentElement . children [ index ]
96
+ parentElement . insertBefore ( element , refElement )
97
+ }
98
+
99
+ /**
100
+ * Removes a node from the DOM.
101
+ * @param {Node } node
102
+ * @see https://github.com/Alfred-Skyblue/vue-draggable-plus/blob/a3829222095e1949bf2c9a20979d7b5930e66f14/src/utils/index.ts#L96C1-L102C2
103
+ */
104
+ export function removeNode ( node : Node ) {
105
+ if ( node . parentNode )
106
+ node . parentNode . removeChild ( node )
107
+ }
108
+
83
109
export function moveArrayElement < T > (
84
110
list : MaybeRefOrGetter < T [ ] > ,
85
111
from : number ,
86
112
to : number ,
113
+ e : Sortable . SortableEvent | null = null ,
87
114
) : void {
115
+ if ( e != null ) {
116
+ removeNode ( e . item )
117
+ insertNodeAt ( e . from , e . item , from )
118
+ }
119
+
88
120
const _valueIsRef = isRef ( list )
89
121
// When the list is a ref, make a shallow copy of it to avoid repeatedly triggering side effects when moving elements
90
122
const array = _valueIsRef ? [ ...toValue ( list ) ] : toValue ( list )
0 commit comments