Skip to content

Instantly share code, notes, and snippets.

@tgoldenberg
Created September 25, 2015 21:03
Show Gist options
  • Select an option

  • Save tgoldenberg/2ced84c5e84aba4347fe to your computer and use it in GitHub Desktop.

Select an option

Save tgoldenberg/2ced84c5e84aba4347fe to your computer and use it in GitHub Desktop.
Mirror sorted array with Sortable
...
componentDidMount: function() {
// make elements sortable when editMode == true
var self = this;
SortedElements = Sortable.create(simpleList, {
onEnd: function (/**Event*/evt) {
var oldIndex = evt.oldIndex -1; // element's old index within parent
var newIndex = evt.newIndex -1; // element's new index within parent
if (oldIndex != undefined && newIndex != undefined) {
// swap old and new elements in sidebar list
var order = self.state.elementOrder;
if (oldIndex - newIndex == 1 || newIndex - oldIndex == 1){
order = swapElements(order, oldIndex, newIndex)
} else if (newIndex > oldIndex) {
order = moveElementsDown(order, oldIndex, newIndex);
} else if (newIndex < oldIndex) {
order = moveElementsUp(order, oldIndex, newIndex);
}
function moveElementsUp(order, oldIndex, newIndex) {
var finalOrder = order;
var dragged = order[oldIndex]
for (i=oldIndex-1; i>= newIndex; i--) {
var temp = order[i];
finalOrder[i+1] = temp;
}
finalOrder[newIndex] = dragged;
return finalOrder;
}
function moveElementsDown(order, oldIndex, newIndex) {
var finalOrder = order;
var dragged = order[oldIndex]
for (i=oldIndex+1; i<= newIndex; i++) {
var temp = order[i];
finalOrder[i-1] = temp;
}
finalOrder[newIndex] = dragged;
return finalOrder;
}
function swapElements(order, oldIndex, newIndex) {
var temp = order[newIndex];
order[newIndex] = order[oldIndex];
order[oldIndex] = temp;
return order;
}
self.setState({elementOrder: order});
}
}
});
},
....
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment