@asymmetrik/ngx-leaflet
Version:
Angular.io components for Leaflet
78 lines • 9.94 kB
JavaScript
import { Directive, EventEmitter, Input, Output } from '@angular/core';
import { LeafletDirectiveWrapper } from '../core/leaflet.directive.wrapper';
import { LeafletUtil } from '../core/leaflet.util';
import * as i0 from "@angular/core";
import * as i1 from "../core/leaflet.directive";
/**
* Layer directive
*
* This directive is used to directly control a single map layer. The purpose of this directive is to
* be used as part of a child structural directive of the map element.
*
*/
export class LeafletLayerDirective {
constructor(leafletDirective, zone) {
this.zone = zone;
// Layer Events
this.onAdd = new EventEmitter();
this.onRemove = new EventEmitter();
this.leafletDirective = new LeafletDirectiveWrapper(leafletDirective);
}
ngOnInit() {
// Init the map
this.leafletDirective.init();
}
ngOnDestroy() {
if (null != this.layer) {
// Unregister the event handlers
this.removeLayerEventListeners(this.layer);
// Remove the layer from the map
this.layer.remove();
}
}
ngOnChanges(changes) {
if (changes['layer']) {
// Update the layer
const p = changes['layer'].previousValue;
const n = changes['layer'].currentValue;
this.zone.runOutsideAngular(() => {
if (null != p) {
this.removeLayerEventListeners(p);
p.remove();
}
if (null != n) {
this.addLayerEventListeners(n);
this.leafletDirective.getMap().addLayer(n);
}
});
}
}
addLayerEventListeners(l) {
this.onAddLayerHandler = (e) => LeafletUtil.handleEvent(this.zone, this.onAdd, e);
l.on('add', this.onAddLayerHandler);
this.onRemoveLayerHandler = (e) => LeafletUtil.handleEvent(this.zone, this.onRemove, e);
l.on('remove', this.onRemoveLayerHandler);
}
removeLayerEventListeners(l) {
l.off('add', this.onAddLayerHandler);
l.off('remove', this.onRemoveLayerHandler);
}
}
LeafletLayerDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: LeafletLayerDirective, deps: [{ token: i1.LeafletDirective }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Directive });
LeafletLayerDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.0.4", type: LeafletLayerDirective, selector: "[leafletLayer]", inputs: { layer: ["leafletLayer", "layer"] }, outputs: { onAdd: "leafletLayerAdd", onRemove: "leafletLayerRemove" }, usesOnChanges: true, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.4", ngImport: i0, type: LeafletLayerDirective, decorators: [{
type: Directive,
args: [{
selector: '[leafletLayer]'
}]
}], ctorParameters: function () { return [{ type: i1.LeafletDirective }, { type: i0.NgZone }]; }, propDecorators: { layer: [{
type: Input,
args: ['leafletLayer']
}], onAdd: [{
type: Output,
args: ['leafletLayerAdd']
}], onRemove: [{
type: Output,
args: ['leafletLayerRemove']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGVhZmxldC1sYXllci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbGVhZmxldC9zcmMvbGliL2xheWVycy9sZWFmbGV0LWxheWVyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQXdDLE1BQU0sRUFFNUUsTUFBTSxlQUFlLENBQUM7QUFLdkIsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDNUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7QUFHbkQ7Ozs7OztHQU1HO0FBSUgsTUFBTSxPQUFPLHFCQUFxQjtJQWdCakMsWUFBWSxnQkFBa0MsRUFBVSxJQUFZO1FBQVosU0FBSSxHQUFKLElBQUksQ0FBUTtRQVhwRSxlQUFlO1FBQ1ksVUFBSyxHQUFHLElBQUksWUFBWSxFQUFnQixDQUFDO1FBQ3RDLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBZ0IsQ0FBQztRQVV6RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSx1QkFBdUIsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxRQUFRO1FBRVAsZUFBZTtRQUNmLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUU5QixDQUFDO0lBRUQsV0FBVztRQUVWLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFFdkIsZ0NBQWdDO1lBQ2hDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFM0MsZ0NBQWdDO1lBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7U0FDcEI7SUFFRixDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXdDO1FBRW5ELElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBRXJCLG1CQUFtQjtZQUNuQixNQUFNLENBQUMsR0FBVSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsYUFBYSxDQUFDO1lBQ2hELE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLENBQUM7WUFFeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2hDLElBQUksSUFBSSxJQUFJLENBQUMsRUFBRTtvQkFDZCxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2xDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztpQkFDWDtnQkFDRCxJQUFJLElBQUksSUFBSSxDQUFDLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUMvQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUMzQztZQUNGLENBQUMsQ0FBQyxDQUFDO1NBRUg7SUFFRixDQUFDO0lBRU8sc0JBQXNCLENBQUMsQ0FBUTtRQUV0QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFlLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ2hHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRXBDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQWUsRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDdEcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFFM0MsQ0FBQztJQUVPLHlCQUF5QixDQUFDLENBQVE7UUFFekMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDckMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFFNUMsQ0FBQzs7a0hBOUVXLHFCQUFxQjtzR0FBckIscUJBQXFCOzJGQUFyQixxQkFBcUI7a0JBSGpDLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLGdCQUFnQjtpQkFDMUI7NEhBSXVCLEtBQUs7c0JBQTNCLEtBQUs7dUJBQUMsY0FBYztnQkFHTSxLQUFLO3NCQUEvQixNQUFNO3VCQUFDLGlCQUFpQjtnQkFDSyxRQUFRO3NCQUFyQyxNQUFNO3VCQUFDLG9CQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdERpcmVjdGl2ZSwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgTmdab25lLCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsXG5cdFNpbXBsZUNoYW5nZVxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTGF5ZXIsIExlYWZsZXRFdmVudCB9IGZyb20gJ2xlYWZsZXQnO1xuXG5pbXBvcnQgeyBMZWFmbGV0RGlyZWN0aXZlIH0gZnJvbSAnLi4vY29yZS9sZWFmbGV0LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBMZWFmbGV0RGlyZWN0aXZlV3JhcHBlciB9IGZyb20gJy4uL2NvcmUvbGVhZmxldC5kaXJlY3RpdmUud3JhcHBlcic7XG5pbXBvcnQgeyBMZWFmbGV0VXRpbCB9IGZyb20gJy4uL2NvcmUvbGVhZmxldC51dGlsJztcblxuXG4vKipcbiAqIExheWVyIGRpcmVjdGl2ZVxuICpcbiAqIFRoaXMgZGlyZWN0aXZlIGlzIHVzZWQgdG8gZGlyZWN0bHkgY29udHJvbCBhIHNpbmdsZSBtYXAgbGF5ZXIuIFRoZSBwdXJwb3NlIG9mIHRoaXMgZGlyZWN0aXZlIGlzIHRvXG4gKiBiZSB1c2VkIGFzIHBhcnQgb2YgYSBjaGlsZCBzdHJ1Y3R1cmFsIGRpcmVjdGl2ZSBvZiB0aGUgbWFwIGVsZW1lbnQuXG4gKlxuICovXG5ARGlyZWN0aXZlKHtcblx0c2VsZWN0b3I6ICdbbGVhZmxldExheWVyXSdcbn0pXG5leHBvcnQgY2xhc3MgTGVhZmxldExheWVyRGlyZWN0aXZlXG5cdGltcGxlbWVudHMgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCB7XG5cblx0QElucHV0KCdsZWFmbGV0TGF5ZXInKSBsYXllcjogTGF5ZXI7XG5cblx0Ly8gTGF5ZXIgRXZlbnRzXG5cdEBPdXRwdXQoJ2xlYWZsZXRMYXllckFkZCcpIG9uQWRkID0gbmV3IEV2ZW50RW1pdHRlcjxMZWFmbGV0RXZlbnQ+KCk7XG5cdEBPdXRwdXQoJ2xlYWZsZXRMYXllclJlbW92ZScpIG9uUmVtb3ZlID0gbmV3IEV2ZW50RW1pdHRlcjxMZWFmbGV0RXZlbnQ+KCk7XG5cblx0Ly8gTGF5ZXIgRXZlbnQgaGFuZGxlcnNcblx0cHJpdmF0ZSBvbkFkZExheWVySGFuZGxlcjogYW55O1xuXHRwcml2YXRlIG9uUmVtb3ZlTGF5ZXJIYW5kbGVyOiBhbnk7XG5cblx0Ly8gV3JhcHBlciBmb3IgdGhlIGxlYWZsZXQgZGlyZWN0aXZlIChtYW5hZ2VzIHRoZSBwYXJlbnQgZGlyZWN0aXZlKVxuXHRwcml2YXRlIGxlYWZsZXREaXJlY3RpdmU6IExlYWZsZXREaXJlY3RpdmVXcmFwcGVyO1xuXG5cdGNvbnN0cnVjdG9yKGxlYWZsZXREaXJlY3RpdmU6IExlYWZsZXREaXJlY3RpdmUsIHByaXZhdGUgem9uZTogTmdab25lKSB7XG5cdFx0dGhpcy5sZWFmbGV0RGlyZWN0aXZlID0gbmV3IExlYWZsZXREaXJlY3RpdmVXcmFwcGVyKGxlYWZsZXREaXJlY3RpdmUpO1xuXHR9XG5cblx0bmdPbkluaXQoKSB7XG5cblx0XHQvLyBJbml0IHRoZSBtYXBcblx0XHR0aGlzLmxlYWZsZXREaXJlY3RpdmUuaW5pdCgpO1xuXG5cdH1cblxuXHRuZ09uRGVzdHJveSgpIHtcblxuXHRcdGlmIChudWxsICE9IHRoaXMubGF5ZXIpIHtcblxuXHRcdFx0Ly8gVW5yZWdpc3RlciB0aGUgZXZlbnQgaGFuZGxlcnNcblx0XHRcdHRoaXMucmVtb3ZlTGF5ZXJFdmVudExpc3RlbmVycyh0aGlzLmxheWVyKTtcblxuXHRcdFx0Ly8gUmVtb3ZlIHRoZSBsYXllciBmcm9tIHRoZSBtYXBcblx0XHRcdHRoaXMubGF5ZXIucmVtb3ZlKCk7XG5cdFx0fVxuXG5cdH1cblxuXHRuZ09uQ2hhbmdlcyhjaGFuZ2VzOiB7IFtrZXk6IHN0cmluZ106IFNpbXBsZUNoYW5nZSB9KSB7XG5cblx0XHRpZiAoY2hhbmdlc1snbGF5ZXInXSkge1xuXG5cdFx0XHQvLyBVcGRhdGUgdGhlIGxheWVyXG5cdFx0XHRjb25zdCBwOiBMYXllciA9IGNoYW5nZXNbJ2xheWVyJ10ucHJldmlvdXNWYWx1ZTtcblx0XHRcdGNvbnN0IG4gPSBjaGFuZ2VzWydsYXllciddLmN1cnJlbnRWYWx1ZTtcblxuXHRcdFx0dGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcblx0XHRcdFx0aWYgKG51bGwgIT0gcCkge1xuXHRcdFx0XHRcdHRoaXMucmVtb3ZlTGF5ZXJFdmVudExpc3RlbmVycyhwKTtcblx0XHRcdFx0XHRwLnJlbW92ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChudWxsICE9IG4pIHtcblx0XHRcdFx0XHR0aGlzLmFkZExheWVyRXZlbnRMaXN0ZW5lcnMobik7XG5cdFx0XHRcdFx0dGhpcy5sZWFmbGV0RGlyZWN0aXZlLmdldE1hcCgpLmFkZExheWVyKG4pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdH1cblxuXHR9XG5cblx0cHJpdmF0ZSBhZGRMYXllckV2ZW50TGlzdGVuZXJzKGw6IExheWVyKSB7XG5cblx0XHR0aGlzLm9uQWRkTGF5ZXJIYW5kbGVyID0gKGU6IExlYWZsZXRFdmVudCkgPT4gTGVhZmxldFV0aWwuaGFuZGxlRXZlbnQodGhpcy56b25lLCB0aGlzLm9uQWRkLCBlKTtcblx0XHRsLm9uKCdhZGQnLCB0aGlzLm9uQWRkTGF5ZXJIYW5kbGVyKTtcblxuXHRcdHRoaXMub25SZW1vdmVMYXllckhhbmRsZXIgPSAoZTogTGVhZmxldEV2ZW50KSA9PiBMZWFmbGV0VXRpbC5oYW5kbGVFdmVudCh0aGlzLnpvbmUsIHRoaXMub25SZW1vdmUsIGUpO1xuXHRcdGwub24oJ3JlbW92ZScsIHRoaXMub25SZW1vdmVMYXllckhhbmRsZXIpO1xuXG5cdH1cblxuXHRwcml2YXRlIHJlbW92ZUxheWVyRXZlbnRMaXN0ZW5lcnMobDogTGF5ZXIpIHtcblxuXHRcdGwub2ZmKCdhZGQnLCB0aGlzLm9uQWRkTGF5ZXJIYW5kbGVyKTtcblx0XHRsLm9mZigncmVtb3ZlJywgdGhpcy5vblJlbW92ZUxheWVySGFuZGxlcik7XG5cblx0fVxuXG59XG4iXX0=