@ng-maps/google
Version:
**@ng-maps/google** is a simple, modular and tree-shakable library for displaying google-maps inside an angular application
102 lines • 13.5 kB
JavaScript
import { Injectable, NgZone } from '@angular/core';
import { Observable } from 'rxjs';
import { MapsApiWrapper, RectangleManager, } from '@ng-maps/core';
import * as i0 from "@angular/core";
import * as i1 from "@ng-maps/core";
export class GoogleRectangleManager extends RectangleManager {
constructor(_mapsWrapper, _zone) {
super(_mapsWrapper, _zone);
}
addRectangle(rectangle) {
if (!rectangle.north ||
!rectangle.east ||
!rectangle.south ||
!rectangle.west) {
return;
}
this._rectangles.set(rectangle, this._apiWrapper.createRectangle({
north: rectangle.north,
east: rectangle.east,
south: rectangle.south,
west: rectangle.west,
}, {
// clickable: rectangle.clickable,
// draggable: rectangle.draggable,
// editable: rectangle.editable,
fillColor: rectangle.fillColor,
fillOpacity: rectangle.fillOpacity,
strokeColor: rectangle.strokeColor,
strokeOpacity: rectangle.strokeOpacity,
// strokePosition: rectangle.strokePosition,
strokeWeight: rectangle.strokeWeight,
visible: rectangle.visible,
zIndex: rectangle.zIndex,
}));
}
/**
* Removes the given rectangle from the map.
*/
async removeRectangle(rectangle) {
return this._rectangles.get(rectangle)?.then((r) => {
r.setMap(null);
this._rectangles.delete(rectangle);
});
}
async setOptions(rectangle, options) {
return this._rectangles.get(rectangle)?.then((r) => r.setOptions(options));
}
async getBounds(rectangle) {
const r = await this._rectangles.get(rectangle);
const bounds = r?.getBounds();
return bounds ? bounds.toJSON() : null;
}
async setBounds(rectangle) {
if (!rectangle.north ||
!rectangle.east ||
!rectangle.south ||
!rectangle.west) {
return;
}
const r = await this._rectangles.get(rectangle);
r?.setBounds({
north: rectangle.north,
east: rectangle.east,
south: rectangle.south,
west: rectangle.west,
});
}
async setEditable(rectangle) {
return this._rectangles
.get(rectangle)
?.then((r) => r.setEditable(rectangle.editable));
}
async setDraggable(rectangle) {
return this._rectangles
.get(rectangle)
?.then((r) => r.setDraggable(rectangle.draggable));
}
async setVisible(rectangle) {
return this._rectangles
.get(rectangle)
?.then((r) => r.setVisible(rectangle.visible));
}
createEventObservable(eventName, rectangle) {
return new Observable((observer) => {
let listener = null;
this._rectangles.get(rectangle)?.then((r) => {
listener = r.addListener(eventName, (e) => this._zone.run(() => observer.next(e)));
});
return () => {
if (listener !== null) {
listener.remove();
}
};
});
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GoogleRectangleManager, deps: [{ token: i1.MapsApiWrapper }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GoogleRectangleManager }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GoogleRectangleManager, decorators: [{
type: Injectable
}], ctorParameters: () => [{ type: i1.MapsApiWrapper }, { type: i0.NgZone }] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjdGFuZ2xlLm1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2dvb2dsZS9zcmMvbGliL21hbmFnZXJzL3JlY3RhbmdsZS5tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxNQUFNLENBQUM7QUFFNUMsT0FBTyxFQUVMLGNBQWMsRUFFZCxnQkFBZ0IsR0FDakIsTUFBTSxlQUFlLENBQUM7OztBQUd2QixNQUFNLE9BQU8sc0JBQXVCLFNBQVEsZ0JBQXVDO0lBQ2pGLFlBQVksWUFBNEIsRUFBRSxLQUFhO1FBQ3JELEtBQUssQ0FBQyxZQUFZLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVNLFlBQVksQ0FBQyxTQUFtQztRQUNyRCxJQUNFLENBQUMsU0FBUyxDQUFDLEtBQUs7WUFDaEIsQ0FBQyxTQUFTLENBQUMsSUFBSTtZQUNmLENBQUMsU0FBUyxDQUFDLEtBQUs7WUFDaEIsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUNmLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUNsQixTQUFTLEVBQ1QsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQzlCO1lBQ0UsS0FBSyxFQUFFLFNBQVMsQ0FBQyxLQUFLO1lBQ3RCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtZQUNwQixLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUs7WUFDdEIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1NBQ3JCLEVBQ0Q7WUFDRSxrQ0FBa0M7WUFDbEMsa0NBQWtDO1lBQ2xDLGdDQUFnQztZQUNoQyxTQUFTLEVBQUUsU0FBUyxDQUFDLFNBQVM7WUFDOUIsV0FBVyxFQUFFLFNBQVMsQ0FBQyxXQUFXO1lBQ2xD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QVUsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRU0scUJBQXFCLENBQzFCLFNBQWlCLEVBQ2pCLFNBQW1DO1FBRW5DLE9BQU8sSUFBSSxVQUFVLENBQUMsQ0FBQyxRQUFxQixFQUFFLEVBQUU7WUFDOUMsSUFBSSxRQUFRLEdBQXlDLElBQUksQ0FBQztZQUMxRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDMUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBSSxFQUFFLEVBQUUsQ0FDM0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUN2QyxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM7WUFFSCxPQUFPLEdBQUcsRUFBRTtnQkFDVixJQUFJLFFBQVEsS0FBSyxJQUFJLEVBQUUsQ0FBQztvQkFDdEIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNwQixDQUFDO1lBQ0gsQ0FBQyxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzhHQTVIVSxzQkFBc0I7a0hBQXRCLHNCQUFzQjs7MkZBQXRCLHNCQUFzQjtrQkFEbEMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgT2JzZXJ2ZXIgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgQm91bmRzTGl0ZXJhbCxcbiAgTWFwc0FwaVdyYXBwZXIsXG4gIE5nTWFwc1JlY3RhbmdsZURpcmVjdGl2ZSxcbiAgUmVjdGFuZ2xlTWFuYWdlcixcbn0gZnJvbSAnQG5nLW1hcHMvY29yZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBHb29nbGVSZWN0YW5nbGVNYW5hZ2VyIGV4dGVuZHMgUmVjdGFuZ2xlTWFuYWdlcjxnb29nbGUubWFwcy5SZWN0YW5nbGU+IHtcbiAgY29uc3RydWN0b3IoX21hcHNXcmFwcGVyOiBNYXBzQXBpV3JhcHBlciwgX3pvbmU6IE5nWm9uZSkge1xuICAgIHN1cGVyKF9tYXBzV3JhcHBlciwgX3pvbmUpO1xuICB9XG5cbiAgcHVibGljIGFkZFJlY3RhbmdsZShyZWN0YW5nbGU6IE5nTWFwc1JlY3RhbmdsZURpcmVjdGl2ZSkge1xuICAgIGlmIChcbiAgICAgICFyZWN0YW5nbGUubm9ydGggfHxcbiAgICAgICFyZWN0YW5nbGUuZWFzdCB8fFxuICAgICAgIXJlY3RhbmdsZS5zb3V0aCB8fFxuICAgICAgIXJlY3RhbmdsZS53ZXN0XG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fcmVjdGFuZ2xlcy5zZXQoXG4gICAgICByZWN0YW5nbGUsXG4gICAgICB0aGlzLl9hcGlXcmFwcGVyLmNyZWF0ZVJlY3RhbmdsZShcbiAgICAgICAge1xuICAgICAgICAgIG5vcnRoOiByZWN0YW5nbGUubm9ydGgsXG4gICAgICAgICAgZWFzdDogcmVjdGFuZ2xlLmVhc3QsXG4gICAgICAgICAgc291dGg6IHJlY3RhbmdsZS5zb3V0aCxcbiAgICAgICAgICB3ZXN0OiByZWN0YW5nbGUud2VzdCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIC8vIGNsaWNrYWJsZTogcmVjdGFuZ2xlLmNsaWNrYWJsZSxcbiAgICAgICAgICAvLyBkcmFnZ2FibGU6IHJlY3RhbmdsZS5kcmFnZ2FibGUsXG4gICAgICAgICAgLy8gZWRpdGFibGU6IHJlY3RhbmdsZS5lZGl0YWJsZSxcbiAgICAgICAgICBmaWxsQ29sb3I6IHJlY3RhbmdsZS5maWxsQ29sb3IsXG4gICAgICAgICAgZmlsbE9wYWNpdHk6IHJlY3RhbmdsZS5maWxsT3BhY2l0eSxcbiAgICAgICAgICBzdHJva2VDb2xvcjogcmVjdGFuZ2xlLnN0cm9rZUNvbG9yLFxuICAgICAgICAgIHN0cm9rZU9wYWNpdHk6IHJlY3RhbmdsZS5zdHJva2VPcGFjaXR5LFxuICAgICAgICAgIC8vIHN0cm9rZVBvc2l0aW9uOiByZWN0YW5nbGUuc3Ryb2tlUG9zaXRpb24sXG4gICAgICAgICAgc3Ryb2tlV2VpZ2h0OiByZWN0YW5nbGUuc3Ryb2tlV2VpZ2h0LFxuICAgICAgICAgIHZpc2libGU6IHJlY3RhbmdsZS52aXNpYmxlLFxuICAgICAgICAgIHpJbmRleDogcmVjdGFuZ2xlLnpJbmRleCxcbiAgICAgICAgfSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBnaXZlbiByZWN0YW5nbGUgZnJvbSB0aGUgbWFwLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJlbW92ZVJlY3RhbmdsZShcbiAgICByZWN0YW5nbGU6IE5nTWFwc1JlY3RhbmdsZURpcmVjdGl2ZSxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlY3RhbmdsZXMuZ2V0KHJlY3RhbmdsZSk/LnRoZW4oKHIpID0+IHtcbiAgICAgIHIuc2V0TWFwKG51bGwpO1xuICAgICAgdGhpcy5fcmVjdGFuZ2xlcy5kZWxldGUocmVjdGFuZ2xlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXRPcHRpb25zKFxuICAgIHJlY3RhbmdsZTogTmdNYXBzUmVjdGFuZ2xlRGlyZWN0aXZlLFxuICAgIG9wdGlvbnM6IGdvb2dsZS5tYXBzLlJlY3RhbmdsZU9wdGlvbnMsXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWN0YW5nbGVzLmdldChyZWN0YW5nbGUpPy50aGVuKChyKSA9PiByLnNldE9wdGlvbnMob3B0aW9ucykpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEJvdW5kcyhcbiAgICByZWN0YW5nbGU6IE5nTWFwc1JlY3RhbmdsZURpcmVjdGl2ZSxcbiAgKTogUHJvbWlzZTxCb3VuZHNMaXRlcmFsIHwgbnVsbD4ge1xuICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLl9yZWN0YW5nbGVzLmdldChyZWN0YW5nbGUpO1xuICAgIGNvbnN0IGJvdW5kcyA9IHI/LmdldEJvdW5kcygpO1xuICAgIHJldHVybiBib3VuZHMgPyBib3VuZHMudG9KU09OKCkgOiBudWxsO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNldEJvdW5kcyhyZWN0YW5nbGU6IE5nTWFwc1JlY3RhbmdsZURpcmVjdGl2ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChcbiAgICAgICFyZWN0YW5nbGUubm9ydGggfHxcbiAgICAgICFyZWN0YW5nbGUuZWFzdCB8fFxuICAgICAgIXJlY3RhbmdsZS5zb3V0aCB8fFxuICAgICAgIXJlY3RhbmdsZS53ZXN0XG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLl9yZWN0YW5nbGVzLmdldChyZWN0YW5nbGUpO1xuICAgIHI/LnNldEJvdW5kcyh7XG4gICAgICBub3J0aDogcmVjdGFuZ2xlLm5vcnRoLFxuICAgICAgZWFzdDogcmVjdGFuZ2xlLmVhc3QsXG4gICAgICBzb3V0aDogcmVjdGFuZ2xlLnNvdXRoLFxuICAgICAgd2VzdDogcmVjdGFuZ2xlLndlc3QsXG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2V0RWRpdGFibGUocmVjdGFuZ2xlOiBOZ01hcHNSZWN0YW5nbGVEaXJlY3RpdmUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVjdGFuZ2xlc1xuICAgICAgLmdldChyZWN0YW5nbGUpXG4gICAgICA/LnRoZW4oKHIpID0+IHIuc2V0RWRpdGFibGUocmVjdGFuZ2xlLmVkaXRhYmxlKSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2V0RHJhZ2dhYmxlKFxuICAgIHJlY3RhbmdsZTogTmdNYXBzUmVjdGFuZ2xlRGlyZWN0aXZlLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVjdGFuZ2xlc1xuICAgICAgLmdldChyZWN0YW5nbGUpXG4gICAgICA/LnRoZW4oKHIpID0+IHIuc2V0RHJhZ2dhYmxlKHJlY3RhbmdsZS5kcmFnZ2FibGUpKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXRWaXNpYmxlKHJlY3RhbmdsZTogTmdNYXBzUmVjdGFuZ2xlRGlyZWN0aXZlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlY3RhbmdsZXNcbiAgICAgIC5nZXQocmVjdGFuZ2xlKVxuICAgICAgPy50aGVuKChyKSA9PiByLnNldFZpc2libGUocmVjdGFuZ2xlLnZpc2libGUpKTtcbiAgfVxuXG4gIHB1YmxpYyBjcmVhdGVFdmVudE9ic2VydmFibGU8VD4oXG4gICAgZXZlbnROYW1lOiBzdHJpbmcsXG4gICAgcmVjdGFuZ2xlOiBOZ01hcHNSZWN0YW5nbGVEaXJlY3RpdmUsXG4gICk6IE9ic2VydmFibGU8VD4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXI6IE9ic2VydmVyPFQ+KSA9PiB7XG4gICAgICBsZXQgbGlzdGVuZXI6IGdvb2dsZS5tYXBzLk1hcHNFdmVudExpc3RlbmVyIHwgbnVsbCA9IG51bGw7XG4gICAgICB0aGlzLl9yZWN0YW5nbGVzLmdldChyZWN0YW5nbGUpPy50aGVuKChyKSA9PiB7XG4gICAgICAgIGxpc3RlbmVyID0gci5hZGRMaXN0ZW5lcihldmVudE5hbWUsIChlOiBUKSA9PlxuICAgICAgICAgIHRoaXMuX3pvbmUucnVuKCgpID0+IG9ic2VydmVyLm5leHQoZSkpLFxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGlmIChsaXN0ZW5lciAhPT0gbnVsbCkge1xuICAgICAgICAgIGxpc3RlbmVyLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG59XG4iXX0=