@c8y/ngx-components 1018.503.63 → 1018.503.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/core/search/inventory-search.service.d.ts +1 -0
  2. package/ecosystem/application-plugins/plugin-list.component.d.ts +1 -0
  3. package/esm2020/core/product-experience/gainsight.service.mjs +16 -25
  4. package/esm2020/core/search/inventory-search.service.mjs +11 -3
  5. package/esm2020/ecosystem/application-plugins/plugin-list.component.mjs +27 -13
  6. package/esm2020/ecosystem/packages/deploy-application/deploy-application.component.mjs +14 -3
  7. package/esm2020/map/map.component.mjs +2 -2
  8. package/esm2020/sub-assets/location/asset-location.component.mjs +2 -1
  9. package/fesm2015/c8y-ngx-components-ecosystem-application-plugins.mjs +19 -13
  10. package/fesm2015/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  11. package/fesm2015/c8y-ngx-components-ecosystem.mjs +30 -20
  12. package/fesm2015/c8y-ngx-components-ecosystem.mjs.map +1 -1
  13. package/fesm2015/c8y-ngx-components-map.mjs +2 -1
  14. package/fesm2015/c8y-ngx-components-map.mjs.map +1 -1
  15. package/fesm2015/c8y-ngx-components-sub-assets.mjs +1 -0
  16. package/fesm2015/c8y-ngx-components-sub-assets.mjs.map +1 -1
  17. package/fesm2015/c8y-ngx-components.mjs +25 -22
  18. package/fesm2015/c8y-ngx-components.mjs.map +1 -1
  19. package/fesm2020/c8y-ngx-components-ecosystem-application-plugins.mjs +26 -13
  20. package/fesm2020/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
  21. package/fesm2020/c8y-ngx-components-ecosystem.mjs +38 -15
  22. package/fesm2020/c8y-ngx-components-ecosystem.mjs.map +1 -1
  23. package/fesm2020/c8y-ngx-components-map.mjs +1 -1
  24. package/fesm2020/c8y-ngx-components-map.mjs.map +1 -1
  25. package/fesm2020/c8y-ngx-components-sub-assets.mjs +1 -0
  26. package/fesm2020/c8y-ngx-components-sub-assets.mjs.map +1 -1
  27. package/fesm2020/c8y-ngx-components.mjs +25 -26
  28. package/fesm2020/c8y-ngx-components.mjs.map +1 -1
  29. package/locales/de.po +56 -8
  30. package/locales/en.po +6 -0
  31. package/locales/es.po +120 -24
  32. package/locales/fr.po +111 -15
  33. package/locales/ja_JP.po +131 -35
  34. package/locales/ko.po +114 -12
  35. package/locales/nl.po +106 -10
  36. package/locales/pl.po +110 -14
  37. package/locales/pt_BR.po +134 -38
  38. package/locales/ru.po +0 -39
  39. package/locales/zh_CN.po +107 -5
  40. package/locales/zh_TW.po +109 -7
  41. package/package.json +1 -1
@@ -469,7 +469,8 @@ class MapComponent {
469
469
  this.toggleControls();
470
470
  }
471
471
  center() {
472
- this.map.setView(this.config.center);
472
+ var _a;
473
+ (_a = this.map) === null || _a === void 0 ? void 0 : _a.setView(this.config.center);
473
474
  }
474
475
  refresh() {
475
476
  if (this.isInit) {
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-map.mjs","sources":["../../map/map.model.ts","../../map/map.service.ts","../../map/cluster-map.ts","../../map/map-popup.directive.ts","../../map/map.component.ts","../../map/map.component.html","../../map/cluster-map.component.ts","../../map/cluster-map.component.html","../../map/map-status.component.ts","../../map/map-status.component.html","../../map/map.module.ts","../../map/c8y-ngx-components-map.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { MapTileLayer, MapDefaultConfig } from '@c8y/ngx-components';\nimport { Observable } from 'rxjs';\nimport type * as L from 'leaflet';\n\nexport function getC8yMarker(marker: L.Marker, asset: PositionManagedObject) {\n (marker as C8yMarker).asset = asset;\n return marker as C8yMarker;\n}\n\nexport const MAP_TILE_LAYER = new InjectionToken<Observable<MapTileLayer[]>>('MAP_TILE_LAYER');\n\nexport type C8yMarker = L.Marker & { asset: PositionManagedObject };\n\nexport enum ClusterSize {\n NONE = 0,\n FOUR = 1,\n SIXTEEN = 2\n}\n\nexport enum MapTenantOptionKeys {\n CONFIG = 'map-config',\n LAYERS = 'map-layers'\n}\n\nexport interface PositionManagedObject extends IManagedObject {\n c8y_Position: {\n lat: number;\n lng: number;\n alt?: number;\n };\n\n c8y_ActiveAlarmsStatus?: {\n minor: number;\n major: number;\n warning: number;\n critical: number;\n };\n\n icon?: {\n name: string;\n };\n}\n\nexport interface ClusterMapConfig extends MapConfig {\n center: [number, number];\n refreshInterval?: number;\n}\n\nexport interface MapConfig extends MapDefaultConfig {\n follow?: boolean;\n realtime?: boolean;\n icon?: string;\n color?: string;\n disableZoom?: boolean;\n disablePan?: boolean;\n}\n\nexport const MAP_DEFAULT_CONFIG = new InjectionToken<Observable<MapDefaultConfig>>(\n 'MAP_DEFAULT_CONFIG'\n);\n\nexport const defaultLayer: MapTileLayer = {\n layerUrl: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n label: 'OpenStreetMap',\n priority: 1000,\n options: {\n maxZoom: 18,\n minZoom: 2,\n attribution:\n '&copy;<a href=\"http://www.openstreetmap.org/copyright\" rel=\"noreferrer nofollow\">OpenStreetMap</a>',\n noWrap: true\n }\n};\n\nexport const defaultMapConfig: MapDefaultConfig = {\n center: [51.23544, 6.79599], // Düsseldorf\n zoomLevel: 2\n};\n\nexport type MapStatusButtonsConfig = Record<'realtime', { show: boolean; disabled?: boolean }>;\n","import { Injectable } from '@angular/core';\nimport { IManagedObject, InventoryService, IResultList, Paging } from '@c8y/client';\nimport type * as L from 'leaflet';\nimport { from, Observable } from 'rxjs';\nimport {\n ClusterSize,\n defaultLayer,\n defaultMapConfig,\n MapTenantOptionKeys,\n PositionManagedObject\n} from './map.model';\nimport { OptionsService, MapTileLayer, MapDefaultConfig } from '@c8y/ngx-components';\nimport { map } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MapService {\n /**\n * Returns asset icon status for highest alarm severity found in device object.\n * @param device Device that contains alarms information.\n * @returns Status string according to alarm severity\n */\n static getStatus(device: PositionManagedObject) {\n if (!device.c8y_ActiveAlarmsStatus) {\n return 'text-muted';\n }\n if (device.c8y_ActiveAlarmsStatus.critical) {\n return 'status critical';\n }\n if (device.c8y_ActiveAlarmsStatus.major) {\n return 'status major';\n }\n if (device.c8y_ActiveAlarmsStatus.minor) {\n return 'status minor';\n }\n if (device.c8y_ActiveAlarmsStatus.warning) {\n return 'status warning';\n }\n return 'text-muted';\n }\n /**\n * The devices that are maximal displayed in one cluster.\n */\n MAX_DEVICE_PER_CLUSTER = 200;\n /**\n * The count until the cluster is sized. There are a maximum of\n * three clusters: 1, 4 or 16.\n */\n CLUSTER_LEVEL_THRESHOLD = 500;\n\n /**\n * @ignore: Only DI.\n */\n constructor(\n private inventory: InventoryService,\n private options: OptionsService\n ) {}\n\n /**\n * Returns the leaflet instance used by the cumulocity core.\n */\n async getLeaflet() {\n const c8yLeafletInstance = (await import('leaflet')).default;\n return c8yLeafletInstance;\n }\n\n /**\n * Verifies if a given managed object is a device with a position fragment.\n * @param mo The given managed object.\n */\n isPositionedDevice(mo: IManagedObject) {\n return !!(mo?.c8y_IsDevice && this.hasPosition(mo));\n }\n\n /**\n * Verifies if a given managed object has a position fragment.\n * @param mo The given managed object.\n */\n hasPosition(mo: IManagedObject) {\n return mo?.c8y_Position;\n }\n\n /**\n * Returns the layers configured in the current platform via tenant options.\n * @returns The layers. If not set in tenant options the default layers.\n */\n getDefaultLayers(): Observable<MapTileLayer[]> {\n return this.getMapOption<MapTileLayer[]>(\n MapTenantOptionKeys.LAYERS,\n this.options.mapLayers || [defaultLayer]\n );\n }\n\n /**\n * Returns the map configuration configured on the tenant.\n * @returns The configuration. If not set in tenant options the default configuration.\n */\n getDefaultConfig(): Observable<MapDefaultConfig> {\n return this.getMapOption<MapDefaultConfig>(\n MapTenantOptionKeys.CONFIG,\n this.options.mapConfig || defaultMapConfig\n );\n }\n\n /**\n * Counts all managed objects in a given bound with a c8y_Position fragment.\n * @param bound The lat lng bound to request the managed objects for.\n * @param byGroupIdMO The group managed object of which direct children should be searched for.\n * @returns The number of all position managed objects in the given bound (and group).\n */\n async getPositionMOsFromBoundCount(\n bound: L.LatLngBounds,\n byGroupIdMO?: IManagedObject\n ): Promise<number> {\n return this.getPositionMOsFromBound(bound, byGroupIdMO, true) as Promise<number>;\n }\n\n /**\n * Returns all managed objects with a c8y_Position fragment in a certain boundary.\n * @param bound The lat lng bound to request the managed objects for.\n * @returns All position managed objects in the given bound.\n */\n async getPositionMOsFromBound(bound: L.LatLngBounds): Promise<PositionManagedObject[]>;\n /**\n * Returns all managed objects with a c8y_Position fragment in a certain boundary that belongs to a certain group.\n * @param bound The lat lng bound to request the managed objects for.\n * @param byGroupIdMO The group managed object of which direct children should be searched for.\n * @returns All position managed objects in the given bound that are children of the given group.\n */\n async getPositionMOsFromBound(\n bound: L.LatLngBounds,\n byGroupIdMO: IManagedObject\n ): Promise<PositionManagedObject[]>;\n /**\n * Counts the managed objects in a certain boundary belonging to a group.\n * @param bound The lat lng bound to request the managed objects for.\n * @param byGroupIdMO The group managed object of which direct children should be searched for.\n * @return The count of the managed objects.\n */\n async getPositionMOsFromBound(\n bound: L.LatLngBounds,\n byGroupIdMO: IManagedObject,\n count: true\n ): Promise<number>;\n async getPositionMOsFromBound(\n bound: L.LatLngBounds,\n byGroupIdMO?: IManagedObject,\n count = false\n ): Promise<PositionManagedObject[] | number> {\n const { lat: latMin, lng: lngMin } = bound.getSouthWest();\n const { lat: latMax, lng: lngMax } = bound.getNorthEast();\n const byGroupIdFilter = byGroupIdMO\n ? `(bygroupid(${byGroupIdMO.id}) or id eq '${byGroupIdMO.id}') and `\n : '';\n const boundFilter = `$filter=${byGroupIdFilter}has(c8y_Position) and c8y_Position.lng gt ${lngMin}d and c8y_Position.lat gt ${latMin}d and c8y_Position.lng lt ${lngMax}d and c8y_Position.lat lt ${latMax}d`;\n const { paging, data } = await this.inventory.list({\n pageSize: count ? 1 : this.MAX_DEVICE_PER_CLUSTER,\n withTotalPages: count,\n query: boundFilter\n });\n if (count) {\n return paging.totalPages;\n }\n return data as PositionManagedObject[];\n }\n\n /**\n * Returns all devices with c8y_Position.\n */\n async getPositionDevices(): Promise<PositionManagedObject[]>;\n /**\n * Returns all devices with c8y_Position.\n * @param pageSize The page size to return.\n */\n async getPositionDevices(pageSize: number): Promise<PositionManagedObject[]>;\n /**\n * Returns all devices with c8y_Position.\n * @param pageSize The page size to return.\n * @param count Counting is disabled\n */\n async getPositionDevices(pageSize: number, count: false): Promise<PositionManagedObject[]>;\n /**\n * Returns the number of all devices with c8y_Position.\n * @param pageSize The page size to return.\n * @param count Counting is enabled\n */\n async getPositionDevices(pageSize: number, count: true): Promise<number>;\n /**\n * Returns all devices with c8y_Position.\n * @param pageSize The page size to return.\n * @param count Switches to counting only.\n * @returns All devices or the device count with a c8y_Position fragment.\n */\n async getPositionDevices(\n pageSize = this.MAX_DEVICE_PER_CLUSTER,\n count?: boolean\n ): Promise<number | PositionManagedObject[]> {\n const { paging, data } = await this.inventory.list({\n pageSize: count ? 1 : pageSize,\n withTotalPages: !!count,\n query: '$filter=has(c8y_Position) and has(c8y_IsDevice)'\n });\n if (count) {\n return paging.totalPages;\n }\n return data as PositionManagedObject[];\n }\n\n /**\n * Returns all managed object with a c8y_Position fragment.\n * @param byGroupIdMO The group managed object of which direct children should be searched for.\n * @param pageSize Defines how many results should be returned.\n * @returns The managed objects with position.\n */\n async getAllPositionMOs(\n byGroupIdMO?: IManagedObject,\n pageSize = 500\n ): Promise<IResultList<PositionManagedObject>> {\n const filter: { pageSize: number; withTotalPages: boolean; query: string } = {\n pageSize,\n withTotalPages: true,\n query: 'has(c8y_Position)'\n };\n\n if (byGroupIdMO) {\n filter.query = `$filter=(bygroupid(${byGroupIdMO.id}) or id eq '${byGroupIdMO.id}') and has(c8y_Position)`;\n }\n\n const { paging, data, res } = await this.inventory.list(filter);\n\n return {\n res,\n paging: paging as Paging<PositionManagedObject>,\n data: data as PositionManagedObject[]\n };\n }\n\n /**\n * Returns the cluster size for clustered maps. Counting the position MOs in a bounding\n * and if it reach a threshold, returning a [[ClusterSize]].\n * @param bound The bounding to check for cluster size.\n * @returns The cluster size, can be NONE, FOUR or SIXTEEN.\n */\n async getClusterSize(bound: L.LatLngBounds) {\n const count = await this.getPositionMOsFromBoundCount(bound);\n let clusterSize = ClusterSize.NONE;\n if (count > this.CLUSTER_LEVEL_THRESHOLD) {\n clusterSize = ClusterSize.SIXTEEN;\n } else if (count > this.MAX_DEVICE_PER_CLUSTER) {\n clusterSize = ClusterSize.FOUR;\n }\n return clusterSize;\n }\n\n private getMapOption<T>(key: MapTenantOptionKeys, defaultValue: T) {\n return from(this.options.getTenantOption<T | string>('configuration', key, defaultValue)).pipe(\n map(config => {\n if (typeof config === 'string') {\n console.error(\n `The tenant option for maps 'configuration.${key}' is not a valid JSON structure.`\n );\n return defaultValue;\n }\n return config;\n })\n );\n }\n}\n","import { IterableChangeRecord, IterableDiffer, IterableDiffers } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport type * as L from 'leaflet';\nimport { gettext } from '@c8y/ngx-components';\nimport { C8yMarker, PositionManagedObject } from './map.model';\nimport { MapService } from './map.service';\n\nexport class ClusterMap {\n markers: C8yMarker[] = [];\n positions: PositionManagedObject[] = [];\n\n set clusterMarker(item: L.Layer) {\n this.removeClusterToBigMarker();\n this._clusterMarker = item;\n }\n\n get clusterMarker() {\n return this._clusterMarker;\n }\n\n set rect(item: L.Rectangle) {\n if (this._rect) {\n this._rect.remove();\n }\n this._rect = item;\n }\n\n get rect() {\n return this._rect;\n }\n\n private _clusterMarker: L.Layer;\n private _rect: L.Rectangle;\n private iterableDiffer: IterableDiffer<PositionManagedObject> | null;\n\n constructor(\n private iterable: IterableDiffers,\n private addAssetCallback: (asset: PositionManagedObject) => C8yMarker,\n private translateService: TranslateService\n ) {\n this.iterableDiffer = this.iterable.find(this.positions).create(this.trackBy);\n }\n\n render(map: L.Map) {\n if (this._rect) {\n this._rect.addTo(map);\n }\n this.updateChanges(map);\n if (this._clusterMarker) {\n this._clusterMarker.addTo(map);\n }\n }\n\n clear(map: L.Map) {\n this.removeClusterToBigMarker();\n this._rect.remove();\n this.positions = [];\n this.updateChanges(map);\n }\n\n removeClusterToBigMarker() {\n if (this._clusterMarker) {\n this._clusterMarker.remove();\n this._clusterMarker = null;\n }\n }\n\n addMarkerToMap(device: PositionManagedObject, map: L.Map) {\n const marker = this.addAssetCallback(device);\n this.markers.push(marker);\n marker.addTo(map);\n }\n\n setClusterToBigMarker(map: L.Map, count, leaflet: typeof L) {\n const bound = this.rect.getBounds();\n const text = this.translateService.instant(gettext('Zoom in'));\n const divMarker = leaflet.divIcon({\n html: `<div class=\"c8y-map-marker-count\" data-count=\"${count}\" title=\"${text}\"></div>`\n });\n const labelIcon = leaflet.marker(bound.getCenter(), {\n icon: divMarker\n });\n labelIcon.addTo(map);\n labelIcon.on('click', () => {\n map.fitBounds(bound);\n });\n this.clusterMarker = labelIcon;\n }\n\n private updateChanges(map: L.Map) {\n const changes = this.iterableDiffer.diff(this.positions);\n if (changes) {\n changes.forEachRemovedItem((record: IterableChangeRecord<PositionManagedObject>) => {\n this.removeMarkerFromMap(record.item);\n });\n\n changes.forEachAddedItem((record: IterableChangeRecord<PositionManagedObject>) => {\n this.addMarkerToMap(record.item, map);\n });\n }\n }\n\n private trackBy(index: number, item: PositionManagedObject) {\n const trackItems = [\n item.id,\n item.c8y_Position.lat,\n item.c8y_Position.lng,\n MapService.getStatus(item)\n ];\n return trackItems.join('');\n }\n\n private removeMarkerFromMap(device: PositionManagedObject) {\n const markers = this.markers.filter((marker: C8yMarker) => marker.asset?.id === device.id);\n markers.forEach(marker => marker.remove());\n }\n}\n","import { Directive, ElementRef, TemplateRef, ViewContainerRef } from '@angular/core';\n\n@Directive({\n selector: '[c8yMapPopup]'\n})\nexport class MapPopupDirective {\n constructor(\n public template: TemplateRef<unknown>,\n public elementRef: ElementRef,\n public viewContainer: ViewContainerRef\n ) {}\n}\n","import {\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n Output,\n SimpleChange,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport {\n ManagedObjectRealtimeService,\n MapTileLayer,\n gettext,\n sortByPriority,\n MapDefaultConfig\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport type * as L from 'leaflet';\nimport { flatten, isUndefined } from 'lodash-es';\nimport { Observable, Subject, Subscription, combineLatest, fromEvent } from 'rxjs';\nimport { first, takeUntil } from 'rxjs/operators';\nimport { MapPopupDirective } from './map-popup.directive';\nimport {\n C8yMarker,\n MAP_DEFAULT_CONFIG,\n MAP_TILE_LAYER,\n MapConfig,\n PositionManagedObject,\n getC8yMarker\n} from './map.model';\nimport { MapService } from './map.service';\n\n@Component({\n selector: 'c8y-map',\n templateUrl: './map.component.html',\n providers: [ManagedObjectRealtimeService]\n})\nexport class MapComponent {\n /**\n * The leaflet map object.\n */\n map: L.Map;\n /**\n * The markers placed on the map.\n */\n markers: Array<C8yMarker | L.Marker> = [];\n /**\n * The leaflet representation used.\n */\n leaflet: typeof L;\n /**\n * Tells if the map was already initialized.\n */\n isInit = false;\n\n @ViewChild('map')\n mapElement: ElementRef;\n\n @ContentChild(MapPopupDirective)\n popup: MapPopupDirective;\n\n @Input()\n config: MapConfig = {};\n\n @Input()\n assets: PositionManagedObject | PositionManagedObject[];\n\n @Output()\n onMove = new EventEmitter<L.LeafletEvent>();\n\n @Output()\n onMoveEnd = new EventEmitter<L.LeafletEvent>();\n\n @Output()\n onZoomStart = new EventEmitter<L.LeafletEvent>();\n\n @Output()\n onZoomEnd = new EventEmitter<L.LeafletEvent>();\n\n @Output()\n onRealtimeUpdate = new EventEmitter<PositionManagedObject>();\n\n @Output()\n onInit = new EventEmitter<typeof L>();\n\n protected realtimeSubscription: Subscription;\n protected unsubscribeTrigger$ = new Subject<void>();\n\n constructor(\n protected moRealtimeService: ManagedObjectRealtimeService,\n protected mapService: MapService,\n @Inject(MAP_TILE_LAYER) protected layers$: Observable<MapTileLayer[]>,\n @Inject(MAP_DEFAULT_CONFIG)\n protected defaultConfig$: Observable<MapDefaultConfig>,\n protected translateService: TranslateService\n ) {}\n\n startRealtime() {\n if (!this.assets || (Array.isArray(this.assets) && this.assets.length > 1)) {\n this.config.realtime = false;\n this.stopRealtime();\n return;\n }\n const asset = Array.isArray(this.assets) ? this.assets[0] : this.assets;\n this.realtimeSubscription = this.moRealtimeService\n .onUpdate$(asset)\n .subscribe((asset: PositionManagedObject) => {\n const marker = this.findMarker(asset.id);\n const icon = this.getAssetIcon(asset);\n marker.setIcon(icon);\n marker.setLatLng([asset.c8y_Position.lat, asset.c8y_Position.lng]);\n if (Array.isArray(this.assets)) {\n this.assets[0] = asset;\n } else {\n this.assets = asset;\n }\n this.moveToPositionOfMo(asset);\n this.onRealtimeUpdate.emit(asset);\n });\n }\n\n moveToPositionOfMo(positions: PositionManagedObject | PositionManagedObject[]) {\n const position = Array.isArray(positions) ? positions[0] : positions;\n if (this.config.follow) {\n this.map.setView([position.c8y_Position.lat, position.c8y_Position.lng]);\n }\n }\n\n stopRealtime() {\n if (this.realtimeSubscription) {\n this.realtimeSubscription.unsubscribe();\n }\n }\n\n findMarker(assetId) {\n return this.markers.find((marker: C8yMarker) => marker.asset?.id === assetId);\n }\n\n addMarkerToMap(marker: C8yMarker | L.Marker) {\n this.markers.push(marker);\n marker.addTo(this.map);\n }\n\n getAssetMarker(asset: PositionManagedObject) {\n if (!asset) {\n return;\n }\n\n const icon = this.getAssetIcon(asset);\n const leafletMarker = this.leaflet.marker([asset.c8y_Position.lat, asset.c8y_Position.lng], {\n icon\n });\n const marker = getC8yMarker(leafletMarker, asset);\n\n if (this.popup) {\n marker.on('click', () => {\n this.popup.viewContainer.clear();\n const view = this.popup.viewContainer.createEmbeddedView(this.popup.template, {\n $implicit: asset\n });\n view.detectChanges();\n marker\n .unbindPopup()\n .bindPopup(this.popup.elementRef.nativeElement.previousSibling, {\n offset: [0, -30],\n maxWidth: 140,\n autoPan: false\n })\n .openPopup();\n });\n }\n\n return marker;\n }\n\n getAssetIcon(asset: PositionManagedObject) {\n const assetTypeIcon = this.config.icon || asset.icon?.name;\n const status = MapService.getStatus(asset);\n const color = this.config.color ? `style='color: ${this.config.color};'` : '';\n const icon = this.leaflet.divIcon({\n html: `<div class=\"dlt-c8y-icon-marker icon-3x ${status}\" ${color}><i class=\"dlt-c8y-icon-${\n assetTypeIcon || 'data-transfer'\n }\" /></div>`,\n className: 'c8y-map-marker-icon',\n // iconAnchor is used to set the marker accurately on click\n iconAnchor: [8, 8]\n });\n return icon;\n }\n\n clearMarkers() {\n this.markers.forEach(marker => marker.remove());\n this.markers = [];\n }\n\n refreshMarkers() {\n this.clearMarkers();\n let assets: PositionManagedObject[] = [];\n if (!isUndefined(this.assets)) {\n assets = Array.isArray(this.assets) ? this.assets : [this.assets];\n }\n assets.forEach(asset => {\n const marker = this.getAssetMarker(asset);\n this.addMarkerToMap(marker);\n });\n if (!this.config.center) {\n this.zoomToBound(assets);\n }\n this.toggleControls();\n }\n\n center() {\n this.map.setView(this.config.center);\n }\n\n refresh() {\n if (this.isInit) {\n this.refreshMarkers();\n }\n }\n\n protected async ngAfterViewInit() {\n this.leaflet = await this.mapService.getLeaflet();\n combineLatest([this.layers$, this.defaultConfig$])\n .pipe(first(), takeUntil(this.unsubscribeTrigger$))\n .subscribe(([layers, defaultConfig]) => {\n this.initMap(layers, defaultConfig);\n this.refreshMarkers();\n });\n }\n\n protected ngOnChanges(changes: SimpleChanges): void {\n if (changes.assets?.currentValue && !changes.assets?.firstChange) {\n this.refreshMarkers();\n }\n\n if (changes.config?.currentValue && !changes.config?.firstChange) {\n this.changeConfig(changes.config);\n }\n }\n\n protected ngOnDestroy(): void {\n this.unsubscribeAllListeners();\n }\n\n protected unsubscribeAllListeners() {\n this.unsubscribeTrigger$.next();\n this.stopRealtime();\n }\n\n protected initMap(layers: MapTileLayer[], defaultConfig: MapConfig): void {\n const defaultOptions = {\n center: this.config.center || defaultConfig.center,\n zoomSnap: 0,\n zoom: this.config.zoomLevel || defaultConfig.zoomLevel\n };\n\n if (this.map) {\n this.map.remove();\n }\n this.map = this.leaflet.map(this.mapElement.nativeElement, defaultOptions);\n\n this.map.attributionControl.setPrefix('');\n\n this.addLayers(layers);\n\n this.handleMobile();\n\n fromEvent<L.LeafletEvent>(this.map, 'moveend')\n .pipe(takeUntil(this.unsubscribeTrigger$))\n .subscribe(event => this.onMoveEnd.emit(event));\n\n fromEvent<L.LeafletEvent>(this.map, 'move')\n .pipe(takeUntil(this.unsubscribeTrigger$))\n .subscribe(event => this.onMove.emit(event));\n\n fromEvent<L.LeafletEvent>(this.map, 'zoomend')\n .pipe(takeUntil(this.unsubscribeTrigger$))\n .subscribe(event => this.onZoomEnd.emit(event));\n\n fromEvent<L.LeafletEvent>(this.map, 'zoomstart')\n .pipe(takeUntil(this.unsubscribeTrigger$))\n .subscribe(event => this.onZoomStart.emit(event));\n\n this.isInit = true;\n this.onInit.emit(this.leaflet);\n }\n\n protected handleMobile() {\n // adding event listener to do mobile 2 finger scrolling\n if (this.leaflet.Browser.mobile) {\n const touchMsg = this.translateService.instant(gettext('Use two fingers to move the map.'));\n this.map.dragging.disable();\n const container = this.map.getContainer();\n container.setAttribute('data-touch-warning-content', touchMsg);\n container.addEventListener('touchstart', event => this.handleTouch(event));\n container.addEventListener('touchmove', event => this.handleTouch(event));\n container.addEventListener('touchend', event => this.handleTouch(event));\n container.addEventListener('touchcancel', event => this.handleTouch(event));\n container.addEventListener('click', event => this.handleTouch(event));\n }\n }\n\n protected addLayers(layers: MapTileLayer[]) {\n const flattenLayers: MapTileLayer[] = flatten(layers);\n const tileLayers = sortByPriority(flattenLayers).reduce((acc, layer) => {\n const tiles = this.leaflet.tileLayer(layer.layerUrl, layer.options);\n tiles.addTo(this.map);\n acc = { [layer.label]: tiles, ...acc };\n return acc;\n }, {});\n if (flattenLayers.length > 1) {\n this.leaflet.control.layers(tileLayers, null, { position: 'bottomleft' }).addTo(this.map);\n }\n }\n\n protected changeConfig(change: SimpleChange) {\n if (this.hasChanged(change, 'zoomLevel')) {\n this.map.setZoom(this.config.zoomLevel);\n }\n\n if (this.hasChanged(change, 'center')) {\n this.map.setView(change.currentValue.center || this.config.center);\n }\n\n if (this.hasChanged(change, 'icon') || this.hasChanged(change, 'color')) {\n this.refreshMarkers();\n }\n\n if (this.hasChanged(change, 'realtime') && change.currentValue.realtime) {\n this.startRealtime();\n }\n\n if (change.currentValue.realtime === false) {\n this.stopRealtime();\n }\n\n if (this.hasChanged(change, 'follow')) {\n this.moveToPositionOfMo(this.assets);\n }\n\n if (this.hasChanged(change, 'disablePan') || this.hasChanged(change, 'disableZoom')) {\n this.toggleControls();\n }\n }\n\n protected hasChanged(change: SimpleChange, prop: keyof MapConfig) {\n return change.currentValue[prop] !== change.previousValue[prop];\n }\n\n protected toggleControls() {\n if (this.config.disableZoom) {\n this.map.removeControl(this.map.zoomControl);\n this.map.scrollWheelZoom.disable();\n } else {\n this.map.addControl(this.map.zoomControl);\n this.map.scrollWheelZoom.enable();\n }\n if (this.config.disablePan) {\n this.map.dragging.disable();\n } else {\n this.map.dragging.enable();\n }\n }\n\n private handleTouch(e: Event) {\n // Disregard touch events on the minimap if present\n const ignoreList = [\n 'leaflet-control-minimap',\n 'leaflet-interactive',\n 'leaflet-popup-content',\n 'leaflet-popup-content-wrapper',\n 'leaflet-popup-close-button',\n 'leaflet-control-zoom-in',\n 'leaflet-control-zoom-out'\n ];\n\n let ignoreElement = false;\n for (let i = 0; i < ignoreList.length; i++) {\n if (this.leaflet.DomUtil.hasClass(e.target as HTMLElement, ignoreList[i])) {\n ignoreElement = true;\n }\n }\n\n const container = this.map.getContainer();\n if (ignoreElement) {\n if (\n this.leaflet.DomUtil.hasClass(e.target as HTMLElement, 'leaflet-interactive') &&\n e.type === 'touchmove' &&\n (e as TouchEvent).touches.length === 1\n ) {\n this.leaflet.DomUtil.addClass(container, 'touch-warning');\n this.map.dragging.disable();\n } else {\n this.leaflet.DomUtil.removeClass(container, 'touch-warning');\n }\n return;\n }\n\n if (e.type !== 'touchmove' && e.type !== 'touchstart') {\n this.leaflet.DomUtil.removeClass(container, 'touch-warning');\n return;\n }\n if ((e as TouchEvent).touches.length === 1) {\n this.leaflet.DomUtil.addClass(container, 'touch-warning');\n this.map.dragging.disable();\n } else {\n this.map.dragging.enable();\n this.leaflet.DomUtil.removeClass(container, 'touch-warning');\n }\n }\n\n private zoomToBound(assets: PositionManagedObject[]) {\n const bounds: [number, number][] = assets.map(asset => [\n asset.c8y_Position.lat,\n asset.c8y_Position.lng\n ]);\n if (assets.length > 1) {\n this.map.flyToBounds(bounds, { animate: false });\n return;\n }\n this.map.flyTo(\n [assets[0].c8y_Position.lat, assets[0].c8y_Position.lng],\n this.map.options.zoom,\n {\n animate: false\n }\n );\n }\n}\n","<div class=\"c8y-map\">\n <div #map></div>\n</div>\n<ng-content></ng-content>\n","import {\n Component,\n EventEmitter,\n Inject,\n Input,\n IterableDiffers,\n Output,\n SimpleChange,\n SimpleChanges\n} from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport {\n ColorService,\n ManagedObjectRealtimeService,\n MapTileLayer,\n MapDefaultConfig\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport type * as L from 'leaflet';\nimport {\n BehaviorSubject,\n NEVER,\n Observable,\n Subject,\n combineLatest,\n from,\n fromEvent,\n interval,\n merge,\n of\n} from 'rxjs';\nimport {\n debounceTime,\n filter,\n first,\n map,\n mergeMap,\n switchMap,\n takeUntil,\n tap\n} from 'rxjs/operators';\nimport { ClusterMap } from './cluster-map';\nimport { MapComponent } from './map.component';\nimport {\n ClusterMapConfig,\n ClusterSize,\n MAP_DEFAULT_CONFIG,\n MAP_TILE_LAYER,\n PositionManagedObject\n} from './map.model';\nimport { MapService } from './map.service';\n\n@Component({\n selector: 'c8y-cluster-map',\n templateUrl: './cluster-map.component.html',\n providers: [ManagedObjectRealtimeService]\n})\nexport class ClusterMapComponent extends MapComponent {\n isLoading$ = new BehaviorSubject(false);\n msUntilRefresh$ = new BehaviorSubject(5000);\n\n @Input()\n config: ClusterMapConfig;\n\n @Input()\n rootNode: IManagedObject;\n\n @Input('asset')\n assets: PositionManagedObject;\n\n @Input()\n showClusterColor = false;\n\n @Output()\n mapChange = new EventEmitter<L.LeafletEvent>();\n\n private reloadTrigger$ = new BehaviorSubject(false);\n private clusters: ClusterMap[] = [];\n private readonly MIN_INTERVAL = 5000;\n private readonly EVENT_THROTTLE_TIME = 750;\n\n constructor(\n protected moRealtimeService: ManagedObjectRealtimeService,\n protected mapService: MapService,\n @Inject(MAP_TILE_LAYER) protected layers$: BehaviorSubject<MapTileLayer[]>,\n @Inject(MAP_DEFAULT_CONFIG)\n protected defaultConfig$: Observable<MapDefaultConfig>,\n protected translateService: TranslateService,\n private iterable: IterableDiffers,\n private colorService: ColorService\n ) {\n super(moRealtimeService, mapService, layers$, defaultConfig$, translateService);\n }\n\n async ngOnChanges(changes: SimpleChanges) {\n if (changes.config?.firstChange) {\n return;\n }\n\n if (changes.rootNode?.previousValue !== changes.rootNode?.currentValue) {\n this.changeRootNode(changes.rootNode.currentValue);\n }\n\n if (changes.config?.currentValue) {\n this.changeConfig(changes.config);\n }\n }\n\n changeConfig(change: SimpleChange) {\n // on following, cancel reload to avoid stale state\n if (change.currentValue.follow === true) {\n this.cancelReload();\n this.isLoading$.next(false);\n }\n\n if (change.currentValue.refreshInterval !== change.previousValue.refreshInterval) {\n this.reload();\n }\n super.changeConfig(change);\n }\n\n async ngAfterViewInit() {\n if (!this.leaflet) {\n this.leaflet = await this.mapService.getLeaflet();\n }\n combineLatest([this.layers$, this.defaultConfig$])\n .pipe(takeUntil(this.unsubscribeTrigger$))\n .subscribe(([layers, defaultConfig]) => {\n this.initMap(layers, defaultConfig);\n this.changeRootNode(this.rootNode);\n this.changeConfig(new SimpleChange({}, this.config, false));\n });\n }\n\n async reset() {\n this.ngOnDestroy();\n await this.ngAfterViewInit();\n }\n\n reload() {\n this.reloadTrigger$.next(true);\n }\n\n cancelReload() {\n this.reloadTrigger$.next(false);\n }\n\n listenToClusterAndIntervalChanges() {\n const timerStart$ = new Subject();\n const timerEnd$ = new Subject();\n\n const documentHiddenEvent$ = fromEvent<boolean>(document, 'visibilitychange').pipe(\n takeUntil(this.unsubscribeTrigger$)\n );\n\n const interval$ = timerStart$.pipe(\n map(() => this.config.refreshInterval),\n switchMap(configInterval => {\n if (!configInterval) {\n return NEVER;\n }\n return interval(1000).pipe(\n map(value => value * 1000),\n tap(value => this.msUntilRefresh$.next(configInterval - value)),\n filter(value => value >= this.MIN_INTERVAL && value >= configInterval),\n first(),\n takeUntil(timerEnd$)\n );\n }),\n switchMap(() => (document.hidden ? documentHiddenEvent$ : of(true))),\n takeUntil(this.unsubscribeTrigger$)\n );\n\n const mapChange$ = this.getMapChangeObservable();\n\n merge(this.reloadTrigger$, mapChange$, interval$)\n .pipe(\n tap(() => {\n timerEnd$.next(true);\n this.msUntilRefresh$.next(0);\n this.isLoading$.next(true);\n }),\n switchMap(value =>\n value === false\n ? of([])\n : from(this.mapService.getClusterSize(this.map.getBounds())).pipe(\n mergeMap((clusterSize: ClusterSize) =>\n this.getClusterRects(clusterSize, this.map.getBounds())\n ),\n mergeMap(rects => this.createOrUpdateCluster(rects))\n )\n ),\n takeUntil(this.unsubscribeTrigger$)\n )\n .subscribe((clusters: ClusterMap[]) => {\n clusters.forEach(cluster => cluster.render(this.map));\n\n this.isLoading$.next(false);\n timerStart$.next();\n this.msUntilRefresh$.next(this.config.refreshInterval);\n });\n }\n\n listenToClusterMapChanges() {\n this.getMapChangeObservable().subscribe();\n }\n\n refreshMarkers() {\n if (this.assets) {\n super.refreshMarkers();\n return;\n }\n this.clusters.forEach(cluster => {\n cluster.clear(this.map);\n });\n this.reload();\n }\n\n private changeRootNode(mo: IManagedObject) {\n this.unsubscribeAllListeners();\n this.clearMarkers();\n this.clearClusters();\n\n const isPositionDevice = mo?.c8y_Position && mo?.c8y_IsDevice;\n if (isPositionDevice) {\n this.assets = mo as PositionManagedObject;\n this.refreshMarkers();\n this.listenToClusterMapChanges();\n } else {\n this.assets = null;\n this.listenToClusterAndIntervalChanges();\n this.reload();\n }\n }\n\n private async getClusterRects(\n levelThreshold: ClusterSize = ClusterSize.FOUR,\n viewBounds: L.LatLngBounds,\n level = 0\n ): Promise<L.Rectangle[]> {\n let rects = [];\n\n if (levelThreshold === ClusterSize.NONE) {\n const rect = await this.getRect(viewBounds);\n rects.push(rect);\n return rects;\n }\n\n if (level >= levelThreshold) {\n return rects;\n }\n level++;\n\n const { lat: x1, lng: y1 } = viewBounds.getSouthWest();\n const { lat: x2, lng: y2 } = viewBounds.getNorthEast();\n const newX2 = (x1 + x2) / 2;\n const newY2 = (y1 + y2) / 2;\n\n const bounds: [[number, number], [number, number]][] = [\n [\n [x1, y1],\n [newX2, newY2]\n ],\n [\n [newX2, newY2],\n [x2, y2]\n ],\n [\n [x1, newY2],\n [newX2, y2]\n ],\n [\n [newX2, y1],\n [x2, newY2]\n ]\n ];\n for (const bound of bounds) {\n const latLngBound = this.leaflet.latLngBounds(bound);\n const rect = await this.getRect(latLngBound);\n rects = [...rects, ...(await this.getClusterRects(levelThreshold, latLngBound, level))];\n\n if (level === levelThreshold) {\n rects.push(rect);\n }\n }\n\n return rects;\n }\n\n private async getRect(latLngBound: L.LatLngBounds) {\n let color = 'none';\n if (this.showClusterColor) {\n color = await this.colorService.generateColor(latLngBound.toBBoxString());\n }\n const rect = this.leaflet.rectangle(latLngBound, {\n color,\n weight: color === 'none' ? 0 : 1,\n interactive: false\n });\n return rect;\n }\n\n private clearClusters() {\n this.clusters.forEach(cluster => {\n cluster.clear(this.map);\n });\n this.clusters = [];\n }\n\n private async updateCluster(cluster: ClusterMap) {\n const clusterCount = await this.mapService.getPositionMOsFromBoundCount(\n cluster.rect.getBounds(),\n this.rootNode\n );\n if (clusterCount > this.mapService.MAX_DEVICE_PER_CLUSTER) {\n cluster.setClusterToBigMarker(this.map, clusterCount, this.leaflet);\n cluster.positions = [];\n return cluster;\n }\n\n cluster.removeClusterToBigMarker();\n cluster.positions = await this.mapService.getPositionMOsFromBound(\n cluster.rect.getBounds(),\n this.rootNode\n );\n return cluster;\n }\n\n private createOrUpdateCluster(rects: L.Rectangle<unknown>[]) {\n const isNew = rects.length !== this.clusters.length;\n if (isNew) {\n this.clearClusters();\n }\n const updatePromise = rects.map((rect, index) => {\n if (isNew) {\n const cluster = new ClusterMap(\n this.iterable,\n asset => this.getAssetMarker(asset),\n this.translateService\n );\n this.clusters.push(cluster);\n }\n this.clusters[index].rect = rect;\n return this.updateCluster(this.clusters[index]);\n });\n\n return Promise.all(updatePromise);\n }\n\n private getMapChangeObservable() {\n return merge(\n fromEvent<L.LeafletEvent>(this.map, 'move'),\n fromEvent<L.LeafletEvent>(this.map, 'moveend')\n ).pipe(\n debounceTime(this.EVENT_THROTTLE_TIME),\n tap(event => this.mapChange.emit(event)),\n takeUntil(this.unsubscribeTrigger$)\n );\n }\n}\n","<div class=\"c8y-map\">\n <div #map></div>\n</div>\n<ng-content></ng-content>\n","import { Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';\nimport { ClusterMapComponent } from './cluster-map.component';\nimport { ClusterMapConfig, MapStatusButtonsConfig } from './map.model';\nimport { map, takeUntil } from 'rxjs/operators';\nimport { Observable, Subject } from 'rxjs';\nimport { cloneDeep } from 'lodash-es';\n@Component({\n selector: 'c8y-map-status',\n templateUrl: './map-status.component.html'\n})\nexport class MapStatusComponent {\n @Input()\n config: ClusterMapConfig;\n\n @Output()\n configChange = new EventEmitter<ClusterMapConfig>();\n\n @Output()\n onUnfollow = new EventEmitter<ClusterMapConfig>();\n\n @Input()\n clusterMap: ClusterMapComponent;\n\n @Input() buttonsConfig: Partial<MapStatusButtonsConfig> = {};\n\n centerMapButtonDisabled = true;\n secondsUntilRefresh$: Observable<string>;\n initConfig: ClusterMapConfig;\n private destroy$ = new Subject();\n\n ngOnInit(): void {\n this.initConfig = cloneDeep(this.config);\n this.buttonsConfig = Object.assign(this.defaultButtonsConfig(), this.buttonsConfig);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.clusterMap?.previousValue !== changes.clusterMap?.currentValue) {\n this.checkIfMapIsAlreadyCentered();\n\n this.secondsUntilRefresh$ = this.clusterMap.msUntilRefresh$.pipe(\n map(milliseconds => `${Math.floor(milliseconds / 1000)}`),\n takeUntil(this.destroy$)\n );\n }\n }\n\n center() {\n this.clusterMap.center();\n }\n\n reload() {\n this.clusterMap.reload();\n }\n\n cancelReload() {\n this.clusterMap.cancelReload();\n }\n\n toggleRealtime() {\n this.config = {\n ...this.config,\n realtime: !this.config.realtime\n };\n this.configChange.emit(this.config);\n }\n\n unfollow() {\n this.config = {\n ...this.clusterMap.config,\n follow: false\n };\n this.configChange.emit(this.config);\n this.onUnfollow.emit(this.config);\n }\n\n follow() {\n this.config = {\n ...this.config,\n follow: true\n };\n this.configChange.emit(this.config);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n }\n\n private checkIfMapIsAlreadyCentered() {\n this.clusterMap.mapChange.pipe(takeUntil(this.destroy$)).subscribe((event: L.LeafletEvent) => {\n if (this.config?.center && event.sourceTarget?.getBounds) {\n const bounds: L.LatLngBounds = event.sourceTarget.getBounds();\n this.centerMapButtonDisabled = this.shouldDisableCenterButton(bounds);\n }\n });\n }\n\n /**\n * Checks if Center button should be disabled according to provided bounds.\n * Provided bounds contain coordinates of current map rectangle corners.\n * Center button should be disabled if distance between center coordinates (from config) and center of current bounds\n * is less than 1/4 of bounds dimensions.\n * To achieve it we just need to check if center coordinates (from config) are contained in the boundaries of\n * current bounds shrunk by 25%.\n * @param bounds Current map view boundaries.\n * @returns True if distance between config center and current boundaries center is bigger than 1/4 of boundaries dimensions\n */\n private shouldDisableCenterButton(bounds: L.LatLngBounds): boolean {\n const shrunkBounds = bounds.pad(-0.25);\n return shrunkBounds.contains(this.config.center);\n }\n\n private defaultButtonsConfig(): MapStatusButtonsConfig {\n return {\n realtime: { show: this.config.realtime || this.clusterMap.config.follow, disabled: false }\n };\n }\n}\n","<div class=\"c8y-map-status\">\n <div class=\"leaflet-touch\">\n <div\n class=\"leaflet-bar\"\n role=\"group\"\n >\n <button\n type=\"button\"\n title=\"{{ 'Realtime' | translate }}\"\n class=\"c8y-realtime\"\n *ngIf=\"buttonsConfig.realtime.show\"\n (click)=\"toggleRealtime()\"\n [disabled]=\"buttonsConfig.realtime.disabled\"\n >\n <span\n class=\"c8y-pulse\"\n [ngClass]=\"{\n active: clusterMap?.config.realtime,\n inactive: !clusterMap?.config.realtime\n }\"\n ></span>\n </button>\n <button\n type=\"button\"\n class=\"time-ellapsed\"\n *ngIf=\"\n clusterMap?.config.refreshInterval &&\n (secondsUntilRefresh$ | async) &&\n !clusterMap?.config.follow\n \"\n disabled=\"disabled\"\n title=\"{{ secondsUntilRefresh$ | async }}s / {{\n clusterMap?.config.refreshInterval / 1000\n }}s\"\n [style.--timescope]=\"clusterMap?.config.refreshInterval + 1000 + 'ms'\"\n >\n <svg\n [ngClass]=\"{ 'time-on': !(clusterMap?.isLoading$ | async) }\"\n viewBox=\"0 0 40 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"20\"\n cy=\"20\"\n r=\"15.8\"\n stroke=\"var(--c8y-brand-primary)\"\n stroke-width=\"6\"\n />\n </svg>\n\n <span>{{ secondsUntilRefresh$ | async }}</span>\n </button>\n <button\n type=\"button\"\n *ngIf=\"clusterMap?.isLoading$ | async\"\n title=\"{{ 'Cancel reload' | translate }}\"\n (click)=\"cancelReload()\"\n >\n <i\n c8yIcon=\"refresh\"\n class=\"icon-spin\"\n ></i>\n </button>\n <button\n type=\"button\"\n *ngIf=\"\n !clusterMap?.config.realtime && !clusterMap?.assets && !(clusterMap?.isLoading$ | async)\n \"\n (click)=\"reload()\"\n [title]=\"'Reload' | translate\"\n >\n <i c8yIcon=\"refresh\"></i>\n </button>\n <button\n type=\"button\"\n (click)=\"center()\"\n title=\"{{ 'Center map' | translate }}\"\n [disabled]=\"centerMapButtonDisabled || clusterMap?.config.follow\"\n >\n <i c8yIcon=\"target1\"></i>\n </button>\n <button\n type=\"button\"\n title=\"{{ 'Unfollow' | translate }}\"\n *ngIf=\"clusterMap?.config.follow\"\n (click)=\"unfollow()\"\n >\n <i c8yIcon=\"marker-off\"></i>\n </button>\n\n <button\n type=\"button\"\n title=\"{{ 'Follow' | translate }}\"\n *ngIf=\"initConfig.follow && !clusterMap?.config.follow\"\n (click)=\"follow()\"\n >\n <i c8yIcon=\"marker\"></i>\n </button>\n </div>\n </div>\n</div>\n","import { CommonModule as NgCommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule as NgFormsModule } from '@angular/forms';\nimport { CommonModule, FormsModule, RealtimeModule } from '@c8y/ngx-components';\nimport { ClusterMapComponent } from './cluster-map.component';\nimport { MapPopupDirective } from './map-popup.directive';\nimport { MapStatusComponent } from './map-status.component';\nimport { MapComponent } from './map.component';\nimport { MAP_DEFAULT_CONFIG, MAP_TILE_LAYER } from './map.model';\nimport { MapService } from './map.service';\n\n@NgModule({\n declarations: [MapComponent, MapStatusComponent, ClusterMapComponent, MapPopupDirective],\n imports: [NgCommonModule, NgFormsModule, CommonModule, FormsModule, RealtimeModule],\n exports: [MapComponent, MapStatusComponent, ClusterMapComponent, MapPopupDirective],\n providers: [\n {\n provide: MAP_TILE_LAYER,\n useFactory: (mapService: MapService) => {\n return mapService.getDefaultLayers();\n },\n deps: [MapService]\n },\n {\n provide: MAP_DEFAULT_CONFIG,\n useFactory: (mapService: MapService) => {\n return mapService.getDefaultConfig();\n },\n deps: [MapService]\n }\n ]\n})\nexport class MapModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i2.MapService","NgCommonModule","NgFormsModule","CommonModule","FormsModule"],"mappings":"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"}
1
+ {"version":3,"file":"c8y-ngx-components-map.mjs","sources":["../../map/map.model.ts","../../map/map.service.ts","../../map/cluster-map.ts","../../map/map-popup.directive.ts","../../map/map.component.ts","../../map/map.component.html","../../map/cluster-map.component.ts","../../map/cluster-map.component.html","../../map/map-status.component.ts","../../map/map-status.component.html","../../map/map.module.ts","../../map/c8y-ngx-components-map.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { MapTileLayer, MapDefaultConfig } from '@c8y/ngx-components';\nimport { Observable } from 'rxjs';\nimport type * as L from 'leaflet';\n\nexport function getC8yMarker(marker: L.Marker, asset: PositionManagedObject) {\n (marker as C8yMarker).asset = asset;\n return marker as C8yMarker;\n}\n\nexport const MAP_TILE_LAYER = new InjectionToken<Observable<MapTileLayer[]>>('MAP_TILE_LAYER');\n\nexport type C8yMarker = L.Marker & { asset: PositionManagedObject };\n\nexport enum ClusterSize {\n NONE = 0,\n FOUR = 1,\n SIXTEEN = 2\n}\n\nexport enum MapTenantOptionKeys {\n CONFIG = 'map-config',\n LAYERS = 'map-layers'\n}\n\nexport interface PositionManagedObject extends IManagedObject {\n c8y_Position: {\n lat: number;\n lng: number;\n alt?: number;\n };\n\n c8y_ActiveAlarmsStatus?: {\n minor: number;\n major: number;\n warning: number;\n critical: number;\n };\n\n icon?: {\n name: string;\n };\n}\n\nexport interface ClusterMapConfig extends MapConfig {\n center: [number, number];\n refreshInterval?: number;\n}\n\nexport interface MapConfig extends MapDefaultConfig {\n follow?: boolean;\n realtime?: boolean;\n icon?: string;\n color?: string;\n disableZoom?: boolean;\n disablePan?: boolean;\n}\n\nexport const MAP_DEFAULT_CONFIG = new InjectionToken<Observable<MapDefaultConfig>>(\n 'MAP_DEFAULT_CONFIG'\n);\n\nexport const defaultLayer: MapTileLayer = {\n layerUrl: 'https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png',\n label: 'OpenStreetMap',\n priority: 1000,\n options: {\n maxZoom: 18,\n minZoom: 2,\n attribution:\n '&copy;<a href=\"http://www.openstreetmap.org/copyright\" rel=\"noreferrer nofollow\">OpenStreetMap</a>',\n noWrap: true\n }\n};\n\nexport const defaultMapConfig: MapDefaultConfig = {\n center: [51.23544, 6.79599], // Düsseldorf\n zoomLevel: 2\n};\n\nexport type MapStatusButtonsConfig = Record<'realtime', { show: boolean; disabled?: boolean }>;\n","import { Injectable } from '@angular/core';\nimport { IManagedObject, InventoryService, IResultList, Paging } from '@c8y/client';\nimport type * as L from 'leaflet';\nimport { from, Observable } from 'rxjs';\nimport {\n ClusterSize,\n defaultLayer,\n defaultMapConfig,\n MapTenantOptionKeys,\n PositionManagedObject\n} from './map.model';\nimport { OptionsService, MapTileLayer, MapDefaultConfig } from '@c8y/ngx-components';\nimport { map } from 'rxjs/operators';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class MapService {\n /**\n * Returns asset icon status for highest alarm severity found in device object.\n * @param device Device that contains alarms information.\n * @returns Status string according to alarm severity\n */\n static getStatus(device: PositionManagedObject) {\n if (!device.c8y_ActiveAlarmsStatus) {\n return 'text-muted';\n }\n if (device.c8y_ActiveAlarmsStatus.critical) {\n return 'status critical';\n }\n if (device.c8y_ActiveAlarmsStatus.major) {\n return 'status major';\n }\n if (device.c8y_ActiveAlarmsStatus.minor) {\n return 'status minor';\n }\n if (device.c8y_ActiveAlarmsStatus.warning) {\n return 'status warning';\n }\n return 'text-muted';\n }\n /**\n * The devices that are maximal displayed in one cluster.\n */\n MAX_DEVICE_PER_CLUSTER = 200;\n /**\n * The count until the cluster is sized. There are a maximum of\n * three clusters: 1, 4 or 16.\n */\n CLUSTER_LEVEL_THRESHOLD = 500;\n\n /**\n * @ignore: Only DI.\n */\n constructor(\n private inventory: InventoryService,\n private options: OptionsService\n ) {}\n\n /**\n * Returns the leaflet instance used by the cumulocity core.\n */\n async getLeaflet() {\n const c8yLeafletInstance = (await import('leaflet')).default;\n return c8yLeafletInstance;\n }\n\n /**\n * Verifies if a given managed object is a device with a position fragment.\n * @param mo The given managed object.\n */\n isPositionedDevice(mo: IManagedObject) {\n return !!(mo?.c8y_IsDevice && this.hasPosition(mo));\n }\n\n /**\n * Verifies if a given managed object has a position fragment.\n * @param mo The given managed object.\n */\n hasPosition(mo: IManagedObject) {\n return mo?.c8y_Position;\n }\n\n /**\n * Returns the layers configured in the current platform via tenant options.\n * @returns The layers. If not set in tenant options the default layers.\n */\n getDefaultLayers(): Observable<MapTileLayer[]> {\n return this.getMapOption<MapTileLayer[]>(\n MapTenantOptionKeys.LAYERS,\n this.options.mapLayers || [defaultLayer]\n );\n }\n\n /**\n * Returns the map configuration configured on the tenant.\n * @returns The configuration. If not set in tenant options the default configuration.\n */\n getDefaultConfig(): Observable<MapDefaultConfig> {\n return this.getMapOption<MapDefaultConfig>(\n MapTenantOptionKeys.CONFIG,\n this.options.mapConfig || defaultMapConfig\n );\n }\n\n /**\n * Counts all managed objects in a given bound with a c8y_Position fragment.\n * @param bound The lat lng bound to request the managed objects for.\n * @param byGroupIdMO The group managed object of which direct children should be searched for.\n * @returns The number of all position managed objects in the given bound (and group).\n */\n async getPositionMOsFromBoundCount(\n bound: L.LatLngBounds,\n byGroupIdMO?: IManagedObject\n ): Promise<number> {\n return this.getPositionMOsFromBound(bound, byGroupIdMO, true) as Promise<number>;\n }\n\n /**\n * Returns all managed objects with a c8y_Position fragment in a certain boundary.\n * @param bound The lat lng bound to request the managed objects for.\n * @returns All position managed objects in the given bound.\n */\n async getPositionMOsFromBound(bound: L.LatLngBounds): Promise<PositionManagedObject[]>;\n /**\n * Returns all managed objects with a c8y_Position fragment in a certain boundary that belongs to a certain group.\n * @param bound The lat lng bound to request the managed objects for.\n * @param byGroupIdMO The group managed object of which direct children should be searched for.\n * @returns All position managed objects in the given bound that are children of the given group.\n */\n async getPositionMOsFromBound(\n bound: L.LatLngBounds,\n byGroupIdMO: IManagedObject\n ): Promise<PositionManagedObject[]>;\n /**\n * Counts the managed objects in a certain boundary belonging to a group.\n * @param bound The lat lng bound to request the managed objects for.\n * @param byGroupIdMO The group managed object of which direct children should be searched for.\n * @return The count of the managed objects.\n */\n async getPositionMOsFromBound(\n bound: L.LatLngBounds,\n byGroupIdMO: IManagedObject,\n count: true\n ): Promise<number>;\n async getPositionMOsFromBound(\n bound: L.LatLngBounds,\n byGroupIdMO?: IManagedObject,\n count = false\n ): Promise<PositionManagedObject[] | number> {\n const { lat: latMin, lng: lngMin } = bound.getSouthWest();\n const { lat: latMax, lng: lngMax } = bound.getNorthEast();\n const byGroupIdFilter = byGroupIdMO\n ? `(bygroupid(${byGroupIdMO.id}) or id eq '${byGroupIdMO.id}') and `\n : '';\n const boundFilter = `$filter=${byGroupIdFilter}has(c8y_Position) and c8y_Position.lng gt ${lngMin}d and c8y_Position.lat gt ${latMin}d and c8y_Position.lng lt ${lngMax}d and c8y_Position.lat lt ${latMax}d`;\n const { paging, data } = await this.inventory.list({\n pageSize: count ? 1 : this.MAX_DEVICE_PER_CLUSTER,\n withTotalPages: count,\n query: boundFilter\n });\n if (count) {\n return paging.totalPages;\n }\n return data as PositionManagedObject[];\n }\n\n /**\n * Returns all devices with c8y_Position.\n */\n async getPositionDevices(): Promise<PositionManagedObject[]>;\n /**\n * Returns all devices with c8y_Position.\n * @param pageSize The page size to return.\n */\n async getPositionDevices(pageSize: number): Promise<PositionManagedObject[]>;\n /**\n * Returns all devices with c8y_Position.\n * @param pageSize The page size to return.\n * @param count Counting is disabled\n */\n async getPositionDevices(pageSize: number, count: false): Promise<PositionManagedObject[]>;\n /**\n * Returns the number of all devices with c8y_Position.\n * @param pageSize The page size to return.\n * @param count Counting is enabled\n */\n async getPositionDevices(pageSize: number, count: true): Promise<number>;\n /**\n * Returns all devices with c8y_Position.\n * @param pageSize The page size to return.\n * @param count Switches to counting only.\n * @returns All devices or the device count with a c8y_Position fragment.\n */\n async getPositionDevices(\n pageSize = this.MAX_DEVICE_PER_CLUSTER,\n count?: boolean\n ): Promise<number | PositionManagedObject[]> {\n const { paging, data } = await this.inventory.list({\n pageSize: count ? 1 : pageSize,\n withTotalPages: !!count,\n query: '$filter=has(c8y_Position) and has(c8y_IsDevice)'\n });\n if (count) {\n return paging.totalPages;\n }\n return data as PositionManagedObject[];\n }\n\n /**\n * Returns all managed object with a c8y_Position fragment.\n * @param byGroupIdMO The group managed object of which direct children should be searched for.\n * @param pageSize Defines how many results should be returned.\n * @returns The managed objects with position.\n */\n async getAllPositionMOs(\n byGroupIdMO?: IManagedObject,\n pageSize = 500\n ): Promise<IResultList<PositionManagedObject>> {\n const filter: { pageSize: number; withTotalPages: boolean; query: string } = {\n pageSize,\n withTotalPages: true,\n query: 'has(c8y_Position)'\n };\n\n if (byGroupIdMO) {\n filter.query = `$filter=(bygroupid(${byGroupIdMO.id}) or id eq '${byGroupIdMO.id}') and has(c8y_Position)`;\n }\n\n const { paging, data, res } = await this.inventory.list(filter);\n\n return {\n res,\n paging: paging as Paging<PositionManagedObject>,\n data: data as PositionManagedObject[]\n };\n }\n\n /**\n * Returns the cluster size for clustered maps. Counting the position MOs in a bounding\n * and if it reach a threshold, returning a [[ClusterSize]].\n * @param bound The bounding to check for cluster size.\n * @returns The cluster size, can be NONE, FOUR or SIXTEEN.\n */\n async getClusterSize(bound: L.LatLngBounds) {\n const count = await this.getPositionMOsFromBoundCount(bound);\n let clusterSize = ClusterSize.NONE;\n if (count > this.CLUSTER_LEVEL_THRESHOLD) {\n clusterSize = ClusterSize.SIXTEEN;\n } else if (count > this.MAX_DEVICE_PER_CLUSTER) {\n clusterSize = ClusterSize.FOUR;\n }\n return clusterSize;\n }\n\n private getMapOption<T>(key: MapTenantOptionKeys, defaultValue: T) {\n return from(this.options.getTenantOption<T | string>('configuration', key, defaultValue)).pipe(\n map(config => {\n if (typeof config === 'string') {\n console.error(\n `The tenant option for maps 'configuration.${key}' is not a valid JSON structure.`\n );\n return defaultValue;\n }\n return config;\n })\n );\n }\n}\n","import { IterableChangeRecord, IterableDiffer, IterableDiffers } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport type * as L from 'leaflet';\nimport { gettext } from '@c8y/ngx-components';\nimport { C8yMarker, PositionManagedObject } from './map.model';\nimport { MapService } from './map.service';\n\nexport class ClusterMap {\n markers: C8yMarker[] = [];\n positions: PositionManagedObject[] = [];\n\n set clusterMarker(item: L.Layer) {\n this.removeClusterToBigMarker();\n this._clusterMarker = item;\n }\n\n get clusterMarker() {\n return this._clusterMarker;\n }\n\n set rect(item: L.Rectangle) {\n if (this._rect) {\n this._rect.remove();\n }\n this._rect = item;\n }\n\n get rect() {\n return this._rect;\n }\n\n private _clusterMarker: L.Layer;\n private _rect: L.Rectangle;\n private iterableDiffer: IterableDiffer<PositionManagedObject> | null;\n\n constructor(\n private iterable: IterableDiffers,\n private addAssetCallback: (asset: PositionManagedObject) => C8yMarker,\n private translateService: TranslateService\n ) {\n this.iterableDiffer = this.iterable.find(this.positions).create(this.trackBy);\n }\n\n render(map: L.Map) {\n if (this._rect) {\n this._rect.addTo(map);\n }\n this.updateChanges(map);\n if (this._clusterMarker) {\n this._clusterMarker.addTo(map);\n }\n }\n\n clear(map: L.Map) {\n this.removeClusterToBigMarker();\n this._rect.remove();\n this.positions = [];\n this.updateChanges(map);\n }\n\n removeClusterToBigMarker() {\n if (this._clusterMarker) {\n this._clusterMarker.remove();\n this._clusterMarker = null;\n }\n }\n\n addMarkerToMap(device: PositionManagedObject, map: L.Map) {\n const marker = this.addAssetCallback(device);\n this.markers.push(marker);\n marker.addTo(map);\n }\n\n setClusterToBigMarker(map: L.Map, count, leaflet: typeof L) {\n const bound = this.rect.getBounds();\n const text = this.translateService.instant(gettext('Zoom in'));\n const divMarker = leaflet.divIcon({\n html: `<div class=\"c8y-map-marker-count\" data-count=\"${count}\" title=\"${text}\"></div>`\n });\n const labelIcon = leaflet.marker(bound.getCenter(), {\n icon: divMarker\n });\n labelIcon.addTo(map);\n labelIcon.on('click', () => {\n map.fitBounds(bound);\n });\n this.clusterMarker = labelIcon;\n }\n\n private updateChanges(map: L.Map) {\n const changes = this.iterableDiffer.diff(this.positions);\n if (changes) {\n changes.forEachRemovedItem((record: IterableChangeRecord<PositionManagedObject>) => {\n this.removeMarkerFromMap(record.item);\n });\n\n changes.forEachAddedItem((record: IterableChangeRecord<PositionManagedObject>) => {\n this.addMarkerToMap(record.item, map);\n });\n }\n }\n\n private trackBy(index: number, item: PositionManagedObject) {\n const trackItems = [\n item.id,\n item.c8y_Position.lat,\n item.c8y_Position.lng,\n MapService.getStatus(item)\n ];\n return trackItems.join('');\n }\n\n private removeMarkerFromMap(device: PositionManagedObject) {\n const markers = this.markers.filter((marker: C8yMarker) => marker.asset?.id === device.id);\n markers.forEach(marker => marker.remove());\n }\n}\n","import { Directive, ElementRef, TemplateRef, ViewContainerRef } from '@angular/core';\n\n@Directive({\n selector: '[c8yMapPopup]'\n})\nexport class MapPopupDirective {\n constructor(\n public template: TemplateRef<unknown>,\n public elementRef: ElementRef,\n public viewContainer: ViewContainerRef\n ) {}\n}\n","import {\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Inject,\n Input,\n Output,\n SimpleChange,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport {\n ManagedObjectRealtimeService,\n MapTileLayer,\n gettext,\n sortByPriority,\n MapDefaultConfig\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport type * as L from 'leaflet';\nimport { flatten, isUndefined } from 'lodash-es';\nimport { Observable, Subject, Subscription, combineLatest, fromEvent } from 'rxjs';\nimport { first, takeUntil } from 'rxjs/operators';\nimport { MapPopupDirective } from './map-popup.directive';\nimport {\n C8yMarker,\n MAP_DEFAULT_CONFIG,\n MAP_TILE_LAYER,\n MapConfig,\n PositionManagedObject,\n getC8yMarker\n} from './map.model';\nimport { MapService } from './map.service';\n\n@Component({\n selector: 'c8y-map',\n templateUrl: './map.component.html',\n providers: [ManagedObjectRealtimeService]\n})\nexport class MapComponent {\n /**\n * The leaflet map object.\n */\n map: L.Map;\n /**\n * The markers placed on the map.\n */\n markers: Array<C8yMarker | L.Marker> = [];\n /**\n * The leaflet representation used.\n */\n leaflet: typeof L;\n /**\n * Tells if the map was already initialized.\n */\n isInit = false;\n\n @ViewChild('map')\n mapElement: ElementRef;\n\n @ContentChild(MapPopupDirective)\n popup: MapPopupDirective;\n\n @Input()\n config: MapConfig = {};\n\n @Input()\n assets: PositionManagedObject | PositionManagedObject[];\n\n @Output()\n onMove = new EventEmitter<L.LeafletEvent>();\n\n @Output()\n onMoveEnd = new EventEmitter<L.LeafletEvent>();\n\n @Output()\n onZoomStart = new EventEmitter<L.LeafletEvent>();\n\n @Output()\n onZoomEnd = new EventEmitter<L.LeafletEvent>();\n\n @Output()\n onRealtimeUpdate = new EventEmitter<PositionManagedObject>();\n\n @Output()\n onInit = new EventEmitter<typeof L>();\n\n protected realtimeSubscription: Subscription;\n protected unsubscribeTrigger$ = new Subject<void>();\n\n constructor(\n protected moRealtimeService: ManagedObjectRealtimeService,\n protected mapService: MapService,\n @Inject(MAP_TILE_LAYER) protected layers$: Observable<MapTileLayer[]>,\n @Inject(MAP_DEFAULT_CONFIG)\n protected defaultConfig$: Observable<MapDefaultConfig>,\n protected translateService: TranslateService\n ) {}\n\n startRealtime() {\n if (!this.assets || (Array.isArray(this.assets) && this.assets.length > 1)) {\n this.config.realtime = false;\n this.stopRealtime();\n return;\n }\n const asset = Array.isArray(this.assets) ? this.assets[0] : this.assets;\n this.realtimeSubscription = this.moRealtimeService\n .onUpdate$(asset)\n .subscribe((asset: PositionManagedObject) => {\n const marker = this.findMarker(asset.id);\n const icon = this.getAssetIcon(asset);\n marker.setIcon(icon);\n marker.setLatLng([asset.c8y_Position.lat, asset.c8y_Position.lng]);\n if (Array.isArray(this.assets)) {\n this.assets[0] = asset;\n } else {\n this.assets = asset;\n }\n this.moveToPositionOfMo(asset);\n this.onRealtimeUpdate.emit(asset);\n });\n }\n\n moveToPositionOfMo(positions: PositionManagedObject | PositionManagedObject[]) {\n const position = Array.isArray(positions) ? positions[0] : positions;\n if (this.config.follow) {\n this.map.setView([position.c8y_Position.lat, position.c8y_Position.lng]);\n }\n }\n\n stopRealtime() {\n if (this.realtimeSubscription) {\n this.realtimeSubscription.unsubscribe();\n }\n }\n\n findMarker(assetId) {\n return this.markers.find((marker: C8yMarker) => marker.asset?.id === assetId);\n }\n\n addMarkerToMap(marker: C8yMarker | L.Marker) {\n this.markers.push(marker);\n marker.addTo(this.map);\n }\n\n getAssetMarker(asset: PositionManagedObject) {\n if (!asset) {\n return;\n }\n\n const icon = this.getAssetIcon(asset);\n const leafletMarker = this.leaflet.marker([asset.c8y_Position.lat, asset.c8y_Position.lng], {\n icon\n });\n const marker = getC8yMarker(leafletMarker, asset);\n\n if (this.popup) {\n marker.on('click', () => {\n this.popup.viewContainer.clear();\n const view = this.popup.viewContainer.createEmbeddedView(this.popup.template, {\n $implicit: asset\n });\n view.detectChanges();\n marker\n .unbindPopup()\n .bindPopup(this.popup.elementRef.nativeElement.previousSibling, {\n offset: [0, -30],\n maxWidth: 140,\n autoPan: false\n })\n .openPopup();\n });\n }\n\n return marker;\n }\n\n getAssetIcon(asset: PositionManagedObject) {\n const assetTypeIcon = this.config.icon || asset.icon?.name;\n const status = MapService.getStatus(asset);\n const color = this.config.color ? `style='color: ${this.config.color};'` : '';\n const icon = this.leaflet.divIcon({\n html: `<div class=\"dlt-c8y-icon-marker icon-3x ${status}\" ${color}><i class=\"dlt-c8y-icon-${\n assetTypeIcon || 'data-transfer'\n }\" /></div>`,\n className: 'c8y-map-marker-icon',\n // iconAnchor is used to set the marker accurately on click\n iconAnchor: [8, 8]\n });\n return icon;\n }\n\n clearMarkers() {\n this.markers.forEach(marker => marker.remove());\n this.markers = [];\n }\n\n refreshMarkers() {\n this.clearMarkers();\n let assets: PositionManagedObject[] = [];\n if (!isUndefined(this.assets)) {\n assets = Array.isArray(this.assets) ? this.assets : [this.assets];\n }\n assets.forEach(asset => {\n const marker = this.getAssetMarker(asset);\n this.addMarkerToMap(marker);\n });\n if (!this.config.center) {\n this.zoomToBound(assets);\n }\n this.toggleControls();\n }\n\n center() {\n this.map?.setView(this.config.center);\n }\n\n refresh() {\n if (this.isInit) {\n this.refreshMarkers();\n }\n }\n\n protected async ngAfterViewInit() {\n this.leaflet = await this.mapService.getLeaflet();\n combineLatest([this.layers$, this.defaultConfig$])\n .pipe(first(), takeUntil(this.unsubscribeTrigger$))\n .subscribe(([layers, defaultConfig]) => {\n this.initMap(layers, defaultConfig);\n this.refreshMarkers();\n });\n }\n\n protected ngOnChanges(changes: SimpleChanges): void {\n if (changes.assets?.currentValue && !changes.assets?.firstChange) {\n this.refreshMarkers();\n }\n\n if (changes.config?.currentValue && !changes.config?.firstChange) {\n this.changeConfig(changes.config);\n }\n }\n\n protected ngOnDestroy(): void {\n this.unsubscribeAllListeners();\n }\n\n protected unsubscribeAllListeners() {\n this.unsubscribeTrigger$.next();\n this.stopRealtime();\n }\n\n protected initMap(layers: MapTileLayer[], defaultConfig: MapConfig): void {\n const defaultOptions = {\n center: this.config.center || defaultConfig.center,\n zoomSnap: 0,\n zoom: this.config.zoomLevel || defaultConfig.zoomLevel\n };\n\n if (this.map) {\n this.map.remove();\n }\n this.map = this.leaflet.map(this.mapElement.nativeElement, defaultOptions);\n\n this.map.attributionControl.setPrefix('');\n\n this.addLayers(layers);\n\n this.handleMobile();\n\n fromEvent<L.LeafletEvent>(this.map, 'moveend')\n .pipe(takeUntil(this.unsubscribeTrigger$))\n .subscribe(event => this.onMoveEnd.emit(event));\n\n fromEvent<L.LeafletEvent>(this.map, 'move')\n .pipe(takeUntil(this.unsubscribeTrigger$))\n .subscribe(event => this.onMove.emit(event));\n\n fromEvent<L.LeafletEvent>(this.map, 'zoomend')\n .pipe(takeUntil(this.unsubscribeTrigger$))\n .subscribe(event => this.onZoomEnd.emit(event));\n\n fromEvent<L.LeafletEvent>(this.map, 'zoomstart')\n .pipe(takeUntil(this.unsubscribeTrigger$))\n .subscribe(event => this.onZoomStart.emit(event));\n\n this.isInit = true;\n this.onInit.emit(this.leaflet);\n }\n\n protected handleMobile() {\n // adding event listener to do mobile 2 finger scrolling\n if (this.leaflet.Browser.mobile) {\n const touchMsg = this.translateService.instant(gettext('Use two fingers to move the map.'));\n this.map.dragging.disable();\n const container = this.map.getContainer();\n container.setAttribute('data-touch-warning-content', touchMsg);\n container.addEventListener('touchstart', event => this.handleTouch(event));\n container.addEventListener('touchmove', event => this.handleTouch(event));\n container.addEventListener('touchend', event => this.handleTouch(event));\n container.addEventListener('touchcancel', event => this.handleTouch(event));\n container.addEventListener('click', event => this.handleTouch(event));\n }\n }\n\n protected addLayers(layers: MapTileLayer[]) {\n const flattenLayers: MapTileLayer[] = flatten(layers);\n const tileLayers = sortByPriority(flattenLayers).reduce((acc, layer) => {\n const tiles = this.leaflet.tileLayer(layer.layerUrl, layer.options);\n tiles.addTo(this.map);\n acc = { [layer.label]: tiles, ...acc };\n return acc;\n }, {});\n if (flattenLayers.length > 1) {\n this.leaflet.control.layers(tileLayers, null, { position: 'bottomleft' }).addTo(this.map);\n }\n }\n\n protected changeConfig(change: SimpleChange) {\n if (this.hasChanged(change, 'zoomLevel')) {\n this.map.setZoom(this.config.zoomLevel);\n }\n\n if (this.hasChanged(change, 'center')) {\n this.map.setView(change.currentValue.center || this.config.center);\n }\n\n if (this.hasChanged(change, 'icon') || this.hasChanged(change, 'color')) {\n this.refreshMarkers();\n }\n\n if (this.hasChanged(change, 'realtime') && change.currentValue.realtime) {\n this.startRealtime();\n }\n\n if (change.currentValue.realtime === false) {\n this.stopRealtime();\n }\n\n if (this.hasChanged(change, 'follow')) {\n this.moveToPositionOfMo(this.assets);\n }\n\n if (this.hasChanged(change, 'disablePan') || this.hasChanged(change, 'disableZoom')) {\n this.toggleControls();\n }\n }\n\n protected hasChanged(change: SimpleChange, prop: keyof MapConfig) {\n return change.currentValue[prop] !== change.previousValue[prop];\n }\n\n protected toggleControls() {\n if (this.config.disableZoom) {\n this.map.removeControl(this.map.zoomControl);\n this.map.scrollWheelZoom.disable();\n } else {\n this.map.addControl(this.map.zoomControl);\n this.map.scrollWheelZoom.enable();\n }\n if (this.config.disablePan) {\n this.map.dragging.disable();\n } else {\n this.map.dragging.enable();\n }\n }\n\n private handleTouch(e: Event) {\n // Disregard touch events on the minimap if present\n const ignoreList = [\n 'leaflet-control-minimap',\n 'leaflet-interactive',\n 'leaflet-popup-content',\n 'leaflet-popup-content-wrapper',\n 'leaflet-popup-close-button',\n 'leaflet-control-zoom-in',\n 'leaflet-control-zoom-out'\n ];\n\n let ignoreElement = false;\n for (let i = 0; i < ignoreList.length; i++) {\n if (this.leaflet.DomUtil.hasClass(e.target as HTMLElement, ignoreList[i])) {\n ignoreElement = true;\n }\n }\n\n const container = this.map.getContainer();\n if (ignoreElement) {\n if (\n this.leaflet.DomUtil.hasClass(e.target as HTMLElement, 'leaflet-interactive') &&\n e.type === 'touchmove' &&\n (e as TouchEvent).touches.length === 1\n ) {\n this.leaflet.DomUtil.addClass(container, 'touch-warning');\n this.map.dragging.disable();\n } else {\n this.leaflet.DomUtil.removeClass(container, 'touch-warning');\n }\n return;\n }\n\n if (e.type !== 'touchmove' && e.type !== 'touchstart') {\n this.leaflet.DomUtil.removeClass(container, 'touch-warning');\n return;\n }\n if ((e as TouchEvent).touches.length === 1) {\n this.leaflet.DomUtil.addClass(container, 'touch-warning');\n this.map.dragging.disable();\n } else {\n this.map.dragging.enable();\n this.leaflet.DomUtil.removeClass(container, 'touch-warning');\n }\n }\n\n private zoomToBound(assets: PositionManagedObject[]) {\n const bounds: [number, number][] = assets.map(asset => [\n asset.c8y_Position.lat,\n asset.c8y_Position.lng\n ]);\n if (assets.length > 1) {\n this.map.flyToBounds(bounds, { animate: false });\n return;\n }\n this.map.flyTo(\n [assets[0].c8y_Position.lat, assets[0].c8y_Position.lng],\n this.map.options.zoom,\n {\n animate: false\n }\n );\n }\n}\n","<div class=\"c8y-map\">\n <div #map></div>\n</div>\n<ng-content></ng-content>\n","import {\n Component,\n EventEmitter,\n Inject,\n Input,\n IterableDiffers,\n Output,\n SimpleChange,\n SimpleChanges\n} from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport {\n ColorService,\n ManagedObjectRealtimeService,\n MapTileLayer,\n MapDefaultConfig\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport type * as L from 'leaflet';\nimport {\n BehaviorSubject,\n NEVER,\n Observable,\n Subject,\n combineLatest,\n from,\n fromEvent,\n interval,\n merge,\n of\n} from 'rxjs';\nimport {\n debounceTime,\n filter,\n first,\n map,\n mergeMap,\n switchMap,\n takeUntil,\n tap\n} from 'rxjs/operators';\nimport { ClusterMap } from './cluster-map';\nimport { MapComponent } from './map.component';\nimport {\n ClusterMapConfig,\n ClusterSize,\n MAP_DEFAULT_CONFIG,\n MAP_TILE_LAYER,\n PositionManagedObject\n} from './map.model';\nimport { MapService } from './map.service';\n\n@Component({\n selector: 'c8y-cluster-map',\n templateUrl: './cluster-map.component.html',\n providers: [ManagedObjectRealtimeService]\n})\nexport class ClusterMapComponent extends MapComponent {\n isLoading$ = new BehaviorSubject(false);\n msUntilRefresh$ = new BehaviorSubject(5000);\n\n @Input()\n config: ClusterMapConfig;\n\n @Input()\n rootNode: IManagedObject;\n\n @Input('asset')\n assets: PositionManagedObject;\n\n @Input()\n showClusterColor = false;\n\n @Output()\n mapChange = new EventEmitter<L.LeafletEvent>();\n\n private reloadTrigger$ = new BehaviorSubject(false);\n private clusters: ClusterMap[] = [];\n private readonly MIN_INTERVAL = 5000;\n private readonly EVENT_THROTTLE_TIME = 750;\n\n constructor(\n protected moRealtimeService: ManagedObjectRealtimeService,\n protected mapService: MapService,\n @Inject(MAP_TILE_LAYER) protected layers$: BehaviorSubject<MapTileLayer[]>,\n @Inject(MAP_DEFAULT_CONFIG)\n protected defaultConfig$: Observable<MapDefaultConfig>,\n protected translateService: TranslateService,\n private iterable: IterableDiffers,\n private colorService: ColorService\n ) {\n super(moRealtimeService, mapService, layers$, defaultConfig$, translateService);\n }\n\n async ngOnChanges(changes: SimpleChanges) {\n if (changes.config?.firstChange) {\n return;\n }\n\n if (changes.rootNode?.previousValue !== changes.rootNode?.currentValue) {\n this.changeRootNode(changes.rootNode.currentValue);\n }\n\n if (changes.config?.currentValue) {\n this.changeConfig(changes.config);\n }\n }\n\n changeConfig(change: SimpleChange) {\n // on following, cancel reload to avoid stale state\n if (change.currentValue.follow === true) {\n this.cancelReload();\n this.isLoading$.next(false);\n }\n\n if (change.currentValue.refreshInterval !== change.previousValue.refreshInterval) {\n this.reload();\n }\n super.changeConfig(change);\n }\n\n async ngAfterViewInit() {\n if (!this.leaflet) {\n this.leaflet = await this.mapService.getLeaflet();\n }\n combineLatest([this.layers$, this.defaultConfig$])\n .pipe(takeUntil(this.unsubscribeTrigger$))\n .subscribe(([layers, defaultConfig]) => {\n this.initMap(layers, defaultConfig);\n this.changeRootNode(this.rootNode);\n this.changeConfig(new SimpleChange({}, this.config, false));\n });\n }\n\n async reset() {\n this.ngOnDestroy();\n await this.ngAfterViewInit();\n }\n\n reload() {\n this.reloadTrigger$.next(true);\n }\n\n cancelReload() {\n this.reloadTrigger$.next(false);\n }\n\n listenToClusterAndIntervalChanges() {\n const timerStart$ = new Subject();\n const timerEnd$ = new Subject();\n\n const documentHiddenEvent$ = fromEvent<boolean>(document, 'visibilitychange').pipe(\n takeUntil(this.unsubscribeTrigger$)\n );\n\n const interval$ = timerStart$.pipe(\n map(() => this.config.refreshInterval),\n switchMap(configInterval => {\n if (!configInterval) {\n return NEVER;\n }\n return interval(1000).pipe(\n map(value => value * 1000),\n tap(value => this.msUntilRefresh$.next(configInterval - value)),\n filter(value => value >= this.MIN_INTERVAL && value >= configInterval),\n first(),\n takeUntil(timerEnd$)\n );\n }),\n switchMap(() => (document.hidden ? documentHiddenEvent$ : of(true))),\n takeUntil(this.unsubscribeTrigger$)\n );\n\n const mapChange$ = this.getMapChangeObservable();\n\n merge(this.reloadTrigger$, mapChange$, interval$)\n .pipe(\n tap(() => {\n timerEnd$.next(true);\n this.msUntilRefresh$.next(0);\n this.isLoading$.next(true);\n }),\n switchMap(value =>\n value === false\n ? of([])\n : from(this.mapService.getClusterSize(this.map.getBounds())).pipe(\n mergeMap((clusterSize: ClusterSize) =>\n this.getClusterRects(clusterSize, this.map.getBounds())\n ),\n mergeMap(rects => this.createOrUpdateCluster(rects))\n )\n ),\n takeUntil(this.unsubscribeTrigger$)\n )\n .subscribe((clusters: ClusterMap[]) => {\n clusters.forEach(cluster => cluster.render(this.map));\n\n this.isLoading$.next(false);\n timerStart$.next();\n this.msUntilRefresh$.next(this.config.refreshInterval);\n });\n }\n\n listenToClusterMapChanges() {\n this.getMapChangeObservable().subscribe();\n }\n\n refreshMarkers() {\n if (this.assets) {\n super.refreshMarkers();\n return;\n }\n this.clusters.forEach(cluster => {\n cluster.clear(this.map);\n });\n this.reload();\n }\n\n private changeRootNode(mo: IManagedObject) {\n this.unsubscribeAllListeners();\n this.clearMarkers();\n this.clearClusters();\n\n const isPositionDevice = mo?.c8y_Position && mo?.c8y_IsDevice;\n if (isPositionDevice) {\n this.assets = mo as PositionManagedObject;\n this.refreshMarkers();\n this.listenToClusterMapChanges();\n } else {\n this.assets = null;\n this.listenToClusterAndIntervalChanges();\n this.reload();\n }\n }\n\n private async getClusterRects(\n levelThreshold: ClusterSize = ClusterSize.FOUR,\n viewBounds: L.LatLngBounds,\n level = 0\n ): Promise<L.Rectangle[]> {\n let rects = [];\n\n if (levelThreshold === ClusterSize.NONE) {\n const rect = await this.getRect(viewBounds);\n rects.push(rect);\n return rects;\n }\n\n if (level >= levelThreshold) {\n return rects;\n }\n level++;\n\n const { lat: x1, lng: y1 } = viewBounds.getSouthWest();\n const { lat: x2, lng: y2 } = viewBounds.getNorthEast();\n const newX2 = (x1 + x2) / 2;\n const newY2 = (y1 + y2) / 2;\n\n const bounds: [[number, number], [number, number]][] = [\n [\n [x1, y1],\n [newX2, newY2]\n ],\n [\n [newX2, newY2],\n [x2, y2]\n ],\n [\n [x1, newY2],\n [newX2, y2]\n ],\n [\n [newX2, y1],\n [x2, newY2]\n ]\n ];\n for (const bound of bounds) {\n const latLngBound = this.leaflet.latLngBounds(bound);\n const rect = await this.getRect(latLngBound);\n rects = [...rects, ...(await this.getClusterRects(levelThreshold, latLngBound, level))];\n\n if (level === levelThreshold) {\n rects.push(rect);\n }\n }\n\n return rects;\n }\n\n private async getRect(latLngBound: L.LatLngBounds) {\n let color = 'none';\n if (this.showClusterColor) {\n color = await this.colorService.generateColor(latLngBound.toBBoxString());\n }\n const rect = this.leaflet.rectangle(latLngBound, {\n color,\n weight: color === 'none' ? 0 : 1,\n interactive: false\n });\n return rect;\n }\n\n private clearClusters() {\n this.clusters.forEach(cluster => {\n cluster.clear(this.map);\n });\n this.clusters = [];\n }\n\n private async updateCluster(cluster: ClusterMap) {\n const clusterCount = await this.mapService.getPositionMOsFromBoundCount(\n cluster.rect.getBounds(),\n this.rootNode\n );\n if (clusterCount > this.mapService.MAX_DEVICE_PER_CLUSTER) {\n cluster.setClusterToBigMarker(this.map, clusterCount, this.leaflet);\n cluster.positions = [];\n return cluster;\n }\n\n cluster.removeClusterToBigMarker();\n cluster.positions = await this.mapService.getPositionMOsFromBound(\n cluster.rect.getBounds(),\n this.rootNode\n );\n return cluster;\n }\n\n private createOrUpdateCluster(rects: L.Rectangle<unknown>[]) {\n const isNew = rects.length !== this.clusters.length;\n if (isNew) {\n this.clearClusters();\n }\n const updatePromise = rects.map((rect, index) => {\n if (isNew) {\n const cluster = new ClusterMap(\n this.iterable,\n asset => this.getAssetMarker(asset),\n this.translateService\n );\n this.clusters.push(cluster);\n }\n this.clusters[index].rect = rect;\n return this.updateCluster(this.clusters[index]);\n });\n\n return Promise.all(updatePromise);\n }\n\n private getMapChangeObservable() {\n return merge(\n fromEvent<L.LeafletEvent>(this.map, 'move'),\n fromEvent<L.LeafletEvent>(this.map, 'moveend')\n ).pipe(\n debounceTime(this.EVENT_THROTTLE_TIME),\n tap(event => this.mapChange.emit(event)),\n takeUntil(this.unsubscribeTrigger$)\n );\n }\n}\n","<div class=\"c8y-map\">\n <div #map></div>\n</div>\n<ng-content></ng-content>\n","import { Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';\nimport { ClusterMapComponent } from './cluster-map.component';\nimport { ClusterMapConfig, MapStatusButtonsConfig } from './map.model';\nimport { map, takeUntil } from 'rxjs/operators';\nimport { Observable, Subject } from 'rxjs';\nimport { cloneDeep } from 'lodash-es';\n@Component({\n selector: 'c8y-map-status',\n templateUrl: './map-status.component.html'\n})\nexport class MapStatusComponent {\n @Input()\n config: ClusterMapConfig;\n\n @Output()\n configChange = new EventEmitter<ClusterMapConfig>();\n\n @Output()\n onUnfollow = new EventEmitter<ClusterMapConfig>();\n\n @Input()\n clusterMap: ClusterMapComponent;\n\n @Input() buttonsConfig: Partial<MapStatusButtonsConfig> = {};\n\n centerMapButtonDisabled = true;\n secondsUntilRefresh$: Observable<string>;\n initConfig: ClusterMapConfig;\n private destroy$ = new Subject();\n\n ngOnInit(): void {\n this.initConfig = cloneDeep(this.config);\n this.buttonsConfig = Object.assign(this.defaultButtonsConfig(), this.buttonsConfig);\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.clusterMap?.previousValue !== changes.clusterMap?.currentValue) {\n this.checkIfMapIsAlreadyCentered();\n\n this.secondsUntilRefresh$ = this.clusterMap.msUntilRefresh$.pipe(\n map(milliseconds => `${Math.floor(milliseconds / 1000)}`),\n takeUntil(this.destroy$)\n );\n }\n }\n\n center() {\n this.clusterMap.center();\n }\n\n reload() {\n this.clusterMap.reload();\n }\n\n cancelReload() {\n this.clusterMap.cancelReload();\n }\n\n toggleRealtime() {\n this.config = {\n ...this.config,\n realtime: !this.config.realtime\n };\n this.configChange.emit(this.config);\n }\n\n unfollow() {\n this.config = {\n ...this.clusterMap.config,\n follow: false\n };\n this.configChange.emit(this.config);\n this.onUnfollow.emit(this.config);\n }\n\n follow() {\n this.config = {\n ...this.config,\n follow: true\n };\n this.configChange.emit(this.config);\n }\n\n ngOnDestroy(): void {\n this.destroy$.next();\n }\n\n private checkIfMapIsAlreadyCentered() {\n this.clusterMap.mapChange.pipe(takeUntil(this.destroy$)).subscribe((event: L.LeafletEvent) => {\n if (this.config?.center && event.sourceTarget?.getBounds) {\n const bounds: L.LatLngBounds = event.sourceTarget.getBounds();\n this.centerMapButtonDisabled = this.shouldDisableCenterButton(bounds);\n }\n });\n }\n\n /**\n * Checks if Center button should be disabled according to provided bounds.\n * Provided bounds contain coordinates of current map rectangle corners.\n * Center button should be disabled if distance between center coordinates (from config) and center of current bounds\n * is less than 1/4 of bounds dimensions.\n * To achieve it we just need to check if center coordinates (from config) are contained in the boundaries of\n * current bounds shrunk by 25%.\n * @param bounds Current map view boundaries.\n * @returns True if distance between config center and current boundaries center is bigger than 1/4 of boundaries dimensions\n */\n private shouldDisableCenterButton(bounds: L.LatLngBounds): boolean {\n const shrunkBounds = bounds.pad(-0.25);\n return shrunkBounds.contains(this.config.center);\n }\n\n private defaultButtonsConfig(): MapStatusButtonsConfig {\n return {\n realtime: { show: this.config.realtime || this.clusterMap.config.follow, disabled: false }\n };\n }\n}\n","<div class=\"c8y-map-status\">\n <div class=\"leaflet-touch\">\n <div\n class=\"leaflet-bar\"\n role=\"group\"\n >\n <button\n type=\"button\"\n title=\"{{ 'Realtime' | translate }}\"\n class=\"c8y-realtime\"\n *ngIf=\"buttonsConfig.realtime.show\"\n (click)=\"toggleRealtime()\"\n [disabled]=\"buttonsConfig.realtime.disabled\"\n >\n <span\n class=\"c8y-pulse\"\n [ngClass]=\"{\n active: clusterMap?.config.realtime,\n inactive: !clusterMap?.config.realtime\n }\"\n ></span>\n </button>\n <button\n type=\"button\"\n class=\"time-ellapsed\"\n *ngIf=\"\n clusterMap?.config.refreshInterval &&\n (secondsUntilRefresh$ | async) &&\n !clusterMap?.config.follow\n \"\n disabled=\"disabled\"\n title=\"{{ secondsUntilRefresh$ | async }}s / {{\n clusterMap?.config.refreshInterval / 1000\n }}s\"\n [style.--timescope]=\"clusterMap?.config.refreshInterval + 1000 + 'ms'\"\n >\n <svg\n [ngClass]=\"{ 'time-on': !(clusterMap?.isLoading$ | async) }\"\n viewBox=\"0 0 40 40\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n cx=\"20\"\n cy=\"20\"\n r=\"15.8\"\n stroke=\"var(--c8y-brand-primary)\"\n stroke-width=\"6\"\n />\n </svg>\n\n <span>{{ secondsUntilRefresh$ | async }}</span>\n </button>\n <button\n type=\"button\"\n *ngIf=\"clusterMap?.isLoading$ | async\"\n title=\"{{ 'Cancel reload' | translate }}\"\n (click)=\"cancelReload()\"\n >\n <i\n c8yIcon=\"refresh\"\n class=\"icon-spin\"\n ></i>\n </button>\n <button\n type=\"button\"\n *ngIf=\"\n !clusterMap?.config.realtime && !clusterMap?.assets && !(clusterMap?.isLoading$ | async)\n \"\n (click)=\"reload()\"\n [title]=\"'Reload' | translate\"\n >\n <i c8yIcon=\"refresh\"></i>\n </button>\n <button\n type=\"button\"\n (click)=\"center()\"\n title=\"{{ 'Center map' | translate }}\"\n [disabled]=\"centerMapButtonDisabled || clusterMap?.config.follow\"\n >\n <i c8yIcon=\"target1\"></i>\n </button>\n <button\n type=\"button\"\n title=\"{{ 'Unfollow' | translate }}\"\n *ngIf=\"clusterMap?.config.follow\"\n (click)=\"unfollow()\"\n >\n <i c8yIcon=\"marker-off\"></i>\n </button>\n\n <button\n type=\"button\"\n title=\"{{ 'Follow' | translate }}\"\n *ngIf=\"initConfig.follow && !clusterMap?.config.follow\"\n (click)=\"follow()\"\n >\n <i c8yIcon=\"marker\"></i>\n </button>\n </div>\n </div>\n</div>\n","import { CommonModule as NgCommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule as NgFormsModule } from '@angular/forms';\nimport { CommonModule, FormsModule, RealtimeModule } from '@c8y/ngx-components';\nimport { ClusterMapComponent } from './cluster-map.component';\nimport { MapPopupDirective } from './map-popup.directive';\nimport { MapStatusComponent } from './map-status.component';\nimport { MapComponent } from './map.component';\nimport { MAP_DEFAULT_CONFIG, MAP_TILE_LAYER } from './map.model';\nimport { MapService } from './map.service';\n\n@NgModule({\n declarations: [MapComponent, MapStatusComponent, ClusterMapComponent, MapPopupDirective],\n imports: [NgCommonModule, NgFormsModule, CommonModule, FormsModule, RealtimeModule],\n exports: [MapComponent, MapStatusComponent, ClusterMapComponent, MapPopupDirective],\n providers: [\n {\n provide: MAP_TILE_LAYER,\n useFactory: (mapService: MapService) => {\n return mapService.getDefaultLayers();\n },\n deps: [MapService]\n },\n {\n provide: MAP_DEFAULT_CONFIG,\n useFactory: (mapService: MapService) => {\n return mapService.getDefaultConfig();\n },\n deps: [MapService]\n }\n ]\n})\nexport class MapModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i1","i2.MapService","NgCommonModule","NgFormsModule","CommonModule","FormsModule"],"mappings":"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"}
@@ -911,6 +911,7 @@ class AssetLocationComponent {
911
911
  const properties = this.form.get('c8y_Position');
912
912
  properties === null || properties === void 0 ? void 0 : properties.get('lat').patchValue(event.latlng.lat);
913
913
  properties === null || properties === void 0 ? void 0 : properties.get('lng').patchValue(event.latlng.lng);
914
+ this.form.markAsDirty();
914
915
  }
915
916
  }
916
917
  /**