UNPKG

@ng-maps/google

Version:

**@ng-maps/google** is a simple, modular and tree-shakable library for displaying google-maps inside an angular application

111 lines 15.1 kB
import { Injectable, NgZone } from '@angular/core'; import { Observable } from 'rxjs'; import { CircleManager, MapsApiWrapper, } from '@ng-maps/core'; import * as i0 from "@angular/core"; import * as i1 from "@ng-maps/core"; export class GoogleCircleManager extends CircleManager { constructor(_mapsWrapper, _zone) { super(_mapsWrapper, _zone); } /** * @fixme implement commented properties */ async addCircle(circle) { if (!circle.latitude || !circle.longitude) { return; } this._circles.set(circle, this._apiWrapper.createCircle({ lat: circle.latitude, lng: circle.longitude }, { // clickable: circle.clickable, // draggable: circle.draggable, // editable: circle.editable, fillColor: circle.fillColor, fillOpacity: circle.fillOpacity, radius: circle.radius, strokeColor: circle.strokeColor, strokeOpacity: circle.strokeOpacity, // strokePosition: circle.strokePosition, strokeWeight: circle.strokeWeight, visible: circle.visible, zIndex: circle.zIndex, })); } /** * Removes the given circle from the map. */ async removeCircle(circle) { const c = await this._circles.get(circle); c?.setMap(null); this._circles.delete(circle); } /** * @todo check how to improve type casting * @param circle instance of {@link NgMapsCircleDirective} * @param options options for the circle */ async setOptions(circle, options) { const c = await this._circles.get(circle); if (typeof options.strokePosition === 'string') { options.strokePosition = google.maps.StrokePosition[options.strokePosition]; } return c?.setOptions(options); } async getBounds(circle) { const c = await this._circles.get(circle); if (!c) { return null; } const bounds = c.getBounds(); return bounds ? bounds.toJSON() : null; } async getCenter(circle) { const c = await this._circles.get(circle); const center = c?.getCenter(); return center ? center.toJSON() : null; } async getRadius(circle) { const c = await this._circles.get(circle); return c?.getRadius() ?? null; } async setCenter(circle) { if (!circle.latitude || !circle.longitude) { return; } const c = await this._circles.get(circle); c?.setCenter({ lat: circle.latitude, lng: circle.longitude }); } async setEditable(circle) { const c = await this._circles.get(circle); c?.setEditable(circle.editable); } async setDraggable(circle) { const c = await this._circles.get(circle); c?.setDraggable(circle.draggable); } async setVisible(circle) { const c = await this._circles.get(circle); c?.setVisible(circle.visible); } async setRadius(circle) { const c = await this._circles.get(circle); c?.setRadius(circle.radius); } createEventObservable(eventName, circle) { return new Observable((observer) => { let listener = null; this._circles?.get(circle)?.then((c) => { listener = c.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: GoogleCircleManager, 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: GoogleCircleManager }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GoogleCircleManager, decorators: [{ type: Injectable }], ctorParameters: () => [{ type: i1.MapsApiWrapper }, { type: i0.NgZone }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2lyY2xlLm1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2dvb2dsZS9zcmMvbGliL21hbmFnZXJzL2NpcmNsZS5tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQVksTUFBTSxNQUFNLENBQUM7QUFFNUMsT0FBTyxFQUVMLGFBQWEsRUFFYixjQUFjLEdBRWYsTUFBTSxlQUFlLENBQUM7OztBQUd2QixNQUFNLE9BQU8sbUJBQW9CLFNBQVEsYUFBaUM7SUFDeEUsWUFBWSxZQUE0QixFQUFFLEtBQWE7UUFDckQsS0FBSyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLLENBQUMsU0FBUyxDQUFDLE1BQTZCO1FBQ2xELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzFDLE9BQU87UUFDVCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQ2YsTUFBTSxFQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUMzQixFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsU0FBUyxFQUFFLEVBQy9DO1lBQ0UsK0JBQStCO1lBQy9CLCtCQUErQjtZQUMvQiw2QkFBNkI7WUFDN0IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1lBQzNCLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVztZQUMvQixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07WUFDckIsV0FBVyxFQUFFLE1BQU0sQ0FBQyxXQUFXO1lBQy9CLGFBQWEsRUFBRSxNQUFNLENBQUMsYUFBYTtZQUNuQyx5Q0FBeUM7WUFD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QU8sR0FBRyxFQUFFO2dCQUNWLElBQUksUUFBUSxLQUFLLElBQUksRUFBRSxDQUFDO29CQUN0QixRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3BCLENBQUM7WUFDSCxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7OEdBdElVLG1CQUFtQjtrSEFBbkIsbUJBQW1COzsyRkFBbkIsbUJBQW1CO2tCQUQvQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBPYnNlcnZlciB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICBCb3VuZHNMaXRlcmFsLFxuICBDaXJjbGVNYW5hZ2VyLFxuICBHZW9Qb2ludCxcbiAgTWFwc0FwaVdyYXBwZXIsXG4gIE5nTWFwc0NpcmNsZURpcmVjdGl2ZSxcbn0gZnJvbSAnQG5nLW1hcHMvY29yZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBHb29nbGVDaXJjbGVNYW5hZ2VyIGV4dGVuZHMgQ2lyY2xlTWFuYWdlcjxnb29nbGUubWFwcy5DaXJjbGU+IHtcbiAgY29uc3RydWN0b3IoX21hcHNXcmFwcGVyOiBNYXBzQXBpV3JhcHBlciwgX3pvbmU6IE5nWm9uZSkge1xuICAgIHN1cGVyKF9tYXBzV3JhcHBlciwgX3pvbmUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBmaXhtZSBpbXBsZW1lbnQgY29tbWVudGVkIHByb3BlcnRpZXNcbiAgICovXG4gIHB1YmxpYyBhc3luYyBhZGRDaXJjbGUoY2lyY2xlOiBOZ01hcHNDaXJjbGVEaXJlY3RpdmUpIHtcbiAgICBpZiAoIWNpcmNsZS5sYXRpdHVkZSB8fCAhY2lyY2xlLmxvbmdpdHVkZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9jaXJjbGVzLnNldChcbiAgICAgIGNpcmNsZSxcbiAgICAgIHRoaXMuX2FwaVdyYXBwZXIuY3JlYXRlQ2lyY2xlKFxuICAgICAgICB7IGxhdDogY2lyY2xlLmxhdGl0dWRlLCBsbmc6IGNpcmNsZS5sb25naXR1ZGUgfSxcbiAgICAgICAge1xuICAgICAgICAgIC8vIGNsaWNrYWJsZTogY2lyY2xlLmNsaWNrYWJsZSxcbiAgICAgICAgICAvLyBkcmFnZ2FibGU6IGNpcmNsZS5kcmFnZ2FibGUsXG4gICAgICAgICAgLy8gZWRpdGFibGU6IGNpcmNsZS5lZGl0YWJsZSxcbiAgICAgICAgICBmaWxsQ29sb3I6IGNpcmNsZS5maWxsQ29sb3IsXG4gICAgICAgICAgZmlsbE9wYWNpdHk6IGNpcmNsZS5maWxsT3BhY2l0eSxcbiAgICAgICAgICByYWRpdXM6IGNpcmNsZS5yYWRpdXMsXG4gICAgICAgICAgc3Ryb2tlQ29sb3I6IGNpcmNsZS5zdHJva2VDb2xvcixcbiAgICAgICAgICBzdHJva2VPcGFjaXR5OiBjaXJjbGUuc3Ryb2tlT3BhY2l0eSxcbiAgICAgICAgICAvLyBzdHJva2VQb3NpdGlvbjogY2lyY2xlLnN0cm9rZVBvc2l0aW9uLFxuICAgICAgICAgIHN0cm9rZVdlaWdodDogY2lyY2xlLnN0cm9rZVdlaWdodCxcbiAgICAgICAgICB2aXNpYmxlOiBjaXJjbGUudmlzaWJsZSxcbiAgICAgICAgICB6SW5kZXg6IGNpcmNsZS56SW5kZXgsXG4gICAgICAgIH0sXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgZ2l2ZW4gY2lyY2xlIGZyb20gdGhlIG1hcC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZW1vdmVDaXJjbGUoY2lyY2xlOiBOZ01hcHNDaXJjbGVEaXJlY3RpdmUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjID0gYXdhaXQgdGhpcy5fY2lyY2xlcy5nZXQoY2lyY2xlKTtcbiAgICBjPy5zZXRNYXAobnVsbCk7XG4gICAgdGhpcy5fY2lyY2xlcy5kZWxldGUoY2lyY2xlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdG9kbyBjaGVjayBob3cgdG8gaW1wcm92ZSB0eXBlIGNhc3RpbmdcbiAgICogQHBhcmFtIGNpcmNsZSBpbnN0YW5jZSBvZiB7QGxpbmsgTmdNYXBzQ2lyY2xlRGlyZWN0aXZlfVxuICAgKiBAcGFyYW0gb3B0aW9ucyBvcHRpb25zIGZvciB0aGUgY2lyY2xlXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2V0T3B0aW9ucyhcbiAgICBjaXJjbGU6IE5nTWFwc0NpcmNsZURpcmVjdGl2ZSxcbiAgICBvcHRpb25zOiBnb29nbGUubWFwcy5DaXJjbGVPcHRpb25zLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjID0gYXdhaXQgdGhpcy5fY2lyY2xlcy5nZXQoY2lyY2xlKTtcblxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucy5zdHJva2VQb3NpdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdGlvbnMuc3Ryb2tlUG9zaXRpb24gPSBnb29nbGUubWFwcy5TdHJva2VQb3NpdGlvbltcbiAgICAgICAgb3B0aW9ucy5zdHJva2VQb3NpdGlvblxuICAgICAgXSBhcyBhbnkgYXMgZ29vZ2xlLm1hcHMuU3Ryb2tlUG9zaXRpb247XG4gICAgfVxuICAgIHJldHVybiBjPy5zZXRPcHRpb25zKG9wdGlvbnMpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldEJvdW5kcyhcbiAgICBjaXJjbGU6IE5nTWFwc0NpcmNsZURpcmVjdGl2ZSxcbiAgKTogUHJvbWlzZTxCb3VuZHNMaXRlcmFsIHwgbnVsbD4ge1xuICAgIGNvbnN0IGMgPSBhd2FpdCB0aGlzLl9jaXJjbGVzLmdldChjaXJjbGUpO1xuICAgIGlmICghYykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGJvdW5kcyA9IGMuZ2V0Qm91bmRzKCk7XG4gICAgcmV0dXJuIGJvdW5kcyA/IGJvdW5kcy50b0pTT04oKSA6IG51bGw7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0Q2VudGVyKFxuICAgIGNpcmNsZTogTmdNYXBzQ2lyY2xlRGlyZWN0aXZlLFxuICApOiBQcm9taXNlPEdlb1BvaW50IHwgbnVsbD4ge1xuICAgIGNvbnN0IGMgPSBhd2FpdCB0aGlzLl9jaXJjbGVzLmdldChjaXJjbGUpO1xuICAgIGNvbnN0IGNlbnRlciA9IGM/LmdldENlbnRlcigpO1xuICAgIHJldHVybiBjZW50ZXIgPyBjZW50ZXIudG9KU09OKCkgOiBudWxsO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGdldFJhZGl1cyhcbiAgICBjaXJjbGU6IE5nTWFwc0NpcmNsZURpcmVjdGl2ZSxcbiAgKTogUHJvbWlzZTxudW1iZXIgfCBudWxsPiB7XG4gICAgY29uc3QgYyA9IGF3YWl0IHRoaXMuX2NpcmNsZXMuZ2V0KGNpcmNsZSk7XG4gICAgcmV0dXJuIGM/LmdldFJhZGl1cygpID8/IG51bGw7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2V0Q2VudGVyKGNpcmNsZTogTmdNYXBzQ2lyY2xlRGlyZWN0aXZlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCFjaXJjbGUubGF0aXR1ZGUgfHwgIWNpcmNsZS5sb25naXR1ZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYyA9IGF3YWl0IHRoaXMuX2NpcmNsZXMuZ2V0KGNpcmNsZSk7XG4gICAgYz8uc2V0Q2VudGVyKHsgbGF0OiBjaXJjbGUubGF0aXR1ZGUsIGxuZzogY2lyY2xlLmxvbmdpdHVkZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXRFZGl0YWJsZShjaXJjbGU6IE5nTWFwc0NpcmNsZURpcmVjdGl2ZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGMgPSBhd2FpdCB0aGlzLl9jaXJjbGVzLmdldChjaXJjbGUpO1xuICAgIGM/LnNldEVkaXRhYmxlKGNpcmNsZS5lZGl0YWJsZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgc2V0RHJhZ2dhYmxlKGNpcmNsZTogTmdNYXBzQ2lyY2xlRGlyZWN0aXZlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgYyA9IGF3YWl0IHRoaXMuX2NpcmNsZXMuZ2V0KGNpcmNsZSk7XG4gICAgYz8uc2V0RHJhZ2dhYmxlKGNpcmNsZS5kcmFnZ2FibGUpO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHNldFZpc2libGUoY2lyY2xlOiBOZ01hcHNDaXJjbGVEaXJlY3RpdmUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjID0gYXdhaXQgdGhpcy5fY2lyY2xlcy5nZXQoY2lyY2xlKTtcbiAgICBjPy5zZXRWaXNpYmxlKGNpcmNsZS52aXNpYmxlKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBzZXRSYWRpdXMoY2lyY2xlOiBOZ01hcHNDaXJjbGVEaXJlY3RpdmUpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjID0gYXdhaXQgdGhpcy5fY2lyY2xlcy5nZXQoY2lyY2xlKTtcbiAgICBjPy5zZXRSYWRpdXMoY2lyY2xlLnJhZGl1cyk7XG4gIH1cblxuICBwdWJsaWMgY3JlYXRlRXZlbnRPYnNlcnZhYmxlPFQ+KFxuICAgIGV2ZW50TmFtZTogc3RyaW5nLFxuICAgIGNpcmNsZTogTmdNYXBzQ2lyY2xlRGlyZWN0aXZlLFxuICApOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBPYnNlcnZlcjxUPikgPT4ge1xuICAgICAgbGV0IGxpc3RlbmVyOiBnb29nbGUubWFwcy5NYXBzRXZlbnRMaXN0ZW5lciB8IG51bGwgPSBudWxsO1xuICAgICAgdGhpcy5fY2lyY2xlcz8uZ2V0KGNpcmNsZSk/LnRoZW4oKGMpID0+IHtcbiAgICAgICAgbGlzdGVuZXIgPSBjLmFkZExpc3RlbmVyKGV2ZW50TmFtZSwgKGU6IFQpID0+XG4gICAgICAgICAgdGhpcy5fem9uZS5ydW4oKCkgPT4gb2JzZXJ2ZXIubmV4dChlKSksXG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgaWYgKGxpc3RlbmVyICE9PSBudWxsKSB7XG4gICAgICAgICAgbGlzdGVuZXIucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==