{"version":3,"file":"hslayers-ng-components-feature-table.mjs","sources":["../../../projects/hslayers/components/feature-table/feature-filter.pipe.ts","../../../projects/hslayers/components/feature-table/feature-table.service.ts","../../../projects/hslayers/components/feature-table/layer-features.component.ts","../../../projects/hslayers/components/feature-table/layer-features.component.html","../../../projects/hslayers/components/feature-table/feature-table.component.ts","../../../projects/hslayers/components/feature-table/feature-table.component.html","../../../projects/hslayers/components/feature-table/feature-table.module.ts","../../../projects/hslayers/components/feature-table/hslayers-ng-components-feature-table.ts"],"sourcesContent":["import {Pipe, PipeTransform} from '@angular/core';\n\nconst featureLimit = 20 as const;\n\n@Pipe({\n  name: 'featureFilter',\n  standalone: false,\n})\nexport class HsFeatureFilterPipe implements PipeTransform {\n  /**\n   * Transform\n   *\n   \n   \n   * @returns Filtered features\n   */\n  transform(features: any[], searchText: string): any[] {\n    if (!features) {\n      return [];\n    }\n    if (!searchText) {\n      return features;\n    }\n    searchText = searchText.toLocaleLowerCase();\n\n    return features\n      .filter((feature) => {\n        return feature.name.toLocaleLowerCase().includes(searchText);\n      })\n      .slice(0, featureLimit);\n  }\n}\n","import {Injectable, inject} from '@angular/core';\n\nimport {Cluster, Source, Vector as VectorSource} from 'ol/source';\nimport {Feature} from 'ol';\nimport {Geometry} from 'ol/geom';\nimport {Layer} from 'ol/layer';\n\nimport {HsQueryVectorService} from 'hslayers-ng/services/query';\nimport {\n  getBase,\n  getShowInLayerManager,\n  getTitle,\n} from 'hslayers-ng/common/extensions';\nimport {HsFeatureDescriptor} from 'hslayers-ng/types';\nimport {isLayerVectorLayer, isLayerClustered} from 'hslayers-ng/services/utils';\n@Injectable({\n  providedIn: 'root',\n})\nexport class HsFeatureTableService {\n  private hsQueryVectorService = inject(HsQueryVectorService);\n\n  /**\n   * Trigger for reverse sorting\n   */\n  sortReverse = false;\n  /**\n   * Last sorting value selected\n   */\n  lastSortValue = '';\n  /**\n   * all feature attributes for HTML table\n   */\n  features: HsFeatureDescriptor[] = [];\n\n  /**\n   * Checks if layer is vectorLayer and is visible in layer_manager, to exclude layers, such as, point Clicked\n   *\n   * @param layer - Layer from HsConfig.layersInFeatureTable\n   * @returns Returns layer\n   */\n  addLayer(layer: Layer<Source>): any {\n    if (\n      !getBase(layer) &&\n      isLayerVectorLayer(layer, false) &&\n      (getShowInLayerManager(layer) === undefined ||\n        getShowInLayerManager(layer) == true)\n    ) {\n      return this.wrapLayer(layer);\n    }\n    return;\n  }\n\n  /**\n   * Wrap layer object\n   *\n   * @param layer - Layer from HsConfig.layersInFeatureTable\n   * @returns Returns wrapped layer object\n   */\n  wrapLayer(layer: Layer<Source>): any {\n    return {\n      title: getTitle(layer),\n      lyr: layer,\n      type: 'vector',\n    };\n  }\n\n  /**\n   * Search all layers feature attributes and map them into new objects for html table\n   *\n   * @param layer - Layer from HsConfig.layersInFeatureTable\n   */\n  fillFeatureList(layer: Layer<Source>): void {\n    const source: VectorSource = isLayerClustered(layer)\n      ? (layer.getSource() as Cluster<Feature>).getSource()\n      : (layer.getSource() as VectorSource);\n    this.features = source\n      .getFeatures()\n      .map((f) => this.describeFeature(f))\n      .filter((f) => f?.attributes?.length > 0);\n  }\n\n  /**\n   * Update feature description\n   *\n   * @param feature - Feature selected\n   */\n  updateFeatureDescription(feature: Feature<Geometry>): void {\n    const newDescriptor = this.describeFeature(feature);\n    const currentIx = this.features.findIndex((f) => f.feature == feature);\n    if (newDescriptor && currentIx > -1) {\n      this.features[currentIx] = newDescriptor;\n    }\n  }\n\n  /**\n   * Add feature description\n   *\n   * @param feature - Feature selected\n   */\n  addFeatureDescription(feature: Feature<Geometry>): void {\n    const newDescriptor = this.describeFeature(feature);\n    if (newDescriptor) {\n      this.features.push(newDescriptor);\n    }\n  }\n\n  /**\n   * Remove feature description\n   *\n   * @param feature - Feature selected\n   */\n  removeFeatureDescription(feature: Feature<Geometry>): void {\n    const currentIx = this.features.findIndex((f) => f.feature == feature);\n    if (currentIx > -1) {\n      this.features.splice(currentIx, 1);\n    }\n  }\n\n  /**\n   * Describe feature\n   *\n   * @param feature - Feature selected\n   */\n  describeFeature(feature: Feature<Geometry>): HsFeatureDescriptor {\n    const attribWrapper = this.hsQueryVectorService\n      .getFeatureAttributes(feature)\n      .pop();\n    if (!attribWrapper) {\n      return null;\n    }\n    return {\n      name: this.setFeatureName(attribWrapper.attributes),\n      feature,\n      attributes: this.attributesWithoutFeatureName(attribWrapper.attributes),\n      stats: attribWrapper.stats,\n    };\n  }\n\n  /**\n   * Find feature name attribute and separate it from other attributes for html table purposes\n   *\n   * @param attributes - layers feature attributes\n   * @returns feature name\n   */\n  setFeatureName(attributes: any): string {\n    if (attributes.length > 0) {\n      let name = 'Feature';\n      for (const attribute of attributes) {\n        if (attribute.name === 'name') {\n          name = attribute.value;\n        }\n      }\n      return name;\n    }\n    return 'Feature';\n  }\n\n  /**\n   * Remove feature name attribute from feature attributes array\n   *\n   * @param attributes - layers feature attributes\n   * @returns feature attributes\n   */\n  attributesWithoutFeatureName(attributes: any): any {\n    return attributes.filter((attr) => attr.name !== 'name');\n  }\n\n  /**\n   * Sort features by requested value\n   *\n   * @param valueName - Requested value to sort the feature table list\n   */\n  sortFeaturesBy(valueName): void {\n    if (this.features !== undefined && this.features.length > 1) {\n      // If last sort by value is the same as current, reverse the sort order\n      if (this.lastSortValue === valueName) {\n        this.sortReverse = !this.sortReverse;\n      } else {\n        this.sortReverse = false;\n      }\n      this.features = this.features.sort((a, b) =>\n        this.sortFeatures(a, b, valueName),\n      );\n    }\n  }\n\n  /**\n   * Sorting algorithm\n   *\n   * @param a - First input feature\n   * @param b - second input feature\n   * @param valueName - Sorting value\n   * @returns Returns each features relative position in the table\n   */\n  sortFeatures(a, b, valueName): number {\n    let aFeature, bFeature: any;\n    let position: number;\n    if (valueName === 'name') {\n      //check if table is being sorted by name\n      aFeature = a[valueName];\n      bFeature = b[valueName];\n    } else {\n      aFeature = this.getValue(a.attributes, valueName); //get requested attribute value\n      bFeature = this.getValue(b.attributes, valueName);\n    }\n    if (aFeature === null) {\n      position = 1;\n    }\n    if (bFeature === null) {\n      position = -1;\n    }\n    if (typeof aFeature == 'string' && typeof bFeature == 'string') {\n      position =\n        aFeature.charAt(0) > bFeature.charAt(0)\n          ? 1\n          : aFeature.charAt(0) < bFeature.charAt(0)\n            ? -1\n            : 0;\n    }\n    if (typeof aFeature == 'number' && typeof bFeature == 'number') {\n      position = aFeature - bFeature;\n    }\n    if (this.sortReverse) {\n      position = position * -1;\n    }\n    this.lastSortValue = valueName;\n    return position;\n  }\n\n  /**\n   * Get requested features attribute value, which will be used in the sorting algorithm\n   *\n   * @param attributes - features attributes\n   * @param valueName - Sorting value\n   * @returns Returns attributes value\n   */\n  getValue(attributes: any, valueName: string): string | number {\n    let value = attributes //get requested attribute value\n      .filter((attr) => attr.name == valueName)\n      .map((attr) => attr.value);\n    if (value.length == 0 || value === undefined) {\n      value = null;\n    } else {\n      value = value[0];\n    }\n    return value;\n  }\n}\n","import {Component, Input, OnInit, inject} from '@angular/core';\n\nimport {Feature} from 'ol';\nimport {Geometry} from 'ol/geom';\n\nimport {HsFeatureTableService} from './feature-table.service';\nimport {HsLanguageService} from 'hslayers-ng/services/language';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {isLayerClustered} from 'hslayers-ng/services/utils';\n\ntype Operation = {\n  action: 'zoom to' | 'delete' | 'custom action';\n  feature: Feature<Geometry>;\n  customActionName?: string;\n  customAction?: any;\n};\n\n@Component({\n  selector: 'hs-layer-features',\n  templateUrl: './layer-features.component.html',\n  styles: [\n    `\n      td,\n      th {\n        border: 1px solid #dddddd;\n        text-align: left;\n        padding: 6px;\n        font-size: 0.875rem;\n      }\n      .tdbreak {\n        overflow-wrap: break-word;\n        word-break: break-word;\n      }\n    `,\n  ],\n  standalone: false,\n})\nexport class HsLayerFeaturesComponent implements OnInit {\n  hsFeatureTableService = inject(HsFeatureTableService);\n  hsMapService = inject(HsMapService);\n  hsLanguageService = inject(HsLanguageService);\n\n  /**\n   * Input layer from HsConfig.layersInFeatureTable property array\n   */\n  @Input() layer: any;\n  /**\n   * Toggle for showing feature statistics\n   */\n  showFeatureStats = false;\n  searchedFeatures = '';\n\n  /**\n   * Activate listeners for any layer source changes to update the html table\n   */\n  ngOnInit(): void {\n    const olLayer = this.layer.lyr;\n    const source = isLayerClustered(olLayer)\n      ? olLayer.getSource().getSource()\n      : olLayer.getSource();\n    if (source) {\n      this.hsFeatureTableService.fillFeatureList(olLayer);\n      source.on('changefeature', (e) => {\n        this.hsFeatureTableService.updateFeatureDescription(e.feature);\n      });\n      source.on('addfeature', (e) => {\n        this.hsFeatureTableService.addFeatureDescription(e.feature);\n      });\n      source.on('removefeature', (e) => {\n        this.hsFeatureTableService.removeFeatureDescription(e.feature);\n      });\n    }\n  }\n\n  /**\n   * Zoom to feature from HTML table after triggering zoom action\n   * @param operation - Action for HTML table\n   */\n  executeOperation(operation: Operation): void {\n    switch (operation.action) {\n      case 'zoom to':\n        const extent = operation.feature.getGeometry().getExtent();\n        this.hsMapService.fitExtent(extent);\n        break;\n      case 'custom action':\n        operation.customAction(operation.feature);\n        break;\n      default:\n    }\n  }\n\n  /**\n   * Translate provided text to selected locale language\n   * @param text - Text to translate to locale\n   * @returns Returns translation\n   */\n  translate(text: string): string {\n    const translation: string =\n      this.hsLanguageService.getTranslationIgnoreNonExisting(\n        'FEATURE_TABLE',\n        text,\n        undefined,\n      );\n    return translation;\n  }\n\n  /**\n   * Sort features by value\n   * @param name - Sort value\n   */\n  sortFeaturesBy(name: string): void {\n    this.hsFeatureTableService.sortFeaturesBy(name);\n  }\n}\n","<h3 class=\"mt-1\" style=\"text-align: center\">{{'LAYERS.' + layer.title | translate : {fallbackValue: layer.title} }}</h3>\n<div class=\"form-group mt-1 mb-1\">\n  <div class=\"input-group\" style=\"margin-bottom: 4px\">\n    <input type=\"text\" class=\"form-control hs-filter\" [placeholder]=\"'COMMON.filter' | translate  \"\n      [(ngModel)]=\"searchedFeatures\" name=\"FeatureName\">\n  </div>\n</div>\n@for (feature of hsFeatureTableService.features | featureFilter: searchedFeatures; track feature) {\n  <table style=\"width:100%;\">\n    <thead>\n      <tr style=\"text-align: center; background-color: rgba(0,0,0,0.05);\">\n        <th colspan=\"2\">{{translate(feature.name)}}<!-- TODO: Remove function call from template -->\n          <a style=\"float: center;\" (click)=\"sortFeaturesBy(feature.name)\"\n          [title]=\"'FEATURE_TABLE.sortFeaturesByValue' | translate  \">^</a>\n        </th>\n      </tr>\n    </thead>\n    <tbody>\n      @for (attr of feature.attributes; track attr) {\n        <tr rowspan=\"3\">\n          <th class=\"tdbreak\" style=\"background-color: rgba(0,0,0,0.03);\">\n            {{translate(attr.name)}}<a style=\"float: right;\" (click)=\"sortFeaturesBy(attr.name)\"\n          [title]=\"'FEATURE_TABLE.sortFeaturesByValue' | translate  \">^</a><!-- TODO: Remove function call from template -->\n        </th>\n        <td class=\"tdbreak\" style=\"min-width: 200px; max-width: 200px;\">\n          @if (!attr.sanitizedValue && !attr.value?.operations) {\n            <span>\n              <i>{{attr.value}}</i>\n            </span>\n          }\n          <i>@if (!!attr.sanitizedValue) {\n            <span [innerHTML]=\"attr.sanitizedValue\"></span>\n          }</i>\n          @if (attr.value?.operations) {\n            <div>\n              @for (operation of attr.value.operations; track operation) {\n                <a (click)=\"executeOperation(operation)\"><span>\n                  <i> {{translate(operation.customActionName) ||\n                  translate(operation.action)}};</i></span></a>\n                  }<!-- TODO: Remove function call from template -->\n                </div>\n              }\n            </td>\n          </tr>\n        }\n        @for (stat of feature.stats; track stat) {\n          <tr [hidden]=\"!showFeatureStats\" class=\"tdbreak\">\n            <th class=\"tdbreak\" style=\"background-color: rgba(0,0,0,0.03);\">\n            {{translate(stat.name)}}</th><!-- TODO: Remove function call from template -->\n            <td class=\"tdbreak\" style=\"min-width: 200px; max-width: 200px;\"><span><i>{{stat.value}}</i></span></td>\n          </tr>\n        }\n      </tbody>\n    </table>\n  }\n  <p class=\"p-2\">\n    <small><a (click)=\"showFeatureStats = !showFeatureStats\">{{'FEATURE_TABLE.showFeatureStats' | translate\n    }}</a></small>\n  </p>\n  <hr />\n","import {Component, OnInit, inject} from '@angular/core';\n\nimport {Feature} from 'ol';\nimport {Vector as VectorLayer} from 'ol/layer';\nimport {Vector as VectorSource} from 'ol/source';\n\nimport {HsConfig} from 'hslayers-ng/config';\nimport {HsFeatureTableService} from './feature-table.service';\nimport {HsMapService} from 'hslayers-ng/services/map';\nimport {HsPanelBaseComponent} from 'hslayers-ng/common/panels';\nimport {HsSidebarService} from 'hslayers-ng/services/sidebar';\n\n@Component({\n  selector: 'hs-feature-table',\n  templateUrl: './feature-table.component.html',\n  standalone: false,\n})\nexport class HsFeatureTableComponent\n  extends HsPanelBaseComponent\n  implements OnInit\n{\n  private hsFeatureTableService = inject(HsFeatureTableService);\n  private hsConfig = inject(HsConfig);\n  private hsMapService = inject(HsMapService);\n  private hsSidebarService = inject(HsSidebarService);\n\n  layers: VectorLayer<VectorSource<Feature>>[] = [];\n  name = 'feature-table';\n\n  ngOnInit(): void {\n    this.hsSidebarService.addButton({\n      panel: 'featureTable',\n      module: 'hs.feature-table',\n      order: 14,\n      fits: true,\n      title: 'PANEL_HEADER.FEATURE_TABLE',\n      description: 'SIDEBAR.descriptions.FEATURE_TABLE',\n      icon: 'fa-solid fa-table-list',\n    });\n    this.hsMapService.loaded().then(() => {\n      for (const layer of this.hsConfig.layersInFeatureTable || []) {\n        this.addLayerToTable(layer);\n      }\n    });\n  }\n\n  /**\n   * Add layer to feature description table\n   * @param layer - Layer to add\n   */\n  addLayerToTable(layer: VectorLayer<VectorSource<Feature>>): void {\n    const layerDescriptor = this.hsFeatureTableService.addLayer(layer);\n    if (layerDescriptor) {\n      this.layers.push(layerDescriptor);\n    }\n  }\n}\n","@if (isVisible$ | async) {\n  <div class=\"card hs-main-panel\">\n    <hs-panel-header name=\"feature-table\" [panelTabs]=\"'FEATURE_TABLE'\"></hs-panel-header>\n    <div class=\"card-body\">\n      @for (layer of layers; track layer) {\n        <div>\n          <hs-layer-features [layer]=\"layer\"></hs-layer-features>\n        </div>\n      }\n    </div>\n  </div>\n}","import {CUSTOM_ELEMENTS_SCHEMA, NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {FormsModule} from '@angular/forms';\nimport {NgbDropdownModule} from '@ng-bootstrap/ng-bootstrap';\nimport {TranslatePipe} from '@ngx-translate/core';\n\nimport {HsFeatureFilterPipe} from './feature-filter.pipe';\nimport {HsFeatureTableComponent} from './feature-table.component';\nimport {HsLayerFeaturesComponent} from './layer-features.component';\nimport {\n  HsPanelHeaderComponent,\n  HsPanelHelpersModule,\n} from 'hslayers-ng/common/panels';\n\n@NgModule({\n  schemas: [CUSTOM_ELEMENTS_SCHEMA],\n  declarations: [\n    HsFeatureTableComponent,\n    HsLayerFeaturesComponent,\n    HsFeatureFilterPipe,\n  ],\n  imports: [\n    CommonModule,\n    FormsModule,\n    HsPanelHelpersModule,\n    TranslatePipe,\n    NgbDropdownModule,\n    HsPanelHeaderComponent,\n  ],\n  exports: [\n    HsFeatureTableComponent,\n    HsLayerFeaturesComponent,\n    HsFeatureFilterPipe,\n  ],\n})\nexport class HsFeatureTableModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3.HsFeatureFilterPipe","i1","i2.HsLayerFeaturesComponent"],"mappings":"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"}