@agm/core
Version:
Angular components for Google Maps
100 lines • 14.5 kB
JavaScript
import { __awaiter } from "tslib";
import { Injectable, NgZone } from '@angular/core';
import { Observable } from 'rxjs';
import { GoogleMapsAPIWrapper } from './../google-maps-api-wrapper';
export class MarkerManager {
constructor(_mapsWrapper, _zone) {
this._mapsWrapper = _mapsWrapper;
this._zone = _zone;
this._markers = new Map();
}
convertAnimation(uiAnim) {
return __awaiter(this, void 0, void 0, function* () {
if (uiAnim === null) {
return null;
}
else {
return this._mapsWrapper.getNativeMap().then(() => google.maps.Animation[uiAnim]);
}
});
}
deleteMarker(markerDirective) {
const markerPromise = this._markers.get(markerDirective);
if (markerPromise == null) {
// marker already deleted
return Promise.resolve();
}
return markerPromise.then((marker) => {
return this._zone.run(() => {
marker.setMap(null);
this._markers.delete(markerDirective);
});
});
}
updateMarkerPosition(marker) {
return this._markers.get(marker).then((m) => m.setPosition({ lat: marker.latitude, lng: marker.longitude }));
}
updateTitle(marker) {
return this._markers.get(marker).then((m) => m.setTitle(marker.title));
}
updateLabel(marker) {
return this._markers.get(marker).then((m) => { m.setLabel(marker.label); });
}
updateDraggable(marker) {
return this._markers.get(marker).then((m) => m.setDraggable(marker.draggable));
}
updateIcon(marker) {
return this._markers.get(marker).then((m) => m.setIcon(marker.iconUrl));
}
updateOpacity(marker) {
return this._markers.get(marker).then((m) => m.setOpacity(marker.opacity));
}
updateVisible(marker) {
return this._markers.get(marker).then((m) => m.setVisible(marker.visible));
}
updateZIndex(marker) {
return this._markers.get(marker).then((m) => m.setZIndex(marker.zIndex));
}
updateClickable(marker) {
return this._markers.get(marker).then((m) => m.setClickable(marker.clickable));
}
updateAnimation(marker) {
return __awaiter(this, void 0, void 0, function* () {
const m = yield this._markers.get(marker);
m.setAnimation(yield this.convertAnimation(marker.animation));
});
}
addMarker(marker) {
const markerPromise = new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
return this._mapsWrapper.createMarker({
position: { lat: marker.latitude, lng: marker.longitude },
label: marker.label,
draggable: marker.draggable,
icon: marker.iconUrl,
opacity: marker.opacity,
visible: marker.visible,
zIndex: marker.zIndex,
title: marker.title,
clickable: marker.clickable,
animation: yield this.convertAnimation(marker.animation),
}).then(resolve);
}));
this._markers.set(marker, markerPromise);
}
getNativeMarker(marker) {
return this._markers.get(marker);
}
createEventObservable(eventName, marker) {
return new Observable(observer => {
this._markers.get(marker).then(m => m.addListener(eventName, e => this._zone.run(() => observer.next(e))));
});
}
}
MarkerManager.decorators = [
{ type: Injectable }
];
MarkerManager.ctorParameters = () => [
{ type: GoogleMapsAPIWrapper },
{ type: NgZone }
];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFya2VyLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9saWIvc2VydmljZXMvbWFuYWdlcnMvbWFya2VyLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJbEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHcEUsTUFBTSxPQUFPLGFBQWE7SUFJeEIsWUFBc0IsWUFBa0MsRUFBWSxLQUFhO1FBQTNELGlCQUFZLEdBQVosWUFBWSxDQUFzQjtRQUFZLFVBQUssR0FBTCxLQUFLLENBQVE7UUFIdkUsYUFBUSxHQUNkLElBQUksR0FBRyxFQUEwQyxDQUFDO0lBRThCLENBQUM7SUFFL0UsZ0JBQWdCLENBQUMsTUFBaUQ7O1lBQ3RFLElBQUksTUFBTSxLQUFLLElBQUksRUFBRTtnQkFDbkIsT0FBTyxJQUFJLENBQUM7YUFDYjtpQkFBTTtnQkFDTCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7YUFDbkY7UUFDSCxDQUFDO0tBQUE7SUFFRCxZQUFZLENBQUMsZUFBMEI7UUFDckMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDekQsSUFBSSxhQUFhLElBQUksSUFBSSxFQUFFO1lBQ3pCLHlCQUF5QjtZQUN6QixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUMxQjtRQUNELE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQTBC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aUI7UUFDL0IsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lBRUQscUJBQXFCLENBQ2pCLFNBQXVGLEVBQ3ZGLE1BQWlCO1FBQ25CLE9BQU8sSUFBSSxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDL0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ2pDLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3RFLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OztZQXBHRixVQUFVOzs7WUFGRixvQkFBb0I7WUFMUixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFnbU1hcmtlciB9IGZyb20gJy4vLi4vLi4vZGlyZWN0aXZlcy9tYXJrZXInO1xuXG5pbXBvcnQgeyBHb29nbGVNYXBzQVBJV3JhcHBlciB9IGZyb20gJy4vLi4vZ29vZ2xlLW1hcHMtYXBpLXdyYXBwZXInO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTWFya2VyTWFuYWdlciB7XG4gIHByb3RlY3RlZCBfbWFya2VyczogTWFwPEFnbU1hcmtlciwgUHJvbWlzZTxnb29nbGUubWFwcy5NYXJrZXI+PiA9XG4gICAgICBuZXcgTWFwPEFnbU1hcmtlciwgUHJvbWlzZTxnb29nbGUubWFwcy5NYXJrZXI+PigpO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfbWFwc1dyYXBwZXI6IEdvb2dsZU1hcHNBUElXcmFwcGVyLCBwcm90ZWN0ZWQgX3pvbmU6IE5nWm9uZSkge31cblxuICBhc3luYyBjb252ZXJ0QW5pbWF0aW9uKHVpQW5pbToga2V5b2YgdHlwZW9mIGdvb2dsZS5tYXBzLkFuaW1hdGlvbiB8IG51bGwpIHtcbiAgICBpZiAodWlBbmltID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuX21hcHNXcmFwcGVyLmdldE5hdGl2ZU1hcCgpLnRoZW4oKCkgPT4gZ29vZ2xlLm1hcHMuQW5pbWF0aW9uW3VpQW5pbV0pO1xuICAgIH1cbiAgfVxuXG4gIGRlbGV0ZU1hcmtlcihtYXJrZXJEaXJlY3RpdmU6IEFnbU1hcmtlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IG1hcmtlclByb21pc2UgPSB0aGlzLl9tYXJrZXJzLmdldChtYXJrZXJEaXJlY3RpdmUpO1xuICAgIGlmIChtYXJrZXJQcm9taXNlID09IG51bGwpIHtcbiAgICAgIC8vIG1hcmtlciBhbHJlYWR5IGRlbGV0ZWRcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hcmtlclByb21pc2UudGhlbigobWFya2VyOiBnb29nbGUubWFwcy5NYXJrZXIpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLl96b25lLnJ1bigoKSA9PiB7XG4gICAgICAgIG1hcmtlci5zZXRNYXAobnVsbCk7XG4gICAgICAgIHRoaXMuX21hcmtlcnMuZGVsZXRlKG1hcmtlckRpcmVjdGl2ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZU1hcmtlclBvc2l0aW9uKG1hcmtlcjogQWdtTWFya2VyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtlcnMuZ2V0KG1hcmtlcikudGhlbihcbiAgICAgICAgKG06IGdvb2dsZS5tYXBzLk1hcmtlcikgPT4gbS5zZXRQb3NpdGlvbih7bGF0OiBtYXJrZXIubGF0aXR1ZGUsIGxuZzogbWFya2VyLmxvbmdpdHVkZX0pKTtcbiAgfVxuXG4gIHVwZGF0ZVRpdGxlKG1hcmtlcjogQWdtTWFya2VyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtlcnMuZ2V0KG1hcmtlcikudGhlbigobTogZ29vZ2xlLm1hcHMuTWFya2VyKSA9PiBtLnNldFRpdGxlKG1hcmtlci50aXRsZSkpO1xuICB9XG5cbiAgdXBkYXRlTGFiZWwobWFya2VyOiBBZ21NYXJrZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fbWFya2Vycy5nZXQobWFya2VyKS50aGVuKChtOiBnb29nbGUubWFwcy5NYXJrZXIpID0+IHsgbS5zZXRMYWJlbChtYXJrZXIubGFiZWwpOyB9KTtcbiAgfVxuXG4gIHVwZGF0ZURyYWdnYWJsZShtYXJrZXI6IEFnbU1hcmtlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9tYXJrZXJzLmdldChtYXJrZXIpLnRoZW4oKG06IGdvb2dsZS5tYXBzLk1hcmtlcikgPT4gbS5zZXREcmFnZ2FibGUobWFya2VyLmRyYWdnYWJsZSkpO1xuICB9XG5cbiAgdXBkYXRlSWNvbihtYXJrZXI6IEFnbU1hcmtlcik6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9tYXJrZXJzLmdldChtYXJrZXIpLnRoZW4oKG06IGdvb2dsZS5tYXBzLk1hcmtlcikgPT4gbS5zZXRJY29uKG1hcmtlci5pY29uVXJsKSk7XG4gIH1cblxuICB1cGRhdGVPcGFjaXR5KG1hcmtlcjogQWdtTWFya2VyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtlcnMuZ2V0KG1hcmtlcikudGhlbigobTogZ29vZ2xlLm1hcHMuTWFya2VyKSA9PiBtLnNldE9wYWNpdHkobWFya2VyLm9wYWNpdHkpKTtcbiAgfVxuXG4gIHVwZGF0ZVZpc2libGUobWFya2VyOiBBZ21NYXJrZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fbWFya2Vycy5nZXQobWFya2VyKS50aGVuKChtOiBnb29nbGUubWFwcy5NYXJrZXIpID0+IG0uc2V0VmlzaWJsZShtYXJrZXIudmlzaWJsZSkpO1xuICB9XG5cbiAgdXBkYXRlWkluZGV4KG1hcmtlcjogQWdtTWFya2VyKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX21hcmtlcnMuZ2V0KG1hcmtlcikudGhlbigobTogZ29vZ2xlLm1hcHMuTWFya2VyKSA9PiBtLnNldFpJbmRleChtYXJrZXIuekluZGV4KSk7XG4gIH1cblxuICB1cGRhdGVDbGlja2FibGUobWFya2VyOiBBZ21NYXJrZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fbWFya2Vycy5nZXQobWFya2VyKS50aGVuKChtOiBnb29nbGUubWFwcy5NYXJrZXIpID0+IG0uc2V0Q2xpY2thYmxlKG1hcmtlci5jbGlja2FibGUpKTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUFuaW1hdGlvbihtYXJrZXI6IEFnbU1hcmtlcikge1xuICAgIGNvbnN0IG0gPSBhd2FpdCB0aGlzLl9tYXJrZXJzLmdldChtYXJrZXIpO1xuICAgIG0uc2V0QW5pbWF0aW9uKGF3YWl0IHRoaXMuY29udmVydEFuaW1hdGlvbihtYXJrZXIuYW5pbWF0aW9uKSk7XG4gIH1cblxuICBhZGRNYXJrZXIobWFya2VyOiBBZ21NYXJrZXIpIHtcbiAgICBjb25zdCBtYXJrZXJQcm9taXNlID0gbmV3IFByb21pc2U8Z29vZ2xlLm1hcHMuTWFya2VyPihhc3luYyAocmVzb2x2ZSkgPT5cbiAgICAgdGhpcy5fbWFwc1dyYXBwZXIuY3JlYXRlTWFya2VyKHtcbiAgICAgICAgcG9zaXRpb246IHtsYXQ6IG1hcmtlci5sYXRpdHVkZSwgbG5nOiBtYXJrZXIubG9uZ2l0dWRlfSxcbiAgICAgICAgbGFiZWw6IG1hcmtlci5sYWJlbCxcbiAgICAgICAgZHJhZ2dhYmxlOiBtYXJrZXIuZHJhZ2dhYmxlLFxuICAgICAgICBpY29uOiBtYXJrZXIuaWNvblVybCxcbiAgICAgICAgb3BhY2l0eTogbWFya2VyLm9wYWNpdHksXG4gICAgICAgIHZpc2libGU6IG1hcmtlci52aXNpYmxlLFxuICAgICAgICB6SW5kZXg6IG1hcmtlci56SW5kZXgsXG4gICAgICAgIHRpdGxlOiBtYXJrZXIudGl0bGUsXG4gICAgICAgIGNsaWNrYWJsZTogbWFya2VyLmNsaWNrYWJsZSxcbiAgICAgICAgYW5pbWF0aW9uOiBhd2FpdCB0aGlzLmNvbnZlcnRBbmltYXRpb24obWFya2VyLmFuaW1hdGlvbiksXG4gICAgICB9KS50aGVuKHJlc29sdmUpKTtcbiAgICB0aGlzLl9tYXJrZXJzLnNldChtYXJrZXIsIG1hcmtlclByb21pc2UpO1xuICB9XG5cbiAgZ2V0TmF0aXZlTWFya2VyKG1hcmtlcjogQWdtTWFya2VyKTogUHJvbWlzZTxnb29nbGUubWFwcy5NYXJrZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fbWFya2Vycy5nZXQobWFya2VyKTtcbiAgfVxuXG4gIGNyZWF0ZUV2ZW50T2JzZXJ2YWJsZTxUIGV4dGVuZHMgKGdvb2dsZS5tYXBzLk1vdXNlRXZlbnQgfCB2b2lkKT4oXG4gICAgICBldmVudE5hbWU6IGdvb2dsZS5tYXBzLk1hcmtlck1vdXNlRXZlbnROYW1lcyB8IGdvb2dsZS5tYXBzLk1hcmtlckNoYW5nZU9wdGlvbkV2ZW50TmFtZXMsXG4gICAgICBtYXJrZXI6IEFnbU1hcmtlcik6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShvYnNlcnZlciA9PiB7XG4gICAgICB0aGlzLl9tYXJrZXJzLmdldChtYXJrZXIpLnRoZW4obSA9PlxuICAgICAgICBtLmFkZExpc3RlbmVyKGV2ZW50TmFtZSwgZSA9PiB0aGlzLl96b25lLnJ1bigoKSA9PiBvYnNlcnZlci5uZXh0KGUpKSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==