angular2-google-maps
Version:
Angular 2 components for Google Maps
87 lines • 3.8 kB
JavaScript
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