UNPKG

@ng-maps/marker-clusterer

Version:

**@ng-maps/marker-clusterer** is a wrapper around [MarkerClusterer](https://github.com/googlemaps/js-markerclusterer)

1 lines 11.4 kB
{"version":3,"file":"ng-maps-marker-clusterer.mjs","sources":["../../../../libs/marker-clusterer/src/lib/services/managers/cluster-manager.ts","../../../../libs/marker-clusterer/src/lib/directives/marker-cluster.ts","../../../../libs/marker-clusterer/src/lib/marker-clusterer.module.ts","../../../../libs/marker-clusterer/src/public-api.ts","../../../../libs/marker-clusterer/src/ng-maps-marker-clusterer.ts"],"sourcesContent":["import { Injectable, NgZone } from '@angular/core';\nimport {\n MarkerClusterer,\n MarkerClustererOptions,\n} from '@googlemaps/markerclusterer';\nimport { Observable, Observer } from 'rxjs';\n\nimport {\n MapsApiWrapper,\n NgMapsMarkerComponent,\n NgMapsViewComponent,\n} from '@ng-maps/core';\nimport { GoogleMapsMarkerManager } from '@ng-maps/google';\n\nimport { MarkerClusterComponent } from '../../directives/marker-cluster';\n\n@Injectable({\n providedIn: NgMapsViewComponent,\n})\nexport class ClusterManager extends GoogleMapsMarkerManager {\n private _clustererInstance: Promise<MarkerClusterer>;\n private _resolver?: (value?: any) => void;\n constructor(_mapsWrapper: MapsApiWrapper, _zone: NgZone) {\n super(_mapsWrapper, _zone);\n this._clustererInstance = new Promise<MarkerClusterer>((resolver) => {\n this._resolver = resolver;\n });\n }\n\n public async createCluster(options: MarkerClustererOptions): Promise<void> {\n const map = await this._mapsWrapper.getNativeMap();\n if (this._resolver) {\n this._resolver(\n new MarkerClusterer({\n map,\n markers: [...this._markers.values()],\n ...options,\n }),\n );\n }\n }\n\n /**\n * @todo fix commented options\n * @param marker\n */\n public override async addMarker(\n marker: NgMapsMarkerComponent,\n ): Promise<void> {\n if (\n typeof marker.latitude !== 'number' ||\n typeof marker.longitude !== 'number'\n ) {\n return;\n }\n\n const cluster: MarkerClusterer = await this._clustererInstance;\n const markers = await this._mapsWrapper.createMarker(\n {\n lat: marker.latitude,\n lng: marker.longitude,\n },\n // TODO typings\n {\n label: marker.label,\n draggable: marker.draggable,\n icon: marker.icon ?? marker.iconUrl,\n opacity: marker.opacity,\n visible: marker.visible,\n zIndex: marker.zIndex,\n title: marker.title,\n clickable: marker.clickable,\n } as any,\n false,\n );\n cluster.addMarker(markers);\n this._markers.set(marker, markers);\n }\n\n public override async deleteMarker(\n marker: NgMapsMarkerComponent,\n ): Promise<void> {\n const m = this._markers.get(marker);\n if (m == null) {\n // marker already deleted\n return Promise.resolve();\n }\n this._zone.run(() => {\n m.setMap(null);\n this._clustererInstance.then((cluster) => {\n cluster.removeMarker(m);\n this._markers.delete(marker);\n });\n });\n }\n\n public clearMarkers(): Promise<void> {\n return this._clustererInstance.then((cluster) => {\n cluster.clearMarkers();\n });\n }\n\n public createClusterEventObservable<T>(\n eventName: string,\n marker: MarkerClusterComponent,\n ): Observable<T> {\n return new Observable<T>((observer: Observer<T>) => {\n this._clustererInstance.then((m: MarkerClusterer) => {\n m.addListener(eventName, (e: T) =>\n this._zone.run(() => observer.next(e)),\n );\n });\n });\n }\n}\n","import {\n Directive,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n SimpleChanges,\n} from '@angular/core';\nimport { Algorithm, Cluster, Renderer } from '@googlemaps/markerclusterer';\n\nimport { InfoWindowManager, MarkerManager } from '@ng-maps/core';\nimport { GoogleInfoWindowManager } from '@ng-maps/google';\n\nimport { ClusterManager } from '../services/managers/cluster-manager';\n\n/**\n * MarkerClusterComponent clusters map marker if they are near together\n */\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: 'map-marker-cluster',\n providers: [\n ClusterManager,\n { provide: MarkerManager, useExisting: ClusterManager },\n { provide: InfoWindowManager, useClass: GoogleInfoWindowManager },\n ],\n standalone: false,\n})\n// eslint-disable-next-line @angular-eslint/directive-class-suffix\nexport class MarkerClusterComponent implements OnDestroy, OnChanges, OnInit {\n /**\n * see {@link https://googlemaps.github.io/js-markerclusterer/interfaces/Algorithm.html}\n */\n @Input() public algorithm?: Algorithm;\n /**\n * see {@link https://googlemaps.github.io/js-markerclusterer/interfaces/Renderer.html}\n */\n @Input() public renderer?: Renderer;\n\n @Output()\n public clusterClick: EventEmitter<{\n event: google.maps.MapMouseEvent;\n cluster: Cluster;\n map: google.maps.Map;\n }> = new EventEmitter<{\n event: google.maps.MapMouseEvent;\n cluster: Cluster;\n map: google.maps.Map;\n }>();\n constructor(private _clusterManager: ClusterManager) {}\n\n /** @internal */\n public ngOnDestroy() {\n this._clusterManager.clearMarkers();\n }\n\n /** @internal */\n public ngOnChanges(changes: SimpleChanges) {\n if (changes['algorithm'] || changes['renderer']) {\n this.updateClusterManager();\n }\n }\n\n /** @internal */\n public ngOnInit() {\n this.updateClusterManager();\n }\n\n private updateClusterManager() {\n this._clusterManager.createCluster({\n algorithm: this.algorithm,\n renderer: this.renderer,\n onClusterClick: (\n event: google.maps.MapMouseEvent,\n cluster: Cluster,\n map: google.maps.Map,\n ) => this.clusterClick.emit({ event, cluster, map }),\n });\n }\n}\n","import { NgModule } from '@angular/core';\n\nimport { NgMapsCoreModule } from '@ng-maps/core';\n\nimport { MarkerClusterComponent } from './directives/marker-cluster';\n\n@NgModule({\n imports: [NgMapsCoreModule],\n declarations: [MarkerClusterComponent],\n exports: [MarkerClusterComponent],\n})\nexport class NgMapsMarkerClustererModule {}\n","/*\n * Public API Surface of js-marker-clusterer\n */\n\nexport * from './lib/directives';\nexport * from './lib/services';\nexport * from './lib/marker-clusterer.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.ClusterManager"],"mappings":"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"}