Skip to content

Commit b4a9234

Browse files
Improve future index computation
1 parent 7c73c22 commit b4a9234

File tree

5 files changed

+37
-25
lines changed

5 files changed

+37
-25
lines changed

dist/vuedraggable.js

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
'use strict';
22

3+
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
4+
5+
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }
6+
37
(function () {
48
"use strict";
59

@@ -188,6 +192,11 @@
188192

189193
return context;
190194
},
195+
getVmIndex: function getVmIndex(domIndex) {
196+
var indexes = this.visibleIndexes;
197+
var numberIndexes = indexes.length;
198+
return domIndex > numberIndexes - 1 ? numberIndexes : indexes[domIndex];
199+
},
191200
onDragStart: function onDragStart(evt) {
192201
this.context = this.getUnderlyingVm(evt.item);
193202
evt.item._underlying_vm_ = this.clone(this.context.element);
@@ -198,10 +207,7 @@
198207
return;
199208
}
200209
removeNode(evt.item);
201-
var indexes = this.visibleIndexes;
202-
var domNewIndex = evt.newIndex;
203-
var numberIndexes = indexes.length;
204-
var newIndex = domNewIndex > numberIndexes - 1 ? numberIndexes : indexes[domNewIndex];
210+
var newIndex = this.getVmIndex(evt.newIndex);
205211
this.spliceList(newIndex, 0, element);
206212
this.computeIndexes();
207213
var added = { element: element, newIndex: newIndex };
@@ -223,7 +229,7 @@
223229
removeNode(evt.item);
224230
insertNodeAt(evt.from, evt.item, evt.oldIndex);
225231
var oldIndex = this.context.index;
226-
var newIndex = this.visibleIndexes[evt.newIndex];
232+
var newIndex = this.getVmIndex(evt.newIndex);
227233
this.updatePosition(oldIndex, newIndex);
228234
var moved = { element: this.context.element, oldIndex: oldIndex, newIndex: newIndex };
229235
this.emitChanges({ moved: moved });
@@ -233,9 +239,11 @@
233239
return 0;
234240
}
235241
var relatedElement = evt.related;
236-
var currentIndex = [].concat(_toConsumableArray(evt.to.children)).indexOf(relatedElement);
242+
var currentDOMIndex = [].concat(_toConsumableArray(evt.to.children)).indexOf(relatedElement);
243+
var currentIndex = relatedContext.component.getVmIndex(currentDOMIndex);
237244
var incialIndex = relatedContext.index;
238-
return currentIndex !== incialIndex ? incialIndex + 1 : incialIndex;
245+
console.log(currentIndex, incialIndex);
246+
return Math.max(currentIndex, incialIndex);
239247
},
240248
onDragMove: function onDragMove(evt) {
241249
var onMove = this.move;
@@ -258,7 +266,7 @@
258266
return draggableComponent;
259267
}
260268

261-
if (typeof exports == "object") {
269+
if ((typeof exports === 'undefined' ? 'undefined' : _typeof(exports)) == "object") {
262270
var Sortable = require("sortablejs");
263271
module.exports = buildDraggable(Sortable);
264272
} else if (typeof define == "function" && define.amd) {

dist/vuedraggable.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

examples/Cancel.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ <h2>List 1 draggable</h2>
3535
<h2>List 2 draggable</h2>
3636
<draggable class="dragArea" :list="list2" :options="{group:'people'}">
3737
<transition-group tag="div" class="dragArea" name="list-complete">
38-
<div v-for="(element, index) in list2" :key="element.name" >
38+
<div v-for="(element, index) in list2" :class="{'target': element===targetElement, 'ok':canDrag , 'ko':!canDrag}" :key="element.name" >
3939
{{element.name}}
4040
</div>
4141
</transition-group>

examples/script/cancel.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,17 +28,17 @@ var vm = new Vue({
2828
return evt.draggedContext.futureIndex % 2 === 0
2929
}
3030

31-
if (evt.draggedContext.element.name=='apple'){
32-
return false
33-
}
31+
// if (evt.draggedContext.element.name=='apple'){
32+
// return false
33+
// }
3434

35-
if (evt.relatedContext.element && evt.relatedContext.element.name=='strawberry'){
36-
return false
37-
}
35+
// if (evt.relatedContext.element && evt.relatedContext.element.name=='strawberry'){
36+
// return false
37+
// }
3838

39-
if (evt.relatedContext.list.length==2){
40-
return false
41-
}
39+
// if (evt.relatedContext.list.length==2){
40+
// return false
41+
// }
4242
return true;
4343
},
4444
checkMove: function(evt){

src/vuedraggable.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,12 @@
172172
return context
173173
},
174174

175+
getVmIndex (domIndex) {
176+
const indexes = this.visibleIndexes
177+
const numberIndexes = indexes.length
178+
return (domIndex > numberIndexes - 1) ? numberIndexes : indexes[domIndex]
179+
},
180+
175181
onDragStart (evt) {
176182
this.context = this.getUnderlyingVm(evt.item)
177183
evt.item._underlying_vm_ = this.clone(this.context.element)
@@ -183,10 +189,7 @@
183189
return
184190
}
185191
removeNode(evt.item)
186-
const indexes = this.visibleIndexes
187-
const domNewIndex = evt.newIndex
188-
const numberIndexes = indexes.length
189-
const newIndex = (domNewIndex > numberIndexes - 1) ? numberIndexes : indexes[domNewIndex]
192+
const newIndex = this.getVmIndex(evt.newIndex)
190193
this.spliceList(newIndex, 0, element)
191194
this.computeIndexes()
192195
const added = {element, newIndex}
@@ -210,7 +213,7 @@
210213
removeNode(evt.item)
211214
insertNodeAt(evt.from, evt.item, evt.oldIndex)
212215
const oldIndex = this.context.index
213-
const newIndex = this.visibleIndexes[evt.newIndex]
216+
const newIndex = this.getVmIndex(evt.newIndex)
214217
this.updatePosition(oldIndex, newIndex)
215218
const moved = {element: this.context.element, oldIndex, newIndex}
216219
this.emitChanges({moved})
@@ -221,7 +224,8 @@
221224
return 0
222225
}
223226
const relatedElement = evt.related;
224-
const currentIndex = [...evt.to.children].indexOf(relatedElement)
227+
const currentDOMIndex = [...evt.to.children].indexOf(relatedElement)
228+
const currentIndex = relatedContext.component.getVmIndex(currentDOMIndex)
225229
const incialIndex = relatedContext.index
226230
return (currentIndex !== incialIndex) ? incialIndex+1 : incialIndex
227231
},

0 commit comments

Comments
 (0)