{"version":3,"file":"hslayers-ng-services-layer-manager.mjs","sources":["../../../projects/hslayers/services/layer-manager/layer-selector.service.ts","../../../projects/hslayers/services/layer-manager/layer-editor-vector-layer.service.ts","../../../projects/hslayers/services/layer-manager/layer-manager-folder.service.ts","../../../projects/hslayers/services/layer-manager/layer-manager-loading-progress.service.ts","../../../projects/hslayers/services/layer-manager/layer-manager-metadata.service.ts","../../../projects/hslayers/services/layer-manager/layer-manager-utils.service.ts","../../../projects/hslayers/services/layer-manager/layer-manager-visibility.service.ts","../../../projects/hslayers/services/layer-manager/layer-manager.service.ts","../../../projects/hslayers/services/layer-manager/layer-manager-copy-layer.service.ts","../../../projects/hslayers/services/layer-manager/hslayers-ng-services-layer-manager.ts"],"sourcesContent":["import {Injectable} from '@angular/core';\nimport {Subject} from 'rxjs';\n\nimport {HsLayerDescriptor} from 'hslayers-ng/types';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsLayerSelectorService {\n  currentLayer: HsLayerDescriptor;\n\n  layerSelected: Subject<HsLayerDescriptor> = new Subject();\n\n  constructor() {}\n\n  /**\n   * Multi-casts new HsLayerManagerService.currentLayer to observers listening to the layerSelected subject.\n   * @param hsLayer - Selected layer (HsLayerManagerService.currentLayer)\n   */\n  select(hsLayer: HsLayerDescriptor) {\n    this.currentLayer = hsLayer;\n    this.layerSelected.next(hsLayer);\n  }\n}\n","import {Injectable, inject} from '@angular/core';\n\nimport {Circle, LineString, Point, Polygon} from 'ol/geom';\nimport {Cluster, Source, Vector as VectorSource} from 'ol/source';\nimport {Feature} from 'ol';\nimport {Layer, Vector as VectorLayer} from 'ol/layer';\n\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsStylerService} from 'hslayers-ng/services/styler';\nimport {instOf} from 'hslayers-ng/services/utils';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsLayerEditorVectorLayerService {\n  hsConfig = inject(HsConfig);\n  hsMapService = inject(HsMapService);\n  hsStylerService = inject(HsStylerService);\n\n  layersClusteredFromStart = [];\n\n  /**\n   * Convert layer to clustered state where its source gets nested in another\n   * VectorSource and first level sources features contain 'features' attribute\n   * with the original features in it as an array\n   * @param newValue - Cluster or not to cluster\n   * @param layer - OL Layer to cluster or de-cluster\n   * @param distance - Minimum distance in pixels between clusters\n   * @param generateStyle - Whether a default cluster style shall be generated for the layer\n   */\n  async cluster(\n    newValue: boolean,\n    layer: Layer<Source>,\n    distance: number,\n    generateStyle: boolean,\n  ): Promise<void> {\n    if (newValue == true) {\n      if (!instOf(layer.getSource(), Cluster)) {\n        layer.setSource(this.createClusteredSource(layer, distance));\n        if (generateStyle) {\n          await this.hsStylerService.styleClusteredLayer(\n            layer as VectorLayer<VectorSource<Feature>>,\n          );\n        }\n        this.updateFeatureTableLayers(\n          layer as VectorLayer<VectorSource<Feature>>,\n        );\n      }\n    } else if (instOf(layer.getSource(), Cluster)) {\n      layer.setSource((layer.getSource() as Cluster<Feature>).getSource());\n    }\n  }\n\n  createClusteredSource(layer: Layer<Source>, distance: number) {\n    return new Cluster({\n      distance,\n      source: layer.getSource() as VectorSource,\n      geometryFunction: function (feature) {\n        if (!feature) {\n          return null;\n        }\n        switch (feature.getGeometry().getType()) {\n          case 'Point':\n            return feature.getGeometry() as Point;\n          case 'Circle':\n            return new Point((feature.getGeometry() as Circle).getCenter());\n          case 'Polygon':\n            return (feature.getGeometry() as Polygon).getInteriorPoint();\n          case 'LineString':\n            return new Point(\n              (feature.getGeometry() as LineString).getFirstCoordinate(),\n            );\n          default:\n            return null;\n        }\n      },\n    });\n  }\n\n  updateFeatureTableLayers(layer: VectorLayer<VectorSource<Feature>>) {\n    const currentLayerIndex = this.hsConfig.layersInFeatureTable?.findIndex(\n      (l) => l == layer,\n    );\n    if (layer && currentLayerIndex > -1) {\n      this.hsConfig.layersInFeatureTable[currentLayerIndex] = layer;\n    }\n  }\n}\n","import {Injectable, inject} from '@angular/core';\nimport {Subject, debounceTime} from 'rxjs';\n\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsLayerDescriptor, HsLayermanagerFolder} from 'hslayers-ng/types';\nimport {HsLayermanagerDataObject} from './layer-manager.service';\nimport {\n  getPath,\n  getShowInLayerManager,\n  getTitle,\n  setPath,\n} from 'hslayers-ng/common/extensions';\n\nenum FolderActionTypes {\n  ADD_LAYER = 'ADD_LAYER',\n  REMOVE_LAYER = 'REMOVE_LAYER',\n  SORT_BY_Z = 'SORT_BY_Z',\n  UPDATE_Z = 'UPDATE_Z',\n}\n// Action Interfaces\ninterface AddLayerAction {\n  type: FolderActionTypes.ADD_LAYER;\n  lyr: HsLayerDescriptor;\n}\n\ninterface RemoveLayerAction {\n  type: FolderActionTypes.REMOVE_LAYER;\n  lyr: HsLayerDescriptor;\n}\n\ninterface SortFoldersByZAction {\n  type: FolderActionTypes.SORT_BY_Z;\n  lyr: HsLayerDescriptor;\n  debounce: boolean;\n}\ninterface UpdateFoldersZIndex {\n  type: FolderActionTypes.UPDATE_Z;\n  lyr: HsLayerDescriptor;\n}\ntype FolderAction =\n  | AddLayerAction\n  | RemoveLayerAction\n  | SortFoldersByZAction\n  | UpdateFoldersZIndex;\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsLayerManagerFolderService {\n  private hsLanguageService = inject(HsLanguageService);\n  private hsConfig = inject(HsConfig);\n\n  private sortDebounceTime = 300;\n  private sortSubject = new Subject<void>();\n\n  // Subject to dispatch actions to manipulate folders through\n  folderAction$ = new Subject<FolderAction>();\n\n  data: HsLayermanagerDataObject;\n\n  constructor() {\n    this.sortSubject.pipe(debounceTime(this.sortDebounceTime)).subscribe(() => {\n      this.folderAction$.next(this.sortByZ({debounce: false}));\n    });\n  }\n\n  foldersReducer(\n    state: Map<string, HsLayermanagerFolder>,\n    action: FolderAction,\n  ): Map<string, HsLayermanagerFolder> {\n    switch (action.type) {\n      case FolderActionTypes.ADD_LAYER:\n        return this.populateFolders(state, action.lyr);\n      case FolderActionTypes.REMOVE_LAYER:\n        return this.cleanFolders(state, action.lyr);\n      case FolderActionTypes.SORT_BY_Z:\n        return this.sortFoldersByZ(state, action.debounce);\n      case FolderActionTypes.UPDATE_Z:\n        return this.updateFoldersZ(state);\n      default:\n        return state;\n    }\n  }\n\n  // Action Creators\n  addLayer(lyr: HsLayerDescriptor): AddLayerAction {\n    return {\n      type: FolderActionTypes.ADD_LAYER,\n      lyr: lyr,\n    };\n  }\n\n  removeLayer(lyr: HsLayerDescriptor): RemoveLayerAction {\n    return {\n      type: FolderActionTypes.REMOVE_LAYER,\n      lyr: lyr,\n    };\n  }\n\n  updateFoldersZIndex(): UpdateFoldersZIndex {\n    return {\n      type: FolderActionTypes.UPDATE_Z,\n      lyr: undefined,\n    };\n  }\n\n  sortByZ(options = {debounce: true}): SortFoldersByZAction {\n    return {\n      type: FolderActionTypes.SORT_BY_Z,\n      lyr: undefined,\n      debounce: options.debounce,\n    };\n  }\n\n  /**\n   * Place layer into layer manager folder structure based on path property hsl-path of layer\n   * @param lyr - Layer to add into folder structure\n   */\n  private populateFolders(\n    state: Map<string, HsLayermanagerFolder>,\n    lyr: HsLayerDescriptor,\n  ): Map<string, HsLayermanagerFolder> {\n    const newState = new Map(state);\n    const olLayer = lyr.layer;\n    let path = getPath(olLayer);\n    if (\n      !path ||\n      path == 'Other' ||\n      this.hsLanguageService\n        .getTranslation('LAYERMANAGER')\n        ['other']?.toLowerCase() === path.toLowerCase()\n    ) {\n      path = 'other';\n      setPath(olLayer, path);\n    }\n    const zIndex = olLayer.getZIndex();\n\n    if (!newState.has(path)) {\n      newState.set(path, {\n        layers: [lyr],\n        zIndex: zIndex,\n        visible: true,\n      });\n      return newState;\n    }\n    const folder = newState.get(path);\n    folder.layers.push(lyr);\n    folder.zIndex = Math.max(folder.zIndex, zIndex);\n    return newState;\n  }\n\n  /**\n   * Remove layer from layer folder and clean empty folder\n   * @param lyr - Layer to remove from layer folder\n   */\n  private cleanFolders(\n    state: Map<string, HsLayermanagerFolder>,\n    lyr: HsLayerDescriptor,\n  ): Map<string, HsLayermanagerFolder> {\n    try {\n      const newState = new Map(state);\n      const olLayer = lyr.layer;\n      if (getShowInLayerManager(olLayer) == false) {\n        return newState;\n      }\n\n      const path = getPath(olLayer);\n      if (!path) {\n        console.warn(\n          `Unexpected. Layer $${getTitle(olLayer)} has no path defined`,\n        );\n        return newState;\n      }\n\n      const folder = newState.get(path);\n      if (!folder) {\n        console.warn(\n          `Unexpected. Layer $${getTitle(olLayer)} belongs to path ${path} but it could not be found`,\n        );\n        return newState;\n      }\n\n      folder.layers.splice(folder.layers.indexOf(lyr), 1);\n      folder.zIndex = Math.max(\n        ...folder.layers.map((l) => l.layer.getZIndex()),\n      );\n      if (folder.layers.length === 0) {\n        newState.delete(path);\n      }\n      return newState;\n    } catch (error) {\n      console.error(\n        lyr?.layer && getTitle(lyr.layer)\n          ? `There was an error while cleaning folders after ${getTitle(lyr.layer)} was removed`\n          : 'There was an attempt to clean folders without valid layer param provided',\n        error,\n      );\n      return state;\n    }\n  }\n\n  /**\n   * Update zIndex of folders and sort them\n   * @param lyr Layer that has changed.\n   */\n  private updateFoldersZ(state: Map<string, HsLayermanagerFolder>) {\n    const newState = new Map(state);\n\n    for (const key of newState.keys()) {\n      const folderChanged = newState.get(key);\n      const zIndexes = folderChanged.layers.map((l) => l.layer.getZIndex());\n      folderChanged.zIndex = Math.max(...zIndexes);\n    }\n    return this.sortFoldersByZ(newState, false);\n  }\n\n  /**\n   * Sorts folders by z-index.\n   */\n  private sortFoldersByZ(\n    state: Map<string, HsLayermanagerFolder>,\n    debounce = true,\n  ): Map<string, HsLayermanagerFolder> {\n    if (debounce) {\n      this.sortSubject.next();\n      return state;\n    }\n\n    const shouldReverseList = this.hsConfig.reverseLayerList ?? true;\n    const sortDirection = shouldReverseList ? -1 : 1;\n\n    // Sort folders\n    const sortedEntries = [...state.entries()].sort(\n      (a, b) =>\n        (a[1].zIndex < b[1].zIndex ? -1 : a[1].zIndex > b[1].zIndex ? 1 : 0) *\n        sortDirection,\n    );\n\n    // Create a new map to store the sorted result\n    const sortedState = new Map<string, HsLayermanagerFolder>();\n\n    // Sort layers within each folder using the existing sortLayersByZ method\n    sortedEntries.forEach(([key, folder]) => {\n      const sortedLayers = this.sortLayersByZ(folder.layers);\n\n      // Create a new folder object with sorted layers\n      sortedState.set(key, {\n        ...folder,\n        layers: sortedLayers,\n      });\n    });\n\n    return sortedState;\n  }\n\n  sortLayersByZ(arr: any[]): any[] {\n    const minus = this.hsConfig.reverseLayerList ?? true;\n    return arr.sort((a, b) => {\n      a = a.layer.getZIndex();\n      b = b.layer.getZIndex();\n      return (a < b ? -1 : a > b ? 1 : 0) * (minus ? -1 : 1);\n    });\n  }\n}\n","import {Injectable, NgZone, inject} from '@angular/core';\nimport {Subject, buffer, debounceTime, pairwise} from 'rxjs';\n\nimport {Cluster, Source} from 'ol/source';\nimport {Feature} from 'ol';\nimport {Image as ImageLayer, Layer, Tile} from 'ol/layer';\n\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsLayerDescriptor, HsLayerLoadProgress} from 'hslayers-ng/types';\nimport {instOf, isLayerVectorLayer} from 'hslayers-ng/services/utils';\nimport {HsLogService} from 'hslayers-ng/services/log';\nimport {HsToastService} from 'hslayers-ng/common/toast';\nimport {\n  getBase,\n  getShowInLayerManager,\n  getTitle,\n} from 'hslayers-ng/common/extensions';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsLayerManagerLoadingProgressService {\n  private hsConfig = inject(HsConfig);\n  private hsLog = inject(HsLogService);\n  private zone = inject(NgZone);\n  private hsToastService = inject(HsToastService);\n  private hsLanguageService = inject(HsLanguageService);\n  private hsEventBusService = inject(HsEventBusService);\n\n  /**\n   * Create events for checking whether the layer is being loaded or is loaded\n   * @param layer - Layer which is being added\n   */\n  loadingEvents(layer: HsLayerDescriptor): void {\n    const olLayer = layer.layer;\n    const showInLM = getShowInLayerManager(olLayer);\n    if (\n      //Make sure listeners are registered only once\n      layer.loadProgress ||\n      (getBase(olLayer) && this.hsConfig.componentsEnabled.basemapGallery) ||\n      !(showInLM === undefined || showInLM == true)\n    ) {\n      return;\n    }\n    const source: any = olLayer.get('cluster')\n      ? (olLayer.getSource() as Cluster<Feature>).getSource()\n      : olLayer.getSource();\n    if (!source) {\n      this.hsLog.error(`Layer ${getTitle(olLayer)} has no source`);\n      return;\n    }\n    const loadProgress: HsLayerLoadProgress = {\n      pending: 0,\n      total: 0,\n      loadError: 0,\n      loaded: true,\n      error: undefined,\n      percents: 0,\n    };\n    layer.loadProgress = loadProgress;\n\n    const layerType = this.determineLayerType(olLayer);\n\n    if (!layerType) {\n      return;\n    }\n\n    this.createLoadingProgressTimer(loadProgress, olLayer);\n    const loadStart = this.subscribeToEventSubject(1, loadProgress, olLayer);\n    const loadEnd = this.subscribeToEventSubject(-1, loadProgress, olLayer);\n\n    source.on(`${layerType}loadstart`, (e) => {\n      loadStart.next(true);\n    });\n    source.on(`${layerType}loadend`, (e) => {\n      loadEnd.next(true);\n      loadProgress.error = false;\n    });\n    source.on(`${layerType}loaderror`, (e) => {\n      this.loadError(loadProgress, olLayer, this[`${layerType}LoadFailed`]);\n    });\n  }\n\n  private determineLayerType(olLayer: Layer) {\n    if (isLayerVectorLayer(olLayer, false)) {\n      return 'features';\n    }\n    if (instOf(olLayer, ImageLayer)) {\n      return 'image';\n    }\n    if (instOf(olLayer, Tile)) {\n      return 'tile';\n    }\n    return undefined;\n  }\n\n  private loadError(\n    loadProgress: HsLayerLoadProgress,\n    olLayer: Layer<Source>,\n    typeCallback?: (\n      loadProgress: HsLayerLoadProgress,\n      olLayer: Layer<Source>,\n    ) => any,\n  ) {\n    loadProgress.loadError += 1;\n    this.changeLoadCounter(olLayer, loadProgress, -1);\n    if (typeCallback) {\n      typeCallback.bind(this)(loadProgress, olLayer);\n    }\n  }\n\n  private featuresLoadFailed(\n    loadProgress: HsLayerLoadProgress,\n    olLayer: Layer<Source>,\n  ) {\n    if (loadProgress) {\n      loadProgress.error = true;\n    }\n    this.hsToastService.createToastPopupMessage(\n      'LAYERS.featuresLoadError',\n      `${getTitle(\n        olLayer,\n      )}: ${this.hsLanguageService.getTranslationIgnoreNonExisting(\n        'ADDLAYERS.ERROR',\n        'someErrorHappened',\n        null,\n      )}`,\n      {},\n    );\n  }\n\n  private imageLoadFailed(\n    loadProgress: HsLayerLoadProgress,\n    olLayer: Layer<Source>,\n  ) {\n    loadProgress.loaded = true;\n    loadProgress.error = true;\n  }\n\n  private tileLoadFailed(\n    loadProgress: HsLayerLoadProgress,\n    olLayer: Layer<Source>,\n  ) {\n    if (loadProgress.loadError == loadProgress.total) {\n      loadProgress.error = true;\n    }\n  }\n\n  /**\n   * Creates loading progress timer which controls the executions of load events callbacks\n   * and tries to reset progress once the loading has finished (no execution in 2000ms)\n   */\n  private createLoadingProgressTimer(\n    loadProgress: HsLayerLoadProgress,\n    olLayer: Layer<Source>,\n  ) {\n    loadProgress.timer = new Subject();\n    /**\n     * NOTE:\n     * pairwise is a hacky solution for the cases when pending numbers get out of sync\n     * eg. everything has been loaded but pending value is not 0.\n     * Could not find the root cause of the problem\n     */\n    loadProgress.timer\n      .pipe(debounceTime(2000), pairwise())\n      .subscribe(([previous, current]) => {\n        if (\n          loadProgress.pending == 0 ||\n          (previous === current && current != 0)\n        ) {\n          this.zone.run(() => {\n            loadProgress.total = 0;\n            if (current != 0) {\n              loadProgress.pending = 0;\n            }\n            loadProgress.percents = 0;\n            this.hsEventBusService.layerLoaded.next(olLayer);\n          });\n        }\n      });\n  }\n\n  /**\n   * Create an event subject which is used to cast value in an event callback.\n   * and\n   * Subscribe to an subject to allow debouncing of event callback method.\n   * Subscription increments or decrements pending parameter of loadProgress which is used to indicate progress in UI\n   */\n  private subscribeToEventSubject(\n    signMultiplier: 1 | -1,\n    loadProgress: HsLayerLoadProgress,\n    olLayer: Layer<Source>,\n  ): Subject<boolean> {\n    const subject: Subject<boolean> = new Subject();\n    subject\n      .pipe(\n        //Buffer emitions to an array until closing notifier emits.\n        buffer(\n          // In case 100ms has passed without another emit => close buffer and emit value\n          subject.pipe(debounceTime(100)),\n        ),\n      )\n      .subscribe((loads) => {\n        loadProgress.total += signMultiplier == 1 ? loads.length : 0;\n        this.changeLoadCounter(\n          olLayer,\n          loadProgress,\n          loads.length * signMultiplier,\n        );\n      });\n    return subject;\n  }\n\n  /**\n   * Adjust layer progress counter object and calculate loading state (percentages)\n   * change is positive number in case of loadStart and negative number in case of loadEnd/Error events\n   */\n  private changeLoadCounter(\n    layer: Layer<Source>,\n    progress: HsLayerLoadProgress,\n    change: number,\n  ): void {\n    progress.pending += change;\n    progress.loaded = progress.pending === 0;\n    let percents = 0;\n    if (progress.total > 0) {\n      percents = Math.round(\n        ((progress.total - progress.pending) / progress.total) * 100,\n      );\n    }\n    /**\n     * Total is reset only after 2 seconds of idle state.\n     * Panning sooner will make a progress bar UI animation to jump or 'backpaddle' unnecessarily.\n     * Using 0 instead of 100 (when loading ended) prevents that\n     */\n    this.zone.run(() => {\n      progress.percents = percents === 100 ? 0 : percents;\n    });\n    progress.timer.next(progress.pending);\n    if (change > 0) {\n      this.hsEventBusService.layerLoading.next({layer, progress});\n    }\n  }\n}\n","import {Injectable, inject} from '@angular/core';\n\nimport {Extent} from 'ol/extent';\nimport {Layer} from 'ol/layer';\nimport {Source} from 'ol/source';\nimport {WMSCapabilities, WMTSCapabilities} from 'ol/format';\nimport {get as getProjection, transformExtent} from 'ol/proj';\n\nimport {\n  Attribution,\n  MetadataUrl,\n  HsLayerDescriptor,\n  HsWmsLayer,\n  WMSGetCapabilitiesResponse,\n  WmsDimension,\n} from 'hslayers-ng/types';\nimport {\n  HsAddDataUrlService,\n  HsUrlWmsService,\n} from 'hslayers-ng/services/add-data';\nimport {\n  HsArcgisGetCapabilitiesService,\n  HsDimensionTimeService,\n  HsWfsGetCapabilitiesService,\n  HsWmsGetCapabilitiesService,\n  HsWmtsGetCapabilitiesService,\n} from 'hslayers-ng/services/get-capabilities';\nimport {HsLogService} from 'hslayers-ng/services/log';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {\n  getAttribution,\n  getCachedCapabilities,\n  getLegends,\n  getMaxResolutionDenominator,\n  getMetadata,\n  getName,\n  getQueryable,\n  getSubLayers,\n  getWorkspace,\n  setAttribution,\n  setCacheCapabilities,\n  setLegends,\n  setMetadata,\n  setWmsOriginalExtent,\n} from 'hslayers-ng/common/extensions';\nimport {\n  HsCommonLaymanLayerService,\n  HsCommonLaymanService,\n} from 'hslayers-ng/common/layman';\nimport {\n  bufferExtent,\n  calculateResolutionFromScale,\n  getLayerParams,\n  getURL,\n  isLayerArcgis,\n  isLayerVectorLayer,\n  isLayerWMS,\n  isLayerWMTS,\n  updateLayerParams,\n} from 'hslayers-ng/services/utils';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsLayerManagerMetadataService {\n  hsWmtsGetCapabilitiesService = inject(HsWmtsGetCapabilitiesService);\n  hsWfsGetCapabilitiesService = inject(HsWfsGetCapabilitiesService);\n  hsWmsGetCapabilitiesService = inject(HsWmsGetCapabilitiesService);\n  private hsArcgisGetCapabilitiesService = inject(\n    HsArcgisGetCapabilitiesService,\n  );\n  hsDimensionTimeService = inject(HsDimensionTimeService);\n  hsLog = inject(HsLogService);\n  hsUrlWmsService = inject(HsUrlWmsService);\n  private hsMapService = inject(HsMapService);\n  private hsAddDataUrlService = inject(HsAddDataUrlService);\n  private hsCommonLaymanService = inject(HsCommonLaymanService);\n  private hsCommonLaymanLayerService = inject(HsCommonLaymanLayerService);\n\n  /**\n   * Recursive callback which identifies object representing added layer in WMS getCapabilities structure.\n   * It is used as reference for sublayer structure, metadata\n   * @returns Wms layer definition\n   */\n  identifyLayerObject(\n    layerName: string,\n    currentLayer: HsWmsLayer,\n    serviceLayer: boolean = false,\n  ): HsWmsLayer {\n    // FIXME: Temporary bypass for layer names like 'UTM:evi'\n    /*if (layerName.includes(':')) { //This is wrong because then we are not able to find layer by name\n      layerName = layerName.slice(layerName.indexOf(':'));\n    }*/\n    // NOTE: We are parsing also a top-most layer of the WMS Service, as it is implementation-wise simpler\n    if (layerName == currentLayer.Name || serviceLayer) {\n      return serviceLayer ? this.getParsedLayers(currentLayer) : currentLayer;\n    }\n    if (Array.isArray(currentLayer.Layer)) {\n      for (const subLayer of currentLayer.Layer) {\n        const found = this.identifyLayerObject(layerName, subLayer);\n        if (found) {\n          return found;\n        }\n      }\n    } else if (currentLayer.Layer) {\n      return this.identifyLayerObject(layerName, currentLayer.Layer);\n    }\n    return null;\n  }\n\n  getParsedLayers(layerObject): any {\n    const isUsable = layerObject.Layer.every((l) => l.Name); //Sublayers are all queryable\n    if (!isUsable) {\n      layerObject.Layer =\n        this.hsUrlWmsService.filterCapabilitiesLayers(layerObject);\n    }\n    return layerObject;\n  }\n\n  /**\n   * Adds hasSublayers parameter if layer has sub-layers\n   * @param layerDescriptor - Selected layer\n   */\n  async fillMetadata(layerDescriptor: HsLayerDescriptor): Promise<void> {\n    const layer = layerDescriptor.layer;\n    try {\n      await this.queryMetadata(layerDescriptor);\n    } catch (error) {\n      if (error instanceof Error) {\n        this.hsLog.warn(`Error while querying metadata ${error.message}`);\n      } else {\n        this.hsLog.warn(`Error while querying metadata ${error}`);\n      }\n    }\n    const subLayers = getCachedCapabilities(layer)?.Layer;\n    if (subLayers != undefined && subLayers.length > 1) {\n      if (!layerDescriptor.hasSublayers) {\n        layerDescriptor.hasSublayers = true;\n        //ADD config values\n      }\n    }\n  }\n\n  metadataArray(layer: HsLayerDescriptor): Array<MetadataUrl> {\n    return getMetadata(layer.layer)?.urls;\n  }\n\n  /**\n   * Determines if layer has metadata information available\n   * @param layer - Current layer\n   */\n  hasMetadata(layer: HsLayerDescriptor): boolean {\n    if (!layer) {\n      return false;\n    }\n    return layer && getMetadata(layer.layer)?.urls ? true : false;\n  }\n\n  /**\n   * Looks for maxScaleDenominator in property object\n   */\n  searchForScaleDenominator(properties: any): number {\n    const view = this.hsMapService.getMap().getView();\n    let maxResolution = properties.MaxScaleDenominator\n      ? calculateResolutionFromScale(properties.MaxScaleDenominator, view)\n      : null;\n\n    //TODO: Currently we are not using minResolution, but should. That would require rewriting this function to return structure of {minRes, maxRes}\n    const minResolution = properties.MinScaleDenominator\n      ? calculateResolutionFromScale(properties.MinScaleDenominator, view)\n      : 0;\n\n    const layers = properties.Layer;\n    if (layers) {\n      for (const sublayer of layers) {\n        if (sublayer.Layer) {\n          const subResolution = this.searchForScaleDenominator(sublayer);\n          maxResolution =\n            subResolution > maxResolution ? subResolution : maxResolution;\n        } else {\n          // Set sublayer.maxResolution which is used\n          // to display sublayers grayed out or black in layer-editor sublayer tree\n          if (sublayer.MaxScaleDenominator) {\n            sublayer.maxResolution = calculateResolutionFromScale(\n              sublayer.MaxScaleDenominator,\n              view,\n            );\n            if (\n              maxResolution < sublayer.maxResolution &&\n              maxResolution !== null\n            ) {\n              maxResolution = calculateResolutionFromScale(\n                sublayer.MaxScaleDenominator,\n                view,\n              );\n            }\n          } else if (!sublayer.maxResolution) {\n            sublayer.maxResolution = maxResolution ?? Number.MAX_VALUE;\n          }\n        }\n      }\n    }\n    if (maxResolution) {\n      properties.maxResolution = maxResolution;\n    }\n    if (minResolution) {\n      properties.minResolution = minResolution;\n    }\n    return maxResolution;\n  }\n  /**\n   * Sets or updates values in layer object\n   */\n  setOrUpdate(layer: Layer<Source>, key, values): void {\n    const previousValue = layer.get(key);\n    if (previousValue) {\n      for (const value of values) {\n        layer.set(key, previousValue.push(value));\n      }\n    } else {\n      layer.set(key, values);\n    }\n  }\n\n  private parseWmsCapsMultipleLayers(\n    layerName: string,\n    olLayer: Layer<Source>,\n    caps: WMSGetCapabilitiesResponse,\n    legends: Array<any>,\n  ) {\n    let layerObj;\n    const layerCaps = caps.Capability.Layer;\n    const layerObjs = []; //array of layer objects representing added layer\n    for (const subLayer of layerName.split(',')) {\n      const layerSubObject = this.identifyLayerObject(subLayer, layerCaps);\n      layerObjs.push(layerSubObject);\n      this.collectLegend(layerSubObject, legends);\n      if (\n        layerSubObject &&\n        layerSubObject.Layer !== undefined &&\n        getSubLayers(olLayer)\n      ) {\n        delete layerSubObject.Layer;\n      }\n    }\n    if (!olLayer.get('capsExtentSet')) {\n      this.setWmsCapsExtent(\n        bufferExtent(\n          this.hsAddDataUrlService.calcCombinedExtent(\n            layerObjs.map((lo) => this.getCapsExtent(lo, layerCaps)),\n          ),\n          this.hsMapService.getCurrentProj(),\n        ),\n        olLayer,\n      );\n    }\n\n    if (getCachedCapabilities(olLayer) === undefined) {\n      layerObj = Object.assign(JSON.parse(JSON.stringify(layerObjs[0])), {\n        maxResolution: Math.max(\n          ...layerObjs.map((layer) => this.searchForScaleDenominator(layer)),\n        ),\n        Layer: layerObjs,\n      });\n    }\n    this.fillMetadataUrlsIfNotExist(olLayer, caps);\n    return layerObj;\n  }\n\n  private parseWmsCapsSingleLayer(\n    layerName: string,\n    layerDescriptor: HsLayerDescriptor,\n    caps: WMSGetCapabilitiesResponse,\n    legends: Array<any>,\n  ) {\n    const olLayer = layerDescriptor.layer;\n    const layerCaps = caps.Capability.Layer;\n    const layerObj = this.identifyLayerObject(\n      layerName,\n      layerCaps,\n      olLayer.get('serviceLayer'),\n    );\n    if (layerObj == undefined) {\n      return;\n    }\n    //TODO: This should be removed probably to not pollute layer object. Use cachedCapabilities instead\n    olLayer.setProperties(layerObj);\n    if (\n      (layerObj.Dimension as WmsDimension)?.name === 'time' ||\n      (layerObj.Dimension as WmsDimension[])?.find((dim) => dim.name === 'time')\n    ) {\n      this.hsDimensionTimeService.setupTimeLayer(layerDescriptor, layerObj);\n    }\n    if (layerObj.Layer && getSubLayers(olLayer)) {\n      layerObj.maxResolution = this.searchForScaleDenominator(layerObj);\n      /* layerObj.Layer contains sublayers and gets stored to cachedCapabilities. */\n      const subLayerArray = getSubLayers(olLayer).split(',');\n      layerObj.Layer = (layerObj.Layer as HsWmsLayer[]).filter((l) =>\n        subLayerArray.includes(l.Name),\n      );\n    }\n    if (\n      getQueryable(olLayer) &&\n      layerObj.queryable &&\n      getLayerParams(olLayer)?.INFO_FORMAT == undefined\n    ) {\n      updateLayerParams(olLayer, {\n        //TODO: Hslayers needs to support other formats too\n        INFO_FORMAT: 'application/vnd.ogc.gml', //Assumption that this will be supported by the server.\n      });\n    }\n    this.collectLegend(layerObj, legends);\n\n    if (!olLayer.get('capsExtentSet')) {\n      this.setWmsCapsExtent(\n        bufferExtent(\n          this.getCapsExtent(layerObj, layerCaps),\n          this.hsMapService.getCurrentProj(),\n        ),\n        olLayer,\n      );\n    }\n    return layerObj;\n  }\n\n  /**\n   * Parse capabilities for WMS layer\n   */\n  parseWmsCaps(\n    layerDescriptor: HsLayerDescriptor,\n    layerName: string,\n    caps: WMSGetCapabilitiesResponse,\n  ): void {\n    const olLayer = layerDescriptor.layer;\n    const legends: string[] = [];\n    let layerObj; //Main object representing layer created from capabilities which will be cached\n    if (layerName.includes(',')) {\n      layerObj = this.parseWmsCapsMultipleLayers(\n        layerName,\n        olLayer,\n        caps,\n        legends,\n      );\n    } else {\n      layerObj = this.parseWmsCapsSingleLayer(\n        layerName,\n        layerDescriptor,\n        caps,\n        legends,\n      );\n    }\n    if (getCachedCapabilities(olLayer) === undefined) {\n      setCacheCapabilities(olLayer, layerObj);\n    }\n    this.parseAttribution(olLayer, getCachedCapabilities(olLayer));\n    const existingLegends = getLegends(olLayer);\n    if (legends.length > 0 && existingLegends == undefined) {\n      setLegends(olLayer, legends);\n    }\n  }\n\n  private setExtentAndOriginalExtent(extent: Extent, layer: Layer<Source>) {\n    setWmsOriginalExtent(layer, extent);\n    layer.setExtent(undefined);\n  }\n\n  /**\n   * Set layer extent using capabilities layer object\n   */\n  private setWmsCapsExtent(extent: Extent, layer: Layer<Source>): void {\n    if (extent !== null) {\n      /**\n       * In case ignoreExtent is present and active extent should\n       * not be set to the layer directly but to a extent cache 'WmsOriginalExtent'.\n       * Possible when layer comes from composition\n       */\n      const params = getLayerParams(layer);\n      if (params.ignoreExtent) {\n        this.setExtentAndOriginalExtent(extent, layer);\n      } else {\n        layer.setExtent(extent);\n      }\n    }\n  }\n\n  /**\n   * Helper used in to get usable extent from layers capabilities object\n   */\n  private getCapsExtent(layerObj: any, layerCaps: HsWmsLayer): Extent {\n    // Extent of selected layer or service in case it's missing\n    let extent =\n      (layerObj.EX_GeographicBoundingBox || layerObj.BoundingBox) ??\n      (layerCaps.EX_GeographicBoundingBox || layerCaps.BoundingBox);\n    //If from BoundingBox picl one usable\n    extent = !extent\n      ? //In case extent could not be found\n        [-180, -90, 180, 90]\n      : extent[0].crs\n        ? extent.find(\n            (e) => e.crs != 'CRS:84' && getProjection(layerObj.BoundingBox[0]),\n          )\n        : extent;\n    return transformExtent(\n      //BoundingBox extent is obj with crs, extent, res props\n      extent.extent ?? extent,\n      //EX_GeographicBoundingBox always in 4326\n      extent.crs ?? 'EPSG:4326',\n      this.hsMapService.getCurrentProj(),\n    );\n  }\n\n  private collectLegend(layerObject: any, legends: string[]) {\n    const styleWithLegend = layerObject?.Style?.find(\n      (style) => style.LegendURL !== undefined,\n    );\n    if (styleWithLegend) {\n      legends.push(styleWithLegend.LegendURL[0].OnlineResource);\n    }\n  }\n\n  parseAttribution(layer: Layer<Source>, caps: any) {\n    const attr = caps.Attribution;\n    if (getAttribution(layer)?.locked || attr == undefined) {\n      return;\n    }\n    const parsedAttribution: Attribution = {\n      title: attr.Title,\n      onlineResource: attr.OnlineResource,\n      logoUrl: attr.LogoURL\n        ? {\n            format: attr.LogoURL.Format,\n            onlineResource: attr.LogoURL.OnlineResource,\n          }\n        : undefined,\n    };\n    setAttribution(layer, parsedAttribution);\n  }\n\n  /**\n   * Callback function, adds getCapabilities response metadata to layer object\n   * @param layerDescriptor - Selected layer\n   * @returns Promise\n   */\n  async queryMetadata(layerDescriptor: HsLayerDescriptor): Promise<boolean> {\n    const layer = layerDescriptor.layer;\n    const url = getURL(layer);\n    if (!url || url.length === 0) {\n      return;\n    }\n    //ArcGIS\n    if (isLayerArcgis(layer)) {\n      const wrapper = await this.hsArcgisGetCapabilitiesService.request(url);\n      if (wrapper.error) {\n        return wrapper.response;\n      }\n      this.parseArcGisCaps(layerDescriptor, wrapper.response);\n    }\n    //WMS\n    else if (isLayerWMS(layer)) {\n      /**\n       *Fill metadata for Layman WMS (time dimension for now)\n       */\n      if (\n        this.hsCommonLaymanService.isLaymanUrl(\n          url,\n          this.hsCommonLaymanService.layman(),\n        )\n      ) {\n        const name = getName(layer);\n        const desc = await this.hsCommonLaymanLayerService.describeLayer(\n          name,\n          getWorkspace(layer) || this.hsCommonLaymanService.user(),\n          {\n            useCache: true,\n          },\n        );\n\n        if (desc.wms.time) {\n          this.hsDimensionTimeService.setupTimeLayer(layerDescriptor, {\n            Dimension: {\n              ...desc.wms.time,\n              name: 'Date',\n            },\n          } as unknown as HsWmsLayer);\n        }\n        setCacheCapabilities(layer, desc);\n        return true;\n      }\n\n      /**\n       * Common WMS\n       */\n      const wrapper = await this.hsWmsGetCapabilitiesService.request(url);\n      if (wrapper.error) {\n        this.hsLog.warn('GetCapabilities call invalid', wrapper.response);\n        return wrapper.response;\n      }\n      const parser = new WMSCapabilities();\n      const caps: WMSGetCapabilitiesResponse = parser.read(wrapper.response);\n      const params = getLayerParams(layer);\n      const layerNameInParams: string = params.LAYERS;\n      this.parseWmsCaps(layerDescriptor, layerNameInParams, caps);\n      const sublayers = getSubLayers(layer);\n      if (sublayers) {\n        if (!(Array.isArray(sublayers) && sublayers.length == 0)) {\n          /* When capabilities have been queried, it's safe to override LAYERS\n            param now to not render the container layer, but sublayers.*/\n          updateLayerParams(layer, {\n            LAYERS: getSubLayers(layer),\n          });\n        }\n      }\n      this.fillMetadataUrlsIfNotExist(layer, caps);\n      //Identify max resolution of layer. If layer has sublayers the highest value is selected\n      setTimeout(() => {\n        if (getMaxResolutionDenominator(layer)) {\n          layer.setMaxResolution(getMaxResolutionDenominator(layer));\n          return;\n        }\n        const maxResolution = this.searchForScaleDenominator(\n          layer.getProperties(),\n        );\n        if (maxResolution) {\n          layer.setMaxResolution(maxResolution);\n        }\n      });\n      return true;\n    }\n    //WMTS\n    else if (isLayerWMTS(layer)) {\n      const wrapper = await this.hsWmtsGetCapabilitiesService.request(url);\n      if (wrapper.error) {\n        return wrapper.response;\n      }\n      const parser = new WMTSCapabilities();\n      const caps = parser.read(wrapper.response);\n      layer.setProperties(caps);\n      if (!getAttribution(layer)?.locked) {\n        setAttribution(layer, {\n          onlineResource: caps.ServiceProvider.ProviderSite,\n        });\n      }\n      return true;\n    }\n    //WFS and vector\n    else if (isLayerVectorLayer(layer)) {\n      if (url) {\n        const wrapper = await this.hsWfsGetCapabilitiesService.request(url);\n        if (wrapper.error) {\n          return wrapper.response;\n        }\n        const parser = new DOMParser();\n        const caps = parser.parseFromString(\n          wrapper.response.data,\n          'application/xml',\n        );\n        const el = caps.getElementsByTagNameNS('*', 'ProviderSite');\n        if (!getAttribution(layer)?.locked) {\n          setAttribution(layer, {\n            onlineResource: el[0].getAttribute('xlink:href'),\n          });\n        }\n        return true;\n      }\n    }\n  }\n\n  parseArcGisCaps(layerDescriptor: HsLayerDescriptor, resp: any) {\n    const olLayer = layerDescriptor.layer;\n    const params = getLayerParams(olLayer);\n    const layerName: string = params.LAYERS;\n    const legends: string[] = [];\n    let layerObj; //Main object representing layer created from capabilities which will be cached\n    if (\n      layerName !== undefined &&\n      (layerName.includes(',') || layerName.includes('show'))\n    ) {\n      const layerObjs = []; //array of layer objects representing added layer\n      for (const subLayer of layerName.replace('show:', '').split(',')) {\n        /** This is the found sublayer by ID from the layers array */\n        const subObj = this.identifyArcgisLayerObj(parseInt(subLayer), resp);\n        layerObjs.push(subObj);\n        this.collectLegend(subObj, legends);\n        if (subObj && subObj.Layer !== undefined && getSubLayers(olLayer)) {\n          delete subObj.Layer;\n        }\n      }\n      if (getCachedCapabilities(olLayer) === undefined) {\n        layerObj = Object.assign(JSON.parse(JSON.stringify(layerObjs[0])), {\n          /* TODO: maxResolution: Math.max(\n            ...layerObjs.map((layer) => this.searchForScaleDenominator(layer))\n          ), */\n          Layer: layerObjs,\n        });\n      }\n      //TODO: this.fillMetadataUrlsIfNotExist(olLayer, resp);\n    } else {\n      layerObj = this.identifyArcgisLayerObj(parseInt(layerName), resp);\n      if (layerObj == undefined) {\n        return;\n      }\n      /* TODO:\n      if (\n        layerObj.Dimension?.name === 'time' ||\n        layerObj.Dimension?.filter((dim) => dim.name === 'time').length > 0\n      ) {\n        this.HsDimensionTimeService.setupTimeLayer(layerDescriptor, layerObj);\n      } */\n      if (layerObj.Layer && getSubLayers(olLayer)) {\n        //TODO: layerObj.maxResolution = this.searchForScaleDenominator(layerObj);\n        /* layerObj.Layer contains sublayers and gets stored to cachedCapabilities. \n        We delete to not crash interface if the service has thousands of layers. There is an assumption that if we specify sublayers \n        in layer definition, user will not be allowed to display other sublayers \n        thus it is fine if the sublayer list gets hidden in layer editor. */\n        delete layerObj.Layer;\n      }\n      this.collectLegend(layerObj, legends);\n    }\n    if (getCachedCapabilities(olLayer) == undefined) {\n      setCacheCapabilities(olLayer, layerObj);\n    }\n    this.parseAttribution(olLayer, getCachedCapabilities(olLayer));\n    const existingLegends = getLegends(olLayer);\n    if (legends.length > 0 && existingLegends == undefined) {\n      setLegends(olLayer, legends);\n    }\n  }\n  identifyArcgisLayerObj(\n    layerId: number,\n    caps: {\n      mapName: string;\n      layers: {\n        id: number;\n        name: string;\n        parentLayerId?: number;\n        defaultVisibility?: boolean;\n        subLayerIds?: number[];\n        minScale?: number;\n        maxScale?: number;\n        type?: string;\n        geometryType?: string;\n      }[];\n    },\n  ): {Title: string; Name: number; Layer?: {Title: string; Name: number}[]} {\n    if (layerId == undefined || isNaN(layerId)) {\n      //parseInt(undefined) returns NaN\n      return {\n        Title: caps.mapName,\n        Name: 0,\n        Layer: caps?.layers?.map((l) => {\n          return {Title: l.name, Name: l.id};\n        }),\n      };\n    }\n    const found = caps.layers.find((l) => l.id == layerId);\n    if (found) {\n      const tmp = {\n        Title: found.name,\n        Name: found.id,\n        Layer: caps.layers\n          .filter((l) => l.parentLayerId == layerId)\n          .map((l) => {\n            return {Title: l.name, Name: l.id};\n          }),\n      };\n      if (tmp.Layer.length == 0) {\n        delete tmp.Layer;\n      }\n      return tmp;\n    }\n\n    return null;\n  }\n\n  private fillMetadataUrlsIfNotExist(layer: any, caps: any) {\n    if (getMetadata(layer) == undefined) {\n      setMetadata(layer, {\n        urls: [{onlineResource: caps.Service.OnlineResource}],\n      });\n    }\n  }\n}\n","import {Injectable, inject} from '@angular/core';\nimport {Subject} from 'rxjs';\n\nimport {Cluster, Source, Vector as VectorSource} from 'ol/source';\nimport {Feature} from 'ol';\nimport {GeoJSON} from 'ol/format';\nimport {Layer} from 'ol/layer';\n\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsLayerDescriptor} from 'hslayers-ng/types';\nimport {HsLayerSelectorService} from './layer-selector.service';\nimport {\n  isLayerWMS,\n  isLayerGeoJSONSource,\n  isLayerGPXSource,\n  isLayerKMLSource,\n  isLayerTopoJSONSource,\n  isLayerVectorLayer,\n  isLayerWMTS,\n  isLayerArcgis,\n  isLayerIDW,\n  getURL,\n  isLayerXYZ,\n  getLayerParams,\n  isLayerClustered,\n} from 'hslayers-ng/services/utils';\nimport {HsLogService} from 'hslayers-ng/services/log';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {getThumbnail, getTitle} from 'hslayers-ng/common/extensions';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsLayerManagerUtilsService {\n  private hsConfig = inject(HsConfig);\n  private hsLayerSelectorService = inject(HsLayerSelectorService);\n  private hsMapService = inject(HsMapService);\n  private hsLog = inject(HsLogService);\n\n  currentLayer: HsLayerDescriptor;\n  layerSelected: Subject<HsLayerDescriptor> = new Subject();\n\n  /**\n   * DEPRECATED?\n   */\n  expandFilter(layer: HsLayerDescriptor, value): void {\n    layer.expandFilter = value;\n    this.hsLayerSelectorService.currentLayer = layer;\n    this.hsLayerSelectorService.select(layer);\n  }\n\n  /**\n   * DEPRECATED?\n   */\n  expandInfo(layer: HsLayerDescriptor, value): void {\n    layer.expandInfo = value;\n  }\n\n  /**\n    Generates downloadable GeoJSON for vector layer.\n    Features are also transformed into the EPSG:4326 projection\n   */\n  saveGeoJson(): void {\n    const geojsonParser = new GeoJSON();\n    const olLayer = this.hsLayerSelectorService.currentLayer.layer;\n    const geojson = geojsonParser.writeFeatures(\n      (isLayerClustered(olLayer)\n        ? (olLayer.getSource() as Cluster<Feature>).getSource()\n        : (olLayer.getSource() as VectorSource)\n      ).getFeatures(),\n      {\n        dataProjection: 'EPSG:4326',\n        featureProjection: this.hsMapService.getCurrentProj(),\n      },\n    );\n    const file = new Blob([geojson], {type: 'application/json'});\n\n    const a = document.createElement('a'),\n      url = URL.createObjectURL(file);\n    a.href = url;\n    a.download = getTitle(\n      this.hsLayerSelectorService.currentLayer.layer,\n    ).replace(/\\s/g, '');\n    document.body.appendChild(a);\n    a.click();\n    setTimeout(() => {\n      document.body.removeChild(a);\n      window.URL.revokeObjectURL(url);\n    }, 0);\n  }\n\n  /**\n   * Triage of layer source type and format.\n   * Only the commonly used values are listed here, it shall be probably extended in the future.\n   * @returns Short description of source type: 'WMS', 'XYZ', 'vector (GeoJSON)' etc.\n   */\n  async getLayerSourceType(layer: Layer<Source>): Promise<string> {\n    if (await isLayerKMLSource(layer)) {\n      return `vector (KML)`;\n    }\n    if (await isLayerGPXSource(layer)) {\n      return `vector (GPX)`;\n    }\n    if (await isLayerGeoJSONSource(layer)) {\n      return `vector (GeoJSON)`;\n    }\n    if (await isLayerTopoJSONSource(layer)) {\n      return `vector (TopoJSON)`;\n    }\n    if (isLayerVectorLayer(layer)) {\n      return 'vector';\n    }\n    if (isLayerWMTS(layer)) {\n      return 'WMTS';\n    }\n    if (isLayerWMS(layer)) {\n      return 'WMS';\n    }\n    if (isLayerXYZ(layer)) {\n      return 'XYZ';\n    }\n    if (isLayerArcgis(layer)) {\n      return 'ArcGIS';\n    }\n\n    if (isLayerIDW(layer)) {\n      return 'IDW';\n    }\n    this.hsLog.warn(\n      `Cannot decide a type of source of layer ${getTitle(layer)}`,\n    );\n    return 'unknown type';\n  }\n\n  /**\n   * Gets the URL provided in the layer's source, if it is not a data blob or undefined\n   * @returns URL provided in the layer's source or 'memory'\n   */\n  getLayerSourceUrl(layer: Layer<Source>): string {\n    const url = getURL(layer)?.split('?')[0]; //better stripe out any URL params\n    if (!url || url.startsWith('data:')) {\n      return 'memory';\n    }\n    return url;\n  }\n\n  checkLayerHealth(layer: Layer<Source>): void {\n    if (isLayerWMS(layer)) {\n      if (getLayerParams(layer).LAYERS == undefined) {\n        this.hsLog.warn('Layer', layer, 'is missing LAYERS parameter');\n      }\n    }\n  }\n\n  /**\n   * Function for adding baselayer thumbnail visible in basemap gallery.\n   * @param layer - Base layer added to map\n   */\n  getImage(layer: Layer<Source>): string {\n    const thumbnail = getThumbnail(layer);\n    if (thumbnail) {\n      if (thumbnail.length > 10) {\n        return thumbnail;\n      }\n      return this.hsConfig.assetsPath + 'img/' + thumbnail;\n    }\n    return this.hsConfig.assetsPath + 'img/default.png';\n  }\n}\n","import {Injectable, inject} from '@angular/core';\n\nimport {Layer} from 'ol/layer';\nimport {Source} from 'ol/source';\n\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsLayerDescriptor, HsTerrainLayerDescriptor} from 'hslayers-ng/types';\nimport {HsLayermanagerDataObject} from './layer-manager.service';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {getBase, getExclusive, getPath} from 'hslayers-ng/common/extensions';\nimport {isLayerVectorLayer} from 'hslayers-ng/services/utils';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsLayerManagerVisibilityService {\n  private hsMapService = inject(HsMapService);\n  private hsConfig = inject(HsConfig);\n  private hsEventBusService = inject(HsEventBusService);\n\n  /**\n   * Store if baselayers are visible (more precisely one of baselayers)\n   */\n  baselayersVisible = true;\n  currentResolution: number;\n  data: HsLayermanagerDataObject;\n\n  layerVisibilityChanged(e) {\n    if (getBase(e.target) != true) {\n      for (const layer of this.data.layers) {\n        if (layer.layer == e.target) {\n          layer.visible = e.target.getVisible();\n          break;\n        }\n      }\n    } else {\n      for (const baseLayer of this.data.baselayers) {\n        if (baseLayer.layer == e.target) {\n          baseLayer.active = e.target.getVisible();\n        } else {\n          baseLayer.active = false;\n        }\n      }\n    }\n  }\n\n  /**\n   * Test if layer (WMS) resolution is within map resolution interval\n   * @param lyr - Selected layer\n   */\n  isLayerInResolutionInterval(lyr: Layer<Source>) {\n    const cur_res = this.hsMapService.getMap().getView().getResolution();\n    this.currentResolution = cur_res;\n    return (\n      lyr.getMinResolution() <= cur_res && cur_res <= lyr.getMaxResolution()\n    );\n  }\n\n  /**\n   * Change visibility of selected layer. If layer has exclusive setting, other layers from same group may be turned invisible\n   * @param visibility - Visibility layer should have\n   * @param layer - Selected layer - wrapped layer object (layer.layer expected)\n   */\n  changeLayerVisibility(visibility: boolean, layer: HsLayerDescriptor) {\n    layer.layer.setVisible(visibility);\n    layer.visible = visibility;\n    layer.grayed = !this.isLayerInResolutionInterval(layer.layer);\n    //Set the other exclusive layers invisible - all or the ones with same path based on config\n    if (visibility && getExclusive(layer.layer) == true) {\n      for (const other_layer of this.data.layers) {\n        const pathExclusivity = this.hsConfig.pathExclusivity\n          ? getPath(other_layer.layer) == getPath(layer.layer)\n          : true;\n        if (\n          getExclusive(other_layer.layer) == true &&\n          other_layer != layer &&\n          pathExclusivity\n        ) {\n          other_layer.layer.setVisible(false);\n          other_layer.visible = false;\n        }\n      }\n    }\n    if (!visibility && isLayerVectorLayer(layer.layer, false)) {\n      this.hsEventBusService.LayerManagerLayerVisibilityChanges.next(layer);\n    }\n  }\n\n  /**\n   * Change visibility (on/off) of baselayers, only one baselayer may be visible\n   * @param $event - Info about the event change visibility event, used if visibility of only one layer is changed\n   * @param layer - Selected layer - wrapped layer object (layer.layer expected)\n   */\n  changeTerrainLayerVisibility($event, layer: HsTerrainLayerDescriptor) {\n    for (const terrainLayer of this.data.terrainLayers) {\n      if (terrainLayer.type == 'terrain') {\n        terrainLayer.visible = terrainLayer == layer;\n        terrainLayer.active = terrainLayer.visible;\n      }\n    }\n    this.hsEventBusService.LayerManagerBaseLayerVisibilityChanges.next(layer);\n  }\n\n  /**\n   * Change visibility (on/off) of baselayers, only one baselayer may be visible\n   * @param $event - Info about the event change visibility event, used if visibility of only one layer is changed\n   * @param layer - Selected layer - wrapped layer object (layer.layer expected)\n   */\n  changeBaseLayerVisibility($event = null, layer = null) {\n    if (layer !== null && layer.layer === undefined) {\n      return;\n    }\n    //*NOTE: Currently breaking base layer visibility when loading from composition with custom base layer to\n    //other compositions without any base layer\n    for (const baseLayer of this.data.baselayers) {\n      if (!baseLayer.layer) {\n        continue;\n      }\n      const isToggledLayer = baseLayer == layer;\n      if ($event) {\n        baseLayer.visible = isToggledLayer;\n        baseLayer.active = isToggledLayer;\n        // Don't trigger change:visible event when isToggledLayer = false\n        baseLayer.layer.set('visible', isToggledLayer, !isToggledLayer);\n      } else {\n        if (this.baselayersVisible) {\n          baseLayer.layer.setVisible(false);\n        } else {\n          if (baseLayer.visible) {\n            baseLayer.layer.setVisible(true);\n          }\n        }\n      }\n    }\n    if ($event) {\n      if (this.baselayersVisible) {\n        layer.active = true;\n      }\n      this.baselayersVisible = true;\n    } else {\n      this.baselayersVisible = !this.baselayersVisible;\n    }\n    this.hsEventBusService.LayerManagerBaseLayerVisibilityChanges.next(layer);\n  }\n}\n","import {DomSanitizer, SafeHtml} from '@angular/platform-browser';\nimport {Injectable, Signal, inject} from '@angular/core';\nimport {\n  Observable,\n  filter as rxjsFilter,\n  scan,\n  share,\n  switchMap,\n  take,\n} from 'rxjs';\nimport {toSignal} from '@angular/core/rxjs-interop';\n\nimport {CollectionEvent} from 'ol/Collection';\nimport {EventsKey} from 'ol/events';\nimport {Layer} from 'ol/layer';\nimport {Map as OlMap} from 'ol';\nimport {Source} from 'ol/source';\nimport {unByKey} from 'ol/Observable';\n\nimport {HS_PRMS, HsShareUrlService} from 'hslayers-ng/services/share';\nimport {HsAddDataOwsService} from 'hslayers-ng/services/add-data';\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsDimensionTimeService} from 'hslayers-ng/services/get-capabilities';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {\n  HsLayerDescriptor,\n  HsTerrainLayerDescriptor,\n  HsLayermanagerFolder,\n} from 'hslayers-ng/types';\nimport {HsLayerSelectorService} from './layer-selector.service';\nimport {\n  debounce,\n  getLayerParams,\n  getLayerTitle,\n  getLayerZIndex,\n  getMaxLayerZIndex,\n  getMinLayerZIndex,\n  isLayerVectorLayer,\n  shiftLayersZIndex,\n} from 'hslayers-ng/services/utils';\nimport {HsLayoutService} from 'hslayers-ng/services/layout';\nimport {HsLogService} from 'hslayers-ng/services/log';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsQueuesService} from 'hslayers-ng/services/queues';\nimport {HsToastService} from 'hslayers-ng/common/toast';\nimport {\n  SHOW_IN_LAYER_MANAGER,\n  getAbstract,\n  getBase,\n  getCluster,\n  getFromBaseComposition,\n  getFromComposition,\n  getGreyscale,\n  getIgnorePathZIndex,\n  getLegends,\n  getName,\n  getPath,\n  getQueryCapabilities,\n  getShowInLayerManager,\n  getSubLayers,\n  getTitle,\n  setGreyscale,\n  setName,\n  setOrigLayers,\n} from 'hslayers-ng/common/extensions';\n\nimport {HsLayerEditorVectorLayerService} from './layer-editor-vector-layer.service';\nimport {HsLayerManagerFolderService} from './layer-manager-folder.service';\nimport {HsLayerManagerLoadingProgressService} from './layer-manager-loading-progress.service';\nimport {HsLayerManagerMetadataService} from './layer-manager-metadata.service';\nimport {HsLayerManagerUtilsService} from './layer-manager-utils.service';\nimport {HsLayerManagerVisibilityService} from './layer-manager-visibility.service';\n\nexport class HsLayermanagerDataObject {\n  // Folders object for structure of layers.\n  folders: Signal<Map<string, HsLayermanagerFolder>>;\n  layers: HsLayerDescriptor[];\n  baselayers: HsLayerDescriptor[];\n  terrainLayers: HsTerrainLayerDescriptor[];\n  baselayer?: string;\n  /**\n   * Defined from component to allow reactivity\n   */\n  filter: Observable<string>;\n  constructor() {\n    /**\n     * List of all layers (baselayers are excluded) loaded in LayerManager.\n     */\n    this.layers = [];\n    /**\n     * List of all baselayers loaded in layer manager.\n     */\n    this.baselayers = [];\n    /*\n     * List of all cesium terrain layers loaded in layer manager.\n     */\n    this.terrainLayers = [];\n  }\n}\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsLayerManagerService {\n  hsConfig = inject(HsConfig);\n  hsDimensionTimeService = inject(HsDimensionTimeService);\n  hsEventBusService = inject(HsEventBusService);\n  hsLanguageService = inject(HsLanguageService);\n  hsLayerEditorVectorLayerService = inject(HsLayerEditorVectorLayerService);\n  hsLayerManagerMetadata = inject(HsLayerManagerMetadataService);\n  hsLayerSelectorService = inject(HsLayerSelectorService);\n  hsLayoutService = inject(HsLayoutService);\n  hsLog = inject(HsLogService);\n  hsMapService = inject(HsMapService);\n  hsQueuesService = inject(HsQueuesService);\n  hsAddDataOwsService = inject(HsAddDataOwsService);\n  private hsShareUrlService = inject(HsShareUrlService);\n  hsToastService = inject(HsToastService);\n  sanitizer = inject(DomSanitizer);\n  private hsLayerManagerUtilsService = inject(HsLayerManagerUtilsService);\n  private hsLayerManagerVisibilityService = inject(\n    HsLayerManagerVisibilityService,\n  );\n  private folderService = inject(HsLayerManagerFolderService);\n  private hsLoadingProgressService = inject(\n    HsLayerManagerLoadingProgressService,\n  );\n\n  data = new HsLayermanagerDataObject();\n  timer: any;\n  zIndexValue = 0;\n\n  mapEventHandlers: EventsKey[];\n  constructor() {\n    //Keeps 'data' object intact and in one place while allowing to split method between more services\n    this.hsLayerManagerVisibilityService.data = this.data;\n    this.folderService.data = this.data;\n\n    // Handle the state accumulation via the reducer\n    this.data.folders = toSignal(\n      this.folderService.folderAction$.pipe(\n        scan(\n          (acc, value) => this.folderService.foldersReducer(acc, value),\n          new Map<string, HsLayermanagerFolder>(),\n        ),\n        share(),\n      ),\n    );\n\n    this.hsEventBusService.layerManagerUpdates.subscribe((layer) => {\n      this.refreshLists();\n    });\n\n    /**\n     * Setup time layer\n     */\n    //Give enough time for layerDescriptor to be set up by waiting for\n    // mapEventHandlersSet to emit first\n    this.hsEventBusService.mapEventHandlersSet\n      .pipe(\n        take(1),\n        //Switch to layerDimensionDefinitionChanges\n        switchMap((_) => {\n          return this.hsEventBusService.layerDimensionDefinitionChanges.pipe(\n            //Continue only for WmsT layers\n            rxjsFilter((layer) =>\n              this.hsDimensionTimeService.layerIsWmsT(layer),\n            ),\n          );\n        }),\n      )\n      .subscribe((olLayer) => {\n        const layerDescriptor = this.data.layers.find(\n          (ld) => ld.layer == olLayer,\n        );\n        if (layerDescriptor) {\n          this.hsDimensionTimeService.setupTimeLayer(layerDescriptor);\n        }\n      });\n\n    this.hsMapService.loaded().then(async (map) => {\n      for (const lyr of map.getLayers().getArray()) {\n        this.applyZIndex(lyr as Layer<Source>);\n        await this.layerAdded(\n          {\n            element: lyr as Layer<Source>,\n          },\n          true,\n        );\n      }\n\n      this.folderService.folderAction$.next(this.folderService.sortByZ());\n      this.folderService.sortLayersByZ(this.data.layers);\n      this.hsEventBusService.layerManagerUpdates.next(null);\n      this.toggleEditLayerByUrlParam();\n\n      this.setupMapEventHandlers(map);\n    });\n  }\n\n  /**\n   * UnBind event listeners\n   */\n  destroy(): void {\n    for (const handler of this.mapEventHandlers) {\n      unByKey(handler);\n    }\n  }\n\n  /**\n   * Setup map-event handlers and store their keys in an array\n   */\n  private setupMapEventHandlers(map: OlMap) {\n    const onLayerAddition = map.getLayers().on('add', (e) => {\n      this.applyZIndex(\n        e.element as Layer<Source>,\n        //z-index of composition layers should be the same as order of layers in composition.\n        //ignoring folder structure\n        !getIgnorePathZIndex(e.element as Layer<Source>),\n      );\n      if (getShowInLayerManager(e.element) == false) {\n        return;\n      }\n      this.layerAdded(e as any, getFromBaseComposition(e.element));\n    });\n    const onLayerRemove = map\n      .getLayers()\n      .on('remove', (e) => this.layerRemoved(e as any));\n\n    const onResolutionChange = map.getView().on(\n      'change:resolution',\n      debounce(\n        (e) => this.resolutionChangeDebounceCallback(),\n        200,\n        false,\n        this,\n      ),\n    );\n    this.mapEventHandlers = [\n      onLayerAddition,\n      onLayerRemove,\n      onResolutionChange,\n    ];\n    this.hsEventBusService.mapEventHandlersSet.next();\n  }\n\n  /**\n   * Function for adding layer added to map into layer manager structure.\n   * In service automatically used after layer is added to map.\n   * Layers which shouldn't be in layer manager (showInLayerManager property) aren't added.\n   * Loading events and legends URLs are created for each layer.\n   * Layers also get automatic watcher for changing visibility (to synchronize visibility in map and layer manager).\n   * Position is calculated for each layer and for time layers time properties are created.\n   * Each layer is also inserted in correct layer list and inserted into folder structure.\n   * @param e - Event object emitted by OL add layer event\n   * @param suspendEvents - If set to true, no new values for layerAdditions, layerManagerUpdates or compositionEdits observables will be emitted.\n   */\n  async layerAdded(\n    e: {element: Layer<Source>},\n    suspendEvents?: boolean,\n  ): Promise<void> {\n    const layer = e.element;\n    this.hsLayerManagerUtilsService.checkLayerHealth(layer);\n    const showInLayerManager = getShowInLayerManager(layer) ?? true;\n    layer.on('change:visible', (e) =>\n      this.hsLayerManagerVisibilityService.layerVisibilityChanged(e),\n    );\n    if (isLayerVectorLayer(layer) && getCluster(layer)) {\n      this.hsLayerEditorVectorLayerService.layersClusteredFromStart.push(layer);\n      await this.hsLayerEditorVectorLayerService.cluster(\n        true,\n        layer,\n        this.hsConfig.clusteringDistance || 40,\n        false,\n      );\n    }\n    /**\n     * Wrapper for layers in layer manager structure.\n     * Each layer object stores layer's title, grayed (if layer is currently visible - for layers which have max/min resolution), visible (layer is visible), and actual layer.\n     * Each layer wrapper is accessible from layer list or folder structure.\n     */\n    const layerDescriptor: HsLayerDescriptor = {\n      title: getLayerTitle(layer),\n      abstract: getAbstract(layer),\n      layer,\n      grayed:\n        !this.hsLayerManagerVisibilityService.isLayerInResolutionInterval(\n          layer,\n        ),\n      visible: layer.getVisible(),\n      showInLayerManager,\n      uid: crypto.randomUUID(),\n      idString() {\n        return 'layer' + (this.coded_path || '') + (this.uid || '');\n      },\n      type: await this.hsLayerManagerUtilsService.getLayerSourceType(layer),\n      source: this.hsLayerManagerUtilsService.getLayerSourceUrl(layer),\n    };\n    this.hsLoadingProgressService.loadingEvents(layerDescriptor);\n    layerDescriptor.trackBy = `${layerDescriptor.uid} ${layerDescriptor.position}`;\n\n    layer.on('propertychange', (event) => {\n      if (event.key == 'title') {\n        layerDescriptor.title = getLayerTitle(layer);\n      }\n      if (event.key == SHOW_IN_LAYER_MANAGER) {\n        layerDescriptor.showInLayerManager =\n          getShowInLayerManager(layer) ?? true;\n        if (layerDescriptor.showInLayerManager) {\n          this.folderService.folderAction$.next(\n            this.folderService.addLayer(layerDescriptor),\n          );\n        }\n      }\n    });\n\n    if (getBase(layer) !== true) {\n      if (showInLayerManager) {\n        this.folderService.folderAction$.next(\n          this.folderService.addLayer(layerDescriptor),\n        );\n      }\n      layerDescriptor.legends = getLegends(layer);\n      this.data.layers.push(layerDescriptor);\n      if (getSubLayers(layer)) {\n        /*Need to keep track of original LAYERS value for saving to composition*/\n        const params = getLayerParams(layer);\n        if (params?.LAYERS) {\n          setOrigLayers(layer, params.LAYERS);\n        }\n      }\n      if (getQueryCapabilities(layer) !== false) {\n        const que = this.hsQueuesService.ensureQueue(\n          'wmsGetCapabilities',\n          1,\n          //In case of slow request give 10s for other tasks to complete before\n          //making another request that might be blocking otherwise\n          10000,\n        );\n        que.push(async (cb) => {\n          try {\n            await this.hsLayerManagerMetadata.fillMetadata(layerDescriptor);\n            layerDescriptor.grayed =\n              !this.hsLayerManagerVisibilityService.isLayerInResolutionInterval(\n                layer,\n              );\n            cb();\n          } catch (err) {\n            cb(err);\n          }\n        });\n      }\n    } else {\n      layerDescriptor.active = layer.getVisible();\n      if (layerDescriptor.active) {\n        this.hsLayerManagerVisibilityService.changeBaseLayerVisibility(\n          true,\n          layerDescriptor,\n        );\n      }\n      layerDescriptor.thumbnail =\n        this.hsLayerManagerUtilsService.getImage(layer);\n      this.data.baselayers.push(<HsLayerDescriptor>layerDescriptor);\n      //Composition layers are already set up using ol.layer.className\n      if (getGreyscale(layer) && !getFromComposition(layer)) {\n        setTimeout(() => {\n          this.setGreyscale(layerDescriptor);\n        }, 100);\n      }\n    }\n\n    if (!getName(layer)) {\n      setName(layer, getTitle(layer));\n    }\n    //*NOTE Commented out, because the  following references to this.data.baselayer are causing issues.\n\n    // if (layer.getVisible() && getBase(layer)) {\n    //   this.data.baselayer = getLayerTitle(layer);\n    // }\n\n    this.folderService.folderAction$.next(this.folderService.sortByZ());\n    if (!suspendEvents) {\n      this.hsEventBusService.layerAdditions.next(layerDescriptor);\n      this.hsEventBusService.layerManagerUpdates.next(layer);\n      this.hsEventBusService.compositionEdits.next();\n    }\n  }\n\n  /**\n   * Sort layers which are added to map and registered\n   * in layermanager by Z and notify components that layer positions have changed.\n   */\n  updateLayerListPositions(): void {\n    //TODO: We could also sort by title or other property. Not supported right now though, just zIndex\n    this.folderService.folderAction$.next(this.folderService.sortByZ());\n  }\n\n  sortLayersByZ(arr: any[]): any[] {\n    return this.folderService.sortLayersByZ(arr);\n  }\n\n  /**\n   * Executed when a content of data.baselayers or data.terrainLayers changes.\n   * Angular does not detect changes inside arrays unless triggered from the view.\n   * But it does detect changes of class properties.\n   * Hence the whole array is copied so an \"immutable\" change happens and Angular detects that.\n   */\n  refreshLists(): void {\n    this.data.baselayers = Array.from(this.data.baselayers);\n    this.data.terrainLayers = Array.from(this.data.terrainLayers);\n  }\n\n  /**\n   * (PRIVATE) Get layer by its title\n   */\n  getLayerByTitle(title: string): HsLayerDescriptor | undefined {\n    let tmp;\n    for (const layer of this.data.layers) {\n      if (layer.title == title) {\n        tmp = layer;\n      }\n    }\n    return tmp;\n  }\n\n  /**\n   * Get layer container object for OL layer\n   * @param layer - to get layer title\n   * @param base - Wether to search within base layers or not. Defaults to false\n   * @returns Layer container which is used in layer-list directive\n   */\n  getLayerDescriptorForOlLayer(\n    layer: Layer<Source>,\n    base = false,\n  ): HsLayerDescriptor {\n    const layers = base ? 'baselayers' : 'layers';\n    return (this.data[layers] as Array<any>).find((l) => l.layer == layer);\n  }\n\n  /**\n   * Callback function for removing layer. Clean layers variables\n   * @param e - Events emitted by ol.Collection instances are instances of this type.\n   */\n  layerRemoved(e: CollectionEvent<Layer>): void {\n    const showInLayerManager = getShowInLayerManager(e.element);\n    /**\n     * Layers outside the folder structure eg. base and those not shown in LM\n     * should not trigger folder update\n     */\n    if (showInLayerManager !== false && !getBase(e.element)) {\n      this.folderService.folderAction$.next(\n        this.folderService.removeLayer(\n          this.getLayerDescriptorForOlLayer(e.element),\n        ),\n      );\n    }\n    for (let i = 0; i < this.data.layers.length; i++) {\n      if (this.data.layers[i].layer == e.element) {\n        this.data.layers.splice(i, 1);\n      }\n    }\n    for (let i = 0; i < this.data.baselayers.length; i++) {\n      if (this.data.baselayers[i].layer == e.element) {\n        this.data.baselayers.splice(i, 1);\n      }\n    }\n    this.removeFromArray(\n      this.hsLayerEditorVectorLayerService.layersClusteredFromStart,\n      e.element,\n    );\n    this.hsEventBusService.layerManagerUpdates.next(e.element);\n    this.hsEventBusService.layerRemovals.next(e.element);\n    if (showInLayerManager !== false) {\n      this.hsEventBusService.compositionEdits.next();\n    }\n    const layers = this.hsMapService.getMap().getLayers().getArray();\n    if (this.zIndexValue > layers.length) {\n      this.zIndexValue--;\n    }\n  }\n\n  removeFromArray(arrayToSearch: Layer<Source>[], layer: Layer<Source>) {\n    for (let i = 0; i < arrayToSearch.length; i++) {\n      if (arrayToSearch[i] == layer) {\n        arrayToSearch.splice(i, 1);\n      }\n    }\n  }\n\n  /**\n   * Makes layer greyscale\n   * @param layer - Selected layer (currentLayer)\n   */\n  setGreyscale(layer: HsLayerDescriptor): void {\n    const layerContainer = this.hsLayoutService.contentWrapper.querySelector(\n      '.ol-layers > div:first-child',\n    );\n    if (layerContainer.classList.contains('hs-greyscale')) {\n      layerContainer.classList.remove('hs-greyscale');\n      setGreyscale(layer.layer, false);\n    } else {\n      layerContainer.classList.add('hs-greyscale');\n      setGreyscale(layer.layer, true);\n    }\n\n    setTimeout(() => {\n      //Dispatching change event triggers renderer which causes non base layer to be\n      //moved into separate canvas thus not being affected by css filter\n      layer.layer.getSource().changed();\n    }, 0);\n  }\n\n  resolutionChangeDebounceCallback(): void {\n    setTimeout(() => {\n      for (let i = 0; i < this.data.layers.length; i++) {\n        const tmp =\n          !this.hsLayerManagerVisibilityService.isLayerInResolutionInterval(\n            this.data.layers[i].layer,\n          );\n        if (this.data.layers[i].grayed != tmp) {\n          this.data.layers[i].grayed = tmp;\n        }\n      }\n      this.timer = null;\n    }, 250);\n  }\n\n  /**\n   * Opens editor for layer specified in 'hs-layer-selected' url parameter\n   */\n  private toggleEditLayerByUrlParam() {\n    const layerTitle = this.hsShareUrlService.getParamValue(\n      HS_PRMS.layerSelected,\n    );\n    if (\n      layerTitle != undefined &&\n      this.hsLayoutService.mainpanel === 'layerManager'\n    ) {\n      const layerFound = this.data.layers.find(\n        (layer) => layer.title == layerTitle,\n      );\n      if (layerFound) {\n        layerFound.layer.set('editorOnInit', true);\n        this.hsEventBusService.layerSelectedFromUrl.next(layerFound.layer);\n      }\n    }\n  }\n\n  private setPathMaxZIndex(layer: Layer<Source>): void {\n    const pathLayers = getBase(layer)\n      ? this.data.baselayers\n      : this.data.layers.filter(\n          (descriptor) =>\n            getPath(descriptor.layer) == (getPath(layer) ?? 'other'),\n        );\n\n    if (pathLayers.length === 0) {\n      return;\n    }\n\n    const maxPathZIndex = Math.max(\n      ...pathLayers.map((descriptor) => getLayerZIndex(descriptor.layer)),\n    );\n    const targetZIndex = maxPathZIndex + 1;\n    layer.setZIndex(targetZIndex);\n\n    //Increase zIndex of the layers that are supposed to be rendered above inserted\n    for (const descriptor of this.data.layers) {\n      if (getLayerZIndex(descriptor.layer) >= targetZIndex) {\n        descriptor.layer.setZIndex(getLayerZIndex(descriptor.layer) + 1);\n      }\n    }\n  }\n\n  /**\n   * When adding a base layer from composition (asCallback false), place it below any existing\n   * overlay layers: on top of other base layers, or at 0 if none. Shifts overlay layers up if needed.\n   */\n  private applyBaseLayerZIndexFromComposition(layer: Layer<Source>): void {\n    const baseLayers = this.data.baselayers.map((ld) => ld.layer);\n    const overlayLayers = this.data.layers.map((ld) => ld.layer);\n\n    const hasBaseLayers = baseLayers.length > 0;\n    const minOverlayZ = getMinLayerZIndex(overlayLayers);\n    const newBaseZ = hasBaseLayers\n      ? getMaxLayerZIndex(baseLayers) + 1\n      : minOverlayZ !== undefined\n        ? minOverlayZ - 1\n        : 0;\n\n    if (hasBaseLayers && minOverlayZ !== undefined && newBaseZ >= minOverlayZ) {\n      const shift = newBaseZ - minOverlayZ + 1;\n      shiftLayersZIndex(overlayLayers, shift);\n      this.zIndexValue = Math.max(\n        this.zIndexValue,\n        getMaxLayerZIndex(overlayLayers, 0) + 1,\n      );\n    }\n\n    layer.setZIndex(newBaseZ);\n  }\n\n  /**\n   * Sets zIndex of layer being added.\n   * @param layer - layer being added\n   * @param asCallback - Whether the function is called directly or as a callback of add layer event.\n   * No need to run each layer through setPathMaxZIndex on init\n   */\n  applyZIndex(layer: Layer<Source>, asCallback?: boolean): void {\n    if (asCallback && getShowInLayerManager(layer) !== false) {\n      this.setPathMaxZIndex(layer);\n    }\n\n    if (!asCallback && getBase(layer)) {\n      this.applyBaseLayerZIndexFromComposition(layer);\n    }\n\n    if (layer.getZIndex() == undefined) {\n      layer.setZIndex(this.zIndexValue++);\n    } else {\n      this.zIndexValue++;\n    }\n  }\n\n  makeSafeAndTranslate(group: string, input: string): SafeHtml {\n    const translation = this.hsLanguageService.getTranslationIgnoreNonExisting(\n      group,\n      input,\n      undefined,\n    );\n    if (translation) {\n      return this.sanitizer.bypassSecurityTrustHtml(translation);\n    }\n    return '';\n  }\n}\n","import {Injectable, inject} from '@angular/core';\n\nimport {Cluster, Vector as VectorSource} from 'ol/source';\nimport {Feature} from 'ol';\nimport {Vector as VectorLayer} from 'ol/layer';\n\nimport {HsAddDataOwsService} from 'hslayers-ng/services/add-data';\nimport {HsLayerManagerUtilsService} from './layer-manager-utils.service';\nimport {HsLayerSelectorService} from './layer-selector.service';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {\n  getCachedCapabilities,\n  getName,\n  getOrigLayers,\n  getTitle,\n  setName,\n  setSubLayers,\n  setTitle,\n} from 'hslayers-ng/common/extensions';\nimport {\n  getURL,\n  isLayerVectorLayer,\n  getLayerParams,\n  updateLayerParams,\n  isLayerClustered,\n} from 'hslayers-ng/services/utils';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsLayerManagerCopyLayerService {\n  hsLayerSelectorService = inject(HsLayerSelectorService);\n  hsMapService = inject(HsMapService);\n  hsAddDataOwsService = inject(HsAddDataOwsService);\n  private hsLayerManagerUtilsService = inject(HsLayerManagerUtilsService);\n\n  /**\n    Creates a copy of the currentLayer\n   */\n  async copyLayer(newTitle: string): Promise<void> {\n    const copyTitle = this.createCopyTitle(newTitle);\n    const currentOlLayer = this.hsLayerSelectorService.currentLayer.layer;\n    if (isLayerVectorLayer(currentOlLayer)) {\n      this.copyVectorLayer(copyTitle);\n    } else {\n      const url = getURL(currentOlLayer);\n      let name = getCachedCapabilities(currentOlLayer)?.Name;\n      if (!name || typeof name === 'number') {\n        name = getName(currentOlLayer);\n      }\n      const layerType =\n        await this.hsLayerManagerUtilsService.getLayerSourceType(\n          currentOlLayer,\n        );\n      const layerCopy = await this.hsAddDataOwsService.connectToOWS({\n        type: layerType.toLowerCase() as any,\n        uri: url,\n        layer: name,\n        getOnly: true,\n      });\n      if (layerCopy[0]) {\n        layerCopy[0].setProperties(currentOlLayer.getProperties());\n        setTitle(layerCopy[0], copyTitle);\n        //Currently ticked sub-layers are stored in LAYERS\n        const subLayers = getLayerParams(currentOlLayer)?.LAYERS;\n        if (subLayers) {\n          setSubLayers(layerCopy[0], subLayers);\n        }\n        updateLayerParams(layerCopy[0], getLayerParams(currentOlLayer));\n        // We don't want the default styles to be set which add-data panel does.\n        // Otherwise they won't be cleared if the original layer has undefined STYLES\n        // Also we have to set LAYERS to currentLayer original values for composition saving\n        updateLayerParams(layerCopy[0], {\n          STYLES: null,\n          //Object.assign will ignore it if origLayers is undefined.\n          LAYERS: getOrigLayers(currentOlLayer),\n        });\n        this.hsMapService.getMap().addLayer(layerCopy[0]);\n      }\n    }\n  }\n\n  /**\n    Creates a copy of the currentLayer if it is a vector layer\n   */\n  copyVectorLayer(newTitle: string): void {\n    let features;\n    const currentOlLayer = this.hsLayerSelectorService.currentLayer.layer;\n    if (isLayerClustered(currentOlLayer)) {\n      features = (currentOlLayer.getSource() as Cluster<Feature>)\n        .getSource()\n        ?.getFeatures();\n    } else {\n      features = (currentOlLayer.getSource() as VectorSource)?.getFeatures();\n    }\n\n    const copiedLayer = new VectorLayer({\n      properties: currentOlLayer.getProperties(),\n      source: new VectorSource({\n        features,\n      }),\n      style: (currentOlLayer as VectorLayer<VectorSource<Feature>>).getStyle(),\n    });\n    setTitle(copiedLayer, newTitle);\n    setName(copiedLayer, getName(currentOlLayer));\n    this.hsMapService.addLayer(copiedLayer);\n  }\n\n  /**\n    Creates a new title for the copied layer\n   */\n  createCopyTitle(newTitle: string): string {\n    const layerName = getName(this.hsLayerSelectorService.currentLayer.layer);\n    let copyTitle = getTitle(this.hsLayerSelectorService.currentLayer.layer);\n    let numb = 0;\n    if (newTitle && newTitle !== copyTitle) {\n      copyTitle = newTitle;\n    } else {\n      const layerCopies = this.hsMapService\n        .getLayersArray()\n        .filter((l) => getName(l) == layerName);\n      numb = layerCopies !== undefined ? layerCopies.length : 0;\n      copyTitle = copyTitle.replace(/\\([0-9]\\)/g, '').trimEnd();\n      copyTitle = copyTitle + ` (${numb})`;\n    }\n    return copyTitle;\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ImageLayer","getProjection","rxjsFilter","VectorLayer","VectorSource"],"mappings":"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"}