{"version":3,"file":"hslayers-ng-services-draw.mjs","sources":["../../../projects/hslayers/services/draw/draw.service.params.ts","../../../projects/hslayers/services/draw/draw.service.ts","../../../projects/hslayers/services/draw/hslayers-ng-services-draw.ts"],"sourcesContent":["import {Subject} from 'rxjs';\nimport {Signal} from '@angular/core';\n\nimport {Collection, Feature} from 'ol';\nimport {DragBox, Draw, Modify, Snap} from 'ol/interaction';\nimport {EventsKey} from 'ol/events';\nimport {Layer, Vector as VectorLayer} from 'ol/layer';\nimport {Source, Vector as VectorSource} from 'ol/source';\n\nexport class HsDrawServiceParams {\n  drawableLayers: Array<Layer<Source>> = [];\n  /**\n   * Drawable layers available on Layman not currently added to map\n   */\n  drawableLaymanLayers: Array<any> = [];\n  /**\n   * Whether there are some available drawable layers either visible in map or on server\n   */\n  drawableLayersAvailable = false;\n  /**\n   * Whether there are some drawable layers in a map\n   */\n  hasSomeDrawables = false;\n  /**\n   * Whether there are multiple drawable layers in a map\n   */\n  moreThanOneDrawable = false;\n  draw: Draw;\n  modify: Modify;\n\n  boxSelection: DragBox;\n  boxSelectionActive = false;\n  /**\n   * Snap interaction\n   */\n  snap: Snap;\n  snapActive = false;\n  snapSource: VectorSource;\n  snapLayer: VectorLayer<VectorSource<Feature>>;\n  /**\n   * String of type GeometryType\n   */\n  type: 'Point' | 'Polygon' | 'LineString' | 'Circle';\n  selectedLayer: VectorLayer<VectorSource<Feature>>;\n  tmpDrawLayer: any;\n  source: VectorSource;\n  drawActive = false;\n  selectedFeatures: any = new Collection();\n  toggleSelectionString = 'selectAllFeatures';\n  onSelected: any;\n  currentStyle: any;\n  /**\n   * Toggles toolbar button 'Draw' class\n   */\n  highlightDrawButton = false;\n  onDeselected: any;\n  laymanEndpoint: any;\n  previouslySelected: any;\n  isAuthenticated: Signal<boolean>;\n  onlyMine = true;\n  addedLayersRemoved = false;\n  eventHandlers: EventsKey[] = [];\n\n  public drawingLayerChanges: Subject<{\n    layer: Layer<Source>;\n    source: VectorSource;\n  }> = new Subject();\n\n  layerMetadataDialog: Subject<void> = new Subject();\n\n  requiredSymbolizer = {\n    Point: ['Point'],\n    Polygon: ['Fill', 'Line', 'Polygon'],\n    LineString: ['Line'],\n    Circle: ['Fill', 'Line', 'Polygon'],\n  };\n}\n","import {Injectable, NgZone, PLATFORM_ID, inject} from '@angular/core';\nimport {isPlatformBrowser} from '@angular/common';\nimport {lastValueFrom, merge} from 'rxjs';\nimport {takeUntilDestroyed, toObservable} from '@angular/core/rxjs-interop';\n\nimport {Circle} from 'ol/geom';\nimport {Cluster, Source, Vector as VectorSource} from 'ol/source';\nimport {DragBox, Draw, Modify, Snap} from 'ol/interaction';\nimport {DrawEvent} from 'ol/interaction/Draw';\nimport {EventsKey} from 'ol/events';\nimport {Feature, MapBrowserEvent} from 'ol';\nimport {Layer, Vector as VectorLayer} from 'ol/layer';\nimport {fromCircle} from 'ol/geom/Polygon';\nimport {platformModifierKeyOnly} from 'ol/events/condition';\nimport {unByKey} from 'ol/Observable';\n\nimport {\n  HsAddDataOwsService,\n  HsAddDataVectorService,\n  HsLaymanBrowserService,\n} from 'hslayers-ng/services/add-data';\nimport {\n  HsCommonLaymanLayerService,\n  HsCommonLaymanService,\n} from 'hslayers-ng/common/layman';\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsConfirmDialogComponent} from 'hslayers-ng/common/confirm';\nimport {HsDialogContainerService} from 'hslayers-ng/common/dialogs';\nimport {HsDrawServiceParams} from './draw.service.params';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsLaymanService} from 'hslayers-ng/services/save-map';\nimport {HsLayoutService} from 'hslayers-ng/services/layout';\nimport {HsLogService} from 'hslayers-ng/services/log';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {\n  HsQueryBaseService,\n  HsQueryVectorService,\n} from 'hslayers-ng/services/query';\nimport {HsRemoveLayerDialogService} from 'hslayers-ng/common/remove-multiple';\nimport {HsToastService} from 'hslayers-ng/common/toast';\nimport {defaultStyle} from 'hslayers-ng/services/styler';\nimport {\n  getEditor,\n  getName,\n  getSld,\n  getTitle,\n  setDefinition,\n  setEditor,\n  setPath,\n  setRemovable,\n  setShowInLayerManager,\n  setSld,\n  setTitle,\n  setWorkspace,\n} from 'hslayers-ng/common/extensions';\nimport {isLayerClustered, isLayerDrawable} from 'hslayers-ng/services/utils';\n\ntype ActivateParams = {\n  onDrawStart?;\n  onDrawEnd?;\n  onSelected?;\n  onDeselected?;\n  changeStyle?;\n  drawState?: boolean;\n};\n\nexport const TMP_LAYER_TITLE = 'tmpDrawLayer';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsDrawService extends HsDrawServiceParams {\n  hsMapService = inject(HsMapService);\n  hsEventBusService = inject(HsEventBusService);\n  hsLayoutService = inject(HsLayoutService);\n  hsDialogContainerService = inject(HsDialogContainerService);\n  hsLogService = inject(HsLogService);\n  hsConfig = inject(HsConfig);\n  hsQueryBaseService = inject(HsQueryBaseService);\n  hsQueryVectorService = inject(HsQueryVectorService);\n  hsLaymanService = inject(HsLaymanService);\n  hsLanguageService = inject(HsLanguageService);\n  hsLaymanBrowserService = inject(HsLaymanBrowserService);\n  hsAddDataVectorService = inject(HsAddDataVectorService);\n  hsCommonLaymanService = inject(HsCommonLaymanService);\n  hsCommonLaymanLayerService = inject(HsCommonLaymanLayerService);\n  hsToastService = inject(HsToastService);\n  hsAddDataOwsService = inject(HsAddDataOwsService);\n  private hsRemoveLayerDialogService = inject(HsRemoveLayerDialogService);\n  private zone = inject(NgZone);\n  private platformId = inject(PLATFORM_ID);\n\n  isAuthenticated = this.hsCommonLaymanService.isAuthenticated;\n  pendingLayers = this.hsCommonLaymanLayerService.pendingLayers;\n\n  constructor() {\n    super();\n    this.keyUp = this.keyUp.bind(this);\n    this.hsMapService.loaded().then((map) => {\n      this.modify = new Modify({\n        features: this.selectedFeatures,\n      });\n      map.addInteraction(this.modify);\n\n      this.selectedFeatures.on('add', (e) => {\n        if (this.onSelected) {\n          this.onSelected(e);\n        }\n      });\n\n      this.selectedFeatures.on('remove', (e) => {\n        if (this.selectedFeatures.getLength() == 0) {\n          this.modify.setActive(false);\n        }\n      });\n\n      this.hsEventBusService.vectorQueryFeatureSelection.subscribe((event) => {\n        this.selectedFeatures.push(event.feature);\n        const layer = event.selector.getLayer(event.feature);\n        if (getEditor(layer)?.editable) {\n          this.modify.setActive(true);\n        }\n      });\n\n      this.hsEventBusService.vectorQueryFeatureDeselection.subscribe(\n        ({feature, selector}) => {\n          this.selectedFeatures.remove(feature);\n        },\n      );\n\n      merge(\n        this.hsEventBusService.addedLayersRemoved,\n        this.hsEventBusService.mapResets,\n      ).subscribe(() => {\n        this.addedLayersRemoved = true;\n        this.fillDrawableLayers();\n      });\n\n      this.hsLayoutService.mainpanel$.subscribe((which) => {\n        if (which === 'draw' && this.hsMapService.getMap()) {\n          this.fillDrawableLayers();\n        }\n      });\n    });\n\n    toObservable(this.hsCommonLaymanService.isAuthenticated)\n      .pipe(takeUntilDestroyed())\n      .subscribe((_isAuthenticated) => {\n        this.fillDrawableLayers();\n        //When metadata dialog window opened. Layer is being added\n        if (this.selectedLayer && this.tmpDrawLayer) {\n          setWorkspace(this.selectedLayer, this.hsCommonLaymanService.user());\n          setDefinition(this.selectedLayer, {\n            format: _isAuthenticated ? 'WFS' : null,\n            url: _isAuthenticated\n              ? this.hsCommonLaymanService.layman()?.url + '/wfs'\n              : null,\n          });\n        }\n      });\n  }\n\n  /**\n   * selectedLayerString\n   * @returns Possibly translated name of layer selected for drawing\n   */\n  selectedLayerString(): string {\n    if (this.selectedLayer) {\n      const title = getTitle(this.selectedLayer);\n      return title == TMP_LAYER_TITLE\n        ? this.translate('DRAW.unsavedDrawing')\n        : this.hsLanguageService.getTranslationIgnoreNonExisting(\n            'LAYERS',\n            title,\n            undefined,\n          ) || getName(this.selectedLayer);\n    }\n    return this.translate('DRAW.Select layer');\n  }\n  /**\n   * snapLayerString\n   * @returns Possibly translated name of layer selected for snapping\n   */\n  snapLayerString(): string {\n    if (this.snapLayer) {\n      const title = getTitle(this.snapLayer);\n      return (\n        this.hsLanguageService.getTranslationIgnoreNonExisting(\n          'LAYERS',\n          title,\n          undefined,\n        ) || getName(this.snapLayer)\n      );\n    }\n  }\n\n  saveDrawingLayer(): void {\n    if (this.selectedLayer) {\n      this.previouslySelected = this.selectedLayer;\n    }\n\n    let tmpTitle = this.translate('DRAW.drawLayer');\n\n    const tmpLayer = this.hsMapService.findLayerByTitle(TMP_LAYER_TITLE);\n    const tmpSource = tmpLayer ? tmpLayer.getSource() : new VectorSource();\n\n    let i = 1;\n    while (this.hsMapService.findLayerByTitle(tmpTitle)) {\n      tmpTitle = `${this.translate('DRAW.drawLayer')} ${i++}`;\n    }\n    const layman = this.hsCommonLaymanService.layman();\n    const drawLayer = new VectorLayer<VectorSource<Feature>>({\n      //TODO: Also name should be set, but take care in case a layer with that name already exists in layman\n      source: tmpSource,\n      visible: true,\n    });\n    setTitle(drawLayer, tmpTitle);\n    setShowInLayerManager(drawLayer, true);\n    setRemovable(drawLayer, true);\n    setSld(drawLayer, defaultStyle);\n    setEditor(drawLayer, {editable: true});\n    setPath(drawLayer, this.hsConfig.defaultDrawLayerPath || 'User generated');\n    setDefinition(drawLayer, {\n      format: this.isAuthenticated() ? 'WFS' : null,\n      url: this.isAuthenticated() ? layman.url + '/wfs' : null,\n    });\n    setWorkspace(drawLayer, this.hsCommonLaymanService.user());\n    this.tmpDrawLayer = true;\n    this.selectedLayer = drawLayer;\n    this.layerMetadataDialog.next();\n  }\n\n  setType(what): boolean {\n    if (this.type == what) {\n      this.type = null;\n      this.deactivateDrawing();\n      const tmpLayer =\n        this.hsMapService.findLayerByTitle(TMP_LAYER_TITLE) || null;\n      if (tmpLayer) {\n        this.hsMapService.getMap().removeLayer(tmpLayer);\n        this.tmpDrawLayer = false;\n      }\n      this.hsQueryBaseService.activateQueries();\n      return false;\n    }\n    //console.log(this.drawableLayers);\n    //console.log(this.selectedLayer);\n    if (this.drawableLayers.length == 0 && !this.tmpDrawLayer) {\n      const drawLayer = new VectorLayer({\n        source: new VectorSource(),\n        visible: true,\n      });\n      setSld(drawLayer, defaultStyle);\n      setTitle(drawLayer, TMP_LAYER_TITLE);\n      setShowInLayerManager(drawLayer, false);\n      setRemovable(drawLayer, true);\n      setEditor(drawLayer, {editable: true});\n      setPath(\n        drawLayer,\n        this.hsConfig.defaultDrawLayerPath || 'User generated',\n      );\n      this.tmpDrawLayer = true;\n      this.selectedLayer = drawLayer;\n      this.addDrawLayer(drawLayer);\n    }\n    this.type = what;\n    if (this.selectedLayer) {\n      this.source = isLayerClustered(this.selectedLayer)\n        ? (this.selectedLayer.getSource() as Cluster<Feature>).getSource() //Is it clustered vector layer?\n        : this.selectedLayer.getSource();\n    }\n    return true;\n  }\n\n  /**\n   * Handles drawing layer selection/change by activating drawing for selected layer.\n   * In case of Layman layer not yet existing in app it pulls the layer first.\n   */\n  async selectLayer(layer) {\n    let metadata;\n    let style;\n\n    if (!(layer instanceof Layer)) {\n      metadata = await this.hsLaymanBrowserService.fillLayerMetadata(\n        this.laymanEndpoint,\n        layer,\n      );\n    }\n    if (metadata) {\n      if (!metadata?.type?.includes('WFS')) {\n        const dialog = this.hsDialogContainerService.create(\n          HsConfirmDialogComponent,\n          {\n            message: 'DRAW.thisLayerDoesNotSupportDrawing',\n            title: 'DRAW.notAVectorLayer',\n          },\n        );\n        const confirmed = await dialog.waitResult();\n        if (confirmed == 'yes') {\n          await this.hsAddDataOwsService.connectToOWS({\n            type: 'wms',\n            uri: decodeURIComponent(metadata.wms.url),\n            layer: layer.name,\n          });\n          this.selectedLayer = null;\n          this.fillDrawableLayers();\n        }\n        return;\n      }\n      if (metadata.style?.url) {\n        style = await this.hsCommonLaymanService.getStyleFromUrl(\n          metadata.style?.url,\n        );\n      }\n      if (metadata.style?.type == 'sld') {\n        if (!style?.includes('StyledLayerDescriptor')) {\n          style = undefined;\n        }\n      }\n      if (metadata.style?.type == 'qml') {\n        if (!style?.includes('<qgis')) {\n          style = undefined;\n        }\n      }\n    }\n\n    let lyr = layer;\n    if (layer.workspace) {\n      lyr = await this.hsAddDataVectorService.addVectorLayer(\n        'wfs',\n        this.laymanEndpoint.url,\n        layer.name,\n        layer.title,\n        undefined,\n        'EPSG:4326',\n        {workspace: layer.workspace, saveToLayman: true, style: style},\n      );\n      lyr = this.hsMapService.findLayerByTitle(layer.title);\n    }\n    if (lyr != this.selectedLayer) {\n      if (\n        this.selectedLayer &&\n        getTitle(this.selectedLayer) == TMP_LAYER_TITLE\n      ) {\n        this.tmpDrawLayer = false;\n        this.hsMapService.getMap().removeLayer(this.selectedLayer);\n      }\n\n      this.selectedLayer = lyr;\n      this.changeDrawSource();\n    }\n    this.fillDrawableLayers();\n  }\n  /**\n   * Add draw layer to the map and repopulate list of drawables.\n   */\n  addDrawLayer(layer: VectorLayer<VectorSource<Feature>>) {\n    this.hsMapService.getMap().addLayer(layer);\n    this.fillDrawableLayers();\n  }\n\n  /**\n   * @param changeStyle - controller callback function\n   * Update draw style without necessity to reactivate drawing interaction\n   */\n  updateStyle(changeStyle) {\n    if (this.draw) {\n      this.currentStyle = changeStyle();\n      this.draw.getOverlay().setStyle(this.currentStyle);\n    }\n  }\n\n  onDrawEnd(e) {\n    if (!getEditor(this.selectedLayer)) {\n      return;\n    }\n    const editorConfig = getEditor(this.selectedLayer);\n    if (editorConfig.defaultAttributes) {\n      for (const key in editorConfig.defaultAttributes) {\n        const value = editorConfig.defaultAttributes[key];\n        e.feature.set(key, value);\n      }\n    }\n    /*Timeout is necessary because features are not immediately\n     * added to the layer and layer can't be retrieved from the\n     * feature, so they don't appear in Info panel */\n    if (\n      this.hsLayoutService.mainpanel != 'draw' &&\n      this.hsConfig.openQueryPanelOnDrawEnd\n    ) {\n      this.hsLayoutService.setMainPanel('query');\n    }\n    setTimeout(() => {\n      this.addFeatureToSelector(e.feature);\n    });\n  }\n\n  /**\n   * Adds drawn feature to selection\n   */\n  addFeatureToSelector(feature) {\n    //Zone is used to ensure change detection updates the view\n    this.zone.run(() => {\n      this.hsQueryBaseService.clear('features');\n      this.hsQueryVectorService.selector.getFeatures().push(feature);\n      this.hsQueryVectorService.createFeatureAttributeList();\n    });\n  }\n\n  /**\n   * Re-enables getFeatureInfo info and cleans up after drawing\n   */\n  afterDrawEnd(): void {\n    if (this.draw) {\n      this.draw.setActive(false);\n    }\n    this.drawActive = false;\n  }\n\n  removeLastPoint(): void {\n    this.draw.removeLastPoint();\n  }\n\n  /**\n   * Sets layer source where new drawing should be pushed to... after 'selectedLayer' change\n   */\n  changeDrawSource(): void {\n    if (this.selectedLayer.getSource === undefined) {\n      return;\n    }\n    this.source = isLayerClustered(this.selectedLayer)\n      ? (this.selectedLayer.getSource() as Cluster<Feature>).getSource()\n      : this.selectedLayer.getSource();\n\n    this.drawingLayerChanges.next({\n      layer: this.selectedLayer,\n      source: this.source,\n    });\n    if (this.draw) {\n      //Reactivate drawing with updated source\n      this.activateDrawing({\n        drawState: true,\n      });\n      //Set snapLayer and snap interaction source\n      this.snapLayer = this.selectedLayer;\n      this.toggleSnapping(this.source);\n    }\n  }\n\n  /**\n   * Deactivate all hs.draw interaction in map (Draw, Modify, Select)\n   */\n  async deactivateDrawing(): Promise<void> {\n    const map = await this.hsMapService.loaded();\n    this.afterDrawEnd();\n    if (this.draw) {\n      for (const key of this.eventHandlers) {\n        unByKey(key);\n      }\n      map.removeInteraction(this.draw);\n      this.draw = null;\n    }\n  }\n\n  stopDrawing(): void {\n    if (!this.draw || this.draw === null) {\n      return;\n    }\n    try {\n      if (this.draw.getActive()) {\n        this.draw.finishDrawing();\n      }\n    } catch (ex) {\n      this.hsLogService.warn(ex);\n    }\n    this.draw.setActive(false);\n    this.modify.setActive(false);\n    this.hsQueryBaseService.activateQueries();\n    this.type = null;\n    this.drawActive = false;\n  }\n\n  startDrawing(): void {\n    const draw = this.draw;\n    try {\n      if (draw.getActive()) {\n        draw.finishDrawing();\n      }\n    } catch (ex) {\n      this.hsLogService.warn(ex);\n    }\n    draw.setActive(true);\n  }\n\n  /**\n   * Repopulates drawable layers. In case layman connection exists it also creates\n   * a list of available server possibilities.\n   */\n  async fillDrawableLayers(): Promise<void> {\n    await this.hsMapService.loaded();\n    const drawables = this.hsMapService\n      .getLayersArray()\n      .filter((layer: Layer<Source>) => isLayerDrawable(layer)) as VectorLayer<\n      VectorSource<Feature>\n    >[];\n\n    if (drawables.length == 0 && !this.tmpDrawLayer) {\n      this.type = null;\n      this.deactivateDrawing();\n      this.selectedLayer = null;\n      this.snapSource = null;\n    } else if (drawables.length > 0) {\n      if (this.selectedLayerNotAvailable(drawables)) {\n        this.selectedLayer = drawables[0];\n        this.changeDrawSource();\n      }\n    }\n    this.addedLayersRemoved = false;\n    this.drawableLayers = drawables;\n    this.laymanEndpoint = this.hsCommonLaymanService.layman();\n    if (this.laymanEndpoint) {\n      await lastValueFrom(\n        this.hsLaymanBrowserService.queryCatalog(this.laymanEndpoint, {\n          onlyMine: this.onlyMine,\n          limit: '',\n          query: {},\n        }),\n      );\n      if (this.laymanEndpoint.layers) {\n        this.drawableLaymanLayers = this.laymanEndpoint.layers.filter(\n          (layer) => {\n            return (\n              !this.hsMapService.findLayerByTitle(layer.title) && layer.editable\n            );\n          },\n        );\n      }\n    }\n    this.drawableLayersAvailable =\n      this.drawableLayers.length > 0 || this.drawableLaymanLayers.length > 0;\n    this.hasSomeDrawables = this.drawableLayers.length > 0;\n    this.moreThanOneDrawable = this.drawableLayers?.length > 1;\n  }\n\n  private selectedLayerNotAvailable(drawables) {\n    if (this.addedLayersRemoved) {\n      return true;\n    }\n    return (\n      //Don't want to change after authChange when layer is being added\n      (!this.tmpDrawLayer &&\n        !drawables.some(\n          (layer) =>\n            this.selectedLayer &&\n            getTitle(layer) == getTitle(this.selectedLayer),\n        )) ||\n      !this.selectedLayer\n    );\n  }\n\n  keyUp(event) {\n    if (event.key == 'Backspace') {\n      this.removeLastPoint();\n    }\n  }\n\n  /**\n   * Determines whether right-click should finish the drawing or not\n   * @param typeNum - Number used in calculation of minimal number of vertexes. Depends on geom type (polygon/line)\n   * @param vertexCount - Number of vertexes the sketch has\n   * @returns return boolean value if right mouse button was clicked\n   */\n  rightClickCondition(typeNum: number, vertexCount: number): boolean {\n    const minPoints = this.hsConfig.preserveLastSketchPoint ? 1 : 0;\n    const minVertexCount = typeNum - minPoints;\n    if (vertexCount >= minVertexCount) {\n      setTimeout(() => {\n        if (minPoints == 0) {\n          this.removeLastPoint();\n        }\n        this.draw.finishDrawing();\n      }, 250);\n      return true;\n    }\n    return false;\n  }\n  /**\n   * @param options - Options object\n   * @param onDrawStart - Callback function called when drawing is started\n   * @param onDrawEnd - Callback function called when drawing is finished\n   * @param onSelected - Callback function called when feature is selected for modification\n   * @param onDeselected - Callback function called when feature is deselected\n   * @param changeStyle - controller callback function which set style\n   * dynamically according to selected parameters\n   * @param drawState - Should drawing be set active when\n   * creating the interactions\n   * Add drawing interaction to map. Partial interactions are Draw, Modify and Select. Add Event listeners for drawstart, drawend and (de)selection of feature.\n   */\n  async activateDrawing({\n    onDrawStart,\n    onDrawEnd = (e) => this.onDrawEnd(e),\n    onSelected,\n    onDeselected,\n    drawState = true,\n  }: ActivateParams): Promise<void> {\n    this.onDeselected = onDeselected;\n    this.onSelected = onSelected;\n    await this.deactivateDrawing();\n    this.hsQueryBaseService.deactivateQueries();\n    const drawInteraction = new Draw({\n      source: this.source,\n      type: /** GeometryType */ this.type,\n      condition: (e: MapBrowserEvent<PointerEvent>) => {\n        if (e.originalEvent.buttons === 1) {\n          //left click\n          return true;\n        }\n        if (e.originalEvent.buttons === 2) {\n          //right click\n          if (this.type == 'Polygon') {\n            const vertexCount = (this.draw as any).sketchLineCoords_?.length;\n            return this.rightClickCondition(4, vertexCount);\n          }\n          if (this.type == 'LineString') {\n            const vertexCount = (this.draw as any).sketchCoords_?.length;\n            return this.rightClickCondition(2, vertexCount - 1);\n          }\n        }\n      },\n    });\n\n    this.setInteraction(drawInteraction);\n    this.draw.setActive(drawState);\n    this.addHandler(\n      drawInteraction.on('drawstart', (e: DrawEvent) => {\n        this.checkForMatchingSymbolizer();\n        if (onDrawStart) {\n          onDrawStart(e);\n        }\n      }),\n    );\n\n    this.addHandler(\n      drawInteraction.on('drawend', (e: DrawEvent) => {\n        if (this.type == 'Circle') {\n          e.feature.setGeometry(fromCircle(e.feature.getGeometry() as Circle));\n        }\n        if (onDrawEnd) {\n          onDrawEnd(e);\n        }\n      }),\n    );\n\n    //Add snap interaction -  must be added after the Modify and Draw interactions\n    const snapSourceToBeUsed = this.snapSource ? this.snapSource : this.source;\n    this.toggleSnapping(snapSourceToBeUsed);\n  }\n\n  /**\n   * Register event handlers on draw interactions, so they can be unsubscribed after\n   */\n  addHandler(e: EventsKey) {\n    this.eventHandlers.push(e);\n  }\n\n  /**\n   * Add draw interaction on map and set some enhancements on it which don't depend on activateDrawing function\n   */\n  async setInteraction(interaction: Draw): Promise<void> {\n    this.draw = interaction;\n    const map = await this.hsMapService.loaded();\n    map.addInteraction(interaction);\n\n    this.addHandler(\n      interaction.on('drawstart', (e: DrawEvent) => {\n        if (isPlatformBrowser(this.platformId)) {\n          document.addEventListener('keyup', this.keyUp.bind(this, e));\n        }\n      }),\n    );\n\n    this.addHandler(\n      interaction.on('drawstart', () => {\n        this.drawActive = true;\n        this.modify.setActive(false);\n      }),\n    );\n\n    this.addHandler(\n      interaction.on('drawend', (e: DrawEvent) => {\n        if (isPlatformBrowser(this.platformId)) {\n          document.removeEventListener('keyup', this.keyUp.bind(this, e));\n        }\n      }),\n    );\n  }\n\n  /**\n   * Syntactic sugar for translating\n   */\n  private translate(key: string, params?: any): string {\n    return this.hsLanguageService.getTranslation(key, params);\n  }\n\n  /**\n   * Display warning if symbolizer for current geometry being drawn is not present on layer\n   */\n  private checkForMatchingSymbolizer() {\n    if (!this.hasRequiredSymbolizer()) {\n      const stylingMissingHeader = this.translate('DRAW.stylingMissing');\n      const txtPanelTitle = this.translate('PANEL_HEADER.LM');\n      const stylingMissingWarning = this.translate(\n        'DRAW.stylingMissingWarning',\n        {\n          type: this.type,\n          symbolizer: this.requiredSymbolizer[this.type].join(' or '),\n          panel: txtPanelTitle,\n        },\n      );\n      this.hsToastService.createToastPopupMessage(\n        stylingMissingHeader,\n        `${stylingMissingWarning}`,\n        {\n          serviceCalledFrom: 'HsDrawService',\n        },\n      );\n    }\n  }\n\n  /**\n   * Checks whether selected geometry can be properly visualized on selected layer\n   */\n  hasRequiredSymbolizer(): boolean {\n    const sld = getSld(this.selectedLayer);\n    return this.requiredSymbolizer[this.type].some((symbolizer) => {\n      return sld.includes(`${symbolizer}Symbolizer`);\n    });\n  }\n\n  /**\n   * Handle snap interaction changes\n   * Remove snap interaction if it already exists, recreate it if source is provided.\n   */\n  toggleSnapping(source?: VectorSource): void {\n    this.hsMapService.loaded().then((map) => {\n      this.snapSource = source ? source : this.snapSource;\n      if (this.snap) {\n        map.removeInteraction(this.snap);\n        // this.snapLayer = null;\n      }\n      if (this.snapActive && this.snapSource) {\n        this.snap = new Snap({\n          source: this.snapSource,\n        });\n        map.addInteraction(this.snap);\n      }\n    });\n  }\n  /**\n   * Changes layer source of snap interaction\n   */\n  changeSnapSource(layer: VectorLayer<VectorSource<Feature>>): void {\n    //isLayerClustered\n    const snapSourceToBeUsed = isLayerClustered(layer)\n      ? (layer.getSource() as Cluster<Feature>).getSource()\n      : layer.getSource();\n    this.snapLayer = layer;\n    this.toggleSnapping(snapSourceToBeUsed);\n  }\n\n  /**\n   * Selects or deselects all features in this.selectedLayer\n   */\n  selectAllFeatures(): void {\n    const selectFeatures =\n      this.selectedFeatures.getLength() !=\n      this.selectedLayer.getSource().getFeatures().length;\n    this.toggleSelectionString = selectFeatures\n      ? 'deselectAllFeatures'\n      : 'selectAllFeatures';\n    this.hsQueryBaseService.clear('features');\n    this.hsQueryBaseService.selector.getFeatures().clear();\n\n    if (selectFeatures) {\n      this.hsQueryBaseService.selector\n        .getFeatures()\n        .extend(this.selectedLayer.getSource().getFeatures());\n    }\n    this.hsQueryVectorService.createFeatureAttributeList();\n  }\n\n  toggleBoxSelection(): void {\n    this.hsMapService.loaded().then((map) => {\n      if (this.boxSelection) {\n        map.removeInteraction(this.boxSelection);\n      }\n      if (this.boxSelectionActive) {\n        this.boxSelection = new DragBox({\n          condition: platformModifierKeyOnly,\n        });\n        map.addInteraction(this.boxSelection);\n\n        this.boxSelection.on('boxend', () => {\n          if (!this.selectedLayer) {\n            return;\n          }\n          this.hsQueryBaseService.clear('features');\n\n          const extent = this.boxSelection.getGeometry().getExtent();\n          this.selectedLayer\n            .getSource()\n            .forEachFeatureIntersectingExtent(extent, (feature) => {\n              this.hsQueryBaseService.selector.getFeatures().push(feature);\n            });\n\n          this.hsQueryVectorService.createFeatureAttributeList();\n        });\n\n        this.boxSelection.on('boxstart' as any, () => {\n          this.hsQueryBaseService.selector.getFeatures().clear();\n        });\n        this.hsToastService.createToastPopupMessage(\n          this.translate('DRAW.boxSelectionActivated'),\n          `${this.translate('DRAW.useModifierToSelectWithBox', {\n            platformModifierKey: 'CTRL/META',\n          })}`,\n          {\n            type: 'info',\n            serviceCalledFrom: 'HsDrawService',\n          },\n        );\n      }\n    });\n  }\n\n  /**\n   * Remove one draw layer\n   */\n  async removeLayer() {\n    await this.layerRemoval(false);\n  }\n\n  /**\n   * Remove multiple draw layers\n   */\n  async removeMultipleLayers() {\n    await this.layerRemoval(true);\n  }\n\n  /**\n   * Remove draw layer/layers\n   */\n  private async layerRemoval(multi: boolean = false) {\n    let confirmed;\n    const a: ['map', 'mapcatalogue'] | ['map'] =\n      this.hsCommonLaymanService.isAuthenticated()\n        ? ['map', 'mapcatalogue']\n        : ['map'];\n    if (multi) {\n      confirmed = await this.hsRemoveLayerDialogService.removeMultipleLayers(\n        this.drawableLayers,\n        a,\n      );\n    } else {\n      confirmed = await this.hsRemoveLayerDialogService.removeLayer(\n        this.selectedLayer,\n        a,\n      );\n    }\n    if (confirmed) {\n      this.selectedLayer = null;\n      this.fillDrawableLayers();\n    }\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["VectorSource","VectorLayer"],"mappings":"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"}