UNPKG

angular2-google-maps

Version:

Angular 2 components for Google Maps

87 lines 3.8 kB
import { Observable } from 'rxjs/Observable'; import { Injectable, NgZone } from '@angular/core'; import { GoogleMapsAPIWrapper } from '../google-maps-api-wrapper'; import { MarkerManager } from './marker-manager'; export var InfoWindowManager = (function () { function InfoWindowManager(_mapsWrapper, _zone, _markerManager) { this._mapsWrapper = _mapsWrapper; this._zone = _zone; this._markerManager = _markerManager; this._infoWindows = new Map(); } InfoWindowManager.prototype.deleteInfoWindow = function (infoWindow) { var _this = this; var iWindow = this._infoWindows.get(infoWindow); if (iWindow == null) { // info window already deleted return Promise.resolve(); } return iWindow.then(function (i) { return _this._zone.run(function () { i.close(); _this._infoWindows.delete(infoWindow); }); }); }; InfoWindowManager.prototype.setPosition = function (infoWindow) { return this._infoWindows.get(infoWindow).then(function (i) { return i.setPosition({ lat: infoWindow.latitude, lng: infoWindow.longitude }); }); }; InfoWindowManager.prototype.setZIndex = function (infoWindow) { return this._infoWindows.get(infoWindow) .then(function (i) { return i.setZIndex(infoWindow.zIndex); }); }; InfoWindowManager.prototype.open = function (infoWindow) { var _this = this; return this._infoWindows.get(infoWindow).then(function (w) { if (infoWindow.hostMarker != null) { return _this._markerManager.getNativeMarker(infoWindow.hostMarker).then(function (marker) { return _this._mapsWrapper.getNativeMap().then(function (map) { return w.open(map, marker); }); }); } return _this._mapsWrapper.getNativeMap().then(function (map) { return w.open(map); }); }); }; InfoWindowManager.prototype.close = function (infoWindow) { return this._infoWindows.get(infoWindow).then(function (w) { return w.close(); }); }; InfoWindowManager.prototype.setOptions = function (infoWindow, options) { return this._infoWindows.get(infoWindow).then(function (i) { return i.setOptions(options); }); }; InfoWindowManager.prototype.addInfoWindow = function (infoWindow) { var options = { content: infoWindow.content, maxWidth: infoWindow.maxWidth, zIndex: infoWindow.zIndex, }; if (typeof infoWindow.latitude === 'number' && typeof infoWindow.longitude === 'number') { options.position = { lat: infoWindow.latitude, lng: infoWindow.longitude }; } var infoWindowPromise = this._mapsWrapper.createInfoWindow(options); this._infoWindows.set(infoWindow, infoWindowPromise); }; /** * Creates a Google Maps event listener for the given InfoWindow as an Observable */ InfoWindowManager.prototype.createEventObservable = function (eventName, infoWindow) { var _this = this; return Observable.create(function (observer) { _this._infoWindows.get(infoWindow).then(function (i) { i.addListener(eventName, function (e) { return _this._zone.run(function () { return observer.next(e); }); }); }); }); }; InfoWindowManager.decorators = [ { type: Injectable }, ]; /** @nocollapse */ InfoWindowManager.ctorParameters = function () { return [ { type: GoogleMapsAPIWrapper, }, { type: NgZone, }, { type: MarkerManager, }, ]; }; return InfoWindowManager; }()); //# sourceMappingURL=info-window-manager.js.map