UNPKG

@geogirafe/lib-geoportal

Version:

GeoGirafe is a flexible application to build online geoportals.

31 lines (30 loc) 1.26 kB
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;