ng2-bingmaps
Version:
Angular 2 components for Bing Maps
154 lines (133 loc) • 4.59 kB
text/typescript
/**
* ng2-bingmaps - Angular 2 components for Bing Maps
* @version v0.2.0
* @link https://github.com/youjustgo/ng2-bingmaps
* @license MIT
*/
import {Component, SimpleChange, OnChanges, EventEmitter, ContentChildren, QueryList} from '@angular/core';
import {InfoWindowManager} from '../services/info-window-manager';
import {BingMapMarker} from './bing-map-marker';
import {BingMapInfoWindowAction} from './bing-map-info-window-action';
import {InfoWindow} from '../services/bing-maps-types';
let infoWindowId = 0;
/**
* BingMapInfoWindow renders a info window inside a {@link BingMapMarker} or standalone.
*
* ### Example
* ```typescript
* import {Component} from '@angular/core';
* import {NG2_BINGMAPS_DIRECTIVES} from 'ng2-bingmaps/core';
*
* @Component({
* selector: 'my-map-cmp',
* directives: [NG2_BINGMAPS_DIRECTIVES],
* styles: [`
* .bing-map-container {
* height: 300px;
* }
* `],
* template: `
* <bing-map [latitude]="lat" [longitude]="lng" [zoom]="zoom">
* <bing-map-marker [latitude]="lat" [longitude]="lng" [label]="'M'">
* <bing-map-info-window [title]="title" [description]="description" [height]="height" [width]="width">
* </bing-map-info-window>
* </bing-map-marker>
* </bing-map>
* `
* })
* ```
*/
({
selector: 'bing-map-info-window',
inputs: ['latitude', 'longitude', 'disableAutoPan', 'title', 'description', 'height', 'width'],
template: '',
outputs: ['infoWindowClose']
})
// onclick="console.log(window.infoWindow); window.infoWindow.close();return false;"
export class BingMapInfoWindow implements OnChanges {
/**
* The latitude position of the info window (only usefull if you use it ouside of a {@link
* SebmGoogleMapMarker}).
*/
latitude: number;
/**
* The longitude position of the info window (only usefull if you use it ouside of a {@link
* SebmGoogleMapMarker}).
*/
longitude: number;
/**
* The title to display in the info window
*/
title: string;
/**
* The description to display in the info window.
*/
description: string;
/**
* The height of the infobox. Default 126.
*/
height: number;
/**
* Thw width of the infobox. Default 256.
*/
width: number;
/**
* Disable auto-pan on open. By default, the info window will pan the map so that it is fully
* visible when it opens.
*/
disableAutoPan: boolean;
/**
* Maximum width of the infowindow, regardless of content's width. This value is only considered
* if it is set before a call to open. To change the maximum width when changing content, call
* close, update maxWidth, and then open.
*/
maxWidth: number;
/**
* Holds the marker that is the host of the info window (if available)
*/
hostMarker: BingMapMarker;
/**
* Emits an event when the info window is closed.
*/
infoWindowClose: EventEmitter<void> = new EventEmitter<void>();
/**
* Zero or more actions to show on the info window
*/
(BingMapInfoWindowAction) infoWindowActions: QueryList<BingMapInfoWindowAction>;
private static _infoWindowOptionsInputs: string[] = ['disableAutoPan', 'maxWidth', 'title', 'description'];
private _id: string = (infoWindowId++).toString();
constructor(private _infoWindowManager: InfoWindowManager) {}
/** @internal */
ngOnChanges(changes: {[key: string]: SimpleChange}) {
// todo check if opened, ask the infowindowmanager
// then implement below.
// if ((changes['latitude'] || changes['longitude']) && typeof this.latitude === 'number' &&
// typeof this.longitude === 'number') {
// this._infoWindowManager.setPosition(this);
// }
// this._setInfoWindowOptions(changes);
}
// private _setInfoWindowOptions(changes: {[key: string]: SimpleChange}) {
// let options: {[propName: string]: any} = {};
// let optionKeys = Object.keys(changes).filter(
// k => BingMapInfoWindow._infoWindowOptionsInputs.indexOf(k) !== -1);
// optionKeys.forEach((k) => { options[k] = changes[k].currentValue; });
// this._infoWindowManager.setOptions(options);
// }
/**
* Opens the info window.
*/
open(): Promise<void> {
return this._infoWindowManager.open(this);
}
/**
* Closes the info window.
*/
close(): Promise<void> {
return this._infoWindowManager.close().then(() => { this.infoWindowClose.emit(void 0); });
}
/** @internal */
id(): string { return this._id; }
/** @internal */
toString(): string { return 'BingMapInfoWindow-' + this._id.toString(); }
}