UNPKG

@ng-maps/core

Version:

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

51 lines 8.2 kB
import { Injectable } from '@angular/core'; import { BehaviorSubject, from, timer } from 'rxjs'; import { map, mergeMap, sample, shareReplay, switchMap, } from 'rxjs/operators'; import { MapsAPILoader } from './maps-api-loader/maps-api-loader'; import * as i0 from "@angular/core"; import * as i1 from "./maps-api-loader/maps-api-loader"; /** * Class to implement when you what to be able to make it work with the auto fit bounds feature * of AGM. */ export class FitBoundsAccessor { } /** * The FitBoundsService is responsible for computing the bounds of the a single map. */ export class FitBoundsService { constructor(loader) { this._boundsChangeSampleTime$ = new BehaviorSubject(200); this._includeInBounds$ = new BehaviorSubject(new Map()); this.bounds$ = from(loader.load()).pipe(mergeMap(() => this._includeInBounds$), sample(this._boundsChangeSampleTime$.pipe(switchMap((time) => timer(0, time)))), map((includeInBounds) => this.generateBounds(includeInBounds)), shareReplay(1)); } addToBounds(latLng) { const id = this._createIdentifier(latLng); if (this._includeInBounds$.value.has(id)) { return; } const bounds = this._includeInBounds$.value; bounds.set(id, latLng); this._includeInBounds$.next(bounds); } removeFromBounds(latLng) { const bounds = this._includeInBounds$.value; bounds.delete(this._createIdentifier(latLng)); this._includeInBounds$.next(bounds); } changeFitBoundsChangeSampleTime(timeMs) { this._boundsChangeSampleTime$.next(timeMs); } getBounds$() { return this.bounds$; } _createIdentifier(latLng) { return `${latLng.lat}+${latLng.lng}`; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: FitBoundsService, deps: [{ token: i1.MapsAPILoader }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: FitBoundsService }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: FitBoundsService, decorators: [{ type: Injectable }], ctorParameters: () => [{ type: i1.MapsAPILoader }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml0LWJvdW5kcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL3NlcnZpY2VzL2ZpdC1ib3VuZHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBYyxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDaEUsT0FBTyxFQUVMLEdBQUcsRUFDSCxRQUFRLEVBQ1IsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEdBQ1YsTUFBTSxnQkFBZ0IsQ0FBQztBQUt4QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7OztBQVdsRTs7O0dBR0c7QUFDSCxNQUFNLE9BQWdCLGlCQUFpQjtDQUV0QztBQUVEOztHQUVHO0FBRUgsTUFBTSxPQUFnQixnQkFBZ0I7SUFTcEMsWUFBWSxNQUFxQjtRQVBkLDZCQUF3QixHQUFHLElBQUksZUFBZSxDQUMvRCxHQUFHLENBQ0osQ0FBQztRQUNpQixzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FDeEQsSUFBSSxHQUFHLEVBQW9CLENBQzVCLENBQUM7UUFHQSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQ3JDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsRUFDdEMsTUFBTSxDQUNKLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDeEUsRUFDRCxHQUFHLENBQUMsQ0FBQyxlQUFlLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLENBQUMsRUFDOUQsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNmLENBQUM7SUFDSixDQUFDO0lBTU0sV0FBVyxDQUFDLE1BQWdCO1FBQ2pDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDekMsT0FBTztRQUNULENBQUM7UUFDRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVNLGdCQUFnQixDQUNyQixNQUFzRDtRQUV0RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDO1FBQzVDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU0sK0JBQStCLENBQUMsTUFBYztRQUNuRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFTSxVQUFVO1FBQ2YsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFFUyxpQkFBaUIsQ0FDekIsTUFBc0Q7UUFFdEQsT0FBTyxHQUFHLE1BQU0sQ0FBQyxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3ZDLENBQUM7OEdBdERtQixnQkFBZ0I7a0hBQWhCLGdCQUFnQjs7MkZBQWhCLGdCQUFnQjtrQkFEckMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgZnJvbSwgT2JzZXJ2YWJsZSwgdGltZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gIGZsYXRNYXAsXG4gIG1hcCxcbiAgbWVyZ2VNYXAsXG4gIHNhbXBsZSxcbiAgc2hhcmVSZXBsYXksXG4gIHN3aXRjaE1hcCxcbn0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBCb3VuZHNMaXRlcmFsIH0gZnJvbSAnLi4vaW50ZXJmYWNlL2JvdW5kcyc7XG5pbXBvcnQgeyBHZW9Qb2ludCB9IGZyb20gJy4uL2ludGVyZmFjZS9nZW8tcG9pbnQnO1xuXG5pbXBvcnQgeyBNYXBzQVBJTG9hZGVyIH0gZnJvbSAnLi9tYXBzLWFwaS1sb2FkZXIvbWFwcy1hcGktbG9hZGVyJztcblxuZXhwb3J0IGludGVyZmFjZSBGaXRCb3VuZHNEZXRhaWxzIHtcbiAgbGF0TG5nOiBHZW9Qb2ludDtcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IHR5cGUgQm91bmRzTWFwID0gTWFwPHN0cmluZywgR2VvUG9pbnQ+O1xuXG4vKipcbiAqIENsYXNzIHRvIGltcGxlbWVudCB3aGVuIHlvdSB3aGF0IHRvIGJlIGFibGUgdG8gbWFrZSBpdCB3b3JrIHdpdGggdGhlIGF1dG8gZml0IGJvdW5kcyBmZWF0dXJlXG4gKiBvZiBBR00uXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBGaXRCb3VuZHNBY2Nlc3NvciB7XG4gIHB1YmxpYyBhYnN0cmFjdCBnZXRGaXRCb3VuZHNEZXRhaWxzJCgpOiBPYnNlcnZhYmxlPEZpdEJvdW5kc0RldGFpbHM+O1xufVxuXG4vKipcbiAqIFRoZSBGaXRCb3VuZHNTZXJ2aWNlIGlzIHJlc3BvbnNpYmxlIGZvciBjb21wdXRpbmcgdGhlIGJvdW5kcyBvZiB0aGUgYSBzaW5nbGUgbWFwLlxuICovXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRml0Qm91bmRzU2VydmljZSB7XG4gIHByb3RlY3RlZCByZWFkb25seSBib3VuZHMkOiBPYnNlcnZhYmxlPEJvdW5kc0xpdGVyYWw+O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2JvdW5kc0NoYW5nZVNhbXBsZVRpbWUkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KFxuICAgIDIwMCxcbiAgKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9pbmNsdWRlSW5Cb3VuZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxCb3VuZHNNYXA+KFxuICAgIG5ldyBNYXA8c3RyaW5nLCBHZW9Qb2ludD4oKSxcbiAgKTtcblxuICBjb25zdHJ1Y3Rvcihsb2FkZXI6IE1hcHNBUElMb2FkZXIpIHtcbiAgICB0aGlzLmJvdW5kcyQgPSBmcm9tKGxvYWRlci5sb2FkKCkpLnBpcGUoXG4gICAgICBtZXJnZU1hcCgoKSA9PiB0aGlzLl9pbmNsdWRlSW5Cb3VuZHMkKSxcbiAgICAgIHNhbXBsZShcbiAgICAgICAgdGhpcy5fYm91bmRzQ2hhbmdlU2FtcGxlVGltZSQucGlwZShzd2l0Y2hNYXAoKHRpbWUpID0+IHRpbWVyKDAsIHRpbWUpKSksXG4gICAgICApLFxuICAgICAgbWFwKChpbmNsdWRlSW5Cb3VuZHMpID0+IHRoaXMuZ2VuZXJhdGVCb3VuZHMoaW5jbHVkZUluQm91bmRzKSksXG4gICAgICBzaGFyZVJlcGxheSgxKSxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdlbmVyYXRlQm91bmRzKFxuICAgIGluY2x1ZGVJbkJvdW5kczogTWFwPHN0cmluZywgR2VvUG9pbnQ+LFxuICApOiBCb3VuZHNMaXRlcmFsO1xuXG4gIHB1YmxpYyBhZGRUb0JvdW5kcyhsYXRMbmc6IEdlb1BvaW50KSB7XG4gICAgY29uc3QgaWQgPSB0aGlzLl9jcmVhdGVJZGVudGlmaWVyKGxhdExuZyk7XG4gICAgaWYgKHRoaXMuX2luY2x1ZGVJbkJvdW5kcyQudmFsdWUuaGFzKGlkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBib3VuZHMgPSB0aGlzLl9pbmNsdWRlSW5Cb3VuZHMkLnZhbHVlO1xuICAgIGJvdW5kcy5zZXQoaWQsIGxhdExuZyk7XG4gICAgdGhpcy5faW5jbHVkZUluQm91bmRzJC5uZXh0KGJvdW5kcyk7XG4gIH1cblxuICBwdWJsaWMgcmVtb3ZlRnJvbUJvdW5kcyhcbiAgICBsYXRMbmc6IGdvb2dsZS5tYXBzLkxhdExuZyB8IGdvb2dsZS5tYXBzLkxhdExuZ0xpdGVyYWwsXG4gICkge1xuICAgIGNvbnN0IGJvdW5kcyA9IHRoaXMuX2luY2x1ZGVJbkJvdW5kcyQudmFsdWU7XG4gICAgYm91bmRzLmRlbGV0ZSh0aGlzLl9jcmVhdGVJZGVudGlmaWVyKGxhdExuZykpO1xuICAgIHRoaXMuX2luY2x1ZGVJbkJvdW5kcyQubmV4dChib3VuZHMpO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZUZpdEJvdW5kc0NoYW5nZVNhbXBsZVRpbWUodGltZU1zOiBudW1iZXIpIHtcbiAgICB0aGlzLl9ib3VuZHNDaGFuZ2VTYW1wbGVUaW1lJC5uZXh0KHRpbWVNcyk7XG4gIH1cblxuICBwdWJsaWMgZ2V0Qm91bmRzJCgpOiBPYnNlcnZhYmxlPEJvdW5kc0xpdGVyYWw+IHtcbiAgICByZXR1cm4gdGhpcy5ib3VuZHMkO1xuICB9XG5cbiAgcHJvdGVjdGVkIF9jcmVhdGVJZGVudGlmaWVyKFxuICAgIGxhdExuZzogZ29vZ2xlLm1hcHMuTGF0TG5nIHwgZ29vZ2xlLm1hcHMuTGF0TG5nTGl0ZXJhbCxcbiAgKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7bGF0TG5nLmxhdH0rJHtsYXRMbmcubG5nfWA7XG4gIH1cbn1cbiJdfQ==