{"version":3,"file":"hslayers-ng-components-search.mjs","sources":["../../../projects/hslayers/components/search/limitTo.pipe.ts","../../../projects/hslayers/components/search/search.service.ts","../../../projects/hslayers/components/search/search-input.component.ts","../../../projects/hslayers/components/search/search-input.component.html","../../../projects/hslayers/components/search/search-results.component.ts","../../../projects/hslayers/components/search/search-results.component.html","../../../projects/hslayers/components/search/search.component.ts","../../../projects/hslayers/components/search/search.component.html","../../../projects/hslayers/components/search/search.module.ts","../../../projects/hslayers/components/search/search-toolbar.component.ts","../../../projects/hslayers/components/search/hslayers-ng-components-search.ts"],"sourcesContent":["import {Pipe, PipeTransform} from '@angular/core';\n\n@Pipe({name: 'limitTo', standalone: true})\nexport class limitToPipe implements PipeTransform {\n  transform(value: any[], limit: number): any[] {\n    return value.slice(0, limit);\n  }\n}\n","import {HttpClient} from '@angular/common/http';\nimport {Injectable, inject} from '@angular/core';\nimport {Subject} from 'rxjs';\n\nimport {Feature} from 'ol';\nimport {Geometry, Point} from 'ol/geom';\nimport {Vector as VectorLayer} from 'ol/layer';\nimport {Vector as VectorSource} from 'ol/source';\nimport {WKT} from 'ol/format';\nimport {transform} from 'ol/proj';\nimport {unByKey} from 'ol/Observable';\n\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {highlightFeatures, HsProxyService} from 'hslayers-ng/services/utils';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsStylerService} from 'hslayers-ng/services/styler';\nimport {setShowInLayerManager, setTitle} from 'hslayers-ng/common/extensions';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsSearchService {\n  private http = inject(HttpClient);\n  private hsConfig = inject(HsConfig);\n  private hsMapService = inject(HsMapService);\n  private hsStylerService = inject(HsStylerService);\n  private hsEventBusService = inject(HsEventBusService);\n  private hsProxyService = inject(HsProxyService);\n\n  formatWKT = new WKT();\n  canceler: Subject<any> = new Subject();\n  searchResultsLayer: VectorLayer<VectorSource<Feature>>;\n  pointerMoveEventKey;\n  providers: {[key: string]: any} = {};\n\n  constructor() {\n    this.searchResultsLayer = new VectorLayer({\n      source: new VectorSource({}),\n      style: this.hsStylerService.pin_white_blue_highlight,\n    });\n    setTitle(this.searchResultsLayer, 'Search results');\n    setShowInLayerManager(this.searchResultsLayer, false);\n  }\n\n  /**\n   * Send geolocation request to Geolocation server (based on app config), pass response to results function\n   * @param query - Place name or part of it\n   */\n  request(query: string): void {\n    let url = null;\n    let providers = [];\n    if (\n      this.hsConfig.search_provider !== undefined &&\n      this.hsConfig.searchProvider === undefined\n    ) {\n      this.hsConfig.searchProvider = this.hsConfig.search_provider;\n    }\n\n    if (this.hsConfig.searchProvider === undefined) {\n      providers = ['geonames'];\n    } else if (\n      typeof this.hsConfig.searchProvider === 'string' ||\n      typeof this.hsConfig.searchProvider === 'function'\n    ) {\n      providers = [this.hsConfig.searchProvider];\n    } else if (typeof this.hsConfig.searchProvider === 'object') {\n      providers = this.hsConfig.searchProvider;\n    }\n    this.cleanResults();\n    for (const provider of providers) {\n      let providerId = provider;\n      if (provider == 'geonames') {\n        if (this.hsConfig.geonamesUser !== undefined) {\n          url = `http://api.geonames.org/searchJSON?&name_startsWith=${query}&username=${this.hsConfig.geonamesUser}`;\n        } else {\n          //Username will have to be set in proxy\n          url = this.hsProxyService.proxify(\n            `http://api.geonames.org/searchJSON?&name_startsWith=${query}`,\n          );\n        }\n        if (window.location.protocol == 'https:') {\n          url = this.hsProxyService.proxify(url);\n        }\n      } else if (provider == 'sdi4apps_openapi') {\n        url = 'http://portal.sdi4apps.eu/openapi/search?q=' + query;\n      } else if (typeof provider === 'function') {\n        url = provider(query);\n        if (provider.name == 'searchProvider') {\n          //Anonymous function?\n          providerId = 'geonames';\n        } else {\n          providerId = provider.name;\n        }\n      }\n      //url = utils.proxify(url);\n      const canceler = this.canceler[providerId];\n      if (canceler !== undefined) {\n        canceler.unsubscribe();\n      }\n      this.canceler[providerId] = this.http.get(url).subscribe(\n        (data) => {\n          this.searchResultsReceived(data, providerId);\n        },\n        () => {\n          //\n        },\n      );\n    }\n  }\n\n  /**\n   * Maintain inner results object and parse response with correct provider parser\n   * @param response - Response object of Geolocation request\n   * @param providerName - Name of request provider\n   */\n  searchResultsReceived(response: any, providerName: string): void {\n    if (this.providers[providerName] === undefined) {\n      this.providers[providerName] = {\n        results: [],\n        name: providerName,\n      };\n    }\n    const provider = this.providers[providerName];\n    if (providerName.indexOf('geonames') > -1) {\n      this.parseGeonamesResults(response, provider);\n    } else if (providerName == 'sdi4apps_openapi') {\n      this.parseOpenApiResults(response, provider);\n    } else {\n      this.parseGeonamesResults(response, provider);\n    }\n    this.pointerMoveEventKey = this.hsMapService\n      .getMap()\n      .on('pointermove', (e) => this.mapPointerMoved(e));\n    this.hsEventBusService.searchResultsReceived.next();\n  }\n\n  /**\n   * Remove results layer from map\n   */\n  hideResultsLayer(): void {\n    this.hsMapService.getMap().removeLayer(this.searchResultsLayer);\n  }\n\n  /**\n   * Send geolocation request to Geolocation server (based on app config), pass response to results function\n   */\n  showResultsLayer(): void {\n    this.hideResultsLayer();\n    this.hsMapService.getMap().addLayer(this.searchResultsLayer);\n  }\n\n  /**\n   * Clean all search results from results variable and results layer\n   */\n  cleanResults(): void {\n    if (this.providers !== undefined) {\n      for (const key of Object.keys(this.providers)) {\n        const provider = this.providers[key];\n        if (provider.results !== undefined) {\n          provider.results.length = 0;\n        }\n      }\n      this.searchResultsLayer.getSource().clear();\n      this.hideResultsLayer();\n      unByKey(this.pointerMoveEventKey);\n    }\n  }\n\n  /**\n   * Highlight in the search list result, that corresponds with the nearest found feature under the pointer over the map\n   */\n  mapPointerMoved(evt): void {\n    const featuresUnderMouse = this.hsMapService\n      .getMap()\n      .getFeaturesAtPixel(evt.pixel)\n      .filter((feature: Feature<Geometry>) => {\n        const layer = this.hsMapService.getLayerForFeature(feature);\n        return layer && layer == this.searchResultsLayer;\n      });\n    for (const provider of Object.keys(this.providers)\n      .map((key) => this.providers[key])\n      .filter((provider) => provider?.results)) {\n      highlightFeatures(\n        featuresUnderMouse as Feature<Geometry>[],\n        provider.results,\n      );\n    }\n  }\n\n  /**\n   * Move map and zoom on selected search result\n   * @param result - Entity of selected result\n   * @param zoomLevel - Zoom level to zoom on\n   */\n  selectResult(result: any, zoomLevel: number): void {\n    const coordinate = this.getResultCoordinate(result);\n    this.hsMapService.getMap().getView().setCenter(coordinate);\n    if (zoomLevel === undefined) {\n      zoomLevel = 10;\n    }\n    this.hsMapService.getMap().getView().setZoom(zoomLevel);\n    this.hsEventBusService.searchZoomTo.next({\n      coordinate: transform(\n        coordinate,\n        this.hsMapService.getCurrentProj(),\n        'EPSG:4326',\n      ),\n      zoom: zoomLevel,\n    });\n  }\n\n  /**\n   * Parse coordinate of selected result\n   * @param result - Entity of selected result\n   * @returns Ol.coordinate of selected result\n   */\n  getResultCoordinate(result: any): any {\n    const currentProj = this.hsMapService.getCurrentProj();\n    if (\n      result.provider_name.indexOf('geonames') > -1 ||\n      result.provider_name == 'searchFunctionsearchProvider'\n    ) {\n      return transform(\n        [parseFloat(result.lng), parseFloat(result.lat)],\n        'EPSG:4326',\n        currentProj,\n      );\n    }\n    if (result.provider_name == 'sdi4apps_openapi') {\n      const g_feature = this.formatWKT.readFeature(\n        result.FullGeom.toUpperCase(),\n      );\n      return (\n        g_feature.getGeometry().transform('EPSG:4326', currentProj) as Point\n      ).getCoordinates();\n    }\n  }\n\n  /**\n   * Result parser of results from Geonames service\n   * @param response - Result of search request\n   * @param provider - Which provider sent the search results\n   */\n  parseGeonamesResults(response: any, provider: any): void {\n    provider.results = response.geonames;\n    this.generateGeonamesFeatures(provider);\n  }\n\n  generateGeonamesFeatures(provider: any): void {\n    const src = this.searchResultsLayer.getSource();\n    for (const result of provider.results) {\n      result.provider_name = provider.name;\n      const feature = new Feature({\n        geometry: new Point(this.getResultCoordinate(result)),\n        record: result,\n        id: crypto.randomUUID(),\n      });\n      feature.setId(feature.get('id'));\n      src.addFeature(feature);\n      result.featureId = feature.getId();\n    }\n  }\n\n  /**\n   * Result parser of results from OpenApi service\n   * @param response - Result of search request\n   * @param provider - Which provider sent the search results\n   */\n  parseOpenApiResults(response: any, provider: any): void {\n    provider.results = response.data;\n    this.generateOpenApiFeatures(provider);\n  }\n\n  generateOpenApiFeatures(provider: any): void {\n    const src = this.searchResultsLayer.getSource();\n    for (const result of provider.results) {\n      result.provider_name = provider.name;\n      const feature = new Feature({\n        geometry: new Point(this.getResultCoordinate(result)),\n        record: result,\n      });\n      src.addFeature(feature);\n      result.feature = feature;\n    }\n  }\n}\n","import {Component, OnDestroy, OnInit, inject} from '@angular/core';\nimport {FormsModule} from '@angular/forms';\nimport {Subscription} from 'rxjs';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {HS_PRMS, HsShareUrlService} from 'hslayers-ng/services/share';\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsSearchService} from './search.service';\nimport {HsMapService} from 'hslayers-ng/services/map';\n\n/**\n * Add search input template to page\n */\n@Component({\n  selector: 'hs-search-input',\n  templateUrl: './search-input.component.html',\n  imports: [FormsModule, TranslatePipe],\n})\nexport class HsSearchInputComponent implements OnInit, OnDestroy {\n  private hsConfig = inject(HsConfig);\n  private hsSearchService = inject(HsSearchService);\n  private hsEventBusService = inject(HsEventBusService);\n  private hsShareUrlService = inject(HsShareUrlService);\n  private hsMapService = inject(HsMapService);\n\n  query = '';\n  searchInputVisible: boolean;\n  clearVisible = false;\n  searchResultsReceivedSubscription: Subscription;\n  constructor() {\n    this.searchResultsReceivedSubscription =\n      this.hsEventBusService.searchResultsReceived.subscribe(() => {\n        this.clearVisible = true;\n      });\n  }\n\n  ngOnDestroy(): void {\n    this.searchResultsReceivedSubscription.unsubscribe();\n  }\n\n  ngOnInit(): void {\n    const query = this.hsShareUrlService.getParamValue(HS_PRMS.search);\n    if (query) {\n      this.query = query;\n      this.queryChanged();\n    }\n    this.searchInputVisible = !(\n      window.innerWidth < this.hsConfig.mobileBreakpoint\n    );\n  }\n\n  /**\n   * Handler of search input, request search service and display results div\n   */\n  async queryChanged(): Promise<void> {\n    await this.hsMapService.loaded();\n    if (this.query.length == 0) {\n      this.clear();\n      return;\n    }\n    this.hsSearchService.request(this.query);\n  }\n\n  /**\n   * Remove previous search and search results\n   */\n  clear(): void {\n    this.query = '';\n    this.clearVisible = false;\n    this.hsSearchService.cleanResults();\n    this.hsEventBusService.clearSearchResults.next();\n  }\n\n  toggleSearchInput(): void {\n    this.searchInputVisible = !this.searchInputVisible;\n    if (this.query != '') {\n      this.clear();\n    }\n  }\n}\n","<div class=\"input-group\">\n  <button (click)=\"toggleSearchInput()\" class=\"btn btn-light text-secondary hs-toolbar-button\"><i\n  class=\"fa-solid fa-magnifying-glass\" [title]=\"'COMMON.search' | translate  \"></i></button>\n  <input [(ngModel)]=\"query\" [hidden]=\"!searchInputVisible\" name=\"query\"\n    class=\"form-control hs-search-address-input rounded-0 hs-toolbar-button\"\n    [placeholder]=\"'COMMON.search' | translate  \" (ngModelChange)=\"queryChanged()\">\n  @if (clearVisible) {\n    <button class=\"clearSearch\" (click)=\"clear()\"><i\n    class=\"fa-solid fa-xmark align-middle\"></i></button>\n  }\n</div>\n","import {Component, inject} from '@angular/core';\nimport {KeyValuePipe, NgClass} from '@angular/common';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\nimport {Feature} from 'ol';\nimport {Geometry} from 'ol/geom';\n\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsSearchService} from './search.service';\nimport {limitToPipe} from './limitTo.pipe';\nimport {setHighlighted} from 'hslayers-ng/common/extensions';\n\n/**\n * Add search results template to page\n */\n@Component({\n  selector: 'hs-search-results',\n  templateUrl: './search-results.component.html',\n  imports: [limitToPipe, NgClass, KeyValuePipe],\n  styles: `\n    .hsl-search-result:hover {\n      background-color: rgba(var(--bs-light-rgb), 1);\n    }\n  `,\n})\nexport class HsSearchResultsComponent {\n  private hsEventBusService = inject(HsEventBusService);\n  hsSearchService = inject(HsSearchService);\n\n  searchResultsVisible: boolean;\n  fcode_zoom_map: any;\n\n  constructor() {\n    this.hsEventBusService.searchResultsReceived\n      .pipe(takeUntilDestroyed())\n      .subscribe(() => {\n        this.searchResultsReceived();\n      });\n\n    this.hsEventBusService.clearSearchResults\n      .pipe(takeUntilDestroyed())\n      .subscribe(() => {\n        this.clear();\n      });\n  }\n\n  /**\n   * Handler for receiving results of search request, sends results to correct parser\n   */\n  searchResultsReceived(): void {\n    this.searchResultsVisible = true;\n    this.hsSearchService.showResultsLayer();\n  }\n\n  clear(): void {\n    this.searchResultsVisible = false;\n  }\n\n  /**\n   * @param featureId - feature id\n   * Finds feature from search result layer based on featureId\n   */\n  findFeature(featureId: string): Feature<Geometry> {\n    return this.hsSearchService.searchResultsLayer\n      .getSource()\n      .getFeatureById(featureId) as Feature;\n  }\n\n  /**\n   * @param result - Search result record\n   * @param highlight - Feature highlight state\n   * Highlights feature, when hovering search list\n   */\n  highlightResult(result, highlight: boolean): void {\n    const found = this.findFeature(result.featureId);\n    if (found) {\n      setHighlighted(found, highlight);\n    }\n  }\n\n  /**\n   * Zoom map to selected result from results list\n   *\n   * @param result - Selected result\n   */\n  zoomTo(result: any): void {\n    this.fcode_zoom_map = {\n      'PPLA': 12,\n      'PPL': 15,\n      'PPLC': 10,\n      'ADM1': 9,\n      'FRM': 15,\n      'PPLF': 13,\n      'LCTY': 13,\n      'RSTN': 15,\n      'PPLA3': 9,\n      'AIRP': 13,\n      'AIRF': 13,\n      'HTL': 17,\n      'STM': 14,\n      'LK': 13,\n    };\n    let zoom_level = 10;\n    if (\n      result.fcode !== undefined &&\n      this.fcode_zoom_map[result.fcode] !== undefined\n    ) {\n      zoom_level = this.fcode_zoom_map[result.fcode];\n    }\n    this.hsSearchService.selectResult(result, zoom_level);\n  }\n}\n","<div class=\"list-group py-1\" [hidden]=\"!searchResultsVisible\" style=\"display: block; margin-bottom: 0px\">\n  @for (provider of hsSearchService.providers | keyvalue ; track provider) {\n  <div>\n    <a class=\"list-group-item active\" [hidden]=\"!(provider.value.results.length > 0)\">Provider:\n      {{provider.value.name}}</a>\n    @for (result of provider.value.results | limitTo: 10; track result) {\n    <a class=\"list-group-item hsl-search-result\" [ngClass]=\"{'active': result.highlighted}\" (click)=\"zoomTo(result)\"\n      (mouseover)=\"highlightResult(result, true)\" (mouseleave)=\"highlightResult(result, false)\"\n      [attr.title]=\"result.DisplayDescription\">{{result.name || result.DisplayTitle}}<small\n        style=\"color: rgb(148, 143, 143)\"><br>{{result.fcodeName}}</small></a>\n    }\n  </div>\n  }\n</div>","import {Component, OnDestroy, OnInit, inject} from '@angular/core';\n\nimport {Subscription} from 'rxjs';\n\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsEventBusService} from 'hslayers-ng/services/event-bus';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsPanelBaseComponent} from 'hslayers-ng/common/panels';\n\n@Component({\n  selector: 'hs-search',\n  templateUrl: './search.component.html',\n  standalone: false,\n})\nexport class HsSearchComponent\n  extends HsPanelBaseComponent\n  implements OnInit, OnDestroy\n{\n  private hsEventBusService = inject(HsEventBusService);\n  private hsConfig = inject(HsConfig);\n  hsLanguageService = inject(HsLanguageService);\n\n  replace = false;\n  clearVisible = false;\n  searchInputVisible: boolean;\n  searchResultsReceivedSubscription: Subscription;\n  name = 'search';\n\n  constructor() {\n    super();\n    this.searchResultsReceivedSubscription =\n      this.hsEventBusService.searchResultsReceived.subscribe(() => {\n        this.clearVisible = true;\n      });\n  }\n\n  ngOnDestroy(): void {\n    this.searchResultsReceivedSubscription.unsubscribe();\n  }\n\n  ngOnInit(): void {\n    super.ngOnInit();\n    this.searchInputVisible =\n      window.innerWidth >= this.hsConfig.mobileBreakpoint;\n  }\n}\n","@if (isVisible$ | async) {\n  <div>\n    <hs-panel-header name=\"Search\" [panelTabs]=\"'SEARCH'\"></hs-panel-header>\n    <div class=\"input-group search-panel hs-search-address pt-1 pb-1 d-flex\">\n      <hs-search-input></hs-search-input>\n      <hs-search-results></hs-search-results>\n    </div>\n  </div>\n}","import {CUSTOM_ELEMENTS_SCHEMA, NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {\n  HsPanelHeaderComponent,\n  HsPanelHelpersModule,\n} from 'hslayers-ng/common/panels';\nimport {HsSearchComponent} from './search.component';\nimport {HsSearchInputComponent} from './search-input.component';\nimport {HsSearchResultsComponent} from './search-results.component';\n\n@NgModule({\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n  declarations: [HsSearchComponent],\n  imports: [\n    FormsModule,\n    CommonModule,\n    HsPanelHelpersModule,\n    TranslatePipe,\n    HsPanelHeaderComponent,\n    HsSearchInputComponent,\n    HsSearchResultsComponent,\n  ],\n  exports: [HsSearchComponent],\n})\nexport class HsSearchModule {}\n","import {AsyncPipe} from '@angular/common';\nimport {Component} from '@angular/core';\n\nimport {HsGuiOverlayBaseComponent} from 'hslayers-ng/common/panels';\nimport {HsSearchInputComponent} from './search-input.component';\nimport {HsSearchResultsComponent} from './search-results.component';\n\n@Component({\n  selector: 'hs-search-toolbar',\n  template: `\n    <div class=\"nav-item\" [hidden]=\"(isVisible$ | async) === false\">\n      <div>\n        <hs-search-input></hs-search-input>\n        <hs-search-results></hs-search-results>\n      </div>\n    </div>\n  `,\n  imports: [HsSearchInputComponent, HsSearchResultsComponent, AsyncPipe],\n})\nexport class HsSearchToolbarComponent extends HsGuiOverlayBaseComponent {\n  constructor() {\n    super();\n  }\n  name = 'searchToolbar';\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["VectorLayer","VectorSource","i1","i2.HsSearchInputComponent","i3.HsSearchResultsComponent"],"mappings":"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"}