{"version":3,"file":"ajf-core-heat-map.mjs","sources":["../../../projects/core/heat-map/src/heat-map.ts","../../../projects/core/heat-map/src/heat-map.html","../../../projects/core/heat-map/src/heat-map-module.ts","../../../projects/core/heat-map/src/public_api.ts","../../../projects/core/heat-map/src/ajf-core-heat-map.ts"],"sourcesContent":["/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {AjfEchartsInitEvent, EchartsModule} from '@ajf/core/echarts';\nimport {BooleanInput, coerceBooleanProperty} from '@angular/cdk/coercion';\nimport {\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  isDevMode,\n  OnChanges,\n  OnDestroy,\n  Output,\n  SimpleChanges,\n  ViewEncapsulation,\n} from '@angular/core';\nimport {Feature, FeatureCollection, Geometry} from 'geojson';\n\nlet heatMapIdx = 0;\n\nexport type AjfHeatMapFeature = Feature<Geometry, {[name: string]: any}>;\nexport type AjfHeatMapFeatureCollection = FeatureCollection<Geometry, {[name: string]: any}>;\n\nexport interface AjfHeatMapFeatureSelected {\n  feature: AjfHeatMapFeature;\n}\n\ninterface SelectChanged {\n  selected: {\n    dataIndex: number[];\n    seriesIndex: number;\n  }[];\n}\n\n@Component({\n  selector: 'ajf-heat-map',\n  templateUrl: 'heat-map.html',\n  styleUrls: ['heat-map.scss'],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  encapsulation: ViewEncapsulation.None,\n})\nexport class AjfHeatMap implements OnChanges, OnDestroy {\n  @Input()\n  set features(features: AjfHeatMapFeatureCollection | undefined) {\n    this._features = features;\n  }\n  private _features?: AjfHeatMapFeatureCollection;\n\n  @Input()\n  set startColor(startColor: string) {\n    this._startColor = startColor;\n  }\n  private _startColor = '#ffeb3b';\n\n  @Input()\n  set endColor(endColor: string) {\n    this._endColor = endColor;\n  }\n  private _endColor = '#f44336';\n\n  @Input()\n  set highlightColor(highlightColor: string) {\n    this._highlightColor = highlightColor;\n  }\n  private _highlightColor = '#009688';\n\n  @Input()\n  set values(values: string | number[]) {\n    this._values = values;\n  }\n  private _values: string | number[] = 'properties.value';\n\n  /**\n   * The codo to execute when an element is selected on heatmap.\n   * It is inserted into a function, which receives the selected object as input\n   */\n  @Input()\n  set action(action: string) {\n    this._action = action;\n  }\n  private _action: string = '';\n\n  @Input()\n  set idProp(idProp: string) {\n    this._idProp = idProp;\n  }\n  private _idProp = 'id';\n\n  @Input()\n  set showVisualMap(showVisualMap: BooleanInput) {\n    this._showVisualMap = coerceBooleanProperty(showVisualMap);\n  }\n  private _showVisualMap = false;\n\n  @Output()\n  readonly featureSelected = new EventEmitter<AjfHeatMapFeatureSelected>();\n\n  get chartOptions(): echarts.EChartsOption | undefined {\n    return this._chartOptions;\n  }\n  private _chartOptions?: echarts.EChartsOption;\n  private _name = `ajf_heatmap_${heatMapIdx++}`;\n  private _echarts?: EchartsModule;\n\n  constructor(private _cdr: ChangeDetectorRef) {}\n\n  ngOnChanges(_: SimpleChanges): void {\n    this._updateChartOptions();\n  }\n\n  ngOnDestroy(): void {\n    this.featureSelected.complete();\n  }\n\n  onChartInit(event: AjfEchartsInitEvent): void {\n    const {echarts, chart} = event;\n    this._echarts = echarts;\n    chart.on('selectchanged', params => {\n      if (this._features == null) {\n        return;\n      }\n      const {selected} = params as SelectChanged;\n      if (selected == null || selected.length !== 1) {\n        return;\n      }\n      const {dataIndex, seriesIndex} = selected[0];\n      if (seriesIndex !== 0 || dataIndex.length !== 1) {\n        return;\n      }\n      const idx = dataIndex[0];\n      if (idx < 0 || idx >= this._features.features.length) {\n        return;\n      }\n      const feature = this._features.features[idx];\n      this.featureSelected.emit({feature});\n      if (this._action && this._action.length) {\n        try {\n          const actionFunction = new Function('v', this._action);\n          actionFunction({feature});\n        } catch (e) {\n          if (isDevMode()) {\n            console.log(e);\n          }\n        }\n      }\n    });\n    this._updateChartOptions();\n  }\n\n  private _updateChartOptions(): void {\n    if (this._echarts == null) {\n      return;\n    }\n    if (this._features == null) {\n      this._chartOptions = undefined;\n    } else {\n      this._echarts.registerMap(this._name, this._features as any);\n      this._chartOptions = {\n        geo: {\n          map: this._name,\n          itemStyle: {\n            opacity: 0,\n          },\n          nameProperty: this._idProp,\n        },\n        visualMap: {\n          calculable: false,\n          realtime: false,\n          inRange: {\n            color: [this._startColor, this._endColor],\n          },\n          showLabel: false,\n          show: this._showVisualMap,\n        },\n        series: this._getChartSeries(),\n      };\n    }\n    this._cdr.detectChanges();\n  }\n\n  private _getChartSeries(): echarts.MapSeriesOption[] {\n    const data = this._getFeaturesData();\n    if (data.length === 0) {\n      return [];\n    }\n    return [\n      {\n        type: 'map',\n        map: this._name,\n        nameProperty: this._idProp,\n        emphasis: {\n          itemStyle: {\n            areaColor: this._highlightColor,\n          },\n          label: {\n            show: false,\n          },\n        },\n        select: {\n          itemStyle: {\n            color: this._highlightColor,\n          },\n          label: {\n            show: false,\n          },\n        },\n        selectedMode: 'single',\n        data,\n      },\n    ];\n  }\n\n  private _getFeaturesData(): {name: string; value: number}[] {\n    if (this._features == null) {\n      return [];\n    }\n    const {features} = this._features;\n    const values = this._values;\n    if (typeof values === 'string') {\n    } else if (values.length === features.length) {\n      return features.map((feature, idx) => {\n        const idProp = feature.properties[this._idProp] as string;\n        return {\n          name: idProp,\n          value: values[idx],\n        } as any;\n      });\n    }\n    return [];\n  }\n}\n","<div ajfEcharts (chartInit)=\"onChartInit($event)\" [options]=\"chartOptions\"></div>\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nimport {AjfEchartsModule} from '@ajf/core/echarts';\nimport {NgModule} from '@angular/core';\n\nimport {AjfHeatMap} from './heat-map';\n\n@NgModule({\n  declarations: [AjfHeatMap],\n  exports: [AjfHeatMap],\n  imports: [AjfEchartsModule],\n})\nexport class AjfHeatMapModule {}\n","/**\n * @license\n * Copyright (C) Gnucoop soc. coop.\n *\n * This file is part of the Advanced JSON forms (ajf).\n *\n * Advanced JSON forms (ajf) is free software: you can redistribute it and/or\n * modify it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the License,\n * or (at your option) any later version.\n *\n * Advanced JSON forms (ajf) is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero\n * General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with Advanced JSON forms (ajf).\n * If not, see http://www.gnu.org/licenses/.\n *\n */\n\nexport * from './heat-map';\nexport * from './heat-map-module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}