diff --git a/package-lock.json b/package-lock.json index 22bb4c480c..212dac0c80 100644 --- a/package-lock.json +++ b/package-lock.json @@ -20648,6 +20648,14 @@ "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" }, + "queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "requires": { + "inherits": "~2.0.3" + } + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", diff --git a/package.json b/package.json index c5cf209d4d..3e9e5a3f6b 100644 --- a/package.json +++ b/package.json @@ -56,6 +56,7 @@ "ol-popup": "^4.0.0", "passport-oauth2-middleware": "^1.0.3", "proj4": "^2.7.5", + "queue": "^6.0.2", "rxjs": "^6.6.7", "share-api-polyfill": "^1.0.21", "tslib": "^2.3.0", diff --git a/projects/hslayers/src/components/add-data/url/wms/add-data-url-wms.service.ts b/projects/hslayers/src/components/add-data/url/wms/add-data-url-wms.service.ts index aa80c716cf..0010fa465c 100644 --- a/projects/hslayers/src/components/add-data/url/wms/add-data-url-wms.service.ts +++ b/projects/hslayers/src/components/add-data/url/wms/add-data-url-wms.service.ts @@ -56,6 +56,7 @@ export class HsAddDataUrlWmsService { registerMetadata: true, tileSize: 512, addUnder: null, + visible: true, }; this.hsEventBusService.olMapLoads.subscribe(() => { @@ -341,7 +342,7 @@ export class HsAddDataUrlWmsService { if (this.data.services === undefined) { return; } - + this.setAddedLayerVisibility(); if (this.data.base) { this.addLayer( { @@ -364,7 +365,6 @@ export class HsAddDataUrlWmsService { this.data.base = false; this.hsLayoutService.setMainPanel('layermanager'); } - createBasemapName(services): string { const names = []; for (const layer of services.filter((layer) => layer.checked)) { @@ -373,6 +373,16 @@ export class HsAddDataUrlWmsService { return names.join(','); } + setAddedLayerVisibility(): void { + const selectedLayersLength = this.data.services.filter( + (layer) => layer.checked === true + ).length; + if (selectedLayersLength > 10) { + this.data.visible = false; + } else { + this.data.visible = true; + } + } /** * @param service * @returns {Array} @@ -510,6 +520,7 @@ export class HsAddDataUrlWmsService { legends: legends, subLayers: subLayers, base: this.data.base, + visible: this.data.visible, }); this.hsMapService.proxifyLayerLoader(new_layer, this.data.useTiles); this.hsAddDataService.addLayer(new_layer, this.data.addUnder); diff --git a/projects/hslayers/src/components/layermanager/layermanager-metadata.service.ts b/projects/hslayers/src/components/layermanager/layermanager-metadata.service.ts index dcdf10210d..d8f4f17c5e 100644 --- a/projects/hslayers/src/components/layermanager/layermanager-metadata.service.ts +++ b/projects/hslayers/src/components/layermanager/layermanager-metadata.service.ts @@ -252,6 +252,7 @@ export class HsLayerManagerMetadataService { */ async queryMetadata(layerDescriptor: HsLayerDescriptor): Promise { const layer = layerDescriptor.layer; + let capabilities = ''; const url = this.HsLayerUtilsService.getURL(layer); if (!url) { return; diff --git a/projects/hslayers/src/components/legend/legend.component.ts b/projects/hslayers/src/components/legend/legend.component.ts index 76a0b5b433..997cc18a39 100644 --- a/projects/hslayers/src/components/legend/legend.component.ts +++ b/projects/hslayers/src/components/legend/legend.component.ts @@ -7,6 +7,8 @@ import {HsLayerUtilsService} from '../utils/layer-utils.service'; import {HsLegendDescriptor} from './legend-descriptor.interface'; import {HsLegendService} from './legend.service'; import {HsMapService} from '../map/map.service'; +import {HsUtilsService} from '../utils/utils.service'; + @Component({ selector: 'hs-legend', templateUrl: './partials/legend.html', @@ -18,7 +20,8 @@ export class HsLegendComponent { constructor( public HsLegendService: HsLegendService, public HsMapService: HsMapService, - public HsLayerUtilsService: HsLayerUtilsService + public HsLayerUtilsService: HsLayerUtilsService, + public hsUtilsService: HsUtilsService ) { this.HsMapService.loaded().then((map) => this.init(map)); } @@ -106,7 +109,11 @@ export class HsLegendComponent { * @private */ layerAdded(e): void { - this.addLayerToLegends(e.element); + this.hsUtilsService.createQueue('addLayerToLegends', 3); + this.hsUtilsService.queues['addLayerToLegends'].q.push(async (cb) => { + this.addLayerToLegends(e.element); + cb(null); + }); } /** diff --git a/projects/hslayers/src/components/utils/utils.service.ts b/projects/hslayers/src/components/utils/utils.service.ts index 46afdd1df1..2553083a20 100644 --- a/projects/hslayers/src/components/utils/utils.service.ts +++ b/projects/hslayers/src/components/utils/utils.service.ts @@ -1,3 +1,4 @@ +import queue from 'queue'; import {HsConfig} from './../../config.service'; import {HsLogService} from './../../common/log/log.service'; import {HttpClient} from '@angular/common/http'; @@ -7,6 +8,11 @@ import {isPlatformBrowser} from '@angular/common'; @Injectable() export class HsUtilsService { + queues: { + [usecase: string]: { + q: any; // queueObject + }; + } = {}; constructor( public HsConfig: HsConfig, private http: HttpClient, @@ -368,6 +374,18 @@ export class HsUtilsService { objectToCheck && {}.toString.call(objectToCheck) === '[object Object]' ); } + createQueue(useCase: string, customConcurrency?: number): void { + if (this.queues[useCase]) { + return; + } + this.queues[useCase] = { + q: queue({results: [], concurrency: customConcurrency || 5}), + }; + this.queues[useCase].q.autostart = true; + this.queues[useCase].q.on('end', () => { + delete this.queues[useCase]; + }); + } /** * Check if object is an instance of a class