UNPKG

angular-cesium-ivy

Version:
111 lines 16.1 kB
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 * as i0 from "@angular/core"; import * as i1 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.ɵfac = function DraggableToMapService_Factory(t) { return new (t || DraggableToMapService)(i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(i1.MapsManagerService)); }; DraggableToMapService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: DraggableToMapService, factory: DraggableToMapService.ɵfac }); (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DraggableToMapService, [{ type: Injectable }], function () { return [{ type: undefined, decorators: [{ type: Inject, args: [DOCUMENT] }] }, { type: i1.MapsManagerService }]; }, null); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhZ2dhYmxlLXRvLW1hcC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jZXNpdW0vc3JjL2xpYi9hbmd1bGFyLWNlc2l1bS13aWRnZXRzL3NlcnZpY2VzL2RyYWdnYWJsZS10by1tYXAuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxJQUFJLG1CQUFtQixFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU3RSxPQUFPLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDNUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFhM0M7OztHQUdHO0FBR0gsTUFBTSxPQUFPLHFCQUFxQjtJQU9oQyxZQUFzQyxRQUFhLEVBQVUsV0FBK0I7UUFBdEQsYUFBUSxHQUFSLFFBQVEsQ0FBSztRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFvQjtRQUZwRixnQkFBVyxHQUFHLElBQUksT0FBTyxFQUFpQixDQUFDO0lBR25ELENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxtQkFBd0M7UUFDN0QsSUFBSSxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDO0lBQ2pELENBQUM7SUFFRCxJQUFJLENBQUMsUUFBZ0IsRUFBRSxLQUFXO1FBQ2hDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7WUFDN0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMvQyxJQUFJLFlBQVksRUFBRTtnQkFDaEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFlBQVksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO2FBQ2xFO1NBQ0Y7UUFD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QUN0QixXQUFXLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2FBQzdCO1FBQ0gsQ0FBQyxDQUFDLENBQUcsQ0FBQztRQUVSLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFHLENBQUM7UUFDcEYsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7SUFDekIsQ0FBQzs7MEZBM0dVLHFCQUFxQixjQU9aLFFBQVE7MkVBUGpCLHFCQUFxQixXQUFyQixxQkFBcUI7dUZBQXJCLHFCQUFxQjtjQURqQyxVQUFVOztzQkFRSSxNQUFNO3VCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmcm9tRXZlbnQgYXMgb2JzZXJ2YWJsZUZyb21FdmVudCwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBtYXAsIG1lcmdlLCB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgVmVjMiB9IGZyb20gJy4uLy4uL2FuZ3VsYXItY2VzaXVtL21vZGVscy92ZWMyJztcbmltcG9ydCB7IENhcnRlc2lhbjMgfSBmcm9tICcuLi8uLi9hbmd1bGFyLWNlc2l1bS9tb2RlbHMvY2FydGVzaWFuMyc7XG5pbXBvcnQgeyBDb29yZGluYXRlQ29udmVydGVyIH0gZnJvbSAnLi4vLi4vYW5ndWxhci1jZXNpdW0vc2VydmljZXMvY29vcmRpbmF0ZS1jb252ZXJ0ZXIvY29vcmRpbmF0ZS1jb252ZXJ0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBNYXBzTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9hbmd1bGFyLWNlc2l1bS9zZXJ2aWNlcy9tYXBzLW1hbmFnZXIvbWFwcy1tYW5hZ2VyLnNlcnZpY2UnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEljb25EcmFnRXZlbnQge1xuICBpbml0aWFsU2NyZWVuUG9zaXRpb246IFZlYzI7XG4gIHNjcmVlblBvc2l0aW9uOiBWZWMyO1xuICBtYXBQb3NpdGlvbjogQ2FydGVzaWFuMztcbiAgZHJvcDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBUaGUgU2VydmljZSBpcyB1c2VkIHRvIHByZWZvcm0sIGhhbmRsZSBhbmQgc3Vic2NyaWJlIHRvIGljb24gZHJhZ2dpbmcgd2hlbiB1c2luZyB0aGUgYERyYWdnYWJsZVRvTWFwRGlyZWN0aXZlYC5cbiAqIEZvciBtb3JlIGluZm8gY2hlY2sgYERyYWdnYWJsZVRvTWFwRGlyZWN0aXZlYCBkb2NzLlxuICovXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBEcmFnZ2FibGVUb01hcFNlcnZpY2Uge1xuXG4gIHByaXZhdGUgY29vcmRpbmF0ZUNvbnZlcnRlcjogQ29vcmRpbmF0ZUNvbnZlcnRlcjtcbiAgcHJpdmF0ZSBkcmFnT2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxJY29uRHJhZ0V2ZW50PjtcbiAgcHJpdmF0ZSBzdG9wcGVyOiBTdWJqZWN0PGFueT47XG4gIHByaXZhdGUgbWFpblN1YmplY3QgPSBuZXcgU3ViamVjdDxJY29uRHJhZ0V2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoRE9DVU1FTlQpIHByaXZhdGUgZG9jdW1lbnQ6IGFueSwgcHJpdmF0ZSBtYXBzTWFuYWdlcjogTWFwc01hbmFnZXJTZXJ2aWNlKSB7XG4gIH1cblxuICBzZXRDb29yZGluYXRlQ29udmVydGVyKGNvb3JkaW5hdGVDb252ZXJ0ZXI6IENvb3JkaW5hdGVDb252ZXJ0ZXIpIHtcbiAgICB0aGlzLmNvb3JkaW5hdGVDb252ZXJ0ZXIgPSBjb29yZGluYXRlQ29udmVydGVyO1xuICB9XG5cbiAgZHJhZyhpbWFnZVNyYzogc3RyaW5nLCBzdHlsZT86IGFueSkge1xuICAgIGlmICghdGhpcy5jb29yZGluYXRlQ29udmVydGVyKSB7XG4gICAgICBjb25zdCBtYXBDb21wb25lbnQgPSB0aGlzLm1hcHNNYW5hZ2VyLmdldE1hcCgpO1xuICAgICAgaWYgKG1hcENvbXBvbmVudCkge1xuICAgICAgICB0aGlzLmNvb3JkaW5hdGVDb252ZXJ0ZXIgPSBtYXBDb21wb25lbnQuZ2V0Q29vcmRpbmF0ZUNvbnZlcnRlcigpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNhbmNlbCgpO1xuICAgIGNvbnN0IGltZ0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcbiAgICBpbWdFbGVtZW50LnNyYyA9IGltYWdlU3JjO1xuICAgIGltZ0VsZW1lbnQuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuICAgIGltZ0VsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgIGltZ0VsZW1lbnQuc3R5bGUud2lkdGggPSAnMzBweCc7XG4gICAgaW1nRWxlbWVudC5zdHlsZS5oZWlnaHQgPSAnMzBweCc7XG4gICAgaW1nRWxlbWVudC5zdHlsZVsndXNlci1kcmFnJ10gPSAnbm9uZSc7XG4gICAgaW1nRWxlbWVudC5zdHlsZVsndXNlci1zZWxlY3QnXSA9ICdub25lJztcbiAgICBpbWdFbGVtZW50LnN0eWxlWyctbW96LXVzZXItc2VsZWN0J10gPSAnbm9uZSc7XG4gICAgaW1nRWxlbWVudC5zdHlsZVsnLXdlYmtpdC11c2VyLWRyYWcnXSA9ICdub25lJztcbiAgICBpbWdFbGVtZW50LnN0eWxlWyctd2Via2l0LXVzZXItc2VsZWN0J10gPSAnbm9uZSc7XG4gICAgaW1nRWxlbWVudC5zdHlsZVsnLW1zLXVzZXItc2VsZWN0J10gPSAnbm9uZSc7XG4gICAgT2JqZWN0LmFzc2lnbihpbWdFbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChpbWdFbGVtZW50KTtcblxuICAgIHRoaXMuY3JlYXRlRHJhZ09ic2VydmFibGUoKTtcbiAgICB0aGlzLmRyYWdPYnNlcnZhYmxlLnN1YnNjcmliZShcbiAgICAgIChlKSA9PiB7XG4gICAgICAgIGltZ0VsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICAgICAgaW1nRWxlbWVudC5zdHlsZS5sZWZ0ID0gZS5zY3JlZW5Qb3NpdGlvbi54IC0gaW1nRWxlbWVudC5jbGllbnRXaWR0aCAvIDIgKyAncHgnO1xuICAgICAgICBpbWdFbGVtZW50LnN0eWxlLnRvcCA9IGUuc2NyZWVuUG9zaXRpb24ueSAtIGltZ0VsZW1lbnQuY2xpZW50SGVpZ2h0IC8gMiArICdweCc7XG4gICAgICAgIHRoaXMubWFpblN1YmplY3QubmV4dChlKTtcbiAgICAgICAgaWYgKGUuZHJvcCkge1xuICAgICAgICAgIGltZ0VsZW1lbnQucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAoZTogYW55KSA9PiB7XG4gICAgICAgIGltZ0VsZW1lbnQucmVtb3ZlKCk7XG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpbWdFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBkcmFnVXBkYXRlcygpOiBPYnNlcnZhYmxlPEljb25EcmFnRXZlbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5tYWluU3ViamVjdDtcbiAgfVxuXG4gIGNhbmNlbCgpIHtcbiAgICBpZiAodGhpcy5zdG9wcGVyKSB7XG4gICAgICB0aGlzLnN0b3BwZXIubmV4dCh0cnVlKTtcbiAgICAgIHRoaXMuc3RvcHBlciA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZHJhZ09ic2VydmFibGUgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEcmFnT2JzZXJ2YWJsZSgpIHtcbiAgICBjb25zdCBzdG9wcGVyID0gbmV3IFN1YmplY3QoKTtcbiAgICBjb25zdCBkcm9wU3ViamVjdCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgICBjb25zdCBwb2ludGVyVXAgPSBvYnNlcnZhYmxlRnJvbUV2ZW50KGRvY3VtZW50LCAncG9pbnRlcnVwJyk7XG4gICAgY29uc3QgcG9pbnRlck1vdmUgPSBvYnNlcnZhYmxlRnJvbUV2ZW50KGRvY3VtZW50LCAncG9pbnRlcm1vdmUnKTtcblxuICAgIGxldCBkcmFnU3RhcnRQb3NpdGlvblg6IG51bWJlcjtcbiAgICBsZXQgZHJhZ1N0YXJ0UG9zaXRpb25ZOiBudW1iZXI7XG4gICAgbGV0IGxhc3RNb3ZlOiBhbnk7XG4gICAgY29uc3QgbW92ZU9ic2VydmFibGUgPSBwb2ludGVyTW92ZS5waXBlKG1hcCgoZTogYW55KSA9PiB7XG4gICAgICAgIGRyYWdTdGFydFBvc2l0aW9uWCA9IGRyYWdTdGFydFBvc2l0aW9uWCA/IGRyYWdTdGFydFBvc2l0aW9uWCA6IGUueDtcbiAgICAgICAgZHJhZ1N0YXJ0UG9zaXRpb25ZID0gZHJhZ1N0YXJ0UG9zaXRpb25ZID8gZHJhZ1N0YXJ0UG9zaXRpb25ZIDogZS55O1xuICAgICAgICBsYXN0TW92ZSA9IHtcbiAgICAgICAgICBkcm9wOiBmYWxzZSxcbiAgICAgICAgICBpbml0aWFsU2NyZWVuUG9zaXRpb246IHtcbiAgICAgICAgICAgIHg6IGRyYWdTdGFydFBvc2l0aW9uWCxcbiAgICAgICAgICAgIHk6IGRyYWdTdGFydFBvc2l0aW9uWSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNjcmVlblBvc2l0aW9uOiB7XG4gICAgICAgICAgICB4OiBlLngsXG4gICAgICAgICAgICB5OiBlLnksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtYXBQb3NpdGlvbjogdGhpcy5jb29yZGluYXRlQ29udmVydGVyID9cbiAgICAgICAgICAgIHRoaXMuY29vcmRpbmF0ZUNvbnZlcnRlci5zY3JlZW5Ub0NhcnRlc2lhbjMoe3g6IGUueCwgeTogZS55fSkgOiB1bmRlZmluZWQsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBsYXN0TW92ZTtcbiAgICAgIH0pLFxuICAgICAgdGFrZVVudGlsKHBvaW50ZXJVcCksXG4gICAgICB0YXAodW5kZWZpbmVkLCB1bmRlZmluZWQsICgpID0+IHtcbiAgICAgICAgaWYgKGxhc3RNb3ZlKSB7XG4gICAgICAgICAgY29uc3QgZHJvcEV2ZW50ID0gT2JqZWN0LmFzc2lnbih7fSwgbGFzdE1vdmUpO1xuICAgICAgICAgIGRyb3BFdmVudC5kcm9wID0gdHJ1ZTtcbiAgICAgICAgICBkcm9wU3ViamVjdC5uZXh0KGRyb3BFdmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pLCApO1xuXG4gICAgdGhpcy5kcmFnT2JzZXJ2YWJsZSA9IG1vdmVPYnNlcnZhYmxlLnBpcGUobWVyZ2UoZHJvcFN1YmplY3QpLCB0YWtlVW50aWwoc3RvcHBlciksICk7XG4gICAgdGhpcy5zdG9wcGVyID0gc3RvcHBlcjtcbiAgfVxufVxuIl19