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