iceye-angular-cesium-fork
Version:
Angular library for working with Cesium.
109 lines • 15.6 kB
JavaScript
import { fromEvent as observableFromEvent, Subject } from 'rxjs';
import { map, merge, takeUntil, tap } from 'rxjs/operators';
import { Inject, Injectable } from '@angular/core';
import { DOCUMENT } from '@angular/common';
import { MapsManagerService } from '../../angular-cesium/services/maps-manager/maps-manager.service';
/**
* The Service is used to preform, handle and subscribe to icon dragging when using the `DraggableToMapDirective`.
* For more info check `DraggableToMapDirective` docs.
*/
export class DraggableToMapService {
constructor(document, mapsManager) {
this.document = document;
this.mapsManager = mapsManager;
this.mainSubject = new Subject();
}
setCoordinateConverter(coordinateConverter) {
this.coordinateConverter = coordinateConverter;
}
drag(imageSrc, style) {
if (!this.coordinateConverter) {
const mapComponent = this.mapsManager.getMap();
if (mapComponent) {
this.coordinateConverter = mapComponent.getCoordinateConverter();
}
}
this.cancel();
const imgElement = document.createElement('img');
imgElement.src = imageSrc;
imgElement.style.position = 'fixed';
imgElement.style.visibility = 'hidden';
imgElement.style.width = '30px';
imgElement.style.height = '30px';
imgElement.style['user-drag'] = 'none';
imgElement.style['user-select'] = 'none';
imgElement.style['-moz-user-select'] = 'none';
imgElement.style['-webkit-user-drag'] = 'none';
imgElement.style['-webkit-user-select'] = 'none';
imgElement.style['-ms-user-select'] = 'none';
Object.assign(imgElement.style, style);
document.body.appendChild(imgElement);
this.createDragObservable();
this.dragObservable.subscribe((e) => {
imgElement.style.visibility = 'visible';
imgElement.style.left = e.screenPosition.x - imgElement.clientWidth / 2 + 'px';
imgElement.style.top = e.screenPosition.y - imgElement.clientHeight / 2 + 'px';
this.mainSubject.next(e);
if (e.drop) {
imgElement.remove();
}
}, (e) => {
imgElement.remove();
}, () => {
imgElement.remove();
});
}
dragUpdates() {
return this.mainSubject;
}
cancel() {
if (this.stopper) {
this.stopper.next(true);
this.stopper = undefined;
this.dragObservable = undefined;
}
}
createDragObservable() {
const stopper = new Subject();
const dropSubject = new Subject();
const pointerUp = observableFromEvent(document, 'pointerup');
const pointerMove = observableFromEvent(document, 'pointermove');
let dragStartPositionX;
let dragStartPositionY;
let lastMove;
const moveObservable = pointerMove.pipe(map((e) => {
dragStartPositionX = dragStartPositionX ? dragStartPositionX : e.x;
dragStartPositionY = dragStartPositionY ? dragStartPositionY : e.y;
lastMove = {
drop: false,
initialScreenPosition: {
x: dragStartPositionX,
y: dragStartPositionY,
},
screenPosition: {
x: e.x,
y: e.y,
},
mapPosition: this.coordinateConverter ?
this.coordinateConverter.screenToCartesian3({ x: e.x, y: e.y }) : undefined,
};
return lastMove;
}), takeUntil(pointerUp), tap(undefined, undefined, () => {
if (lastMove) {
const dropEvent = Object.assign({}, lastMove);
dropEvent.drop = true;
dropSubject.next(dropEvent);
}
}));
this.dragObservable = moveObservable.pipe(merge(dropSubject), takeUntil(stopper));
this.stopper = stopper;
}
}
DraggableToMapService.decorators = [
{ type: Injectable }
];
DraggableToMapService.ctorParameters = () => [
{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] },
{ type: MapsManagerService }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dhYmxlLXRvLW1hcC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jZXNpdW0vc3JjL2xpYi9hbmd1bGFyLWNlc2l1bS13aWRnZXRzL3NlcnZpY2VzL2RyYWdnYWJsZS10by1tYXAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxJQUFJLG1CQUFtQixFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU3RSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSTNDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlFQUFpRSxDQUFDO0FBU3JHOzs7R0FHRztBQUdILE1BQU0sT0FBTyxxQkFBcUI7SUFPaEMsWUFBc0MsUUFBYSxFQUFVLFdBQStCO1FBQXRELGFBQVEsR0FBUixRQUFRLENBQUs7UUFBVSxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFGcEYsZ0JBQVcsR0FBRyxJQUFJLE9BQU8sRUFBaUIsQ0FBQztJQUduRCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsbUJBQXdDO1FBQzdELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxtQkFBbUIsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBSSxDQUFDLFFBQWdCLEVBQUUsS0FBVztRQUNoQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzdCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDL0MsSUFBSSxZQUFZLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxtQkFBbUIsR0FB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QUFDO2dCQUM5QyxTQUFTLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztnQkFDdEIsV0FBVyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUM3QjtRQUNILENBQUMsQ0FBQyxDQUFHLENBQUM7UUFFUixJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBRyxDQUFDO1FBQ3BGLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7OztZQTVHRixVQUFVOzs7NENBUUksTUFBTSxTQUFDLFFBQVE7WUF0QnJCLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZyb21FdmVudCBhcyBvYnNlcnZhYmxlRnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IG1hcCwgbWVyZ2UsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBWZWMyIH0gZnJvbSAnLi4vLi4vYW5ndWxhci1jZXNpdW0vbW9kZWxzL3ZlYzInO1xuaW1wb3J0IHsgQ2FydGVzaWFuMyB9IGZyb20gJy4uLy4uL2FuZ3VsYXItY2VzaXVtL21vZGVscy9jYXJ0ZXNpYW4zJztcbmltcG9ydCB7IENvb3JkaW5hdGVDb252ZXJ0ZXIgfSBmcm9tICcuLi8uLi9hbmd1bGFyLWNlc2l1bS9zZXJ2aWNlcy9jb29yZGluYXRlLWNvbnZlcnRlci9jb29yZGluYXRlLWNvbnZlcnRlci5zZXJ2aWNlJztcbmltcG9ydCB7IE1hcHNNYW5hZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL2FuZ3VsYXItY2VzaXVtL3NlcnZpY2VzL21hcHMtbWFuYWdlci9tYXBzLW1hbmFnZXIuc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSWNvbkRyYWdFdmVudCB7XG4gIGluaXRpYWxTY3JlZW5Qb3NpdGlvbjogVmVjMjtcbiAgc2NyZWVuUG9zaXRpb246IFZlYzI7XG4gIG1hcFBvc2l0aW9uOiBDYXJ0ZXNpYW4zO1xuICBkcm9wOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBTZXJ2aWNlIGlzIHVzZWQgdG8gcHJlZm9ybSwgaGFuZGxlIGFuZCBzdWJzY3JpYmUgdG8gaWNvbiBkcmFnZ2luZyB3aGVuIHVzaW5nIHRoZSBgRHJhZ2dhYmxlVG9NYXBEaXJlY3RpdmVgLlxuICogRm9yIG1vcmUgaW5mbyBjaGVjayBgRHJhZ2dhYmxlVG9NYXBEaXJlY3RpdmVgIGRvY3MuXG4gKi9cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIERyYWdnYWJsZVRvTWFwU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBjb29yZGluYXRlQ29udmVydGVyOiBDb29yZGluYXRlQ29udmVydGVyO1xuICBwcml2YXRlIGRyYWdPYnNlcnZhYmxlOiBPYnNlcnZhYmxlPEljb25EcmFnRXZlbnQ+O1xuICBwcml2YXRlIHN0b3BwZXI6IFN1YmplY3Q8YW55PjtcbiAgcHJpdmF0ZSBtYWluU3ViamVjdCA9IG5ldyBTdWJqZWN0PEljb25EcmFnRXZlbnQ+KCk7XG5cbiAgY29uc3RydWN0b3IoQEluamVjdChET0NVTUVOVCkgcHJpdmF0ZSBkb2N1bWVudDogYW55LCBwcml2YXRlIG1hcHNNYW5hZ2VyOiBNYXBzTWFuYWdlclNlcnZpY2UpIHtcbiAgfVxuXG4gIHNldENvb3JkaW5hdGVDb252ZXJ0ZXIoY29vcmRpbmF0ZUNvbnZlcnRlcjogQ29vcmRpbmF0ZUNvbnZlcnRlcikge1xuICAgIHRoaXMuY29vcmRpbmF0ZUNvbnZlcnRlciA9IGNvb3JkaW5hdGVDb252ZXJ0ZXI7XG4gIH1cblxuICBkcmFnKGltYWdlU3JjOiBzdHJpbmcsIHN0eWxlPzogYW55KSB7XG4gICAgaWYgKCF0aGlzLmNvb3JkaW5hdGVDb252ZXJ0ZXIpIHtcbiAgICAgIGNvbnN0IG1hcENvbXBvbmVudCA9IHRoaXMubWFwc01hbmFnZXIuZ2V0TWFwKCk7XG4gICAgICBpZiAobWFwQ29tcG9uZW50KSB7XG4gICAgICAgIHRoaXMuY29vcmRpbmF0ZUNvbnZlcnRlciA9IG1hcENvbXBvbmVudC5nZXRDb29yZGluYXRlQ29udmVydGVyKCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuY2FuY2VsKCk7XG4gICAgY29uc3QgaW1nRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2ltZycpO1xuICAgIGltZ0VsZW1lbnQuc3JjID0gaW1hZ2VTcmM7XG4gICAgaW1nRWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG4gICAgaW1nRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgaW1nRWxlbWVudC5zdHlsZS53aWR0aCA9ICczMHB4JztcbiAgICBpbWdFbGVtZW50LnN0eWxlLmhlaWdodCA9ICczMHB4JztcbiAgICBpbWdFbGVtZW50LnN0eWxlWyd1c2VyLWRyYWcnXSA9ICdub25lJztcbiAgICBpbWdFbGVtZW50LnN0eWxlWyd1c2VyLXNlbGVjdCddID0gJ25vbmUnO1xuICAgIGltZ0VsZW1lbnQuc3R5bGVbJy1tb3otdXNlci1zZWxlY3QnXSA9ICdub25lJztcbiAgICBpbWdFbGVtZW50LnN0eWxlWyctd2Via2l0LXVzZXItZHJhZyddID0gJ25vbmUnO1xuICAgIGltZ0VsZW1lbnQuc3R5bGVbJy13ZWJraXQtdXNlci1zZWxlY3QnXSA9ICdub25lJztcbiAgICBpbWdFbGVtZW50LnN0eWxlWyctbXMtdXNlci1zZWxlY3QnXSA9ICdub25lJztcbiAgICBPYmplY3QuYXNzaWduKGltZ0VsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGltZ0VsZW1lbnQpO1xuXG4gICAgdGhpcy5jcmVhdGVEcmFnT2JzZXJ2YWJsZSgpO1xuICAgIHRoaXMuZHJhZ09ic2VydmFibGUuc3Vic2NyaWJlKFxuICAgICAgKGUpID0+IHtcbiAgICAgICAgaW1nRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuICAgICAgICBpbWdFbGVtZW50LnN0eWxlLmxlZnQgPSBlLnNjcmVlblBvc2l0aW9uLnggLSBpbWdFbGVtZW50LmNsaWVudFdpZHRoIC8gMiArICdweCc7XG4gICAgICAgIGltZ0VsZW1lbnQuc3R5bGUudG9wID0gZS5zY3JlZW5Qb3NpdGlvbi55IC0gaW1nRWxlbWVudC5jbGllbnRIZWlnaHQgLyAyICsgJ3B4JztcbiAgICAgICAgdGhpcy5tYWluU3ViamVjdC5uZXh0KGUpO1xuICAgICAgICBpZiAoZS5kcm9wKSB7XG4gICAgICAgICAgaW1nRWxlbWVudC5yZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIChlOiBhbnkpID0+IHtcbiAgICAgICAgaW1nRWxlbWVudC5yZW1vdmUoKTtcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGltZ0VsZW1lbnQucmVtb3ZlKCk7XG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIGRyYWdVcGRhdGVzKCk6IE9ic2VydmFibGU8SWNvbkRyYWdFdmVudD4ge1xuICAgIHJldHVybiB0aGlzLm1haW5TdWJqZWN0O1xuICB9XG5cbiAgY2FuY2VsKCkge1xuICAgIGlmICh0aGlzLnN0b3BwZXIpIHtcbiAgICAgIHRoaXMuc3RvcHBlci5uZXh0KHRydWUpO1xuICAgICAgdGhpcy5zdG9wcGVyID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kcmFnT2JzZXJ2YWJsZSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZURyYWdPYnNlcnZhYmxlKCkge1xuICAgIGNvbnN0IHN0b3BwZXIgPSBuZXcgU3ViamVjdCgpO1xuICAgIGNvbnN0IGRyb3BTdWJqZWN0ID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICAgIGNvbnN0IHBvaW50ZXJVcCA9IG9ic2VydmFibGVGcm9tRXZlbnQoZG9jdW1lbnQsICdwb2ludGVydXAnKTtcbiAgICBjb25zdCBwb2ludGVyTW92ZSA9IG9ic2VydmFibGVGcm9tRXZlbnQoZG9jdW1lbnQsICdwb2ludGVybW92ZScpO1xuXG4gICAgbGV0IGRyYWdTdGFydFBvc2l0aW9uWDogbnVtYmVyO1xuICAgIGxldCBkcmFnU3RhcnRQb3NpdGlvblk6IG51bWJlcjtcbiAgICBsZXQgbGFzdE1vdmU6IGFueTtcbiAgICBjb25zdCBtb3ZlT2JzZXJ2YWJsZSA9IHBvaW50ZXJNb3ZlLnBpcGUobWFwKChlOiBhbnkpID0+IHtcbiAgICAgICAgZHJhZ1N0YXJ0UG9zaXRpb25YID0gZHJhZ1N0YXJ0UG9zaXRpb25YID8gZHJhZ1N0YXJ0UG9zaXRpb25YIDogZS54O1xuICAgICAgICBkcmFnU3RhcnRQb3NpdGlvblkgPSBkcmFnU3RhcnRQb3NpdGlvblkgPyBkcmFnU3RhcnRQb3NpdGlvblkgOiBlLnk7XG4gICAgICAgIGxhc3RNb3ZlID0ge1xuICAgICAgICAgIGRyb3A6IGZhbHNlLFxuICAgICAgICAgIGluaXRpYWxTY3JlZW5Qb3NpdGlvbjoge1xuICAgICAgICAgICAgeDogZHJhZ1N0YXJ0UG9zaXRpb25YLFxuICAgICAgICAgICAgeTogZHJhZ1N0YXJ0UG9zaXRpb25ZLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc2NyZWVuUG9zaXRpb246IHtcbiAgICAgICAgICAgIHg6IGUueCxcbiAgICAgICAgICAgIHk6IGUueSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1hcFBvc2l0aW9uOiB0aGlzLmNvb3JkaW5hdGVDb252ZXJ0ZXIgP1xuICAgICAgICAgICAgdGhpcy5jb29yZGluYXRlQ29udmVydGVyLnNjcmVlblRvQ2FydGVzaWFuMyh7eDogZS54LCB5OiBlLnl9KSA6IHVuZGVmaW5lZCxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGxhc3RNb3ZlO1xuICAgICAgfSksXG4gICAgICB0YWtlVW50aWwocG9pbnRlclVwKSxcbiAgICAgIHRhcCh1bmRlZmluZWQsIHVuZGVmaW5lZCwgKCkgPT4ge1xuICAgICAgICBpZiAobGFzdE1vdmUpIHtcbiAgICAgICAgICBjb25zdCBkcm9wRXZlbnQgPSBPYmplY3QuYXNzaWduKHt9LCBsYXN0TW92ZSk7XG4gICAgICAgICAgZHJvcEV2ZW50LmRyb3AgPSB0cnVlO1xuICAgICAgICAgIGRyb3BTdWJqZWN0Lm5leHQoZHJvcEV2ZW50KTtcbiAgICAgICAgfVxuICAgICAgfSksICk7XG5cbiAgICB0aGlzLmRyYWdPYnNlcnZhYmxlID0gbW92ZU9ic2VydmFibGUucGlwZShtZXJnZShkcm9wU3ViamVjdCksIHRha2VVbnRpbChzdG9wcGVyKSwgKTtcbiAgICB0aGlzLnN0b3BwZXIgPSBzdG9wcGVyO1xuICB9XG59XG4iXX0=