{"version":3,"file":"my-angular-gpt-package.mjs","sources":["../../../projects/my-angular-gpt-package/src/lib/my-angular-gpt-package.service.ts","../../../projects/my-angular-gpt-package/src/lib/my-angular-gpt-package.component.ts","../../../projects/my-angular-gpt-package/src/lib/models/alert/configs/app-config.ts","../../../projects/my-angular-gpt-package/src/lib/models/alert/configs/map-config.ts","../../../projects/my-angular-gpt-package/src/lib/models/alert/configs/web-api-config.ts","../../../projects/my-angular-gpt-package/src/lib/models/alert/configs/application-config.ts","../../../projects/my-angular-gpt-package/src/lib/services/config/config.service.ts","../../../projects/my-angular-gpt-package/src/lib/services/event/events.service.ts","../../../projects/my-angular-gpt-package/src/lib/services/identity/identity.service.ts","../../../projects/my-angular-gpt-package/src/lib/services/arcgis/arcgis.service.ts","../../../projects/my-angular-gpt-package/src/lib/components/map/map.component.ts","../../../projects/my-angular-gpt-package/src/lib/components/map/map.component.html","../../../projects/my-angular-gpt-package/src/lib/models/alert/alert.ts","../../../projects/my-angular-gpt-package/src/lib/components/alert/alert.component.ts","../../../projects/my-angular-gpt-package/src/lib/components/alert/alert.component.html","../../../projects/my-angular-gpt-package/src/lib/services/chart-helper/chart-helper.ts","../../../projects/my-angular-gpt-package/src/lib/components/gpt-dialog/gpt-dialog.component.ts","../../../projects/my-angular-gpt-package/src/lib/components/gpt-dialog/gpt-dialog.component.html","../../../projects/my-angular-gpt-package/src/lib/services/chat/chat.service.ts","../../../projects/my-angular-gpt-package/src/lib/components/chat/chat.component.ts","../../../projects/my-angular-gpt-package/src/lib/components/chat/chat.component.html","../../../projects/my-angular-gpt-package/src/lib/modules/material/material.module.ts","../../../projects/my-angular-gpt-package/src/lib/my-angular-gpt-package.module.ts","../../../projects/my-angular-gpt-package/src/public-api.ts","../../../projects/my-angular-gpt-package/src/my-angular-gpt-package.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class MyAngularGptPackageService {\r\n\r\n  constructor() { }\r\n}\r\n","import { Component } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'lib-my-angular-gpt-package',\r\n  imports: [],\r\n  template: `\r\n    <p>\r\n      my-angular-gpt-package works!\r\n    </p>\r\n  `,\r\n  styles: ``\r\n})\r\nexport class MyAngularGptPackageComponent {\r\n\r\n}\r\n","import { PublicUrl } from \"./public-url\";\r\n\r\nexport class AppConfig {\r\n    portalUrl: string = \"\";\r\n    appId: string = \"\";\r\n    portalUsername = \"\";\r\n    portalPassword = \"\";\r\n    portalGenerateTokenUrl = \"\";\r\n    portalRefererUrl = \"\";\r\n    authenticationType: string = \"\";\r\n    allowAnonymous: boolean = false;\r\n    defaultLanguage: string = \"\";\r\n    selectedLanguage: string = \"\";\r\n}\r\n","export class MapConfig {\r\n    mapMode: string = \"\";\r\n    webmapId: string = \"\";\r\n}\r\n","import { MapConfig } from './map-config';\r\n\r\nexport class WebApiConfig {\r\n  layersConfig: any = {};\r\n  mapLayers: any = {};\r\n  mapConfig: MapConfig = new MapConfig();\r\n  appName: string = '';\r\n  geoGptUrl: string = '';\r\n  geoCodeUrl: string = '';\r\n  saveMapUrl: string = '';\r\n  printMapUrl: string = '';\r\n\r\n}\r\n","import { AppConfig } from './app-config';\r\nimport { WebApiConfig } from './web-api-config';\r\n\r\nexport class ApplicationConfig {\r\n  appConfig: AppConfig = new AppConfig();\r\n  webapiConfig: WebApiConfig = new WebApiConfig();\r\n  mapView: any;\r\n  resources: any;\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { lastValueFrom } from 'rxjs';\r\nimport { ApplicationConfig } from '../../models/alert/configs/application-config';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class ConfigService {\r\n  config: ApplicationConfig = new ApplicationConfig();\r\n\r\n  constructor(private http: HttpClient) {\r\n\r\n  }\r\n\r\n  async loadConfig(jsonPath: string,resourcesPath:string): Promise<void> {\r\n    try {\r\n      this.config = await lastValueFrom(this.http.get<ApplicationConfig>(jsonPath));\r\n      this.config.resources = await this.getResources(resourcesPath,this.getLanguage(this.config.appConfig.defaultLanguage));\r\n      console.log('Library Config Loaded',this.config);\r\n    } catch (error) {\r\n      console.error('Error loading config:', error);\r\n    }\r\n  }\r\n\r\n  async getResources(resourcesPath:string,lang: string) {\r\n    let resources: any = await this.http.get(`${resourcesPath}?d=${Date.now()}`).toPromise();\r\n    return this.fillResources(lang, resources);\r\n  }\r\n  getLanguage(defaultLanguage: string) {\r\n    let urlParams = new URLSearchParams(window.location.search);\r\n    let language = urlParams.get('locale') || localStorage.getItem(\"locale\");\r\n    if (language == null) {\r\n      language = defaultLanguage;\r\n    }\r\n    return language;\r\n  }\r\n  private fillResources(lang: string, resources: []) {\r\n    let urlParams = new URLSearchParams(window.location.search);\r\n    let langResources = {};\r\n    if (urlParams.has(\"lang\")) {\r\n      lang = urlParams.get(\"lang\") as string;\r\n    }\r\n    var length = resources.length;\r\n    for (var i = 0; i < length; i++) {\r\n      if (resources[i][\"key\"] != \"\") {\r\n        langResources[resources[i][\"key\"]] = resources[i][lang];\r\n      }\r\n    }\r\n    return langResources\r\n  }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\nimport { SelectedChartColumn } from '../../models/charts/selected-chart-column';\r\nimport { AmChartsDataModel } from '../../models/charts/am-charts-data-model';\r\nimport { SankeyChartDataModel } from '../../models/charts/sankey-chart-data-model';\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class EventsService {\r\n  // app loadnig\r\n  loadAppEventSubject: Subject<boolean> = new Subject<boolean>();\r\n  loadAppEvent: Observable<boolean> = this.loadAppEventSubject.asObservable();\r\n\r\n  // map loading\r\n  mapLoadedEventSubject: Subject<boolean> = new Subject<boolean>();\r\n  mapLoadedEvent: Observable<boolean> = this.mapLoadedEventSubject.asObservable();\r\n\r\n  // reset map filter\r\n  resetMapFiltersEventSubject: Subject<boolean> = new Subject<boolean>();\r\n  resetMapFiltersEvent: Observable<boolean> = this.resetMapFiltersEventSubject.asObservable();\r\n\r\n  // estidama feature\r\n  estidamaFeaturesEventSubject: Subject<string> = new Subject<string>();\r\n  estidamaFeaturesEvent: Observable<string> = this.estidamaFeaturesEventSubject.asObservable();\r\n\r\n  // charts printing\r\n  chartsPrintingEventSubject: Subject<boolean> = new Subject<boolean>();\r\n  chartsPrintingEvent: Observable<boolean> = this.chartsPrintingEventSubject.asObservable();\r\n\r\n    // selected chart column\r\n    selectedChartColumnEventSubject: Subject<SelectedChartColumn> = new Subject<SelectedChartColumn>();\r\n    selectedChartColumnDataEvent: Observable<SelectedChartColumn> = this.selectedChartColumnEventSubject.asObservable();\r\n  \r\n     // reports charts data\r\n  reportsChartsDataEventSubject: Subject<AmChartsDataModel[] | SankeyChartDataModel[]> = new Subject<AmChartsDataModel[] | SankeyChartDataModel[]>();\r\n  reportsChartsDataEvent: Observable<AmChartsDataModel[] | SankeyChartDataModel[]> = this.reportsChartsDataEventSubject.asObservable();\r\n\r\n\r\n  // zoom to report data on map\r\n  viewReportDataOnMapEventSubject: Subject<boolean> = new Subject<boolean>();\r\n  viewReportDataOnMapEvent: Observable<boolean> = this.viewReportDataOnMapEventSubject.asObservable();\r\n\r\n  // target layer\r\n  selectedTargetLayerEventSubject: Subject<string> = new Subject<string>();\r\n  selectedTargetLayerDataEvent: Observable<string> = this.selectedTargetLayerEventSubject.asObservable();\r\n\r\n  // selected year\r\n  selectedYearEventSubject: Subject<number> = new Subject<number>();\r\n  selectedYearDataEvent: Observable<number> = this.selectedYearEventSubject.asObservable();\r\n\r\n  openedExpandWidgetNameEventSubject: Subject<string> = new Subject<string>();\r\n  openedExpandWidgetNameLoadedEvent: Observable<string> = this.openedExpandWidgetNameEventSubject.asObservable();\r\n\r\n  \r\n  constructor() { }\r\n\r\n  loadApp = (load: boolean) => {\r\n    try {\r\n      this.loadAppEventSubject.next(load);\r\n    } catch (error) {\r\n      console.error('Error in loadApp:', error);\r\n    }\r\n  }\r\n\r\n  mapLoaded = (load: boolean) => {\r\n    try {\r\n      this.mapLoadedEventSubject.next(load);\r\n    } catch (error) {\r\n      console.error('Error in mapLoaded:', error);\r\n    }\r\n  }\r\n\r\n  selectedChartColumn = (chartColumn: SelectedChartColumn) => {\r\n    try {\r\n      this.selectedChartColumnEventSubject.next(chartColumn);\r\n    } catch (error) {\r\n      console.error('Error in selectedChartColumn:', error);\r\n    }\r\n  }\r\n\r\n  resetMapFilters = (load: boolean) => {\r\n    try {\r\n      this.resetMapFiltersEventSubject.next(load);\r\n    } catch (error) {\r\n      console.error('Error in resetMapFilters:', error);\r\n    }\r\n  }\r\n\r\n  estidamaFeaturesToShow = (showEstidama: string) => {\r\n    try {\r\n      this.estidamaFeaturesEventSubject.next(showEstidama);\r\n    } catch (error) {\r\n      console.error('Error in estidamaFeaturesToShow:', error);\r\n    }\r\n  }\r\n\r\n  reportsChartsData = (chartsData: AmChartsDataModel[] | SankeyChartDataModel[]) => {\r\n    try {\r\n      this.reportsChartsDataEventSubject.next(chartsData);\r\n    } catch (error) {\r\n\r\n    }\r\n  }\r\n\r\n\r\n  chartsPrinting = (print: boolean) => {\r\n    try {\r\n      this.chartsPrintingEventSubject.next(print);\r\n    } catch (error) {\r\n      console.error('Error in chartsPrinting:', error);\r\n    }\r\n  }\r\n\r\n\r\n\r\n  openUrl = (url: string) => {\r\n    try {\r\n      const win: any = window.open(url, '_blank');\r\n      win.focus();\r\n    } catch (error) {\r\n      console.error('Error in openUrl:', error);\r\n    }\r\n  }\r\n\r\n\r\n\r\n\r\n\r\n  \r\n\r\n  selectedTargetLayer = (newTargetLayerSelected: string) => {\r\n    try {\r\n      this.selectedTargetLayerEventSubject.next(newTargetLayerSelected);\r\n    } catch (error) {\r\n      console.error('Error in selectedTargetLayer:', error);\r\n    }\r\n  }\r\n\r\n  \r\n\r\n  viewReportDataOnMap = (viewReportDataOnMap: boolean) => {\r\n    try {\r\n      this.viewReportDataOnMapEventSubject.next(viewReportDataOnMap);\r\n    } catch (error) {\r\n      console.error('Error in viewReportDataOnMap:', error);\r\n    }\r\n  }\r\n\r\n  selectedYear = (newYearSelected: number) => {\r\n    try {\r\n      this.selectedYearEventSubject.next(newYearSelected);\r\n    } catch (error) {\r\n      console.error('Error in selectedYear:', error);\r\n    }\r\n  }\r\n\r\n  \r\n  openExpandWidgetName(expandWidgetName: string) {\r\n    this.openedExpandWidgetNameEventSubject.next(expandWidgetName);\r\n  }\r\n}\r\n","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { Router } from '@angular/router';\r\nimport { ConfigService } from '../config/config.service';\r\nimport esriId from '@arcgis/core/identity/IdentityManager';\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class IdentityService {\r\n  constructor(\r\n    private http: HttpClient,\r\n    private route: Router,\r\n    private configService: ConfigService) {\r\n  }\r\n\r\n  \r\n   registerArcGISToken(token: string) {  \r\n    console.log('Token generated:', token);\r\n    let url = this.configService.config.appConfig.portalUrl + \"sharing/rest\";\r\n    esriId.registerToken({ server: url, token: token, ssl: true });\r\n    console.log('Token registered');\r\n  }  \r\n\r\n\r\n  async  generateArcGISToken() : Promise<string>{\r\n    try {\r\n      const portalUrl = this.configService.config.appConfig.portalUrl;\r\n      const username = this.configService.config.appConfig.portalUsername;\r\n      const password = this.configService.config.appConfig.portalPassword;\r\n      const portalGenerateTokenUrl = this.configService.config.appConfig.portalGenerateTokenUrl;\r\n      const portalRefererUrl = this.configService.config.appConfig.portalRefererUrl;\r\n      // Define parameters for token request\r\n      const params = new URLSearchParams();\r\n      params.append('f', 'json'); // Response format\r\n      params.append('username', username); // Your ArcGIS Portal username\r\n      params.append('password', password); // Your ArcGIS Portal password\r\n      params.append('referer', portalRefererUrl); // Referer URL (important for some ArcGIS servers)\r\n      params.append('expiration', '60'); // Token expiration time in minutes (optional)\r\n      params.append('request', 'getToken'); // Client type ('referer' for web app requests)\r\n      const response = await fetch(portalGenerateTokenUrl, {\r\n        method: 'POST',\r\n        headers: {\r\n          'Content-Type': 'application/x-www-form-urlencoded'\r\n        },\r\n        body: params\r\n      });\r\n      // Check if the response is ok (status code 200-299)\r\n      if (!response.ok) {\r\n        return  `Error generating token: ${response.statusText}`;\r\n      }\r\n      // Parse the JSON response\r\n      const data = await response.json();\r\n      // Check for token in the response\r\n      if (data.token) {\r\n\r\n        return data.token;\r\n      } else {\r\n        return `Token generation failed: ${data.error.message}`;\r\n      }\r\n    } catch (error:any) {\r\n      console.error('Error:', error);\r\n      return `Error generating token: ${error.message}`;\r\n    }\r\n  }\r\n  \r\n}\r\n","import { ElementRef, Injectable } from '@angular/core';\r\nimport FeatureLayer from '@arcgis/core/layers/FeatureLayer';\r\nimport WebMap from '@arcgis/core/WebMap';\r\nimport Map from '@arcgis/core/Map';\r\nimport { ConfigService } from '../config/config.service';\r\nimport { AppConfig } from '../../models/alert/configs/app-config';\r\nimport { ApplicationConfig } from '../../models/alert/configs/application-config';\r\nimport { IdentityService } from '../identity/identity.service';\r\nimport BasemapGallery from '@arcgis/core/widgets/BasemapGallery';\r\nimport PortalBasemapsSource from '@arcgis/core/widgets/BasemapGallery/support/PortalBasemapsSource';\r\nimport Compass from '@arcgis/core/widgets/Compass.js';\r\nimport CoordinateConversion from '@arcgis/core/widgets/CoordinateConversion';\r\nimport Expand from '@arcgis/core/widgets/Expand';\r\nimport Home from '@arcgis/core/widgets/Home';\r\nimport Legend from '@arcgis/core/widgets/Legend';\r\nimport Locate from '@arcgis/core/widgets/Locate';\r\nimport Graphic from '@arcgis/core/Graphic';\r\nimport * as reactiveUtils from '@arcgis/core/core/reactiveUtils.js';\r\nimport Portal from '@arcgis/core/portal/Portal';\r\nimport ScaleBar from '@arcgis/core/widgets/ScaleBar';\r\nimport SimpleMarkerSymbol from '@arcgis/core/symbols/SimpleMarkerSymbol';\r\nimport {\r\n  default as EsriMapView,\r\n  default as MapView,\r\n} from '@arcgis/core/views/MapView';\r\nimport { EventsService } from '../event/events.service';\r\nimport Search from '@arcgis/core/widgets/Search';\r\nimport Bookmarks from '@arcgis/core/widgets/Bookmarks.js';\r\nimport Bookmark from '@arcgis/core/webmap/Bookmark.js';\r\nimport Extent from '@arcgis/core/geometry/Extent';\r\nimport Basemap from '@arcgis/core/Basemap';\r\nimport LayerList from '@arcgis/core/widgets/LayerList';\r\nimport TimeSlider from '@arcgis/core/widgets/TimeSlider';\r\nimport TimeInterval from '@arcgis/core/TimeInterval'; // Import the TimeInterval class\r\nimport Layer from '@arcgis/core/layers/Layer.js';\r\nimport PrintTemplate from '@arcgis/core/rest/support/PrintTemplate';\r\nimport * as print from '@arcgis/core/rest/print';\r\nimport PrintParameters from '@arcgis/core/rest/support/PrintParameters';\r\nimport Point from '@arcgis/core/geometry/Point';\r\nimport * as Locator from \"@arcgis/core/rest/locator\";\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ArcgisService {\r\n  config!: ApplicationConfig;\r\n  searchWidget: any;\r\n  otherHighlightedFeatures: any[] = [];\r\n  plotHighlightedFeatures: any;\r\n  viewBuildingFeatureMap: boolean = false;\r\n  mapExpandsWidget: Expand[] = [];\r\n  basemapGalleryExpand!: Expand;\r\n  legendExpand!: Expand;\r\n  coordinateConversionExpand!: Expand;\r\n  sketchExpand!: Expand;\r\n  toolbarDivExpand!: Expand;\r\n  mapScaleDivExpand!: Expand;\r\n  symbolBuilderExpand!: Expand;\r\n  bookmarks!: Bookmarks;\r\n  layerListExpand!: Expand; // Reference to the layer list expand widget\r\n   legend: Legend | null = null;  \r\n  _prevExtent: boolean = false;\r\n  _nextExtent: boolean = false;\r\n  _currentExtent: any;\r\n  _extentHistory: any = [];\r\n  _extentHistoryIndx: number = 0;\r\n  _preExtent: any;\r\n  layersConfig: any;\r\n  initialExtent!: Extent;\r\n  // private viewContent: ViewContainerRef\r\n\r\n  constructor(\r\n    private configService: ConfigService,\r\n    private eventsService: EventsService,\r\n    private identityService: IdentityService\r\n  ) {\r\n    this.config = configService.config;\r\n  }\r\n\r\n\r\n  initializeMap = async (\r\n    appConfig: AppConfig,\r\n    itemid: string,\r\n    mapViewEl: ElementRef\r\n  ) => {\r\n    try {\r\n      const token = await this.identityService.generateArcGISToken();  \r\n      console.log('token generated', token);\r\n      await this.identityService.registerArcGISToken(token); \r\n      console.log('Initializing map with appConfig.portalUrl:', appConfig.portalUrl);\r\n        // Create WebMap with authentication\r\n        let  webmap = new WebMap({\r\n          portalItem: {\r\n            // autocasts as new PortalItem()\r\n            id: itemid,\r\n            portal: {\r\n              url: appConfig.portalUrl,\r\n            },\r\n          },\r\n        });\r\n\r\n        console.log('WebMap is ready with authentication!');\r\n        \r\n        let mapView = new MapView({\r\n            map: webmap,\r\n            container: mapViewEl.nativeElement,\r\n        });\r\n\r\n        // Add secure feature layers\r\n        this.configService.config.webapiConfig.mapLayers.forEach((layer:any) => {\r\n            let featureLayer = new FeatureLayer({\r\n                url: layer.url, // Use the generated token\r\n                title: layer.layerNameInMap\r\n            });\r\n\r\n            console.log('Adding secure layer:', featureLayer.url);\r\n            webmap.add(featureLayer);\r\n        });\r\n\r\n        mapView.ui.remove('attribution');\r\n        this.configService.config.mapView = mapView;\r\n        console.log('MapView initialized successfully');\r\n        return mapView;\r\n\r\n    } catch (error) {\r\n        console.error(\"Error initializing map:\", error);\r\n        return new MapView();\r\n    }\r\n};\r\n\r\n\r\n  addWidgetsOnScreen(config: ApplicationConfig, mapView: EsriMapView) {\r\n    let location =\r\n      config.appConfig.selectedLanguage.toLowerCase() == 'en'\r\n        ? 'left'\r\n        : 'right';\r\n\r\n    //home\r\n    let homeWidget = new Home({\r\n      view: mapView,\r\n      container: this.createComponentContainer(false),\r\n    });\r\n\r\n    mapView.ui.add(homeWidget, 'top-' + location);\r\n\r\n    // zoom\r\n    mapView.ui.move('zoom', 'top-' + location);\r\n    // compass\r\n    let compass = new Compass({\r\n      view: mapView,\r\n    });\r\n    mapView.ui.add(compass, 'top-' + location);\r\n    this.addLayerList(mapView);\r\n    this.addLegendList(mapView);\r\n\r\n    let basemapGallery = new BasemapGallery({\r\n      view: mapView,\r\n      source: new PortalBasemapsSource({\r\n        portal: new Portal({ url: config.appConfig.portalUrl }),\r\n      }),\r\n    });\r\n    basemapGallery.watch(\r\n      'activeBasemap',\r\n      (newValue, oldValue, property, object) => {\r\n        //log\r\n      }\r\n    );\r\n\r\n    this.basemapGalleryExpand = new Expand({\r\n      id: 'basemapGalleryExpand',\r\n      expandIcon: 'basemap',\r\n      view: mapView,\r\n      content: basemapGallery,\r\n      expandTooltip: this.config.resources.basemapGalleryExpandTooltip,\r\n      mode: 'floating',\r\n    });\r\n    mapView.ui.add(this.basemapGalleryExpand, 'top-' + location);\r\n    let locate = new Locate({\r\n      view: mapView,\r\n      graphic: new Graphic({\r\n        symbol: new SimpleMarkerSymbol({ color: '#aa182c' }),\r\n      }),\r\n      container: this.createComponentContainer(false),\r\n    });\r\n    locate.on('locate', () => {\r\n      //log\r\n    });\r\n    mapView.ui.add(locate, 'top-' + location);\r\n\r\n    let scaleBar = new ScaleBar({\r\n      view: mapView,\r\n      unit: 'metric',\r\n    });\r\n    mapView.ui.add(scaleBar, 'bottom-' + location);\r\n\r\n    let coordinateConversion = new CoordinateConversion({\r\n      view: mapView,\r\n    });\r\n    this.removeUnwantedFormats(coordinateConversion);\r\n\r\n    this.coordinateConversionExpand = new Expand({\r\n      id: 'coordinateConversionExpand',\r\n      view: mapView,\r\n      content: coordinateConversion,\r\n      expandIcon: 'pop-up-blank',\r\n      expandTooltip: this.config.resources.coordinateConversionExpandTooltip,\r\n      container: this.createComponentContainer(true),\r\n    });\r\n    mapView.ui.add(this.coordinateConversionExpand, 'top-' + location);\r\n    this.coordinateConversionExpand.watch('expanded', (newValue) => {\r\n      if (newValue) {\r\n        //log\r\n      }\r\n    });\r\n    // add listeners to the expand widgets\r\n    this.mapExpandsWidget.push(this.basemapGalleryExpand);\r\n    reactiveUtils.watch(\r\n      () => this.basemapGalleryExpand.expanded,\r\n      () => {\r\n        if (this.basemapGalleryExpand.expanded) {\r\n          this.eventsService.openExpandWidgetName('basemapGalleryExpand');\r\n        }\r\n      }\r\n    );\r\n\r\n    this.mapExpandsWidget.push(this.legendExpand);\r\n    reactiveUtils.watch(\r\n      () => this.legendExpand.expanded,\r\n      () => {\r\n        if (this.legendExpand.expanded) {\r\n          this.eventsService.openExpandWidgetName('legendExpand');\r\n        }\r\n      }\r\n    );\r\n\r\n    this.mapExpandsWidget.push(this.coordinateConversionExpand);\r\n    reactiveUtils.watch(\r\n      () => this.coordinateConversionExpand.expanded,\r\n      () => {\r\n        if (this.coordinateConversionExpand.expanded) {\r\n          this.eventsService.openExpandWidgetName('coordinateConversionExpand');\r\n        }\r\n      }\r\n    );\r\n    this.setExpandWidgetsToggleListener();\r\n\r\n    const searchWidget = new Search({\r\n      view: mapView,\r\n    });\r\n\r\n    const searchLocation =\r\n      config.appConfig.selectedLanguage.toLowerCase() == 'en'\r\n        ? 'right'\r\n        : 'left';\r\n\r\n    // Add the search widget to the top right corner of the view\r\n    mapView.ui.add(searchWidget, 'top-' + searchLocation);\r\n  }\r\n\r\n  createComponentContainer(hideInMobileView: boolean) {\r\n    let esriComponentContainer = document.createElement('div');\r\n    if (hideInMobileView) {\r\n      esriComponentContainer.classList.add('mobile-hidden');\r\n    }\r\n    return esriComponentContainer;\r\n  }\r\n  private removeUnwantedFormats = (\r\n    coordinateConversionWidget: CoordinateConversion\r\n  ) => {\r\n    this.eventsService.mapLoadedEventSubject.subscribe((mapLoaded) => {\r\n      coordinateConversionWidget.formats.removeMany(\r\n        coordinateConversionWidget.formats.filter(\r\n          (format) =>\r\n            format.name.toLowerCase() == 'ddm' ||\r\n            format.name.toLowerCase() == 'usng'\r\n        )\r\n      );\r\n    });\r\n  };\r\n\r\n  trackingg = (mapView: MapView ) => {\r\n    reactiveUtils\r\n      .whenOnce(() => mapView.ready)\r\n      .then(() => {\r\n        // Listen for changes in the extent when the map is stationary\r\n        reactiveUtils.when(\r\n          () => mapView.stationary,\r\n          () => {\r\n            this.extentChangeHandler(mapView.extent);\r\n          }\r\n        );\r\n      });\r\n  };\r\n\r\n  // Method to change the basemap\r\n  switchBasemap(mapView: MapView , basemapName: string): void {\r\n    if (mapView.map) {\r\n      const basemap = Basemap.fromId(basemapName);\r\n      if (basemap) {\r\n        mapView.map.basemap = basemap;\r\n      } else {\r\n        console.error(`Basemap with name '${basemapName}' not found.`);\r\n      }\r\n    }\r\n  }\r\n\r\n  extentChangeHandler = (evt: any) => {\r\n    try {\r\n      if (this._prevExtent || this._nextExtent) {\r\n        this._currentExtent = evt;\r\n      } else {\r\n        this._preExtent = this._currentExtent;\r\n        this._currentExtent = evt;\r\n        this._extentHistory.push({\r\n          preExtent: this._preExtent,\r\n          currentExtent: this._currentExtent,\r\n        });\r\n        this._extentHistoryIndx = this._extentHistory.length - 1;\r\n      }\r\n      this._prevExtent = this._nextExtent = false;\r\n    } catch (error) {\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n// Method to increase zoom\r\nincreaseZoom(mapView: MapView , increment: number = 1): void {\r\n  mapView.zoom += increment\r\n}\r\n\r\n// Method to decrease zoom\r\ndecreaseZoom(mapView: MapView , decrement: number = 1): void {\r\n  mapView.zoom -= decrement\r\n}\r\n\r\nzoomToPrevious = (mapView: MapView ) => {\r\n  if (!(this._extentHistory.length === 0 || this._extentHistoryIndx === 0)) {\r\n    this._prevExtent = true;\r\n    mapView.goTo(this._extentHistory[this._extentHistoryIndx].preExtent);\r\n    this._extentHistoryIndx--;\r\n    return 'Zoomed to Previous Extent';\r\n  } else {\r\n    return 'No Previous Extent';\r\n  }\r\n}\r\n\r\nzoomToNext = (mapView: MapView ) => {\r\n  if (\r\n    !(\r\n      this._extentHistory.length === 0 ||\r\n      this._extentHistoryIndx === this._extentHistory.length - 1\r\n    )\r\n  ) {\r\n    this._nextExtent = true;\r\n    this._extentHistoryIndx++;\r\n    mapView.goTo(\r\n      this._extentHistory[this._extentHistoryIndx].currentExtent\r\n    );\r\n    return 'Zoomed to Next Extent';\r\n  } else {\r\n    return 'No Next Extent';\r\n  }\r\n}\r\n\r\n\r\n    async addLayerFromURL(mapView: MapView ,url: string): Promise<void> {\r\n      const l = await Layer.fromArcGISServerUrl({ url: url });  \r\n\r\n      // Check if the layer already exists  \r\n      if (!this.layerExists(url, mapView.map)) {  \r\n          mapView.map.add(l);  \r\n          l.when(() => {  \r\n              // Ensure the layer is loaded before trying to access its extent  \r\n              if (l.fullExtent) {  \r\n                  mapView.goTo(l.fullExtent).catch((error) => {  \r\n                      console.error('Error zooming to layer extent:', error);  \r\n                  });  \r\n              } else {  \r\n                  console.warn('Layer does not have a fullExtent property.');  \r\n              }  \r\n          }).catch((error) => {  \r\n              console.error('Error loading layer:', error);  \r\n          });  \r\n      } else {  \r\n          console.log('Layer already exists in the map:', url);  \r\n      }  \r\n      \r\n      console.log(url);  \r\n      console.log(mapView.map.allLayers); \r\n  }\r\n\r\n  layerExists(url:any, map:Map) {  \r\n    return Array.from(map.allLayers).some((layer:any) => layer.url === url);  \r\n} \r\n\r\n  removeLayerByTitle = (mapView: MapView , layerTitle: string) => {\r\n    const layer = mapView.map.layers.find((l) => l.title === layerTitle);\r\n    if (layer) {\r\n      mapView.map.remove(layer);\r\n    }\r\n  };\r\n\r\n  // Method to add the layer list to the map\r\n  addLayerList(mapView: MapView ): void {\r\n    // Check if the layerListExpand already exists  \r\n    if (this.layerListExpand) {  \r\n      console.log('LayerList is already added to the UI.');  \r\n      return; // Exit if it already exists  \r\n  }  \r\n\r\n  const layerList = new LayerList({  \r\n      view: mapView,  \r\n  });  \r\n\r\n  this.layerListExpand = new Expand({  \r\n      view: mapView,  \r\n      content: layerList,  \r\n  });  \r\n\r\n  mapView.ui.add(this.layerListExpand, 'top-left');  \r\n  console.log('LayerList added to the UI.');  \r\n  }\r\n\r\n  // Method to remove the layer list from the map\r\n  removeLayerList(mapView: MapView ): void {\r\n    if (this.layerListExpand) {\r\n      mapView.ui.remove(this.layerListExpand);\r\n      this.layerListExpand.destroy(); // Optional: Destroy the widget to clean up resources\r\n      this.layerListExpand = undefined!; // Reset the reference\r\n    } else {\r\n      //console.error('Layer list is not added to the map.');\r\n    }\r\n  }\r\n\r\n  // Method to add the legend list to the map\r\n  addLegendList(mapView: MapView): void {  \r\n    // Check if the legendExpand already exists  \r\n    if (this.legendExpand) {  \r\n        console.log('Legend is already added to the UI.');  \r\n        return; // Exit if it already exists  \r\n    }  \r\n\r\n    // Create the Legend and Expand widget  \r\n    this.legend = new Legend({  \r\n        view: mapView,  \r\n    });  \r\n\r\n    this.legendExpand = new Expand({  \r\n        view: mapView,  \r\n        content: this.legend,  \r\n    });  \r\n\r\n    mapView.ui.add(this.legendExpand, 'top-left');  \r\n    console.log('Legend added to the UI.');  \r\n}  \r\n  // Method to remove the legend list from the map\r\n  removeLegendList(mapView: MapView ): void {\r\n    if (this.legendExpand) {\r\n      mapView.ui.remove(this.legendExpand);\r\n      this.legendExpand.destroy(); // Optional: Destroy the widget to clean up resources\r\n      this.legendExpand = undefined!; // Reset the reference\r\n    } else {\r\n      //console.error('Legend is not added to the map.');\r\n    }\r\n  }\r\n\r\n  applyExportFunction(mapView: MapView ) {\r\n    mapView\r\n      .takeScreenshot()\r\n      .then((screenshot: any) => {\r\n        // Create an <a> element to download the screenshot\r\n        const a = document.createElement('a');\r\n        a.href = screenshot.dataUrl;\r\n        a.download = 'map-screenshot.png';\r\n        document.body.appendChild(a);\r\n        a.click();\r\n        document.body.removeChild(a);\r\n      })\r\n      .catch((error: any) => {\r\n        //console.error('Error taking screenshot:', error);\r\n      });\r\n  }\r\n\r\n  getLayerByTitle(mapView: MapView , layerTitle: string) {\r\n    try {\r\n      layerTitle = layerTitle.toLowerCase();\r\n      let layerFound: any = null;\r\n\r\n      mapView.map?.allLayers.map((layer: any) => {\r\n        const layerTitleLower = layer.title ? layer.title.toLowerCase() : null;\r\n\r\n        if (layerTitleLower === layerTitle) {\r\n          layerFound = layer;\r\n          return layerFound; // Return immediately if found  \r\n        }\r\n\r\n        if (layer.allSublayers) {\r\n          layer.allSublayers.map((sublayer: any) => {\r\n            const sublayerTitleLower = sublayer.title\r\n              ? sublayer.title.toLowerCase()\r\n              : null;\r\n\r\n            if (sublayerTitleLower === layerTitle) {\r\n              console.log('sublayer.title >> ', sublayerTitleLower);\r\n              layerFound = sublayer;\r\n              return layerFound;\r\n            }\r\n          });\r\n        }\r\n      });\r\n\r\n      return layerFound;\r\n    } catch (e) {\r\n      console.error(e);\r\n      return null;\r\n    }\r\n  }\r\n\r\n getUrlByLayerName( targetLayerName:string) {\r\n  const layersConfig = this.configService?.config?.webapiConfig?.layersConfig;\r\n\r\n  if (!layersConfig || !Array.isArray(layersConfig)) {\r\n    console.error(\"mapLayers is undefined or not an array\", this.configService?.config?.webapiConfig);\r\n    return;\r\n  }\r\n  layersConfig.forEach((layer:any) => {\r\n    console.log('layer.layerNameInMap',layer.layerNameInMap, 'targetLayerName',targetLayerName);\r\n    if (layer.layerNameInMap === targetLayerName) {\r\n      return layer.url;\r\n    }\r\n  })\r\n    return null; // Return null if no match is found\r\n  }\r\n\r\n  // Method to highlight features where OBJECTID > 5\r\n async highlightFeatures(\r\n    mapView: MapView ,\r\n    layerConfigName: string,\r\n    queryToHighlight: string,\r\n    type: string\r\n  ):Promise<boolean> {\r\n    var highlightLayer;\r\n    if (type == 'table') {\r\n      const mapLayerUrl = this.getUrlByLayerName(layerConfigName);\r\n      if (!mapLayerUrl) {\r\n        console.error('No layer available to highlight features.');\r\n        return false;\r\n      }\r\n      highlightLayer = new FeatureLayer({ url: mapLayerUrl });\r\n    } else {\r\n      highlightLayer = this.getLayerByTitle(mapView, layerConfigName);\r\n    }\r\n\r\n    if (!highlightLayer) {\r\n      console.error('No layer available to highlight features.');\r\n      return false;\r\n    }\r\n\r\n    if (highlightLayer.type !== 'feature') {\r\n      console.error('Highlighting is only supported for FeatureLayers.');\r\n      return false;\r\n    }\r\n    // Query the features based on the provided condition\r\n    const query = highlightLayer.createQuery()\r\n    query.where = queryToHighlight\r\n\r\n    try {\r\n      const results = await highlightLayer.queryFeatures(query);\r\n      const features = results.features;\r\n\r\n      if (features.length === 0) {\r\n          console.warn('No features found with the given query:', queryToHighlight);\r\n          return false;\r\n      }\r\n\r\n      // Clear previous highlights\r\n      mapView.graphics.removeAll();\r\n\r\n      // Add the new highlights\r\n      features.forEach((feature:any) => {\r\n          const highlightSymbol = {\r\n              type: 'simple-fill',\r\n              color: [255, 255, 70, 0.5],\r\n              outline: {\r\n                  color: [255, 255, 70],\r\n                  width: 2,\r\n              },\r\n          };\r\n\r\n          const highlightGraphic = new Graphic({\r\n              geometry: feature.geometry,\r\n              symbol: highlightSymbol,\r\n          });\r\n\r\n          mapView.graphics.add(highlightGraphic);\r\n      });\r\n\r\n      // Zoom to the extent of the highlighted features\r\n      const featureExtent = results.features[0].geometry?.extent;\r\n      if (featureExtent) {\r\n          await mapView.goTo(featureExtent.expand(1.5)); // Ensure goTo() is awaited\r\n      } else {\r\n          console.warn('No extent found for the highlighted features.');\r\n      }\r\n\r\n      return true;\r\n  } catch (error) {\r\n      console.error('Failed to highlight features:', error);\r\n      return false;\r\n  }\r\n  }\r\n\r\n  // Method to zoom to the full extent of a specified layer\r\n  zoomToFullExtent(mapView: MapView , title: string): boolean {\r\n    var layer =this.getLayerByTitle(mapView,title);\r\n    if (layer instanceof FeatureLayer) {\r\n      layer\r\n        .queryExtent()\r\n        .then((result) => {\r\n          if (result.extent) {\r\n            mapView.goTo(result.extent.expand(1.5)).catch((error) => {\r\n              //console.error('Failed to zoom to full extent of layer:', error);\r\n            })\r\n          } else {\r\n            console.warn('No extent found for the specified layer.')\r\n          }\r\n        })\r\n        .catch((error) => {\r\n          //console.error('Error querying extent for layer:', error);\r\n        })\r\n        return true\r\n    } else {\r\n      //console.error(`Layer with ID '${layerId}' is not a FeatureLayer.`);\r\n      return false;\r\n    }\r\n  }\r\n\r\n  // Method to change the transparency of a layer\r\n  changeLayerOpacity(\r\n    mapView: MapView ,\r\n    title: string,\r\n    opacity: number\r\n  ): boolean {\r\n    const layer =this.getLayerByTitle(mapView,title);\r\n    if (layer) {\r\n      layer.opacity = parseFloat(opacity.toString())\r\n    } else {\r\n      //console.error(`Layer with ID '${layerId}' not found.`);\r\n      return false;\r\n    }\r\n    return true\r\n  }\r\n\r\n  printService = async (mapView: MapView ) => {\r\n    var printTaskUrl = this.configService.config.webapiConfig.printMapUrl;\r\n    var layoutName = 'map-only';\r\n    const template = new PrintTemplate({\r\n      format: 'pdf',\r\n      layout: layoutName as any,\r\n      scalePreserved: false,\r\n      layoutOptions: {\r\n        copyrightText: '',\r\n        customTextElements: [],\r\n      },\r\n    });\r\n    const params = new PrintParameters({\r\n       view: mapView as MapView,\r\n       template: template,\r\n    });\r\n    console.log(params);\r\n\r\n    let response = await print.execute(printTaskUrl, params);\r\n    return this.generateHrefLink(response.url, 'Download Map Document', true);\r\n  };\r\n\r\n  generateHrefLink = (url: string, label: string, downloadable: boolean) => {\r\n    const linkHtml = `<a target='_blank' href=\"${url}\" ${\r\n      downloadable ? 'download' : '' \r\n    }>${label}</a>`;\r\n    return linkHtml;\r\n  };\r\n\r\n\r\n\r\nfromBaseToString = (bString: string) => {\r\n  try {\r\n    return atob(bString);\r\n  } catch (error) {\r\n    console.error(error);\r\n    return \"\";\r\n  }\r\n}\r\n\r\ngetMapViewpoint = (mapView: any) => {\r\n  try {\r\n    return JSON.stringify(mapView?.viewpoint?.toJSON());\r\n  } catch (error) {\r\n    console.error(error);\r\n    return \"\";\r\n  }\r\n}\r\n\r\n  generateMapViewerUrlFromCurrentLocation = (mapView: MapView  ) => {\r\n    var centerPoint = mapView.extent.center;\r\n    let pointLongLat = this.getPointLongLat(centerPoint);\r\n    return `${window.location.origin}/map?lat=${pointLongLat.latitude}&long=${\r\n      pointLongLat.longitude\r\n    }&level=${\r\n      mapView.zoom == -1 ? 15 : mapView.zoom\r\n    }&shareMode=currentMapExtent&wkid=${mapView.spatialReference.wkid}`;\r\n  };\r\n\r\n\r\n  shareMap(mapView: MapView ) {\r\n    // Generate a shareable URL (modify this as needed)\r\n    const shareUrl = this.generateMapViewerUrlFromCurrentLocation(mapView);\r\n    // const fullUrl = `${window.location.origin}/map?extent=${extentParam}&center=${centerParam}&zoom=${zoomParam}`;\r\n\r\n    const linkHtml = `<a href=\"${shareUrl}\">Map URL</a>`;\r\n\r\n    return linkHtml;\r\n  }\r\n\r\n  getPointLongLat = (point: Point) => {\r\n    try {\r\n      return {\r\n        latitude: point.latitude\r\n          ? point.latitude.toFixed(6)\r\n          : point.y.toFixed(6),\r\n        longitude: point.longitude\r\n          ? point.longitude.toFixed(6)\r\n          : point.x.toFixed(6),\r\n      };\r\n    } catch (error) {\r\n      console.error(error);\r\n      return {\r\n        latitude: null,\r\n        longitude: null,\r\n      };\r\n    }\r\n  };\r\n\r\n  // Method to add a TimeSlider widget\r\n  addTimeSlider(mapView: MapView , layerId: string): void {\r\n    const featureLayer = mapView.map.findLayerById(layerId) as FeatureLayer;\r\n\r\n    const timeSlider = new TimeSlider({\r\n      container: 'timeSlider',\r\n      mode: 'time-window',\r\n      view: mapView,\r\n    });\r\n\r\n    mapView\r\n      .whenLayerView(featureLayer)\r\n      .then((lv) => {\r\n        const timeInfo = featureLayer.timeInfo;\r\n\r\n        // Check if timeInfo and interval are available\r\n        if (timeInfo && timeInfo.interval) {\r\n          timeSlider.stops = {\r\n            interval: timeInfo.interval,\r\n          };\r\n        } else {\r\n          // Fallback to a default interval using TimeInterval\r\n          const defaultInterval = new TimeInterval({\r\n            value: 1,\r\n            unit: 'days',\r\n          });\r\n\r\n          timeSlider.stops = {\r\n            interval: defaultInterval,\r\n          };\r\n        }\r\n\r\n        // Set the full time extent, expanding to a specific unit if timeInfo exists\r\n        if (timeInfo && timeInfo.fullTimeExtent) {\r\n          // Expand the full time extent to the nearest hour and use the system's time zone\r\n          timeSlider.fullTimeExtent = timeInfo.fullTimeExtent.expandTo(\r\n            'hours',\r\n            'system'\r\n          );\r\n        } else {\r\n          console.warn('Time extent information is not available.');\r\n        }\r\n      })\r\n      .catch((error) => {\r\n        //console.error(\"Error initializing time slider:\", error);\r\n      });\r\n\r\n    mapView.ui.add(timeSlider, 'bottom-left');\r\n  }\r\n\r\n  goToMapFullExtent = (mapView: MapView ) => {\r\n    mapView.extent = this.initialExtent;\r\n  };\r\n\r\n  zoomToLocation = (mapView: MapView ,\r\n    locationName: string\r\n  ) => {\r\n    this.getLatLongForPlace(locationName).then((result) => {\r\n      if (result) {\r\n        console.log(`Latitude: ${result.latitude}, Longitude: ${result.longitude}`);\r\n        mapView.goTo({ target: [result.longitude, result.latitude] });\r\n      } else {\r\n        console.log(\"No coordinates found for the place.\");\r\n      }\r\n    });\r\n\r\n    console.log('inside zoom to function ' + locationName);\r\n  };\r\n\r\n\r\n  async getLatLongForPlace(placeName: string): Promise<{ latitude: number; longitude: number } | null> {\r\n    try {\r\n      // Call the ArcGIS Geocode Service\r\n      const results = await Locator.addressToLocations(this.configService.config.webapiConfig.geoCodeUrl, {\r\n        address: { SingleLine: placeName },\r\n        maxLocations: 1\r\n      });\r\n  \r\n      if (results && results.length > 0) {\r\n        const location = results[0].location;\r\n        return {\r\n          latitude: location.y,\r\n          longitude: location.x,\r\n        };\r\n      }\r\n  \r\n      // If no results found\r\n      console.error(\"No results found for the given place name.\");\r\n      return null;\r\n    } catch (error) {\r\n      console.error(\"Error using the Geocode Service:\", error);\r\n      return null;\r\n    }\r\n  }\r\n\r\n  reorderLayer(\r\n    mapView: MapView ,\r\n    layerTitle: string,\r\n    index: number\r\n  ) {\r\n    // Find the layer by its ID\r\n    const layer = this.getLayerByTitle(mapView, layerTitle); //this.map.findLayerById(layerId);\r\n\r\n    if (layer) {\r\n      // Reorder the layer to the desired index\r\n      console.log('before', mapView.map.allLayers);\r\n      mapView.map.reorder(layer, parseInt(index.toString()));\r\n      console.log(mapView.map.allLayers);\r\n      // console.log(`Layer ${layerId} moved to index ${index}.`);\r\n    } else {\r\n      // console.error(`Layer with ID ${layerId} not found.`);\r\n    }\r\n  }\r\n\r\n  queryLayer(\r\n    mapView: MapView ,\r\n    layerTitle: string,\r\n    queryText: string\r\n  ) {\r\n    // Find the layer by its ID\r\n    const layer = this.getLayerByTitle(mapView, layerTitle); //this.map.findLayerById(layerId) as FeatureLayer;\r\n\r\n    if (layer) {\r\n      layer.definitionExpression = queryText;\r\n    }\r\n  }\r\n\r\n  clearHighlightedFeatures = (mapView: MapView ) => {\r\n    if(mapView && mapView.graphics){\r\n    // Clear previous highlights\r\n    console.log('this.mapView.graphics before', mapView.graphics.length);\r\n    mapView.graphics.removeAll();\r\n    console.log('this.mapView.graphics after', mapView.graphics.length);\r\n    }\r\n  };\r\n\r\n  getMapViewInfo = (mapView: MapView ) => {\r\n    const mapConfig = {\r\n      extent: mapView.extent\r\n        ? {\r\n            xmin: mapView.extent.xmin,\r\n            ymin: mapView.extent.ymin,\r\n            xmax: mapView.extent.xmax,\r\n            ymax: mapView.extent.ymax,\r\n            spatialReference: {\r\n              wkid: mapView.extent.spatialReference.wkid,\r\n            },\r\n          }\r\n        : null,\r\n      mapLayersInfo: this.getMapLayersInfo(mapView),\r\n    };\r\n    return mapConfig;\r\n  };\r\n\r\n  getMapLayersInfo(mapView: MapView ) {\r\n    try {\r\n      let layersInfo: any[] = [];\r\n\r\n      mapView.map.allLayers.forEach((layer: any) => {\r\n        let layerInfo: any = {\r\n          title: layer.title,\r\n          url: layer.url,\r\n          opacity: layer.opacity,\r\n          visible: layer.visible,\r\n          definitionQuery: layer.definitionExpression || null,\r\n          sublayers: [],\r\n        };\r\n\r\n        if (layer.allSublayers) {\r\n          layer.allSublayers.forEach((sublayer: any) => {\r\n            let sublayerInfo = {\r\n              title: sublayer.title,\r\n              id: sublayer.id,\r\n              url: sublayer.url,\r\n              opacity: sublayer.opacity,\r\n              visible: sublayer.visible,\r\n              definitionQuery: sublayer.definitionExpression || null,\r\n            };\r\n            layerInfo.sublayers.push(sublayerInfo);\r\n          });\r\n        }\r\n\r\n        layersInfo.push(layerInfo);\r\n      });\r\n\r\n      return layersInfo;\r\n    } catch (e) {\r\n      console.error(e);\r\n      return null;\r\n    }\r\n  }\r\n\r\n  setExpandWidgetsToggleListener = () => {\r\n    try {\r\n      this.eventsService.openedExpandWidgetNameEventSubject.subscribe(\r\n        (expandWidgetName: string) => {\r\n          this.mapExpandsWidget.map((expandWidget: Expand) => {\r\n            if (\r\n              expandWidget?.id?.toLowerCase() != expandWidgetName.toLowerCase()\r\n            ) {\r\n              expandWidget.collapse();\r\n            }\r\n          });\r\n        }\r\n      );\r\n    } catch (error) {\r\n      console.error(error);\r\n    }\r\n  };\r\n\r\n  initalizeBookmark = (mapView: EsriMapView) => {\r\n    // Create the bookmarks widget\r\n    this.bookmarks = new Bookmarks({\r\n      view: mapView,\r\n      dragEnabled: true,\r\n      visibleElements: {\r\n        addBookmarkButton: false,\r\n        editBookmarkButton: false,\r\n        time: false, // don't show the time (h:m:s) next to the date\r\n      },\r\n    });\r\n\r\n    // Create an Expand widget to show/hide the bookmarks\r\n    const bkExpand = new Expand({\r\n      view: mapView,\r\n      content: this.bookmarks,\r\n    });\r\n\r\n    // Add the widget to the top-left corner of the view\r\n    mapView.ui.add(bkExpand, 'top-left');\r\n    this.loadBookmarks();\r\n  };\r\n\r\n    // Method to save a bookmark with a given name\r\n    addBookmark(mapView: EsriMapView,bookmarkName: string): void {\r\n      // Ensure the mapView is loaded before accessing its properties\r\n      mapView.when(() => {\r\n        // Get the current extent of the map\r\n        const currentExtent = mapView.extent;\r\n  \r\n        if (!currentExtent) {\r\n          console.error('Map extent is undefined, cannot save the bookmark.');\r\n          return;\r\n        }\r\n  \r\n        const newBookmark = new Bookmark({\r\n          name: bookmarkName,\r\n          viewpoint: {\r\n            targetGeometry: currentExtent,\r\n          },\r\n        });\r\n  \r\n        // Check if the bookmark already exists\r\n        const existingBookmark = this.bookmarks.bookmarks.find(\r\n          (bookmark: any) =>\r\n            bookmark.name.toLowerCase() === bookmarkName.toLowerCase()\r\n        );\r\n  \r\n        if (existingBookmark) {\r\n          console.warn(\r\n            `Bookmark \"${bookmarkName}\" already exists. Skipping addition.`\r\n          );\r\n          return; // Optionally, return or notify the user\r\n        }\r\n  \r\n        console.log('newBookmark', newBookmark);\r\n  \r\n        // Add the new bookmark to the bookmarks collection\r\n        this.bookmarks.bookmarks.add(newBookmark);\r\n        console.log('this.bookmarks.bookmarks', this.bookmarks.bookmarks);\r\n        console.log(\r\n          'JSON.stringify(this.bookmarks.bookmarks)',\r\n          JSON.stringify(this.bookmarks.bookmarks)\r\n        );\r\n  \r\n        // Save bookmarks to localStorage\r\n        localStorage.setItem(\r\n          'bookmarks',\r\n          JSON.stringify(this.bookmarks.bookmarks)\r\n        );\r\n  \r\n        // Log all bookmarks\r\n        this.bookmarks.bookmarks.forEach((bookmark: any) => {\r\n          console.log('bookmark', bookmark);\r\n        });\r\n      });\r\n    }\r\n\r\n    loadBookmarkByName(mapView: EsriMapView,name: string) {\r\n      // Find the bookmark by name\r\n      const bookmark = this.bookmarks.bookmarks.find((b) => b.name === name);\r\n  \r\n      if (bookmark) {\r\n        // Log the bookmark information\r\n        console.log(`Loading bookmark: ${bookmark.name}`);\r\n  \r\n        // Assuming you have a mapView or equivalent object, you can set the map view\r\n        // For example, with a MapView object from a library like ArcGIS:\r\n        mapView.goTo(bookmark.viewpoint);\r\n      } else {\r\n        console.log(`Bookmark with name \"${name}\" not found.`);\r\n      }\r\n    }\r\n    loadBookmarks() {\r\n      const storedBookmarks = localStorage.getItem('bookmarks');\r\n  \r\n      if (storedBookmarks) {\r\n        const bookmarkArray = JSON.parse(storedBookmarks);\r\n  \r\n        // Clear existing bookmarks if needed\r\n        this.bookmarks.bookmarks.removeAll();\r\n  \r\n        // Add the bookmarks from localStorage back into the widget\r\n        bookmarkArray.forEach((bookmark: any) => {\r\n          const newBookmark = new Bookmark({\r\n            name: bookmark.name,\r\n            viewpoint: {\r\n              targetGeometry: new Extent({\r\n                xmin: bookmark.extent.xmin,\r\n                ymin: bookmark.extent.ymin,\r\n                xmax: bookmark.extent.xmax,\r\n                ymax: bookmark.extent.ymax,\r\n                spatialReference: {\r\n                  wkid: bookmark.extent.spatialReference.wkid,\r\n                },\r\n              }),\r\n            },\r\n          });\r\n  \r\n          this.bookmarks.bookmarks.add(newBookmark);\r\n        });\r\n  \r\n        console.log('Bookmarks loaded from localStorage:', bookmarkArray);\r\n      } else {\r\n        console.log('No bookmarks found in localStorage.');\r\n      }\r\n    }\r\n}\r\n","import { Component ,ElementRef,OnInit, ViewChild } from '@angular/core';\r\nimport { ConfigService } from '../../services/config/config.service';\r\nimport { ArcgisService } from '../../services/arcgis/arcgis.service';\r\n\r\n@Component({\r\n  selector: 'app-map',\r\n  standalone:false,\r\n  templateUrl: './map.component.html',\r\n  styleUrl: './map.component.css'\r\n})\r\n\r\nexport class MapComponent implements OnInit {\r\n  @ViewChild('mapViewNode', { static: true }) mapViewEl!: ElementRef;\r\n\r\n  constructor(private configService: ConfigService,private arcgisService:ArcgisService) {}\r\n\r\n  async ngOnInit() {\r\n    const webmapId = this.configService.config.webapiConfig.mapConfig.webmapId;\r\n    let mapView =await this.arcgisService.initializeMap(this.configService.config.appConfig, webmapId, this.mapViewEl);\r\n\r\n    mapView.when(async () => {\r\n      this.configService.config.mapView = mapView;\r\n      this.arcgisService.addWidgetsOnScreen(this.configService.config, mapView);\r\n    });\r\n\r\n  }\r\n \r\n}\r\n\r\n","\r\n<h1 mat-dialog-title cdkDrag cdkDragRootElement=\".cdk-overlay-pane\" cdkDragHandle\r\n cdkFocusInitial><mat-icon mat-dialog-close matTooltip=\"Close Map\">close</mat-icon>\r\n </h1>\r\n  <!-- Your map content here -->\r\n  <div class=\"map__container\">\r\n    <div class=\"map-view__container\">\r\n      <div class=\"map\" #mapViewNode ></div>\r\n    </div>\r\n</div>\r\n\r\n","export class Alert {\r\n    Message = \"\";\r\n    Type = \"\";\r\n    ConfirmLabel = \"\";\r\n    RejectLabel = \"\";\r\n    promptResult = \"\";\r\n\r\n    constructor(message: string, type: string, confirmLabel: string, rejectLabel: string) {\r\n        this.Message = message;\r\n        this.Type = type;\r\n        this.ConfirmLabel = confirmLabel;\r\n        this.RejectLabel = rejectLabel;\r\n    }\r\n}\r\n","import { Component, OnInit, Inject } from '@angular/core';\r\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport { ConfigService } from '../../services/config/config.service';\r\nimport { Alert } from '../../models/alert/alert';\r\nimport { ApplicationConfig } from '../../models/alert/configs/application-config';\r\n\r\n@Component({\r\n  selector: 'app-alert',\r\n  templateUrl: './alert.component.html',\r\n  styleUrls: ['./alert.component.scss'],\r\n  standalone:false\r\n})\r\nexport class AlertComponent implements OnInit {\r\n\r\n  config: ApplicationConfig\r\n  constructor(\r\n    @Inject(MAT_DIALOG_DATA) public data: Alert,\r\n    private configService: ConfigService\r\n  ) {\r\n    this.config = configService.config;\r\n  }\r\n\r\n  ngOnInit() {\r\n  }\r\n}\r\n","<div mat-dialog-content *ngIf=\"data.Type!=='waiting'\">\r\n    <div class=\"row\">\r\n        <div class=\"col-12\" *ngIf=\"data.Type!='confirmation'\">\r\n            <img *ngIf=\"data.Type=='error'\" src=\"assets/icons/error.svg\">\r\n            <img *ngIf=\"data.Type=='success'\" src=\"assets/icons/check.svg\">\r\n        </div>\r\n        <div class=\"col-12\">\r\n            <label>{{data.Message}}</label>\r\n        </div>\r\n    </div>\r\n    <div *ngIf=\"data.Type=='prompt'\">\r\n        <mat-form-field appearance=\"outline\">\r\n            <mat-label>Alert</mat-label>\r\n            <input color=\"primary\" matInput [(ngModel)]=\"data.promptResult\">\r\n        </mat-form-field>\r\n    </div>\r\n</div>\r\n<div mat-dialog-actions *ngIf=\"data.Type!=='waiting'\">\r\n    <button *ngIf=\"data.Type==='confirmation' || data.Type==='prompt'\" mat-button \r\n        class=\"btn btn-reject\">\r\n        {{ data.RejectLabel }}\r\n    </button>\r\n    <button *ngIf=\"data.Type !== 'prompt'\" mat-button mat-dialog-close class=\"btn btn-confirm\" cdkFocusInitial>\r\n        {{ data.ConfirmLabel }}\r\n    </button>\r\n    <button *ngIf=\"data.Type === 'prompt'\" mat-button  mat-dialog-close class=\"btn btn-confirm\"\r\n        cdkFocusInitial>\r\n        {{ data.ConfirmLabel }}\r\n    </button>\r\n</div>\r\n<div mat-dialog-content *ngIf=\"data.Type==='waiting'\" class=\"alert-dialog-waiting\">\r\n    <mat-spinner></mat-spinner>\r\n</div>","\r\nimport * as am5 from '@amcharts/amcharts5';\r\nimport * as am5flow from \"@amcharts/amcharts5/flow\";\r\nimport * as am5percent from \"@amcharts/amcharts5/percent\";\r\nimport am5themes_Animated from '@amcharts/amcharts5/themes/Animated';\r\nimport am5themes_Responsive from \"@amcharts/amcharts5/themes/Responsive\";\r\nimport * as am5xy from '@amcharts/amcharts5/xy';\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Inject, Injectable, NgZone, PLATFORM_ID } from \"@angular/core\";\r\nimport GraphicsLayer from '@arcgis/core/layers/GraphicsLayer';\r\nimport * as _ from 'lodash';\r\nimport { ApplicationConfig } from '../../models/alert/configs/application-config';\r\nimport { ConfigService } from '../config/config.service';\r\nimport { ArcgisService } from '../arcgis/arcgis.service';\r\nimport { EventsService } from '../event/events.service';\r\nimport { AmChartsDataModel } from '../../models/charts/am-charts-data-model';\r\nimport { SankeyChartDataModel } from '../../models/charts/sankey-chart-data-model';\r\nimport { SelectedChartColumn } from '../../models/charts/selected-chart-column';\r\n\r\n@Injectable({\r\n    providedIn: 'root',\r\n})\r\nexport class ChartHelper {\r\n    config: ApplicationConfig;\r\n    targetLayerConfig: any;\r\n    graphicLayer: GraphicsLayer = new GraphicsLayer();\r\n\r\n    constructor(\r\n        @Inject(PLATFORM_ID) private platformId: any,\r\n        private configService: ConfigService,\r\n        private http: HttpClient,\r\n        private arcgisService: ArcgisService,\r\n        private zone: NgZone,\r\n        private eventsService: EventsService,\r\n    ) {\r\n        this.config = this.configService.config;\r\n    }\r\n\r\n\r\n   \r\n    browserOnly(f: () => void) {\r\n        if (isPlatformBrowser(this.platformId)) {\r\n            this.zone.runOutsideAngular(() => {\r\n                f();\r\n            });\r\n        }\r\n    }\r\n\r\n    barChartGeneration = (chartId: string, chartData: AmChartsDataModel[], xAxsisLabel: string, yAxsisLabel: string, allowChartZooming: boolean = true, colorEachColunm: boolean = false) => {\r\n        let mainChartID = chartId;\r\n\r\n        chartId = chartId.replace(\"_print\", \"\");\r\n        let root = am5.Root.new(mainChartID);\r\n        console.log('chartData', chartData);\r\n        try {\r\n            this.browserOnly(async () => {\r\n                const customResponsive = am5themes_Responsive.new(root);\r\n\r\n                root.setThemes([\r\n                    am5themes_Animated.new(root),\r\n                    // am5themes_Responsive.new(root)// default responsive theme\r\n                    customResponsive //custom responsive theme\r\n                ]);\r\n\r\n                let chart = root.container.children.push(\r\n                    am5xy.XYChart.new(root, {\r\n                        // to allow zooming on the chart\r\n                        panX: allowChartZooming,\r\n                        panY: allowChartZooming,\r\n                        wheelX: allowChartZooming ? \"panX\" : \"none\",\r\n                        wheelY: allowChartZooming ? \"zoomX\" : \"none\"\r\n                    })\r\n                );\r\n\r\n                let easing = am5.ease.linear;\r\n\r\n                //#region y axis\r\n                let yAxis = chart.yAxes.push(\r\n                    am5xy.ValueAxis.new(root, {\r\n                        renderer: am5xy.AxisRendererY.new(root, {})\r\n                    })\r\n                );\r\n\r\n                var yRenderer = yAxis.get(\"renderer\");\r\n\r\n                // colunm labels\r\n                yRenderer.labels.template.setAll({\r\n                    fontFamily: \"tahoma\",\r\n                    fontSize: 11,\r\n                    // fill: isPrintMode ? am5.Color.fromRGB(0, 0, 0) : am5.Color.fromRGB(255, 255, 255),\r\n                    fill: colorEachColunm ?\r\n                        am5.Color.fromRGB(193, 196, 198) :\r\n                        (chartId.indexOf(\"electricity\") >= 0) ?\r\n                            am5.Color.fromRGB(230, 178, 125) :\r\n                            am5.Color.fromRGB(92, 174, 215)\r\n                });\r\n\r\n                //y axis title\r\n                var yAxisTitle = am5.Label.new(root, {\r\n                    rotation: -90,\r\n                    text: yAxsisLabel,\r\n                    y: am5.percent(50),\r\n                    centerX: am5.percent(50),\r\n                    fontFamily: \"CorporateSRegular\",\r\n                    // fill: isPrintMode ? am5.Color.fromRGB(0, 0, 0) : am5.Color.fromRGB(255, 255, 255)\r\n                    fill: colorEachColunm ?\r\n                        am5.Color.fromRGB(193, 196, 198) :\r\n                        (chartId.indexOf(\"electricity\") >= 0) ?\r\n                            am5.Color.fromRGB(230, 178, 125) :\r\n                            am5.Color.fromRGB(92, 174, 215)\r\n                });\r\n                yAxis.children.unshift(yAxisTitle);\r\n                //#endregion\r\n\r\n                //#region x axis\r\n                let xAxis = chart.xAxes.push(\r\n                    am5xy.CategoryAxis.new(root, {\r\n                        renderer: am5xy.AxisRendererX.new(root, {\r\n                            minGridDistance: 1, // space between column\r\n                        }),\r\n                        categoryField: \"key\",\r\n                        // tooltip: am5.Tooltip.new(root, {}),\r\n                    })\r\n                );\r\n                xAxis.data.setAll(chartData);\r\n\r\n                // x-axis column labels\r\n                var xRenderer = xAxis.get(\"renderer\");\r\n                xRenderer.labels.template.setAll({\r\n                    // rotate xaxis labels\r\n                    rotation: -45,\r\n                    centerY: am5.p0,\r\n                    centerX: am5.p100,\r\n                    paddingRight: 15,\r\n                    // no rotation\r\n                    // centerY: am5.percent(0),\r\n                    //\r\n                    y: am5.percent(0),\r\n                    paddingTop: 0,\r\n                    paddingBottom: 0,\r\n                    fontFamily: \"tahoma\",\r\n                    fontSize: 11,\r\n                    // fill: isPrintMode ? am5.Color.fromRGB(0, 0, 0) : am5.Color.fromRGB(255, 255, 255),\r\n                    fill: colorEachColunm ?\r\n                        am5.Color.fromRGB(193, 196, 198) :\r\n                        (chartId.indexOf(\"electricity\") >= 0) ?\r\n                            am5.Color.fromRGB(230, 178, 125) :\r\n                            am5.Color.fromRGB(92, 174, 215)\r\n                });\r\n\r\n                // rotate xaxis labels\r\n                xRenderer.grid.template.setAll({\r\n                    location: 1\r\n                });\r\n\r\n                // x axis title\r\n                xAxis.children.unshift(am5.Label.new(root, {\r\n                    rotation: 0,\r\n                    text: xAxsisLabel,\r\n                    centerY: am5.percent(230),\r\n                    y: am5.percent(230),\r\n                    // centerX: am5.percent(0),\r\n                    // x: am5.percent(85),\r\n                    centerX: am5.percent(50),\r\n                    x: am5.percent(50),\r\n                    paddingTop: 0,\r\n                    paddingBottom: 0,\r\n                    height: 17,\r\n                    // id: `${chartId}-x-axis-title`,\r\n                    id: `${mainChartID}-x-axis-title`,\r\n                    fontFamily: \"CorporateSRegular\",\r\n                    // fill: isPrintMode ? am5.Color.fromRGB(0, 0, 0) : am5.Color.fromRGB(255, 255, 255),\r\n                    fill: colorEachColunm ?\r\n                        am5.Color.fromRGB(193, 196, 198) :\r\n                        (chartId.indexOf(\"electricity\") >= 0) ?\r\n                            am5.Color.fromRGB(230, 178, 125) :\r\n                            am5.Color.fromRGB(92, 174, 215)\r\n                }));\r\n                //#endregion\r\n\r\n                //#region  series\r\n                let series = chart.series.push(\r\n                    am5xy.ColumnSeries.new(root, { // columns configuration\r\n                        name: \"Series\",\r\n                        xAxis: xAxis,\r\n                        yAxis: yAxis,\r\n                        valueYField: \"value\",\r\n                        categoryXField: \"key\",\r\n                        paddingBottom: 0,\r\n                        marginBottom: 0,\r\n                        // column animation on loading\r\n                        // one by one animation\r\n                        // sequencedInterpolation: true,\r\n                        // sequencedDelay: 100,\r\n                        stateAnimationDuration: 10000,\r\n                        stateAnimationEasing: am5.ease.out(am5.ease.linear),\r\n                        // stroke: am5.color(0x657d8b00),\r\n                        tooltip: am5.Tooltip.new(root, { // column tooltip\r\n                            labelText: \"{valueY}\",\r\n                        })\r\n                    })\r\n                );\r\n\r\n                //set active column properties\r\n                series.columns.template.states.create(\"active\", {\r\n                    strokeOpacity: 1,\r\n                    strokeWidth: 3\r\n                });\r\n\r\n                // column corner radius\r\n                series.columns.template.setAll({\r\n                    cornerRadiusTL: 3,\r\n                    cornerRadiusTR: 3,\r\n                    maxWidth: 40,\r\n                    strokeOpacity: 0\r\n                });\r\n\r\n                series.data.setAll(chartData);\r\n\r\n                root.numberFormatter.setAll({\r\n                    numberFormat: \"#.00 a\",\r\n                    bigNumberPrefixes: [\r\n                        { number: 1e+3, suffix: \" K\" },\r\n                        { number: 1e+6, suffix: \" M\" },\r\n                        { number: 1e+9, suffix: \" B\" },\r\n                        { number: 1e+12, suffix: \" T\" },\r\n                        { number: 1e+15, suffix: \" Qa\" },\r\n                        { number: 1e+18, suffix: \" Qi\" },\r\n                        { number: 1e+21, suffix: \" Sx\" },\r\n                    ],\r\n                });\r\n\r\n                // column values on top of the bar\r\n                // series.bullets.push(() => {\r\n                //     return am5.Bullet.new(root, {\r\n                //         locationY: 1,\r\n                //         sprite: am5.Label.new(root, {\r\n                //             text: \"{value}\",\r\n                //             fill: am5.Color.fromRGB(255, 255, 255),\r\n                //             centerY: am5.percent(100),\r\n                //             centerX: am5.percent(50),\r\n                //             fontSize: 11,\r\n                //             populateText: true,\r\n                //             paddingBottom: 2,\r\n                //             marginBottom: 2,\r\n                //         })\r\n                //     });\r\n                // });\r\n                //#endregion\r\n\r\n                // add cursor\r\n                chart.set(\"cursor\", am5xy.XYCursor.new(root, {}));\r\n\r\n                // remove amcharts watermark\r\n                root._logo?.dispose();\r\n\r\n                // series.data.setAll(chartData);\r\n\r\n                // let legend = chart.children.push(am5.Legend.new(root, {}));\r\n                // legend.data.setAll(chart.series.values);\r\n\r\n                // change column color based on the chart electricity or water\r\n                var columnTemplate: any = series.columns.template;\r\n\r\n\r\n                if (colorEachColunm) {\r\n                    columnTemplate.adapters.add(\"fill\", (fill: any, target: any) => {\r\n                        return chart?.get(\"colors\")?.getIndex(series.columns.indexOf(target));\r\n                    });\r\n                    columnTemplate.adapters.add(\"stroke\", (stroke: any, target: any) => {\r\n                        return chart?.get(\"colors\")?.getIndex(series.columns.indexOf(target));\r\n                    });\r\n                }\r\n\r\n                // listen if charts data are changed\r\n                this.eventsService.reportsChartsDataEvent.subscribe((updatedData: AmChartsDataModel[] | SankeyChartDataModel[]) => {\r\n                    if (\r\n                        updatedData &&\r\n                        updatedData.length > 0 &&\r\n                        updatedData[0].additionalProperties.chartId == mainChartID &&\r\n                        updatedData[0].additionalProperties.action == \"reset\"\r\n                    ) {\r\n                        series.data.setAll([]);\r\n                        xAxis.data.setAll([]);\r\n                    } else {\r\n                        if (updatedData && updatedData.length > 0 && updatedData[0].additionalProperties.chartId == mainChartID) {\r\n                            series.data.setAll(updatedData as any);\r\n\r\n                            // repeat series animation\r\n                            // series.appear();\r\n\r\n                            // onclick on chart column highlight other\r\n                            series.columns.template.events.on(\"click\", async (event: any) => {\r\n                                let featureInfo: AmChartsDataModel = event.target.dataItem.dataContext;\r\n\r\n                                this.eventsService.selectedChartColumn({\r\n                                    chartId: chartId,\r\n                                    columnKey: featureInfo?.key\r\n                                });\r\n                            });\r\n\r\n                            this.eventsService.selectedChartColumnDataEvent.subscribe((selectedColumn: SelectedChartColumn) => {\r\n                                // check if the same pair charts\r\n                                if (\r\n                                    selectedColumn &&\r\n                                    selectedColumn.chartId.replace(\"-electricity-\", \"-\").replace(\"-water-\", \"-\")\r\n                                    ==\r\n                                    chartId.replace(\"-electricity-\", \"-\").replace(\"-water-\", \"-\")\r\n                                ) {\r\n                                    // highlight clicked colunm\r\n                                    chart.series.each((series) => {\r\n                                        if (series instanceof am5xy.ColumnSeries) {\r\n                                            let selectedColumnIndex = xAxis.categoryToIndex(selectedColumn.columnKey);\r\n\r\n                                            // highlight column\r\n                                            this.highlightBarChartReportColumn(chartId, series, selectedColumn.columnKey);\r\n\r\n                                            if (!(selectedColumnIndex == undefined || selectedColumnIndex == null || isNaN(selectedColumnIndex))) {\r\n                                                // zoom to column\r\n                                                xAxis.zoomToIndexes(\r\n                                                    xAxis.categoryToIndex(selectedColumn.columnKey) - 2,\r\n                                                    xAxis.categoryToIndex(selectedColumn.columnKey) + 2,\r\n                                                    1000\r\n                                                );\r\n                                            }\r\n                                            \r\n                                        }\r\n                                    });\r\n                                }\r\n                            });\r\n\r\n                            xAxis.data.setAll(updatedData as any);\r\n\r\n                            // // exporting\r\n                            // am5plugins_exporting.Exporting.new(root, {\r\n                            //     menu: am5plugins_exporting.ExportingMenu.new(root, {}),\r\n                            //     // some options are will not be available\r\n                            //     // even if they are enabled according to the data for e.g. json option\r\n                            //     // cant be showin if the data is numericFields\r\n                            //     pngOptions: { disabled: false, quality: 1 },\r\n                            //     jpgOptions: { disabled: false, quality: 1 },\r\n                            //     pdfOptions: { disabled: false, quality: 1 },\r\n                            //     pdfdataOptions: { disabled: false, addColumnNames: true },\r\n                            //     xlsxOptions: { disabled: false, addColumnNames: true },\r\n                            //     csvOptions: { disabled: false, addColumnNames: true, addBOM: true },\r\n                            //     printOptions: { disabled: false, quality: 1, delay: 500 },\r\n                            //     jsonOptions: { disabled: true, addColumnNames: true },\r\n                            //     htmlOptions: { disabled: true },\r\n                            //     dataSource: chartData,\r\n                            //     numericFields: [\"value\"],\r\n                            //     numberFormat: \"#,###\",\r\n                            //     // dataFields is an object which identifies which columns to export (object key) \r\n                            //     // and how to name their column (value).\r\n                            //     dataFields: {\r\n                            //         key: xAxsisLabel,\r\n                            //         value: yAxsisLabel\r\n                            //     },\r\n                            //     dataFieldsOrder: [\"key\", \"value\"],\r\n                            // });\r\n\r\n                            // chart bar color\r\n                            // this.fillColorsPalettes();\r\n                        }\r\n                    }\r\n                });\r\n            });\r\n\r\n        } catch (error) {\r\n            console.error(\"generateAmChart error \", error);\r\n        }\r\n\r\n        return root;\r\n    }\r\n\r\n    highlightBarChartReportColumn = (chartId: string, series: any, clickedFeatureKey: any) => {\r\n        try {\r\n            series.columns.each((column: any) => {\r\n                let isActive: boolean = (column?.dataItem?.dataContext?.key ?? null) == clickedFeatureKey;\r\n                                column.set(\"active\", isActive);\r\n\r\n                column.adapters.add(\"stroke\", (stroke: any, target: any) => {\r\n                    let barColumnStroke: string = chartId.indexOf(\"water\") >= 0 ? \"#5c6bc0\" : \"#f57c00\";\r\n                    return isActive ? am5.Color.fromRGB(255, 255, 255) : barColumnStroke == \"\" ? stroke : am5.color(barColumnStroke);\r\n                });\r\n            });\r\n        } catch (error) {\r\n            console.error(error);\r\n        }\r\n    }\r\n\r\n    lineChartGeneration = (chartId: string, chartData: AmChartsDataModel[], xAxsisLabel: string, yAxsisLabel: string, allowChartZooming: boolean = true) => {\r\n        let mainChartID = chartId;\r\n\r\n        chartId = chartId.replace(\"_print\", \"\");\r\n        let root = am5.Root.new(mainChartID);\r\n        console.log('chartData', chartData);\r\n        try {\r\n            this.browserOnly(async () => {\r\n                const customResponsive = am5themes_Responsive.new(root);\r\n\r\n                root.setThemes([\r\n                    am5themes_Animated.new(root),\r\n                    // am5themes_Responsive.new(root)// default responsive theme\r\n                    customResponsive //custom responsive theme\r\n                ]);\r\n\r\n                let chart = root.container.children.push(\r\n                    am5xy.XYChart.new(root, {\r\n                        // to allow zooming on the chart\r\n                        panX: allowChartZooming,\r\n                        panY: allowChartZooming,\r\n                        wheelX: allowChartZooming ? \"panX\" : \"none\",\r\n                        wheelY: allowChartZooming ? \"zoomX\" : \"none\"\r\n                    })\r\n                );\r\n\r\n                let easing = am5.ease.linear;\r\n\r\n                //#region y axis\r\n                let yAxis = chart.yAxes.push(\r\n                    am5xy.ValueAxis.new(root, {\r\n                        renderer: am5xy.AxisRendererY.new(root, {})\r\n                    })\r\n                );\r\n\r\n                var yRenderer = yAxis.get(\"renderer\");\r\n\r\n                // colunm labels\r\n                yRenderer.labels.template.setAll({\r\n                    fontFamily: \"tahoma\",\r\n                    fontSize: 11,\r\n                    // fill: isPrintMode ? am5.Color.fromRGB(0, 0, 0) : am5.Color.fromRGB(255, 255, 255),\r\n                    fill: (chartId.indexOf(\"electricity\") >= 0) ?\r\n                        am5.Color.fromRGB(230, 178, 125) :\r\n                        am5.Color.fromRGB(92, 174, 215)\r\n                });\r\n\r\n                //y axis title\r\n                var yAxisTitle = am5.Label.new(root, {\r\n                    rotation: -90,\r\n                    text: yAxsisLabel,\r\n                    y: am5.percent(50),\r\n                    centerX: am5.percent(50),\r\n                    fontFamily: \"CorporateSRegular\",\r\n                    // fill: isPrintMode ? am5.Color.fromRGB(0, 0, 0) : am5.Color.fromRGB(255, 255, 255)\r\n                    fill: (chartId.indexOf(\"electricity\") >= 0) ?\r\n                        am5.Color.fromRGB(230, 178, 125) :\r\n                        am5.Color.fromRGB(92, 174, 215)\r\n                });\r\n                yAxis.children.unshift(yAxisTitle);\r\n                //#endregion\r\n\r\n                //#region x axis\r\n                let xAxis = chart.xAxes.push(\r\n                    am5xy.CategoryAxis.new(root, {\r\n                        renderer: am5xy.AxisRendererX.new(root, {\r\n                            minGridDistance: 1, // space between column\r\n                        }),\r\n                        categoryField: \"key\",\r\n                        // tooltip: am5.Tooltip.new(root, {}),\r\n                    })\r\n                );\r\n                xAxis.data.setAll(chartData);\r\n\r\n                // x-axis column labels\r\n                var xRenderer = xAxis.get(\"renderer\");\r\n                xRenderer.labels.template.setAll({\r\n                    // rotate xaxis labels\r\n                    // rotation: -45,\r\n                    // centerY: am5.p0,\r\n                    // centerX: am5.p100,\r\n                    // paddingRight: 15,\r\n                    // no rotation\r\n                    centerY: am5.percent(0),\r\n                    //\r\n                    y: am5.percent(0),\r\n                    paddingTop: 0,\r\n                    paddingBottom: 0,\r\n                    fontFamily: \"tahoma\",\r\n                    fontSize: 11,\r\n                    // fill: isPrintMode ? am5.Color.fromRGB(0, 0, 0) : am5.Color.fromRGB(255, 255, 255),\r\n                    fill: (chartId.indexOf(\"electricity\") >= 0) ?\r\n                        am5.Color.fromRGB(230, 178, 125) :\r\n                        am5.Color.fromRGB(92, 174, 215)\r\n                });\r\n\r\n                // rotate xaxis labels\r\n                xRenderer.grid.template.setAll({\r\n                    location: 1\r\n                });\r\n\r\n                // x axis title\r\n                xAxis.children.unshift(am5.Label.new(root, {\r\n                    rotation: 0,\r\n                    text: xAxsisLabel,\r\n                    centerY: am5.percent(230),\r\n                    y: am5.percent(230),\r\n                    // centerX: am5.percent(0),\r\n                    // x: am5.percent(85),\r\n                    centerX: am5.percent(50),\r\n                    x: am5.percent(50),\r\n                    paddingTop: 0,\r\n                    paddingBottom: 0,\r\n                    height: 17,\r\n                    // id: `${chartId}-x-axis-title`,\r\n                    id: `${mainChartID}-x-axis-title`,\r\n                    fontFamily: \"CorporateSRegular\",\r\n                    // fill: isPrintMode ? am5.Color.fromRGB(0, 0, 0) : am5.Color.fromRGB(255, 255, 255),\r\n                    fill: (chartId.indexOf(\"electricity\") >= 0) ?\r\n                        am5.Color.fromRGB(230, 178, 125) :\r\n                        am5.Color.fromRGB(92, 174, 215)\r\n                }));\r\n                //#endregion\r\n\r\n                //#region  series\r\n                let series = chart.series.push(\r\n                    am5xy.LineSeries.new(root, { // columns configuration\r\n                        name: \"Series\",\r\n                        xAxis: xAxis,\r\n                        yAxis: yAxis,\r\n                        valueYField: \"value\",\r\n                        categoryXField: \"key\",\r\n                        paddingBottom: 0,\r\n                        marginBottom: 0,\r\n                        // column animation on loading\r\n                        // one by one animation\r\n                        // sequencedInterpolation: true,\r\n                        // sequencedDelay: 100,\r\n                        stateAnimationDuration: 10000,\r\n                        stateAnimationEasing: am5.ease.out(am5.ease.linear),\r\n                        width: 3,\r\n                        fill: (chartId.indexOf(\"electricity\") >= 0) ?\r\n                            am5.Color.fromRGB(230, 178, 125) :\r\n                            am5.Color.fromRGB(92, 174, 215),\r\n                        stroke: (chartId.indexOf(\"electricity\") >= 0) ?\r\n                            am5.Color.fromRGB(230, 178, 125) :\r\n                            am5.Color.fromRGB(92, 174, 215)\r\n                    })\r\n                );\r\n\r\n                // series.bullets.push(() => {\r\n                //     let bulletCircle = am5.Circle.new(root, {\r\n                //         radius: 5,\r\n                //         fill: (chartId.indexOf(\"electricity\") >= 0) ?\r\n                //             am5.Color.fromRGB(230, 178, 125) :\r\n                //             am5.Color.fromRGB(92, 174, 215)\r\n                //     });\r\n                //     return am5.Bullet.new(root, {\r\n                //         sprite: bulletCircle\r\n                //     })\r\n                // });\r\n\r\n                let bulletTemplate: any = am5.Template.new({});\r\n\r\n                series.bullets.push(function (root) {\r\n                    return am5.Bullet.new(root, {\r\n                        sprite: am5.Circle.new(root, {\r\n                            radius: 10,\r\n                            fill: (chartId.indexOf(\"electricity\") >= 0) ?\r\n                                am5.Color.fromRGB(230, 178, 125) :\r\n                                am5.Color.fromRGB(92, 174, 215)\r\n                        },\r\n                            bulletTemplate\r\n                        )\r\n                    });\r\n                });\r\n\r\n                let seriesTooltip: any = am5.Tooltip.new(root, {\r\n                    labelText: \"{valueY}\",\r\n                });\r\n\r\n                seriesTooltip.get(\"background\").setAll({\r\n                    fill: (chartId.indexOf(\"electricity\") >= 0) ?\r\n                        am5.Color.fromRGB(230, 178, 125) :\r\n                        am5.Color.fromRGB(92, 174, 215)\r\n                });\r\n                series.set(\"tooltip\", seriesTooltip);\r\n                series.data.setAll(chartData);\r\n                            xAxis.data.setAll(chartData);\r\n\r\n                root.numberFormatter.setAll({\r\n                    numberFormat: \"#.00 a\",\r\n                    bigNumberPrefixes: [\r\n                        { number: 1e+3, suffix: \" K\" },\r\n                        { number: 1e+6, suffix: \" M\" },\r\n                        { number: 1e+9, suffix: \" B\" },\r\n                        { number: 1e+12, suffix: \" T\" },\r\n                        { number: 1e+15, suffix: \" Qa\" },\r\n                        { number: 1e+18, suffix: \" Qi\" },\r\n                        { number: 1e+21, suffix: \" Sx\" },\r\n                    ],\r\n                });\r\n\r\n                // column values on top of the bar\r\n                // series.bullets.push(() => {\r\n                //     return am5.Bullet.new(root, {\r\n                //         locationY: 1,\r\n                //         sprite: am5.Label.new(root, {\r\n                //             text: \"{value}\",\r\n                //             fill: am5.Color.fromRGB(255, 255, 255),\r\n                //             centerY: am5.percent(100),\r\n                //             centerX: am5.percent(50),\r\n                //             fontSize: 11,\r\n                //             populateText: true,\r\n                //             paddingBottom: 2,\r\n                //             marginBottom: 2,\r\n                //         })\r\n                //     });\r\n                // });\r\n                //#endregion\r\n\r\n                // add cursor\r\n                chart.set(\"cursor\", am5xy.XYCursor.new(root, {}));\r\n\r\n                // remove amcharts watermark\r\n                root._logo?.dispose();\r\n\r\n                // series.data.setAll(chartData);\r\n\r\n                // let legend = chart.children.push(am5.Legend.new(root, {}));\r\n                // legend.data.setAll(chart.series.values);\r\n\r\n                // listen if charts data are changed\r\n                this.eventsService.reportsChartsDataEvent.subscribe((updatedData: AmChartsDataModel[] | SankeyChartDataModel[]) => {\r\n                    if (\r\n                        updatedData &&\r\n                        updatedData.length > 0 &&\r\n                        updatedData[0].additionalProperties.chartId == mainChartID &&\r\n                        updatedData[0].additionalProperties.action == \"reset\"\r\n                    ) {\r\n                        series.data.setAll([]);\r\n                        xAxis.data.setAll([]);\r\n                    } else {\r\n                        if (updatedData && updatedData.length > 0 && updatedData[0].additionalProperties.chartId == mainChartID) {\r\n                            series.data.setAll(updatedData as any);\r\n                            xAxis.data.setAll(updatedData as any);\r\n\r\n                            // onclick on chart column highlight other\r\n                            bulletTemplate.events.on(\"click\", (event: any) => {\r\n                                let featureInfo: AmChartsDataModel = event.target.dataItem.dataContext;\r\n\r\n                                this.eventsService.selectedChartColumn({\r\n                                    chartId: chartId,\r\n                                    columnKey: featureInfo?.key\r\n                                });\r\n                            });\r\n                            // // exporting\r\n                            // am5plugins_exporting.Exporting.new(root, {\r\n                            //     menu: am5plugins_exporting.ExportingMenu.new(root, {}),\r\n                            //     // some options are will not be available\r\n                            //     // even if they are enabled according to the data for e.g. json option\r\n                            //     // cant be showin if the data is numericFields\r\n                            //     pngOptions: { disabled: false, quality: 1 },\r\n                            //     jpgOptions: { disabled: false, quality: 1 },\r\n                            //     pdfOptions: { disabled: false, quality: 1 },\r\n                            //     pdfdataOptions: { disabled: false, addColumnNames: true },\r\n                            //     xlsxOptions: { disabled: false, addColumnNames: true },\r\n                            //     csvOptions: { disabled: false, addColumnNames: true, addBOM: true },\r\n                            //     printOptions: { disabled: false, quality: 1, delay: 500 },\r\n                            //     jsonOptions: { disabled: true, addColumnNames: true },\r\n                            //     htmlOptions: { disabled: true },\r\n                            //     dataSource: chartData,\r\n                            //     numericFields: [\"value\"],\r\n                            //     numberFormat: \"#,###\",\r\n                            //     // dataFields is an object which identifies which columns to export (object key) \r\n                            //     // and how to name their column (value).\r\n                            //     dataFields: {\r\n                            //         key: xAxsisLabel,\r\n                            //         value: yAxsisLabel\r\n                            //     },\r\n                            //     dataFieldsOrder: [\"key\", \"value\"],\r\n                            // });\r\n\r\n                            // chart bar color\r\n                            // this.fillColorsPalettes();\r\n                        }\r\n                    }\r\n                });\r\n            });\r\n        } catch (error) {\r\n            console.error(\"generateAmChart error \", error);\r\n        }\r\n\r\n        return root;\r\n    }\r\n\r\n    pieChartGeneration = (chartId: string, chartData: AmChartsDataModel[], xAxsisLabel: string, yAxsisLabel: string, allowChartZooming: boolean = true, semiPieChart: boolean = false) => {\r\n        let mainChartID = chartId;\r\n        chartId = chartId.replace(\"_print\", \"\");\r\n        let root = am5.Root.new(mainChartID);\r\n\r\n        try {\r\n            this.browserOnly(async () => {\r\n                const customResponsive = am5themes_Responsive.new(root);\r\n            console.log('chartData', chartData);\r\n                root.setThemes([\r\n                    am5themes_Animated.new(root),\r\n                    customResponsive //custom responsive theme\r\n                ]);\r\n\r\n                let chart = root.container.children.push(am5percent.PieChart.new(root, {\r\n                    layout: root.verticalLayout,\r\n                }));\r\n\r\n                let series = chart.series.push(am5percent.PieSeries.new(root, {\r\n                    valueField: \"value\",\r\n                    categoryField: \"key\",\r\n                    legendLabelText: \"{category}: {value.percent.formatNumber('#.0')} ({value})\",\r\n                    // tooltipText: \"{category}: {value.percent.formatNumber('#.0')}% ({value})\",\r\n                    // legendValueText: \"{value.percent.formatNumber('#.0')} \" + chartId.indexOf(\"water\") ? `(${this.config.resources.waterConsumptionUnitInMtereCube})` : `(${this.config.resources.electricityConsumptionUnit})`\r\n                }));\r\n\r\n                if (semiPieChart) {\r\n                    chart.set(\"innerRadius\", 50);\r\n                    chart.set(\"startAngle\", 180);\r\n                    chart.set(\"endAngle\", 360);\r\n                    series.set(\"startAngle\", 180);\r\n                    series.set(\"endAngle\", 360);\r\n\r\n                    series.states.create(\"hidden\", {\r\n                        startAngle: 180,\r\n                        endAngle: 360\r\n                    });\r\n\r\n                    series.slices.template.setAll({\r\n                        cornerRadius: 5\r\n                    });\r\n\r\n                    series.labels.template.set(\"visible\", false);\r\n                    series.ticks.template.set(\"visible\", false);\r\n                }\r\n\r\n                series.data.setAll(chartData);\r\n\r\n                let legend = chart.children.push(am5.Legend.new(root, {\r\n                    centerX: am5.percent(50),\r\n                    x: am5.percent(50),\r\n                    marginTop: 15,\r\n                    marginBottom: 15\r\n                }));\r\n                legend.data.setAll(series.dataItems);\r\n                series.appear(1000, 100);\r\n\r\n                // remove amcharts watermark\r\n                root._logo?.dispose();\r\n\r\n                root.numberFormatter.setAll({\r\n                    numberFormat: \"#.00 a\",\r\n                    bigNumberPrefixes: [\r\n                        { number: 1e+3, suffix: \" K\" },\r\n                        { number: 1e+6, suffix: \" M\" },\r\n                        { number: 1e+9, suffix: \" B\" },\r\n                        { number: 1e+12, suffix: \" T\" },\r\n                        { number: 1e+15, suffix: \" Qa\" },\r\n                        { number: 1e+18, suffix: \" Qi\" },\r\n                        { number: 1e+21, suffix: \" Sx\" },\r\n                    ],\r\n                });\r\n\r\n                // listen if charts data are changed\r\n                this.eventsService.reportsChartsDataEvent.subscribe((updatedData: AmChartsDataModel[] | SankeyChartDataModel[]) => {\r\n                    if (\r\n                        updatedData &&\r\n                        updatedData.length > 0 &&\r\n                        updatedData[0].additionalProperties.chartId == mainChartID &&\r\n                        updatedData[0].additionalProperties.action == \"reset\"\r\n                    ) {\r\n                        series.data.setAll([]);\r\n                    } else {\r\n                        if (updatedData && updatedData.length > 0 && updatedData[0].additionalProperties.chartId == mainChartID) {\r\n                            series.data.setAll(updatedData as any);\r\n                        }\r\n                    }\r\n\r\n                    legend.data.setAll(series.dataItems);\r\n                });\r\n            });\r\n\r\n        } catch (error) {\r\n            console.error(\"generateAmChart error \", error);\r\n        }\r\n\r\n        return root;\r\n    }\r\n\r\n    sankeyChartGeneration = (chartId: string) => {\r\n        let mainChartID = chartId;\r\n        chartId = chartId.replace(\"_print\", \"\");\r\n        let root = am5.Root.new(mainChartID);\r\n\r\n        try {\r\n            this.browserOnly(async () => {\r\n                // const customResponsive = am5themes_Responsive.new(root);\r\n\r\n                root.setThemes([\r\n                    am5themes_Animated.new(root),\r\n                    // customResponsive //custom responsive theme\r\n                ]);\r\n\r\n                let series: any = root.container.children.push(am5flow.Sankey.new(root, {\r\n                    sourceIdField: \"from\",\r\n                    targetIdField: \"to\",\r\n                    valueField: \"value\",\r\n                    paddingRight: 150,\r\n                    // paddingTop: 15,\r\n                    nodePadding: 15,\r\n                }));\r\n\r\n                series.nodes.get(\"colors\").set(\"step\", 2);\r\n\r\n                series.links.template.setAll({\r\n                    fillStyle: \"gradient\",\r\n                    fillOpacity: .65\r\n                });\r\n\r\n\r\n                root.numberFormatter.setAll({\r\n                    numberFormat: \"#.00 a\",\r\n                    bigNumberPrefixes: [\r\n                        { number: 1e+3, suffix: \" K\" },\r\n                        { number: 1e+6, suffix: \" M\" },\r\n                        { number: 1e+9, suffix: \" B\" },\r\n                        { number: 1e+12, suffix: \" T\" },\r\n                        { number: 1e+15, suffix: \" Qa\" },\r\n                        { number: 1e+18, suffix: \" Qi\" },\r\n                        { number: 1e+21, suffix: \" Sx\" },\r\n                    ],\r\n                });\r\n\r\n                series.nodes.labels.template.setAll({\r\n                    fontSize: 12,\r\n                    fontWeight: \"500\",\r\n                    maxWidth: 150,\r\n                    // oversizedBehavior: \"wrap\",\r\n                    oversizedBehavior: \"truncate\",\r\n                    ellipsis: \"...\",\r\n                    // tooltipText: \"{category}\",\r\n                    x: am5.percent(110),\r\n                    centerX: am5.percent(0),\r\n                    y: am5.percent(50),\r\n                    centerY: am5.percent(50),\r\n                    paddingLeft: 0,\r\n                    paddingRight: 0\r\n                });\r\n\r\n                series.appear(1000, 100);\r\n\r\n                // remove amcharts watermark\r\n                root._logo?.dispose();\r\n\r\n                // listen if charts data are changed\r\n                this.eventsService.reportsChartsDataEvent.subscribe((updatedData: AmChartsDataModel[] | SankeyChartDataModel[]) => {\r\n                    if (\r\n                        updatedData &&\r\n                        updatedData.length > 0 &&\r\n                        updatedData[0].additionalProperties.chartId == mainChartID &&\r\n                        updatedData[0].additionalProperties.action == \"reset\"\r\n                    ) {\r\n                        series.data.setAll([]);\r\n                    } else {\r\n                        if (updatedData && updatedData.length > 0 && updatedData[0].additionalProperties.chartId == mainChartID) {\r\n                            series.data.setAll(updatedData as any);\r\n                        }\r\n                    }\r\n                    // series.nodes.template.events.on(\"click\", (event: any) => {\r\n                    //     const clickedNode = event.target;\r\n                    // // Toggle visibility of clicked node\r\n                    // clickedNode.hide(!clickedNode.isHidden);\r\n\r\n                    // // Toggle visibility of links connected to the clicked node\r\n                    // series.links.each((link: any) => {\r\n                    //     if (link.source == clickedNode || link.target == clickedNode) {\r\n                    //         link.hide(!clickedNode.isHidden);\r\n                    //     }\r\n                    // });\r\n                    // });\r\n                });\r\n            });\r\n\r\n        } catch (error) {\r\n            console.error(\"generateAmChart error \", error);\r\n        }\r\n\r\n        return root;\r\n    }\r\n\r\n    formatLargeNumberAbbreviation = (value: number) => {\r\n        try {\r\n            if (Math.abs(value) >= 1e21) {\r\n                return (value / 1e21).toFixed(2) + \" Sx\";\r\n            } else if (Math.abs(value) >= 1e18) {\r\n                return (value / 1e18).toFixed(2) + \" Qi\";\r\n            } else if (Math.abs(value) >= 1e15) {\r\n                return (value / 1e15).toFixed(2) + \" Qa\";\r\n            } else if (Math.abs(value) >= 1e12) {\r\n                return (value / 1e12).toFixed(2) + \" T\";\r\n            } else if (Math.abs(value) >= 1e9) {\r\n                return (value / 1e9).toFixed(2) + \" B\";\r\n            } else if (Math.abs(value) >= 1e6) {\r\n                return (value / 1e6).toFixed(2) + \" M\";\r\n            } else if (Math.abs(value) >= 1e3) {\r\n                return (value / 1e3).toFixed(2) + \" K\";\r\n            } else {\r\n                return value.toFixed(2).toString();\r\n            }\r\n        } catch (error) {\r\n            console.error(error);\r\n            return value.toFixed(2).toString();\r\n        }\r\n    }\r\n\r\n    formatNumber = (value: number) => {\r\n        try {\r\n            if (!isNaN(Number(value))) {\r\n                return Number(value).toLocaleString();\r\n            } else {\r\n                return value;\r\n            }\r\n        } catch (error) {\r\n            return value;\r\n        }\r\n    }\r\n\r\n    capitalizeFirstLetter = (str: string) => {\r\n        try {\r\n            return str.toLowerCase().replace(/\\b\\w/g, (char) => char.toUpperCase());\r\n        } catch (error) {\r\n            console.error(error);\r\n            return str;\r\n        }\r\n    }\r\n\r\n    groupChartsDataByKey = (data: AmChartsDataModel[], key: string, value: string, additionalProperties: any) => {\r\n        try {\r\n            let _groupedData = _.mapValues(\r\n                _.groupBy\r\n                    (\r\n                        data, //array\r\n                        key, // field to group by\r\n                    ),//field to group by\r\n                (arr:any) => _.sumBy(arr, value) // sum value field\r\n            );\r\n\r\n            let groupedDataModel: AmChartsDataModel[] = [];\r\n\r\n            Object.keys(_groupedData).forEach((key: string) => {\r\n                groupedDataModel.push({\r\n                    key: key,\r\n                    value: _groupedData[key],\r\n                    additionalProperties: additionalProperties\r\n                });\r\n            });\r\n\r\n            return groupedDataModel;\r\n\r\n        } catch (error) {\r\n            console.error(error);\r\n            return data;\r\n        }\r\n    }\r\n\r\n}\r\n","import { MatTableDataSource } from '@angular/material/table';\nimport { MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { ChangeDetectorRef, Component, Inject, ViewChild } from '@angular/core';\nimport { ConfigService } from '../../services/config/config.service';\nimport { MapComponent } from '../map/map.component';\nimport { AmChartsDataModel } from '../../models/charts/am-charts-data-model';\nimport { ChartHelper } from '../../services/chart-helper/chart-helper';\nimport { ArcgisService } from '../../services/arcgis/arcgis.service';\n\n@Component({\n  selector: 'app-gpt-dialog',\n  templateUrl: './gpt-dialog.component.html',\n  styleUrls: ['./gpt-dialog.component.scss'],\n  standalone:false\n})\nexport class GptDialogComponent {\n  dataTable: any = []; // Accept data dynamically\n  chart_type: any='';\n  dataIncludeObjectIds: boolean = false;\n  response_type: 'table' | 'chart' = 'chart';\n  minimize = false;\n  geoAIPieChartId = 'geoAIPieChartId';\n  geoAIBarChartId = 'geoAIBarChartId';\n  geoAILineChartId = 'geoAILineChartId';\n  dataSource = new MatTableDataSource<any>(this.dataTable); // Initialize data source\n  displayedColumns: string[] = []; // Dynamic column names\n  @ViewChild(MatPaginator) paginator!: MatPaginator;\n  @ViewChild(MatSort) sort!: MatSort;\n\n  constructor(\n    @Inject(MAT_DIALOG_DATA) public data: { response_data: any },\n    private cdr: ChangeDetectorRef,\n    private arcgisService: ArcgisService,\n    private configService: ConfigService,\n    private chartHelper: ChartHelper\n  ) {}\n\n  ngOnInit(): void {\n    if (this.data.response_data) {\n      this.response_type = this.data.response_data.type;\n      const data = this.data.response_data.last_response;\n      this.dataIncludeObjectIds = false;\n      if (this.response_type == 'table') {\n        const table_data = data.KA_Bot;\n        this.displayedColumns = Object.keys(table_data[0]);\n        this.dataSource.data = table_data;\n        if (this.displayedColumns.includes('OBJECTID')) {\n          this.dataIncludeObjectIds = true;\n        }\n        this.cdr.detectChanges(); // Ensure DOM updates\n      } else if (this.response_type == 'chart') {\n        const chart_type = data.type;\n        this.chart_type = chart_type;\n        this.cdr.detectChanges()\n        console.log(data);\n        console.log(data);\n        if (chart_type.toLowerCase() == 'pie') {\n          this.generateRandomId('geoAIPieChartId',data)\n        } else if (chart_type.toLowerCase() == 'bar') {\n          this.generateRandomId('geoAIBarChartId',data)\n        } else if (chart_type.toLowerCase() == 'line') {\n          this.generateRandomId('geoAILineChartId',data)\n        }\n      }\n    }\n  }\n\n  async renderPieChart(data: any) {\n    const X_data = data.X_data;\n    const x_title = data.x_title;\n    const Y_data = data.Y_data;\n    const y_title = data.y_title;\n    // Combine the two arrays into the desired format\n    const chart_Data = X_data.map((category: any, index: any) => ({\n      key: category,\n      value: Y_data[index],\n    })) as AmChartsDataModel[];\n    this.chartHelper.pieChartGeneration(\n      this.geoAIPieChartId,\n      chart_Data,\n      x_title,\n      y_title\n    );\n  }\n\n\n  async renderBarChart(data: any) {\n    const X_data = data.X_data;\n    const x_title = data.x_title;\n    const Y_data = data.Y_data;\n    const y_title = data.y_title;\n    // Combine the two arrays into the desired format\n    const chart_Data = X_data.map((category: any, index: any) => ({\n      key: category,\n      value: Y_data[index],\n    })) as AmChartsDataModel[];\n    this.chartHelper.barChartGeneration(\n      this.geoAIBarChartId,\n      chart_Data,\n      x_title,\n      y_title\n    );\n  }\n\n  async renderLineChart(data: any) {\n    const X_data = data.X_data;\n    const x_title = data.x_title;\n    const Y_data = data.Y_data;\n    const y_title = data.y_title;\n    // Combine the two arrays into the desired format\n    const chart_Data = X_data.map((category: any, index: any) => ({\n      key: category,\n      value: Y_data[index],\n    })) as AmChartsDataModel[];\n    this.chartHelper.lineChartGeneration(\n      this.geoAILineChartId,\n      chart_Data,\n      x_title,\n      y_title\n    );\n  }\n\n  generateRandomId(baseId: string,data:any): void {\n    const randomNumber = Math.floor(Math.random() * 1000) + 1;\n    const randomId = `${baseId}_${randomNumber}`;\n\n    switch (baseId) {\n      case 'geoAIPieChartId':\n        this.geoAIPieChartId = randomId;\n        this.cdr.detectChanges()\n        this.renderPieChart(data);\n        break;\n      case 'geoAIBarChartId':\n        this.geoAIBarChartId = randomId;\n        this.cdr.detectChanges()\n        this.renderBarChart(data);\n        break;\n      case 'geoAILineChartId':\n        this.geoAILineChartId = randomId;\n        this.cdr.detectChanges()\n        this.renderLineChart(data);\n        break;\n      default:\n        console.error('Invalid baseId provided');\n    }\n\n    console.log(`Generated ID for ${baseId}: ${randomId}`);\n\n  }\n\n  showOnMap(): void {\n    // Show the data on the map\n    const data = this.dataSource.filteredData ?? this.dataSource.data;\n    const objectIdKey = Object.keys(data[0]).find(key => key.includes(\"OBJECTID\"));\n    if (objectIdKey) {\n      const objectIDs = data.map((item: any) => `${item[objectIdKey]}`).join(\", \");\n      const whereClauses = `OBJECTID IN (${objectIDs})`;\n      console.log(whereClauses); // Debugging output\n      const mapView = this.configService.config.mapView;\n      const highlightLayerTitle = this.data.response_data?.Table_Name;\n      this.minimize = true;\n      \n      this.arcgisService.highlightFeatures(mapView, highlightLayerTitle, whereClauses,\"table\")\n    } else {\n      console.error(\"No OBJECTID-related column found in the data.\");\n    }\n  }\n\n  exportAsImage(): void {\n    // Find the chart div by its ID\n    let chartElement = document.getElementById(this.geoAIPieChartId);\n    let linkToDownload = this.geoAIPieChartId;\n  \n    if (!chartElement) {\n      chartElement = document.getElementById(this.geoAIBarChartId);\n      linkToDownload = this.geoAIBarChartId;\n    }\n    if (!chartElement) {\n      chartElement = document.getElementById(this.geoAILineChartId);\n      linkToDownload = this.geoAILineChartId;\n    }\n    if (chartElement) {\n      // Get computed styles and bounding box of the chart element\n      const computedStyle = getComputedStyle(chartElement);\n      const padding = {\n        top: parseFloat(computedStyle.paddingTop || '0'),\n        left: parseFloat(computedStyle.paddingLeft || '0'),\n      };\n      const { width, height } = chartElement.getBoundingClientRect();\n  \n      // Adjust for device pixel ratio\n      const scale = window.devicePixelRatio || 1;\n  \n      // Create a canvas element with adjusted dimensions\n      const canvas = document.createElement('canvas');\n      canvas.width = Math.ceil((width + padding.left * 2) * scale);\n      canvas.height = Math.ceil((height + padding.top * 2) * scale);\n  \n      const context = canvas.getContext('2d');\n      if (context) {\n        // Scale the context to handle high DPI screens\n        context.scale(scale, scale);\n  \n        // Set a background color\n        context.fillStyle = 'white'; // Or dynamically fetched background\n        context.fillRect(0, 0, canvas.width / scale, canvas.height / scale);\n  \n        // Get all child canvas elements\n        const childCanvases = chartElement.querySelectorAll('canvas');\n  \n        childCanvases.forEach((childCanvas) => {\n          if (childCanvas) {\n            // Get relative position of the child canvas to the chart element\n            const { left, top, width: childWidth, height: childHeight } = childCanvas.getBoundingClientRect();\n            if (chartElement) {\n              const offsetX = left - chartElement.getBoundingClientRect().left + padding.left;\n              const offsetY = top - chartElement.getBoundingClientRect().top + padding.top;\n  \n              // Copy the child canvas content into the main canvas\n              context.drawImage(\n                childCanvas,\n                offsetX,\n                offsetY,\n                childWidth,\n                childHeight\n              );\n            }\n          }\n        });\n  \n        // Export the canvas as an image\n        const imageData = canvas.toDataURL('image/png');\n  \n        // Create a temporary anchor element to trigger the download\n        const link = document.createElement('a');\n        link.href = imageData;\n        link.download = `${linkToDownload}.png`;\n  \n        // Trigger the download\n        link.click();\n  \n        // Clean up\n        link.remove();\n      }\n    } else {\n      console.error(`Chart with ID ${linkToDownload} not found.`);\n    }\n  }\n  \n  exportTableData(): void {\n    const dataToExport = this.dataSource.data; // Get data from the dataSource\n    const csvRows = [];\n\n    // Add headers\n    const headers = this.displayedColumns.join(',');\n    csvRows.push(headers);\n\n    // Add rows\n    for (const row of dataToExport) {\n      const values = this.displayedColumns.map(column => row[column]);\n      csvRows.push(values.join(','));\n    }\n\n    // Create CSV string\n    const csvContent = csvRows.join('\\n');\n\n    // Create Blob and download\n    const blob = new Blob([csvContent], { type: 'text/csv;charset=utf-8;' });\n    const url = URL.createObjectURL(blob);\n    const now = new Date();\n    const formattedDate = now.toISOString().slice(0, 16).replace('T', ' '); // Format as \"yyyy-mm-dd hh:mm\"\n    const link = document.createElement('a');\n    link.setAttribute('href', url);\n    link.setAttribute('download', `${formattedDate}.csv`);\n    document.body.appendChild(link);\n    link.click();\n    document.body.removeChild(link);\n  }\n\n  ngAfterViewInit(): void {\n    this.dataSource.paginator = this.paginator;\n    this.dataSource.sort = this.sort;\n  }\n  applyFilter(event: Event): void {\n    const filterValue = (event.target as HTMLInputElement).value\n      .trim()\n      .toLowerCase();\n    this.dataSource.filter = filterValue;\n  }\n\n  minimizeWidget(minimize: boolean) {\n    this.minimize = minimize;\n  }\n}\n","<div mat-dialog-content>\n    <div>\n    <div class=\"geo-gpt-close\">\n      <div *ngIf=\"response_type === 'table'\">\n        <a *ngIf=\"!minimize\" (click)=\"minimizeWidget(true)\"><mat-icon>keyboard_arrow_up</mat-icon></a>\n        <a *ngIf=\"minimize\" (click)=\"minimizeWidget(false)\"><mat-icon>keyboard_arrow_down</mat-icon></a>\n      </div>\n        <button class=\"close-button\" mat-icon-button aria-label=\"\" mat-dialog-close>\n          <img src=\"assets/icons/close-cross.svg\" />\n        </button>\n    </div>\n    <div class=\"geo-gpt-widgets {{minimize?'minimize':''}}\" *ngIf=\"response_type === 'table' && data.response_data.last_response?.KA_Bot?.length > 0\">\n      <div class=\"geo-gpt-table-buttons\">\n    <mat-form-field appearance=\"outline\">\n      <mat-label>Filter</mat-label>\n      <input matInput (keyup)=\"applyFilter($event)\" placeholder=\"Search data\" />\n    </mat-form-field>\n    <div class=\"table-buttons-export\">\n      <button mat-raised-button color=\"primary\" (click)=\"showOnMap()\" *ngIf=\"dataIncludeObjectIds\">Show<mat-icon>map</mat-icon></button>\n      <button mat-raised-button color=\"primary\" (click)=\"exportTableData()\">CSV<mat-icon>download</mat-icon></button>\n    </div>\n  </div>\n  <div class=\"geo-gpt-table-container\">\n    <table mat-table [dataSource]=\"dataSource\" class=\"mat-elevation-z8 geo-gpt-table\" matSort>\n      <!-- Dynamic Columns -->\n      <ng-container *ngFor=\"let column of displayedColumns\" [matColumnDef]=\"column\">\n        <th mat-header-cell *matHeaderCellDef mat-sort-header>{{ column }}</th>\n        <td mat-cell *matCellDef=\"let element\">{{ element[column] }}</td>\n      </ng-container>\n  \n      <!-- Header Row -->\n      <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\n  \n      <!-- Data Row -->\n      <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\n    </table>\n  </div>\n    <!-- Paginator -->\n    <mat-paginator\n      [pageSize]=\"5\"\n      [pageSizeOptions]=\"[5, 10, 20]\"\n      showFirstLastButtons\n    ></mat-paginator>\n  </div>\n  </div>\n  <div *ngIf=\"response_type === 'chart'\">\n    <div dir=\"ltr\" id=\"chart\"  >\n    <div [id]=\"geoAIPieChartId\" class=\"chart-pie\" *ngIf=\"chart_type === 'Pie'\"></div>\n    <div [id]=\"geoAIBarChartId\" class=\"chart-bar\" *ngIf=\"chart_type === 'Bar'\"></div>\n    <div [id]=\"geoAILineChartId\" class=\"chart-line\" *ngIf=\"chart_type === 'Line'\"></div>\n  </div>\n    <div class=\"geo-gpt-chart-buttons\">\n      <button mat-raised-button color=\"primary\" (click)=\"exportAsImage()\">Export As Image</button>\n    </div>\n  </div>\n  </div>\n  \n  ","import { Injectable } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { GptDialogComponent } from '../../components/gpt-dialog/gpt-dialog.component';\r\nimport { ConfigService } from '../config/config.service';\r\nimport { MapComponent } from '../../components/map/map.component';\r\nimport { ArcgisService } from '../arcgis/arcgis.service';\r\n\r\n@Injectable({\r\n  providedIn: 'root',\r\n})\r\nexport class ChatService {\r\n  // Inject the ArcGIS service\r\n  historyIndex: number = -1;\r\n  commandHistory: string[] = [];\r\n  isLoading: boolean = false;\r\n  response_data: any = {}\r\n  message: string = '';\r\n  messageCounter = 0;\r\n  messages = [\r\n    {\r\n      id: 0,\r\n      sender: 'bot',\r\n      content: 'Hi there! How can I help you with GIS today?',\r\n      timestamp: new Date(),\r\n      type: 'text',\r\n    },\r\n  ];\r\n  constructor(private arcgisService: ArcgisService,private dialog: MatDialog,private configService: ConfigService) { }\r\n\r\n  sendChatMessage(): void {\r\n    const myHeaders = new Headers()\r\n    var geo_gpt_session_id = localStorage.getItem('geo_gpt_session_id')\r\n    geo_gpt_session_id != 'undefined' && geo_gpt_session_id != null\r\n      ? localStorage.setItem('geo_gpt_session_id', geo_gpt_session_id)\r\n      : localStorage.setItem('geo_gpt_session_id', '')\r\n    geo_gpt_session_id = localStorage.getItem('geo_gpt_session_id')\r\n    myHeaders.append('Content-Type', 'application/json')\r\n    const raw = JSON.stringify({\r\n      query: this.message,\r\n      session_id: geo_gpt_session_id,\r\n      document: 0,\r\n    })\r\n\r\n    const requestOptions = {\r\n      method: 'POST',\r\n      headers: myHeaders,\r\n      body: raw,\r\n      redirect: 'follow' as RequestRedirect,\r\n    }\r\n    // Clear the input\r\n    this.message = ''\r\n\r\n    const geo_gpt_url = this.configService.config.webapiConfig.geoGptUrl\r\n    fetch(geo_gpt_url, requestOptions)\r\n      .then((response) => response.json()) // Parse the JSON response\r\n      .then((data) => {\r\n         if (data?.error) {\r\n          localStorage.setItem('geo_gpt_session_id', '')\r\n        this.isLoading = false\r\n        localStorage.setItem('geo_gpt_session_id', '')\r\n        const retrySuggestions = [\r\n         \"Hmm, that didn’t quite come through. Can you send it once more?\",\r\n         \"I didn’t catch that. Could you try sending it again?\",\r\n         \"Oops, I missed that! Can you send it again, please?\",\r\n         \"Looks like that didn’t work. Mind trying again?\",\r\n         \"Oh no, I didn’t quite get that. Would you mind sending it once more?\"\r\n       ];\r\n       \r\n       // Choose a random suggestion for the bot message\r\n       const randomRetrySuggestion = retrySuggestions[Math.floor(Math.random() * retrySuggestions.length)];\r\n       \r\n       this.messages.push({\r\n         id: this.messageCounter++,\r\n         sender: 'bot',\r\n         content: randomRetrySuggestion,\r\n         timestamp: new Date(),\r\n         type: 'bot'\r\n       });\r\n         }\r\n        const session_id = data.session_id\r\n        localStorage.setItem('geo_gpt_session_id', session_id)\r\n        this.response_data = data\r\n        const data_type = data.type\r\n        if (data_type == 'text') {\r\n          const last_response = data.last_response.KA_Bot\r\n          this.messages.push({\r\n            id: this.messageCounter++,\r\n            sender: 'bot',\r\n            content: last_response,\r\n            timestamp: new Date(),\r\n            type: data_type,\r\n          });\r\n          this.isLoading = false\r\n        } else if (data_type == 'table' || data_type == 'chart') {\r\n         this.showDataByType(data_type)\r\n        } else if (data_type == 'map') {\r\n          this.isLoading = false\r\n          setTimeout(() => {\r\n            this.checkMapFunctions(data.last_response)\r\n          }, 1000)\r\n        }\r\n        // Hide the loading spinner after receiving the response\r\n        // Scroll to the bottom of the chat box\r\n        // Trigger change detection and then scroll\r\n     \r\n      })\r\n      .catch((error) => {\r\n        localStorage.setItem('geo_gpt_session_id', '')\r\n        // Hide the loading spinner after receiving the response\r\n        this.isLoading = false\r\n      })\r\n  }\r\n\r\n  showDataByType(data_type:string){\r\n    this.isLoading = false\r\nthis.setTypingAnimation(true,data_type);\r\n  }\r\n\r\n  setTypingAnimation(openDialog:boolean=false,data_type:string='bot'):void{\r\n    this.messages.push({\r\n      id: this.messageCounter++,\r\n      sender: 'bot',\r\n      content: '.',\r\n      timestamp: new Date(),\r\n      type: data_type,\r\n    });\r\n    let typingIndicator: any; // For interval reference\r\n        // Get the reference to the typing indicator message\r\n        const typingMessageIndex = this.messages.length - 1;\r\n\r\n        // Start the animation\r\n        typingIndicator = setInterval(() => {\r\n          const currentText = this.messages[typingMessageIndex].content;\r\n          if (currentText === '.') {\r\n            this.messages[typingMessageIndex].content = '..';\r\n          } else if (currentText === '..') {\r\n            this.messages[typingMessageIndex].content = '...';\r\n          }else if (currentText === '...') {\r\n            this.messages[typingMessageIndex].content = '....';\r\n          }else if (currentText === '....') {\r\n            this.messages[typingMessageIndex].content = '.....';\r\n          } else {\r\n            this.messages[typingMessageIndex].content = '.';\r\n          }\r\n    \r\n          // Trigger change detection if required (e.g., when using OnPush strategy)\r\n    \r\n        }, 500); // Update every 500ms\r\n        setTimeout(() => {\r\n            // Stop the animation\r\n          clearInterval(typingIndicator);\r\n    \r\n          // Replace the typing indicator with the actual response\r\n          this.messages[typingMessageIndex].content = '.....';\r\n          if(this.response_data.type==\"table\" || this.response_data.type==\"chart\"){\r\n          if(openDialog && ((this.response_data.type==\"table\" && this.response_data.last_response.KA_Bot.length>0)\r\n          || (this.response_data.type==\"chart\" && this.response_data.last_response.X_data.length>0)))\r\n          this.openDialog()\r\n        else{\r\nthis.pushMessageSuggestions()\r\n      }\r\n        }\r\n        }, 500)\r\n  }\r\n\r\n  pushMessageSuggestions(): void {\r\n    const suggestions = [\r\n      \"Hmm, I couldn’t find anything that matches. Maybe try a different search?\",\r\n\"Looks like there’s nothing here. Can you refine your search?\",\r\n\"I didn’t find any results. How about trying a different keyword?\",\r\n\"Nothing came up for that. Want to try another search term?\",\r\n\"No matches found. You could try adjusting your filters!\",\r\n\"I couldn't find anything for that. Maybe you can try using other keywords?\",\r\n\"Looks like we didn’t find what you were looking for. How about searching with a different term?\",\r\n\"No results came up. Try using more specific terms!\",\r\n\"Nothing matched your query. Want to try again with different criteria?\"\r\n     ];\r\n   // Choose a random suggestion for the bot message\r\n   const randomSuggestion = suggestions[Math.floor(Math.random() * suggestions.length)];\r\n\r\n   this.messages.push({\r\n     id: this.messageCounter++,\r\n     sender: 'bot',\r\n     content: randomSuggestion,\r\n     timestamp: new Date(),\r\n     type: 'table'\r\n   });\r\n  }\r\n\r\n  sendMessage(): void {\r\n      this.commandHistory.push(this.message);\r\n      this.messages.push({\r\n        id: this.messageCounter++,\r\n        sender: 'user',\r\n        content: this.message,\r\n        timestamp: new Date(),\r\n        type: 'user',\r\n      });\r\n      // Show the loading spinner\r\n      this.isLoading = true\r\n      // Add user's message with time\r\n      this.sendChatMessage()\r\n  }\r\n\r\n async checkMapFunctions(data: any): Promise<void> {\r\n   await this.openMapDialog();\r\n   const mapView=this.configService.config.mapView\r\n  if (mapView) {\r\n    console.log(\"Got mapView after dialog closed:\", mapView);\r\n    // Perform operations on the mapView\r\n  }\r\n    const functionName = data.Function\r\n    const parameters = data.Parameters\r\n    if (mapView) {\r\n      console.log('Map is loaded, executing function:', functionName);\r\n    } else {\r\n      console.error('MapView is not available.');\r\n    }\r\n    this.arcgisService.clearHighlightedFeatures(this.configService.config.mapView)\r\n\r\n    switch (functionName) {\r\n      case 'Zoom In':\r\n        const zoomInLevel = parseInt(parameters['Level'])\r\n        this.arcgisService.increaseZoom(mapView,zoomInLevel)\r\n        this.addBotMessage(`Zooming in with level: ${zoomInLevel}`)\r\n        // console.log(`Zooming in with level: ${zoomInLevel}`);\r\n        this.isLoading = false\r\n        break\r\n\r\n      case 'Zoom Out':\r\n        const zoomOutLevel = parseInt(parameters['Level'])\r\n        this.arcgisService.decreaseZoom(mapView,zoomOutLevel)\r\n        this.addBotMessage(`Zooming out with level: ${zoomOutLevel}`)\r\n        this.isLoading = false\r\n        break\r\n\r\n      case 'Zoom To':\r\n        const zoomToLocation = parameters['locationName'] ?? parameters['LocationName']\r\n        this.arcgisService.zoomToLocation(mapView, zoomToLocation)\r\n        this.addBotMessage(`Zooming to the specified location: ${zoomToLocation}`)\r\n        this.isLoading = false\r\n        break\r\n\r\n      case 'Full Extent':\r\n        const fullExtentLayerTitle = parameters['LayerTitle']\r\n        if(this.arcgisService.zoomToFullExtent(mapView, fullExtentLayerTitle))\r\n          this.addBotMessage(`Setting full extent for layer: ${fullExtentLayerTitle}`)\r\n        else\r\n        this.addBotMessage(`Setting full extent for layer: ${fullExtentLayerTitle} failed`)\r\n        this.isLoading = false\r\n        break\r\n\r\n      case 'Add Data':\r\n        const addDataUrl = parameters['DataURL']\r\n        this.arcgisService.addLayerFromURL(mapView, addDataUrl)\r\n        this.addBotMessage(`Adding data from: ${addDataUrl}`)\r\n        this.isLoading = false\r\n        break\r\n      case 'Basemap Gallery':\r\n      case 'Basemap Switcher':\r\n        const basemapName = parameters['BasemapName']\r\n        this.arcgisService.switchBasemap(mapView, basemapName)\r\n        this.addBotMessage(`Selecting basemap: ${basemapName}`)\r\n                  this.isLoading = false\r\n        break\r\n\r\n      case 'Layer Transparency':\r\n        const layerTitle = parameters['LayerTitle']\r\n        const opacity = parameters['Opacity']\r\n        if( this.arcgisService.changeLayerOpacity(mapView, layerTitle, opacity))\r\n          this.addBotMessage(`Setting transparency for ${layerTitle} to ${opacity}`)\r\n        else\r\n        this.addBotMessage(`Setting transparency for ${layerTitle} to ${opacity} failed`)\r\n        this.isLoading = false\r\n        break\r\n\r\n      case 'Add Layer':\r\n        const addLayerUrl = parameters['DataURL']\r\n        this.arcgisService.addLayerFromURL(mapView, addLayerUrl)\r\n        this.addBotMessage(`Adding layer from: ${addLayerUrl}`)\r\n        this.isLoading = false\r\n        break\r\n\r\n      case 'Show Legend':\r\n        this.arcgisService.addLegendList(mapView);\r\n        this.addBotMessage('Showing legend');\r\n        break;\r\n\r\n        case 'Show LayerList':\r\n        this.arcgisService.addLayerList(mapView);\r\n        this.addBotMessage('Showing layer list ');\r\n        break;\r\n\r\n      case 'Remove Layer':\r\n        const removeLayerTitle = parameters['LayerTitle']\r\n        this.arcgisService.removeLayerByTitle(mapView, removeLayerTitle)\r\n        this.addBotMessage(`Removing layer: ${removeLayerTitle}`)\r\n        this.isLoading = false\r\n        break\r\n\r\n        case 'Highlight Features':\r\n          const highlightLayerTitle = parameters['LayerTitle']\r\n          const whereClause = parameters['WhereClause']\r\n          const isHighlighted= await this.arcgisService.highlightFeatures(mapView, highlightLayerTitle, whereClause, 'map')\r\n          if(isHighlighted)\r\n             this.addBotMessage(`Highlighting features on ${highlightLayerTitle}`)\r\n          else\r\n            this.addBotMessage(`No features found to highlight on ${highlightLayerTitle} layer`)\r\n         this.isLoading = false\r\n          break\r\n\r\n      case 'Layer Query':\r\n        const queryLayerTitle = parameters['LayerTitle']\r\n        const queryWhereClause = parameters['WhereClause']\r\n        this.arcgisService.queryLayer(mapView, queryLayerTitle, queryWhereClause)\r\n        this.addBotMessage(`Querying ${queryLayerTitle}`)\r\n        this.isLoading = false\r\n        break\r\n\r\n      case 'Layer Reordering':\r\n        const reorderingLayerTitle = parameters['LayerTitle']\r\n        const order = parameters['Order']\r\n        this.arcgisService.reorderLayer(mapView, reorderingLayerTitle, order)\r\n        this.addBotMessage(`Reordering ${reorderingLayerTitle} to order: ${order}`)\r\n        this.isLoading = false\r\n        break\r\n\r\n      case 'Previous Extent':\r\n        var msg = this.arcgisService.zoomToPrevious(mapView)\r\n        this.addBotMessage('Moving to previous extent (no parameters)\\n' + msg)\r\n        this.isLoading = false\r\n        break\r\n\r\n      case 'Next Extent':\r\n        var msg = this.arcgisService.zoomToNext(mapView)\r\n        this.addBotMessage('Moving to next extent (no parameters)\\n' + msg)\r\n        this.isLoading = false\r\n        break\r\n\r\n      case 'Export Map':\r\n        this.arcgisService\r\n          .printService(mapView)\r\n          .then((html) => {\r\n            this.addBotMessage(html)\r\n            this.isLoading = false\r\n          })\r\n          .catch((error) => {\r\n            console.error(error)\r\n            this.pushMessageSuggestions()\r\n            this.isLoading = false\r\n          })\r\n        break\r\n      case 'Map Full Extent':\r\n        this.arcgisService.goToMapFullExtent(mapView)\r\n        this.addBotMessage('Zoom To initial Extent')\r\n        this.isLoading = false\r\n        break\r\n      case 'Clear Highlight':\r\n        this.arcgisService.clearHighlightedFeatures(mapView)\r\n        this.addBotMessage('Highlighted Features Removed')\r\n        this.isLoading = false\r\n        break\r\n      case 'Add Bookmark':\r\n        const saveBookmarkName = parameters['BookmarkName'];\r\n        this.arcgisService.addBookmark(mapView,saveBookmarkName);\r\n        this.addBotMessage(`Saving bookmark: ${saveBookmarkName}`);\r\n        break;\r\n\r\n      case 'Load Bookmark':\r\n        const loadBookmarkName = parameters['BookmarkName'];\r\n        this.arcgisService.loadBookmarkByName(mapView,loadBookmarkName);\r\n        this.addBotMessage(`Loading bookmark: ${loadBookmarkName}`);\r\n        break;\r\n      default:\r\n        this.addBotMessage(`Unknown command ${functionName}`)\r\n        this.isLoading = false\r\n        break\r\n    }\r\n  }\r\n\r\n  saveMapConfiguration(url: string, body: any): Promise<any> {\r\n    return fetch(url, {\r\n      method: 'POST',\r\n      headers: {\r\n        'Content-Type': 'application/json',\r\n      },\r\n      body: JSON.stringify(body),\r\n    })\r\n      .then((response) => {\r\n        if (!response.ok) {\r\n          throw new Error(`HTTP error! status: ${response.status}`);\r\n        }\r\n        return response.json();\r\n      })\r\n      .then((data) => {\r\n        return data;\r\n      })\r\n      .catch((error) => {\r\n        console.error('Error:', error);\r\n        throw error;\r\n      });\r\n  }\r\n\r\n  addBotMessage(message: string): void {\r\n    // Add user's message with time\r\n    this.messages.push({\r\n      id: this.messageCounter++,\r\n      sender: 'bot',\r\n      content: message,\r\n      timestamp: new Date(),\r\n      type: 'html',\r\n    });\r\n  }\r\n\r\n  openMapDialog() {\r\n    try {\r\n      const existingDialog = this.dialog.getDialogById('gpt-map-dialog');\r\n\r\n      if (existingDialog) {\r\n        return ;\r\n      }\r\n\r\n       this.dialog.open(MapComponent, {\r\n        id: 'gpt-map-dialog',\r\n        width: '65%',\r\n        height: '90%',\r\n        position: { top: '20px' },\r\n        disableClose: true,\r\n        hasBackdrop: false\r\n      });\r\n\r\n      // dialogRef.afterClosed().subscribe(\r\n      //   (mapView) => {\r\n      //     console.log(\"Dialog closed, received mapView:\", mapView);\r\n      //     resolve(mapView); // Ensure resolution\r\n      //   },\r\n      //   (error) => {\r\n      //     console.error(\"Dialog closed with error:\", error);\r\n      //     reject(error); // Handle rejection\r\n      //   }\r\n      // );\r\n    } catch (error) {\r\n      console.error(\"Error in openMapDialog:\", error);\r\n    }\r\n}\r\n\r\n  \r\n\r\n\r\n  openDialog(): void {\r\n    const existingDialog = this.dialog.getDialogById('gpt-dialog');\r\n\r\n    if (existingDialog) {\r\n      // Update the dialog's data\r\n      existingDialog.componentInstance.data = {\r\n        response_data: this.response_data,\r\n        config: this.configService.config,\r\n      };\r\n      return; // Stop execution to avoid reopening\r\n    }\r\n  \r\n    // Open a new dialog if not already open\r\n    this.dialog.open(GptDialogComponent, {\r\n      id: 'gpt-dialog',\r\n      width: '60%',\r\n      height: '80%',\r\n      data: {\r\n        response_data: this.response_data,\r\n        config: this.configService.config,\r\n      },\r\n       position: {top:'60px' }, // Aligns the dialog to the left side\r\n      disableClose: true, // Prevents closing the dialog on outside click or Escape key\r\n      hasBackdrop: false, // Removes the backdrop to allow interaction with the map\r\n    })\r\n  }\r\n\r\n  onKeyDown(key:string) {\r\n    if (key === 'ArrowUp') {\r\n      // Navigate backward through history\r\n      if (\r\n        this.historyIndex <\r\n        this.commandHistory.length - 1\r\n      ) {\r\n        this.historyIndex++;\r\n        this.message =\r\n          this.commandHistory[\r\n          this.commandHistory.length -\r\n          1 -\r\n          this.historyIndex\r\n          ];\r\n      }\r\n    } else if (key === 'ArrowDown') {\r\n      // Navigate forward through history\r\n      if (this.historyIndex > 0) {\r\n        this.historyIndex--;\r\n        this.message =\r\n          this.commandHistory[\r\n          this.commandHistory.length -\r\n          1 -\r\n          this.historyIndex\r\n          ];\r\n      } else if (this.historyIndex === 0) {\r\n        this.historyIndex--;\r\n        this.message = '';\r\n      }\r\n    }\r\n  }\r\n\r\n\r\n  clearChat = () => {\r\n    // Inject the ArcGIS service\r\n    this.historyIndex = -1;\r\n    this.commandHistory = [];\r\n    this.isLoading = false;\r\n    this.message = '';\r\n    this.messageCounter = 0;\r\n    this.messages = [\r\n      {\r\n        id: 0,\r\n        sender: 'bot',\r\n        content: 'Hi there! How can I help you with GIS today?',\r\n        timestamp: new Date(),\r\n        type: 'text',\r\n      },\r\n    ];\r\n  };\r\n}\r\n","import { Component, ViewChild, ElementRef, ChangeDetectorRef, AfterViewInit } from '@angular/core'\nimport { EventsService } from '../../services/event/events.service';\nimport { ChatService } from '../../services/chat/chat.service';\nimport { ConfigService } from '../../services/config/config.service';\nimport { ArcgisService } from '../../services/arcgis/arcgis.service';\n\n@Component({\n  selector: 'app-chat',\n  templateUrl: './chat.component.html',\n  styleUrls: ['./chat.component.scss'],\n  standalone: false\n})\nexport class ChatComponent implements AfterViewInit {\n  @ViewChild('chatBox') private chatBox!: ElementRef // Reference to the chat box\n  constructor(private cdr: ChangeDetectorRef, \n    private arcgisService: ArcgisService,private configService: ConfigService,private eventsService:EventsService,public chatService: ChatService) {}\n  ngAfterViewInit(): void {    \n    this.eventsService.mapLoadedEvent.subscribe((load: boolean) => {\n      const mapView = this.configService.config.mapView\n      // Ensure the map is fully loaded before performing other actions\n      mapView.map.allLayers.forEach((l:any) => {\n        console.log(l.id)\n      })\n      mapView\n        .when(() => {\n          // Initialize other components that rely on the map being ready\n          //this.mapUtils.initalizeBookmark() // Call after map is loaded\n          this.arcgisService.trackingg(mapView) // Call after map is loaded\n        })\n        .catch((error:any) => {\n          console.error('Error loading the map view:', error)\n        })\n    });\n  }\n\n  sendMessage(): void {\n    if (this.chatService.message.trim()) {\n      // Add user's message with time\n      setTimeout(() => {\n        this.chatService.sendMessage()\n      }, 1000)\n      setTimeout(() => {\n        this.scrollToBottom()\n        this.cdr.detectChanges();\n      }, 2000)\n    }\n  }\n\n  onKeyDown(event: KeyboardEvent) {\n this.chatService.onKeyDown(event.key)\n  }\n\n  scrollToBottom(): void {\n    // Scroll the chat box to the bottom\n    if (this.chatBox) {\n      const element = this.chatBox.nativeElement\n      element.scrollTop = element.scrollHeight\n    }\n  }\n  deleteChat() {\n    this.chatService.clearChat()\n  }\n}\n","<div class=\"chat-container\">\r\n  <div class=\"chat-container-button\">\r\n    <button mat-icon-button (click)=\"deleteChat()\" matTooltip=\"Delete Chat\" >\r\n      <mat-icon>delete</mat-icon>\r\n    </button>\r\n</div>\r\n    <div class=\"chat-box\" #chatBox>\r\n      <div *ngFor=\"let message of chatService.messages\" [class]=\"message.sender\">\r\n        <p [innerHTML]=\"message.content\"></p>\r\n        <span class=\"time\">{{ message.timestamp | date : \"medium\" }}</span>\r\n      </div>\r\n    </div>\r\n\r\n  \r\n    <div class=\"chat-input-box\">\r\n      <input\r\n      #userInputField\r\n        type=\"text\"\r\n        [(ngModel)]=\"chatService.message\"\r\n        placeholder=\"Type a message...\"\r\n        (keydown.enter)=\"sendMessage()\" (keydown)=\"onKeyDown($event)\"\r\n      />\r\n      <button class=\"chat-sketch__button\" (click)=\"sendMessage()\" *ngIf=\"!chatService.isLoading\">\r\n        <img src=\"assets/icons/send.svg\" alt=\"\" />\r\n    </button>\r\n       <!-- Loading Spinner -->\r\n    <div *ngIf=\"chatService.isLoading\" class=\"loading-spinner\"></div>\r\n    </div>      \r\n  </div>","import { NgModule } from '@angular/core';\r\nimport { A11yModule } from '@angular/cdk/a11y';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { PortalModule } from '@angular/cdk/portal';\r\nimport { ScrollingModule } from '@angular/cdk/scrolling';\r\nimport { CdkStepperModule } from '@angular/cdk/stepper';\r\nimport { CdkTableModule } from '@angular/cdk/table';\r\nimport { CdkTreeModule } from '@angular/cdk/tree';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { MatBottomSheetModule } from '@angular/material/bottom-sheet';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatDividerModule } from '@angular/material/divider';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\n\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatNativeDateModule, MatRippleModule } from '@angular/material/core';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatTreeModule } from '@angular/material/tree';\r\n\r\n\r\n\r\n@NgModule({\r\n  exports: [\r\n    A11yModule,\r\n    CdkStepperModule,\r\n    CdkTableModule,\r\n    CdkTreeModule,\r\n    DragDropModule,\r\n    MatAutocompleteModule,\r\n    MatBadgeModule,\r\n    MatBottomSheetModule,\r\n    MatButtonModule,\r\n    MatButtonToggleModule,\r\n    MatCardModule,\r\n    MatCheckboxModule,\r\n    MatChipsModule,\r\n    MatStepperModule,\r\n    MatDatepickerModule,\r\n    MatDialogModule,\r\n    MatDividerModule,\r\n    MatExpansionModule,\r\n    MatGridListModule,\r\n    MatIconModule,\r\n    MatInputModule,\r\n    MatFormFieldModule,\r\n    MatListModule,\r\n    MatMenuModule,\r\n    MatNativeDateModule,\r\n    MatPaginatorModule,\r\n    MatProgressBarModule,\r\n    MatProgressSpinnerModule,\r\n    MatRadioModule,\r\n    MatRippleModule,\r\n    MatSelectModule,\r\n    MatSidenavModule,\r\n    MatSliderModule,\r\n    MatSlideToggleModule,\r\n    MatSnackBarModule,\r\n    MatSortModule,\r\n    MatTableModule,\r\n    MatTabsModule,\r\n    MatToolbarModule,\r\n    MatTooltipModule,\r\n    MatTreeModule,\r\n    PortalModule,\r\n    ScrollingModule,\r\n  ],\r\n})\r\nexport class MaterialModule {}\r\n","import { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { MapComponent } from './components/map/map.component';\r\nimport { ConfigService } from './services/config/config.service';\r\nimport { AlertComponent } from './components/alert/alert.component';\r\nimport { ChatComponent } from './components/chat/chat.component';\r\nimport { CommonModule, DatePipe } from '@angular/common';  // Import DatePipe\r\nimport { GptDialogComponent } from './components/gpt-dialog/gpt-dialog.component';\r\nimport { ReactiveFormsModule, FormsModule } from '@angular/forms';\r\nimport { NgxSpinnerModule } from 'ngx-spinner';\r\nimport { MaterialModule } from './modules/material/material.module';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\n\r\n\r\n@NgModule({\r\n  declarations: [ChatComponent,MapComponent,AlertComponent,GptDialogComponent],\r\n  imports: [MaterialModule,ReactiveFormsModule,FormsModule,NgxSpinnerModule,CommonModule,DragDropModule], // Import HttpClientModule to load JSON\r\n  exports: [ChatComponent,MapComponent]\r\n})\r\nexport class MyAngularGptPackageModule {\r\n  static forRoot(jsonPath: string): ModuleWithProviders<MyAngularGptPackageModule> {\r\n    return {\r\n      ngModule: MyAngularGptPackageModule,\r\n      providers: [\r\n        {\r\n          provide: 'CONFIG_PATH',\r\n          useValue: jsonPath\r\n        },\r\n        {\r\n          provide: ConfigService,\r\n          useFactory: async (configService: ConfigService, configPath: string,resourcesPath:string) => {\r\n            await configService.loadConfig(configPath,resourcesPath); // Load config file\r\n            return configService;\r\n          },\r\n          deps: [ConfigService, 'CONFIG_PATH']\r\n        },\r\n        DatePipe\r\n      ]\r\n    };\r\n  }\r\n}\r\n","/*\r\n * Public API Surface of my-angular-gpt-package\r\n */\r\n\r\nexport * from './lib/my-angular-gpt-package.service';\r\nexport * from './lib/my-angular-gpt-package.component';\r\nexport * from './lib/my-angular-gpt-package.module';\r\nexport * from './lib/components/chat/chat.component';\r\nexport * from './lib/components/map/map.component';\r\nexport * from './lib/services/config/config.service';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i3.ConfigService","i1.ConfigService","i2.EventsService","i3.IdentityService","i2.ArcgisService","i4","i2","i3","i5","i6","i8","i3.ArcgisService","i4.EventsService","i1.ArcgisService","i2.ConfigService","i3.ChartHelper","i7","i9","i13","i3.EventsService","i4.ChatService"],"mappings":"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"}