angular-cesium
Version:
Angular library for working with Cesium.
109 lines • 14 kB
JavaScript
import { filter, map } from 'rxjs/operators';
import { Injectable } from '@angular/core';
import { BehaviorSubject, Subject } from 'rxjs';
import { CesiumEvent } from '../map-events-mananger/consts/cesium-event.enum';
import { PickOptions } from '../map-events-mananger/consts/pickOptions.enum';
import { MapsManagerService } from '../maps-manager/maps-manager.service';
/**
* Manages entity selection service for any given mouse event and modifier
* the service will manage the list of selected items.
* check out the example
* you must provide the service yourself
*
* __Usage :__
* ```
* // provide the service in some component
* @Component({
* //...
* providers: [SelectionManagerService]
* }
*
* // Usage example:
* // init selection
* const selectedIndicator = ture; // optional default true, if true a boolean "selected" property will be added to the selected entity
* selectionManagerService.initSelection({ event: CesiumEvent.LEFT_CLICK,
* modifier: CesiumEventModifier.CTRL
* },selectedIndicator);
* // Get selected
* const selected = selectionManagerService.selected();
*
* // Or as observer
* const selected$ = selectionManagerService.selected$();
*
* ```
*
*/
export class SelectionManagerService {
constructor(mapsManager) {
this.mapsManager = mapsManager;
this.selectedEntitiesItems$ = new BehaviorSubject([]);
this.selectedEntitySubject$ = new Subject();
}
selectedEntities$() {
return this.selectedEntitiesItems$.asObservable();
}
selectedEntities() {
return this.selectedEntitiesItems$.getValue();
}
selectedEntity$() {
return this.selectedEntitySubject$;
}
toggleSelection(entity, addSelectedIndicator) {
const current = this.selectedEntities();
if (current.indexOf(entity) === -1) {
this.addToSelected(entity, addSelectedIndicator);
}
else {
this.removeSelected(entity, addSelectedIndicator);
}
}
addToSelected(entity, addSelectedIndicator) {
if (addSelectedIndicator) {
entity['selected'] = true;
}
const current = this.selectedEntities();
this.selectedEntitySubject$.next(entity);
this.selectedEntitiesItems$.next([...current, entity]);
}
removeSelected(entity, addSelectedIndicator) {
if (addSelectedIndicator) {
entity['selected'] = false;
}
const current = this.selectedEntities();
const entityIndex = current.indexOf(entity);
if (entityIndex !== -1) {
current.splice(entityIndex, 1);
this.selectedEntitiesItems$.next(current);
this.selectedEntitySubject$.next(entity);
}
}
initSelection(selectionOptions, addSelectedIndicator = true, eventPriority, mapId) {
const mapComponent = this.mapsManager.getMap(mapId);
if (!mapComponent) {
return;
}
this.mapEventsManagerService = mapComponent.getMapEventsManager();
if (!selectionOptions) {
Object.assign(selectionOptions, { event: CesiumEvent.LEFT_CLICK });
}
const eventSubscription = this.mapEventsManagerService.register({
event: selectionOptions.event,
pick: PickOptions.PICK_ONE,
modifier: selectionOptions.modifier,
entityType: selectionOptions.entityType,
priority: eventPriority,
});
eventSubscription.pipe(map(result => result.entities), filter(entities => entities && entities.length > 0))
.subscribe(entities => {
const entity = entities[0];
this.toggleSelection(entity, addSelectedIndicator);
});
}
}
SelectionManagerService.decorators = [
{ type: Injectable }
];
SelectionManagerService.ctorParameters = () => [
{ type: MapsManagerService }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLW1hbmFnZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY2VzaXVtL3NyYy9saWIvYW5ndWxhci1jZXNpdW0vc2VydmljZXMvc2VsZWN0aW9uLW1hbmFnZXIvc2VsZWN0aW9uLW1hbmFnZXIuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFNUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBRTlFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUU3RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQVMxRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTRCRztBQUVILE1BQU0sT0FBTyx1QkFBdUI7SUFLbEMsWUFBb0IsV0FBK0I7UUFBL0IsZ0JBQVcsR0FBWCxXQUFXLENBQW9CO1FBSm5ELDJCQUFzQixHQUFnQyxJQUFJLGVBQWUsQ0FBYSxFQUFFLENBQUMsQ0FBQztRQUMxRiwyQkFBc0IsR0FBc0IsSUFBSSxPQUFPLEVBQVksQ0FBQztJQUlwRSxDQUFDO0lBRUQsaUJBQWlCO1FBQ2YsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVELGdCQUFnQjtRQUNkLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2hELENBQUM7SUFFRCxlQUFlO1FBQ2IsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDckMsQ0FB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ZUFBZSxDQUFDLE1BQU0sRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3JELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzs7O1lBakZGLFVBQVU7OztZQXRDRixrQkFBa0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmaWx0ZXIsIG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgQWNFbnRpdHkgfSBmcm9tICcuLi8uLi9tb2RlbHMvYWMtZW50aXR5JztcclxuaW1wb3J0IHsgQ2VzaXVtRXZlbnQgfSBmcm9tICcuLi9tYXAtZXZlbnRzLW1hbmFuZ2VyL2NvbnN0cy9jZXNpdW0tZXZlbnQuZW51bSc7XHJcbmltcG9ydCB7IE1hcEV2ZW50c01hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vbWFwLWV2ZW50cy1tYW5hbmdlci9tYXAtZXZlbnRzLW1hbmFnZXInO1xyXG5pbXBvcnQgeyBQaWNrT3B0aW9ucyB9IGZyb20gJy4uL21hcC1ldmVudHMtbWFuYW5nZXIvY29uc3RzL3BpY2tPcHRpb25zLmVudW0nO1xyXG5pbXBvcnQgeyBDZXNpdW1FdmVudE1vZGlmaWVyIH0gZnJvbSAnLi4vbWFwLWV2ZW50cy1tYW5hbmdlci9jb25zdHMvY2VzaXVtLWV2ZW50LW1vZGlmaWVyLmVudW0nO1xyXG5pbXBvcnQgeyBNYXBzTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi9tYXBzLW1hbmFnZXIvbWFwcy1tYW5hZ2VyLnNlcnZpY2UnO1xyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VsZWN0aW9uT3B0aW9ucyB7XHJcbiAgZXZlbnQ/OiBDZXNpdW1FdmVudDtcclxuICBtb2RpZmllcj86IENlc2l1bUV2ZW50TW9kaWZpZXI7XHJcbiAgZW50aXR5VHlwZT86IGFueTtcclxufVxyXG5cclxuLyoqXHJcbiAqIE1hbmFnZXMgZW50aXR5IHNlbGVjdGlvbiBzZXJ2aWNlIGZvciBhbnkgZ2l2ZW4gbW91c2UgZXZlbnQgYW5kIG1vZGlmaWVyXHJcbiAqIHRoZSBzZXJ2aWNlIHdpbGwgbWFuYWdlIHRoZSBsaXN0IG9mIHNlbGVjdGVkIGl0ZW1zLlxyXG4gKiBjaGVjayBvdXQgdGhlIGV4YW1wbGVcclxuICogeW91IG11c3QgcHJvdmlkZSB0aGUgc2VydmljZSB5b3Vyc2VsZlxyXG4gKlxyXG4gKiAgX19Vc2FnZSA6X19cclxuICogYGBgXHJcbiAqIC8vIHByb3ZpZGUgdGhlIHNlcnZpY2UgaW4gc29tZSBjb21wb25lbnRcclxuICogQENvbXBvbmVudCh7XHJcbiAqIC8vLi4uXHJcbiAqICBwcm92aWRlcnM6IFtTZWxlY3Rpb25NYW5hZ2VyU2VydmljZV1cclxuICogfVxyXG4gKlxyXG4gKiAvLyBVc2FnZSBleGFtcGxlOlxyXG4gKiAvLyBpbml0IHNlbGVjdGlvblxyXG4gKiBjb25zdCBzZWxlY3RlZEluZGljYXRvciA9IHR1cmU7IC8vIG9wdGlvbmFsIGRlZmF1bHQgdHJ1ZSwgaWYgdHJ1ZSBhIGJvb2xlYW4gXCJzZWxlY3RlZFwiIHByb3BlcnR5IHdpbGwgYmUgYWRkZWQgdG8gdGhlIHNlbGVjdGVkIGVudGl0eVxyXG4gKiBzZWxlY3Rpb25NYW5hZ2VyU2VydmljZS5pbml0U2VsZWN0aW9uKHsgZXZlbnQ6IENlc2l1bUV2ZW50LkxFRlRfQ0xJQ0ssXHJcbiAqIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bW9kaWZpZXI6IENlc2l1bUV2ZW50TW9kaWZpZXIuQ1RSTFxyXG4gKiBcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9LHNlbGVjdGVkSW5kaWNhdG9yKTtcclxuICogLy8gR2V0IHNlbGVjdGVkXHJcbiAqIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0aW9uTWFuYWdlclNlcnZpY2Uuc2VsZWN0ZWQoKTtcclxuICpcclxuICogLy8gT3IgYXMgb2JzZXJ2ZXJcclxuICogY29uc3Qgc2VsZWN0ZWQkID0gc2VsZWN0aW9uTWFuYWdlclNlcnZpY2Uuc2VsZWN0ZWQkKCk7XHJcbiAqXHJcbiAqIGBgYFxyXG4gKlxyXG4gKi9cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgU2VsZWN0aW9uTWFuYWdlclNlcnZpY2Uge1xyXG4gIHNlbGVjdGVkRW50aXRpZXNJdGVtcyQ6IEJlaGF2aW9yU3ViamVjdDxBY0VudGl0eVtdPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QWNFbnRpdHlbXT4oW10pO1xyXG4gIHNlbGVjdGVkRW50aXR5U3ViamVjdCQ6IFN1YmplY3Q8QWNFbnRpdHk+ID0gbmV3IFN1YmplY3Q8QWNFbnRpdHk+KCk7XHJcbiAgcHJpdmF0ZSBtYXBFdmVudHNNYW5hZ2VyU2VydmljZTogTWFwRXZlbnRzTWFuYWdlclNlcnZpY2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbWFwc01hbmFnZXI6IE1hcHNNYW5hZ2VyU2VydmljZSkge1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRFbnRpdGllcyQoKTogT2JzZXJ2YWJsZTxBY0VudGl0eVtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZEVudGl0aWVzSXRlbXMkLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0ZWRFbnRpdGllcygpOiBBY0VudGl0eVtdIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRW50aXRpZXNJdGVtcyQuZ2V0VmFsdWUoKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdGVkRW50aXR5JCgpIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRW50aXR5U3ViamVjdCQ7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVTZWxlY3Rpb24oZW50aXR5OiBBY0VudGl0eSwgYWRkU2VsZWN0ZWRJbmRpY2F0b3I6IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IGN1cnJlbnQgPSB0aGlzLnNlbGVjdGVkRW50aXRpZXMoKTtcclxuICAgIGlmIChjdXJyZW50LmluZGV4T2YoZW50aXR5KSA9PT0gLTEpIHtcclxuICAgICAgdGhpcy5hZGRUb1NlbGVjdGVkKGVudGl0eSwgYWRkU2VsZWN0ZWRJbmRpY2F0b3IpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5yZW1vdmVTZWxlY3RlZChlbnRpdHksIGFkZFNlbGVjdGVkSW5kaWNhdG9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYWRkVG9TZWxlY3RlZChlbnRpdHk6IEFjRW50aXR5LCBhZGRTZWxlY3RlZEluZGljYXRvcjogYm9vbGVhbikge1xyXG4gICAgaWYgKGFkZFNlbGVjdGVkSW5kaWNhdG9yKSB7XHJcbiAgICAgIGVudGl0eVsnc2VsZWN0ZWQnXSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc2VsZWN0ZWRFbnRpdGllcygpO1xyXG4gICAgdGhpcy5zZWxlY3RlZEVudGl0eVN1YmplY3QkLm5leHQoZW50aXR5KTtcclxuICAgIHRoaXMuc2VsZWN0ZWRFbnRpdGllc0l0ZW1zJC5uZXh0KFsuLi5jdXJyZW50LCBlbnRpdHldKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlU2VsZWN0ZWQoZW50aXR5OiBBY0VudGl0eSwgYWRkU2VsZWN0ZWRJbmRpY2F0b3I6IGJvb2xlYW4pIHtcclxuICAgIGlmIChhZGRTZWxlY3RlZEluZGljYXRvcikge1xyXG4gICAgICBlbnRpdHlbJ3NlbGVjdGVkJ10gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zZWxlY3RlZEVudGl0aWVzKCk7XHJcbiAgICBjb25zdCBlbnRpdHlJbmRleCA9IGN1cnJlbnQuaW5kZXhPZihlbnRpdHkpO1xyXG4gICAgaWYgKGVudGl0eUluZGV4ICE9PSAtMSkge1xyXG4gICAgICBjdXJyZW50LnNwbGljZShlbnRpdHlJbmRleCwgMSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRFbnRpdGllc0l0ZW1zJC5uZXh0KGN1cnJlbnQpO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRW50aXR5U3ViamVjdCQubmV4dChlbnRpdHkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaW5pdFNlbGVjdGlvbihzZWxlY3Rpb25PcHRpb25zPzogU2VsZWN0aW9uT3B0aW9ucywgYWRkU2VsZWN0ZWRJbmRpY2F0b3IgPSB0cnVlLCBldmVudFByaW9yaXR5PzogbnVtYmVyLCBtYXBJZD86IHN0cmluZykge1xyXG4gICAgY29uc3QgbWFwQ29tcG9uZW50ID0gdGhpcy5tYXBzTWFuYWdlci5nZXRNYXAobWFwSWQpO1xyXG4gICAgaWYgKCFtYXBDb21wb25lbnQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubWFwRXZlbnRzTWFuYWdlclNlcnZpY2UgPSBtYXBDb21wb25lbnQuZ2V0TWFwRXZlbnRzTWFuYWdlcigpO1xyXG5cclxuICAgIGlmICghc2VsZWN0aW9uT3B0aW9ucykge1xyXG4gICAgICBPYmplY3QuYXNzaWduKHNlbGVjdGlvbk9wdGlvbnMsIHtldmVudDogQ2VzaXVtRXZlbnQuTEVGVF9DTElDS30pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGV2ZW50U3Vic2NyaXB0aW9uID0gdGhpcy5tYXBFdmVudHNNYW5hZ2VyU2VydmljZS5yZWdpc3Rlcih7XHJcbiAgICAgIGV2ZW50OiBzZWxlY3Rpb25PcHRpb25zLmV2ZW50LFxyXG4gICAgICBwaWNrOiBQaWNrT3B0aW9ucy5QSUNLX09ORSxcclxuICAgICAgbW9kaWZpZXI6IHNlbGVjdGlvbk9wdGlvbnMubW9kaWZpZXIsXHJcbiAgICAgIGVudGl0eVR5cGU6IHNlbGVjdGlvbk9wdGlvbnMuZW50aXR5VHlwZSxcclxuICAgICAgcHJpb3JpdHk6IGV2ZW50UHJpb3JpdHksXHJcbiAgICB9KTtcclxuXHJcbiAgICBldmVudFN1YnNjcmlwdGlvbi5waXBlKFxyXG4gICAgICBtYXAocmVzdWx0ID0+IHJlc3VsdC5lbnRpdGllcyksXHJcbiAgICAgIGZpbHRlcihlbnRpdGllcyA9PiBlbnRpdGllcyAmJiBlbnRpdGllcy5sZW5ndGggPiAwKSlcclxuICAgICAgLnN1YnNjcmliZShlbnRpdGllcyA9PiB7XHJcbiAgICAgICAgY29uc3QgZW50aXR5ID0gZW50aXRpZXNbMF07XHJcbiAgICAgICAgdGhpcy50b2dnbGVTZWxlY3Rpb24oZW50aXR5LCBhZGRTZWxlY3RlZEluZGljYXRvcik7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxufVxyXG4iXX0=