UNPKG

@geogirafe/lib-geoportal

Version:

GeoGirafe is a flexible application to build online geoportals.

77 lines (76 loc) 2.46 kB
import GirafeSingleton from '../../../base/GirafeSingleton'; import DragHelper from './draghelper'; class DragManager extends GirafeSingleton { constructor() { super(...arguments); Object.defineProperty(this, "layer", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "destination", { enumerable: true, configurable: true, writable: true, value: void 0 }); Object.defineProperty(this, "dragAfter", { enumerable: true, configurable: true, writable: true, value: false }); Object.defineProperty(this, "dragBefore", { enumerable: true, configurable: true, writable: true, value: false }); } dragStart(layer) { this.layer = layer; } dragEnd() { if (this.layer && this.destination && this.layer.parent === this.destination.parent) { if (this.layer.order < this.destination.order) { DragHelper.moveLayerAfter(this.layer, this.destination); } else if (this.layer.order > this.destination.order) { DragHelper.moveLayerBefore(this.layer, this.destination); } else { throw Error('Orders are equal. Not managed yet'); } this.layer = undefined; this.destination = undefined; } else { // Just do nothing, this move is not possible. console.debug('Illegal drag&drop'); } } dragEnter(target) { if (this.layer && this.layer !== target && this.layer?.parent === target.parent) { // Same parent, but different item this.destination = target; if (this.layer.order > target.order) { this.dragBefore = true; } else { this.dragAfter = true; } return true; } return false; } dragLeave(target) { if (this.layer?.treeItemId !== target.treeItemId && this.layer?.parent?.treeItemId === target.parent?.treeItemId) { this.dragAfter = false; this.dragBefore = false; return true; } return false; } } export default DragManager;