UNPKG

@geogirafe/lib-geoportal

Version:

GeoGirafe is a flexible application to build online geoportals.

30 lines (29 loc) 1.3 kB
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;