@geogirafe/lib-geoportal
Version:
GeoGirafe is a flexible application to build online geoportals.
31 lines (30 loc) • 1.26 kB
JavaScript
class DragHelper {
stateManager;
constructor(stateManager) {
this.stateManager = stateManager;
}
checkParents(dragged, dropped) {
if (dragged.parent !== dropped.parent) {
throw Error('Layers can only be reordered if the have the same parent');
}
}
reorderLayers(dragged, dropped, adjustOrder, increment) {
this.checkParents(dragged, dropped);
dragged.order = dropped.order;
const layersToReorder = dragged.parent ? dragged.parent.children : this.stateManager.state.layers.layersList;
for (const child of layersToReorder) {
if (child.treeItemId !== dragged.treeItemId && adjustOrder(child.order, dragged.order)) {
child.order += increment;
}
}
}
moveLayerAfter(dragged, dropped) {
const minOrder = dragged.order;
this.reorderLayers(dragged, dropped, (childOrder, draggedOrder) => childOrder <= draggedOrder && childOrder >= minOrder, -1);
}
moveLayerBefore(dragged, dropped) {
const maxOrder = dragged.order;
this.reorderLayers(dragged, dropped, (childOrder, draggedOrder) => childOrder >= draggedOrder && childOrder <= maxOrder, 1);
}
}
export default DragHelper;