@geogirafe/lib-geoportal
Version:
GeoGirafe is a flexible application to build online geoportals.
77 lines (76 loc) • 2.46 kB
JavaScript
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;