{"version":3,"file":"c8y-ngx-components-widgets-implementations-datapoints-list.mjs","sources":["../../widgets/implementations/datapoints-list/datapoints-list.constants.ts","../../widgets/implementations/datapoints-list/datapoints-list-view/datapoints-list-view.service.ts","../../widgets/implementations/datapoints-list/datapoints-list-view/datapoints-list-fetch.service.ts","../../widgets/implementations/datapoints-list/datapoints-list-view/datapoints-list-view.component.ts","../../widgets/implementations/datapoints-list/datapoints-list-view/datapoints-list-view.component.html","../../widgets/implementations/datapoints-list/datapoints-list-config/datapoints-list-config.component.ts","../../widgets/implementations/datapoints-list/datapoints-list-config/datapoints-list-config.component.html","../../widgets/implementations/datapoints-list/c8y-ngx-components-widgets-implementations-datapoints-list.ts"],"sourcesContent":["import { gettext } from '@c8y/ngx-components/gettext';\n\nimport { ColumnConfig } from './datapoints-list-widget.model';\n\n/**\n * Default column configuration for datapoints list widget\n */\nexport const DEFAULT_DATAPOINTS_LIST_COLUMNS: ColumnConfig[] = [\n  { id: 'kpi', label: gettext('Label'), visible: true, order: 0 },\n  { id: 'target', label: gettext('Target'), visible: true, order: 1 },\n  { id: 'current', label: gettext('Current'), visible: true, order: 2 },\n  { id: 'diff', label: gettext('Diff'), visible: true, order: 3 },\n  { id: 'diffPercentage', label: gettext('Diff %'), visible: true, order: 4 },\n  { id: 'asset', label: gettext('Asset'), visible: true, order: 5 }\n];\n","import { Injectable } from '@angular/core';\nimport { IMeasurement } from '@c8y/client';\nimport { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { DatapointWithMeasurement } from '../datapoints-list-widget.model';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DatapointsListService {\n  /**\n   * Calculate difference between current value and target\n   * @param datapoint - Datapoint record\n   * @returns Difference value or null if value/target is undefined\n   */\n  diff(datapoint: DatapointWithMeasurement): number | null {\n    const { currentValue, target } = datapoint;\n    // != checks both null and undefined\n    if (currentValue != null && target != null) {\n      return currentValue - target;\n    }\n    return null;\n  }\n\n  /**\n   * Calculate percentage difference between current value and target\n   * @param datapoint - Datapoint record\n   * @returns Percentage difference or null if target is undefined\n   */\n  diffPercent(datapoint: DatapointWithMeasurement): number | null {\n    const target = datapoint.target;\n\n    if (target !== null && target !== undefined) {\n      const _diff = this.diff(datapoint);\n      if (_diff !== null) {\n        // Intentionally allows division by zero to return Infinity\n        // when target is 0, representing mathematically undefined percentage.\n        // This follows the previous AngularJS implementation behavior.\n        return (_diff / target) * 100;\n      }\n    }\n\n    return null;\n  }\n\n  /**\n   * Get fraction size format based on whether the value is an integer\n   * @param value - Number to check\n   * @param defaultFractionSize - Default fraction size format to use for non-integers\n   * @returns Fraction size format ('1.0-0' for integers, defaultFractionSize for decimals)\n   */\n  getFractionSize(value: number | null | undefined, defaultFractionSize: string): string {\n    if (value === null || value === undefined) {\n      return defaultFractionSize;\n    }\n    return value % 1 === 0 ? '1.0-0' : defaultFractionSize;\n  }\n\n  /**\n   * Extract current value and timestamp from a measurement\n   * @param datapoint - Datapoint configuration (contains fragment and series)\n   * @param measurement - Measurement to extract value from\n   * @returns Object containing extracted value and timestamp (null if not found)\n   */\n  extractMeasurementValue(\n    datapoint: KPIDetails,\n    measurement: IMeasurement | undefined\n  ): { value: number | null; timestamp: Date | null } {\n    // Return null values if measurement is missing\n    if (!measurement) {\n      return { value: null, timestamp: null };\n    }\n\n    // Return null values if datapoint configuration is incomplete\n    if (!datapoint.fragment || !datapoint.series) {\n      return { value: null, timestamp: null };\n    }\n\n    // Access the fragment (e.g., \"c8y_Steam\")\n    const fragmentData = measurement[datapoint.fragment];\n    if (!fragmentData) {\n      return { value: null, timestamp: null };\n    }\n\n    // Access the series within the fragment (e.g., \"Temperature\")\n    const seriesData = fragmentData[datapoint.series];\n    if (!seriesData || seriesData.value === undefined) {\n      return { value: null, timestamp: null };\n    }\n\n    // Extract and return the value and timestamp\n    return {\n      value: seriesData.value,\n      timestamp: new Date(measurement.time)\n    };\n  }\n}\n","import { HttpErrorResponse } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport {\n  IManagedObject,\n  IMeasurement,\n  IMeasurementFilter,\n  InventoryService,\n  MeasurementService\n} from '@c8y/client';\nimport { AlertService } from '@c8y/ngx-components';\nimport { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { DatapointWithMeasurement } from '../datapoints-list-widget.model';\nimport { DatapointsListService } from './datapoints-list-view.service';\n\ninterface FetchConfig {\n  fractionSize: string;\n  dateFrom?: string;\n  dateTo?: string;\n}\n\ninterface FetchResult {\n  dataPoints: DatapointWithMeasurement[];\n  seriesWithoutPermissionCount: number;\n  targetManagedObjects: Map<string, IManagedObject>;\n}\n\ninterface SingleDatapointResult {\n  datapoint: DatapointWithMeasurement;\n  hasPermissionError: boolean;\n}\n\n/**\n * Service that handles all data-fetching operations for the datapoints list widget.\n * Encapsulates measurement fetching, data enrichment, and error handling.\n */\n@Injectable({\n  providedIn: 'root'\n})\nexport class DatapointsListFetchService {\n  private alertService = inject(AlertService);\n  private measurementService = inject(MeasurementService);\n  private inventoryService = inject(InventoryService);\n  private datapointsListService = inject(DatapointsListService);\n\n  /**\n   * Fetch measurements for all active datapoints and enrich them with calculated values.\n   */\n  async fetchDatapointsWithMeasurements(\n    datapoints: KPIDetails[],\n    config: FetchConfig\n  ): Promise<FetchResult> {\n    const targetManagedObjects = new Map<string, IManagedObject>();\n\n    const results = await this.fetchAllDatapoints(datapoints, config);\n\n    const enrichedDataPoints = results.map(r => r.datapoint);\n    const seriesWithoutPermissionCount = results.filter(r => r.hasPermissionError).length;\n\n    await this.fetchTargetManagedObjects(enrichedDataPoints, targetManagedObjects);\n\n    return {\n      dataPoints: enrichedDataPoints,\n      seriesWithoutPermissionCount,\n      targetManagedObjects\n    };\n  }\n\n  /**\n   * Fetch and enrich all datapoints in parallel.\n   * Each datapoint fetch is independent - one failure doesn't affect others.\n   */\n  private fetchAllDatapoints(\n    datapoints: KPIDetails[],\n    config: FetchConfig\n  ): Promise<SingleDatapointResult[]> {\n    return Promise.all(\n      datapoints.map((datapoint, index) => this.fetchSingleDatapoint(datapoint, index, config))\n    );\n  }\n\n  /**\n   * Fetch measurement for a single datapoint and return enriched result.\n   * Handles errors gracefully - returns empty datapoint on failure.\n   */\n  private async fetchSingleDatapoint(\n    datapoint: KPIDetails,\n    index: number,\n    config: FetchConfig\n  ): Promise<SingleDatapointResult> {\n    try {\n      const measurement = await this.getMeasurementForDatapoint(datapoint, config);\n      const measurementValue = this.datapointsListService.extractMeasurementValue(\n        datapoint,\n        measurement\n      );\n\n      return {\n        datapoint: this.createEnrichedDatapoint(datapoint, index, measurementValue, config),\n        hasPermissionError: false\n      };\n    } catch (error) {\n      return this.handleFetchError(error, datapoint, index, config);\n    }\n  }\n\n  /**\n   * Handle fetch error and return appropriate result.\n   */\n  private handleFetchError(\n    error: unknown,\n    datapoint: KPIDetails,\n    index: number,\n    config: FetchConfig\n  ): SingleDatapointResult {\n    const isPermissionError = (error as HttpErrorResponse)?.status === 403;\n\n    if (!isPermissionError) {\n      this.alertService.addServerFailure(error);\n    }\n\n    return {\n      datapoint: this.createEnrichedDatapoint(\n        datapoint,\n        index,\n        { value: null, timestamp: null },\n        config\n      ),\n      hasPermissionError: isPermissionError\n    };\n  }\n\n  /**\n   * Create an enriched datapoint with measurement value and all calculated fields.\n   */\n  private createEnrichedDatapoint(\n    datapoint: KPIDetails,\n    index: number,\n    measurementValue: { value: number | null; timestamp: Date | null },\n    config: FetchConfig\n  ): DatapointWithMeasurement {\n    const enrichedDatapoint: DatapointWithMeasurement = {\n      ...datapoint,\n      id: this.getDatapointId(datapoint, index),\n      currentValue: measurementValue.value,\n      timestamp: measurementValue.timestamp\n    };\n\n    this.calculateDerivedFields(enrichedDatapoint, config.fractionSize);\n\n    return enrichedDatapoint;\n  }\n\n  /**\n   * Calculate and set all derived fields on a datapoint.\n   * Includes diff, diffPercent, and fraction sizes for display formatting.\n   */\n  private calculateDerivedFields(datapoint: DatapointWithMeasurement, fractionSize: string): void {\n    datapoint.diffValue = this.datapointsListService.diff(datapoint);\n    datapoint.diffPercentValue = this.datapointsListService.diffPercent(datapoint);\n    datapoint.currentFractionSize = this.datapointsListService.getFractionSize(\n      datapoint.currentValue,\n      fractionSize\n    );\n    datapoint.diffFractionSize = this.datapointsListService.getFractionSize(\n      datapoint.diffValue,\n      fractionSize\n    );\n    datapoint.diffPercentFractionSize = this.datapointsListService.getFractionSize(\n      datapoint.diffPercentValue,\n      fractionSize\n    );\n  }\n\n  /**\n   * Fetch managed objects for device status display.\n   */\n  private async fetchTargetManagedObjects(\n    dataPoints: DatapointWithMeasurement[],\n    targetManagedObjects: Map<string, IManagedObject>\n  ): Promise<void> {\n    const uniqueTargetIds = this.getUniqueTargetIds(dataPoints);\n\n    if (uniqueTargetIds.size === 0) {\n      return;\n    }\n\n    await Promise.all(\n      Array.from(uniqueTargetIds).map(targetId =>\n        this.fetchManagedObject(targetId, targetManagedObjects)\n      )\n    );\n  }\n\n  /**\n   * Get unique target IDs from datapoints.\n   */\n  private getUniqueTargetIds(dataPoints: DatapointWithMeasurement[]): Set<string> {\n    const uniqueTargetIds = new Set<string>();\n\n    for (const dp of dataPoints) {\n      if (dp.__target?.id) {\n        uniqueTargetIds.add(dp.__target.id.toString());\n      }\n    }\n\n    return uniqueTargetIds;\n  }\n\n  /**\n   * Fetch a single managed object and add to the map.\n   */\n  private async fetchManagedObject(\n    targetId: string,\n    targetManagedObjects: Map<string, IManagedObject>\n  ): Promise<void> {\n    try {\n      const { data } = await this.inventoryService.detail(targetId);\n      targetManagedObjects.set(targetId, data);\n    } catch (error) {\n      this.alertService.addServerFailure(error);\n    }\n  }\n\n  /**\n   * Fetch the most recent measurement for a datapoint within the specified date range.\n   */\n  private async getMeasurementForDatapoint(\n    datapoint: KPIDetails,\n    config: FetchConfig\n  ): Promise<IMeasurement | null> {\n    const sourceId = datapoint.__target?.id;\n    if (!sourceId || !datapoint.fragment || !datapoint.series) {\n      return null;\n    }\n\n    const filter: IMeasurementFilter = {\n      dateFrom: config.dateFrom || '1970-01-01',\n      dateTo: config.dateTo || new Date().toISOString(),\n      source: sourceId,\n      valueFragmentSeries: datapoint.series,\n      valueFragmentType: datapoint.fragment,\n      pageSize: 1,\n      revert: true\n    };\n\n    const { data } = await this.measurementService.list(filter);\n    return data?.[0] ?? null;\n  }\n\n  /**\n   * Get unique ID for a datapoint.\n   * Uses target ID if available, otherwise generates fallback based on index.\n   */\n  private getDatapointId(datapoint: KPIDetails, fallbackIndex: number): string {\n    return datapoint.__target?.id?.toString() || `dp-${fallbackIndex}`;\n  }\n}\n","import { DecimalPipe, NgTemplateOutlet } from '@angular/common';\nimport {\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  inject,\n  input,\n  linkedSignal,\n  OnInit,\n  signal\n} from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { Router } from '@angular/router';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport {\n  AlertService,\n  ApplyRangeClassPipe,\n  C8yTranslateDirective,\n  C8yTranslatePipe,\n  ColorRangeBoundaries,\n  DashboardChildComponent,\n  DatePipe,\n  DeviceStatusComponent,\n  DynamicComponentAlert,\n  DynamicComponentAlertAggregator,\n  DynamicComponentModule,\n  EmptyStateComponent,\n  ForOfDirective,\n  GroupService,\n  GuideDocsComponent,\n  GuideHrefDirective,\n  IconDirective,\n  ListGroupModule,\n  LoadingComponent,\n  VirtualScrollListenerDirective,\n  WidgetActionWrapperComponent\n} from '@c8y/ngx-components';\nimport { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport {\n  DatapointsExportSelectorComponent,\n  ExportConfig\n} from '@c8y/ngx-components/datapoints-export-selector';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  CONTEXT_FEATURE,\n  DisplayMode,\n  GLOBAL_CONTEXT_DISPLAY_MODE,\n  GlobalContextConnectorComponent,\n  GlobalContextState,\n  LocalControlsComponent,\n  PRESET_NAME,\n  PresetName,\n  REFRESH_OPTION,\n  WidgetConfigMigrationService\n} from '@c8y/ngx-components/global-context';\nimport { isEqual, merge } from 'lodash-es';\nimport { pairwise } from 'rxjs';\nimport { DatapointsListConfig, DatapointWithMeasurement } from '../datapoints-list-widget.model';\nimport { DEFAULT_DATAPOINTS_LIST_COLUMNS } from '../datapoints-list.constants';\nimport { DatapointsListFetchService } from './datapoints-list-fetch.service';\n\n@Component({\n  selector: 'c8y-datapoints-list',\n  templateUrl: './datapoints-list-view.component.html',\n  host: { class: 'd-col fit-h' },\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    ApplyRangeClassPipe,\n    C8yTranslateDirective,\n    C8yTranslatePipe,\n    DatapointsExportSelectorComponent,\n    DatePipe,\n    DecimalPipe,\n    DeviceStatusComponent,\n    DynamicComponentModule,\n    EmptyStateComponent,\n    ForOfDirective,\n    GlobalContextConnectorComponent,\n    GuideDocsComponent,\n    GuideHrefDirective,\n    IconDirective,\n    ListGroupModule,\n    LoadingComponent,\n    LocalControlsComponent,\n    NgTemplateOutlet,\n    VirtualScrollListenerDirective,\n    WidgetActionWrapperComponent\n  ]\n})\nexport class DatapointsListViewComponent implements OnInit {\n  config = input.required<DatapointsListConfig>();\n  isInPreviewMode = input(false);\n\n  private readonly alertService = inject(AlertService);\n  private readonly dashboardChild = inject(DashboardChildComponent, { optional: true });\n  private readonly defaultColumns = DEFAULT_DATAPOINTS_LIST_COLUMNS;\n  private readonly fetchService = inject(DatapointsListFetchService);\n  private readonly groupService = inject(GroupService);\n  private readonly inventoryService = inject(InventoryService);\n  private readonly router = inject(Router);\n  private readonly widgetConfigMigrationService = inject(WidgetConfigMigrationService);\n\n  readonly CONTEXT_FEATURE = CONTEXT_FEATURE;\n  readonly GLOBAL_CONTEXT_DISPLAY_MODE = GLOBAL_CONTEXT_DISPLAY_MODE;\n  missingAllPermissionsAlert = new DynamicComponentAlertAggregator();\n  targetManagedObjects = new Map<string, IManagedObject>();\n\n  configSignal = linkedSignal(() => {\n    const raw = this.config();\n    const migrated = this.widgetConfigMigrationService.migrateWidgetConfig(raw);\n    return merge({}, raw, migrated) as DatapointsListConfig;\n  });\n  contextConfig = signal<GlobalContextState>({});\n  dataPoints = signal<DatapointWithMeasurement[]>([]);\n  displayMode = signal<DisplayMode>(GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD);\n  hasLoadedOnce = signal(false);\n  hasNoPermissionsToReadAnyMeasurement = signal(false);\n  isLinkedToGlobal = signal<boolean | undefined>(undefined);\n  isLoading = signal(false);\n  widgetControls = signal<PresetName>(PRESET_NAME.DATA_POINTS_LIST);\n\n  fractionSize = computed(() => {\n    const decimalPlaces = this.configSignal()?.decimalPlaces;\n    if (typeof decimalPlaces === 'number' && !Number.isNaN(decimalPlaces)) {\n      return `1.${decimalPlaces}-${decimalPlaces}`;\n    }\n    return '1.2-2';\n  });\n\n  columns = computed(() => {\n    const options = this.configSignal()?.options;\n\n    if (options?.columns?.length > 0) {\n      return [...options.columns].sort((a, b) => a.order - b.order);\n    }\n\n    return this.defaultColumns.map(defaultCol => ({\n      ...defaultCol,\n      visible: options?.[defaultCol.id] ?? defaultCol.visible\n    }));\n  });\n\n  visibleColumns = computed(() => {\n    return this.columns().filter(col => col.visible !== false);\n  });\n\n  exportConfig = computed<ExportConfig | null>(() => {\n    const effectiveConfig = { ...this.configSignal(), ...this.contextConfig() };\n    const dateFrom = effectiveConfig.dateTimeContext?.dateFrom;\n    const dateTo = effectiveConfig.dateTimeContext?.dateTo;\n\n    if (!dateFrom || !dateTo || (this.isLoading() && !this.hasLoadedOnce())) {\n      return null;\n    }\n\n    return {\n      exportType: 'latestWithDetails',\n      datapointDetails:\n        effectiveConfig.datapoints\n          ?.filter(dp => dp.__active === true)\n          .map(dp => ({\n            deviceName: dp.__target?.name || '',\n            source: dp.__target?.id || '',\n            valueFragmentSeries: dp.series,\n            valueFragmentType: dp.fragment,\n            target: dp.target,\n            label: dp.label\n          })) || [],\n      dateFrom: dateFrom instanceof Date ? dateFrom.toISOString() : dateFrom,\n      dateTo: dateTo instanceof Date ? dateTo.toISOString() : dateTo,\n      columns: this.columns()\n        .filter(col => col.visible)\n        .map(col => ({\n          id: col.id,\n          label: col.label,\n          visible: col.visible,\n          order: col.order\n        }))\n    };\n  });\n\n  activeDataPoints = computed(() => {\n    return this.configSignal()?.datapoints?.filter(dp => dp.__active === true) ?? [];\n  });\n\n  private loadRequestId = 0;\n  private readonly seriesWithoutPermissionToReadCount = signal(0);\n\n  constructor() {\n    toObservable(this.config)\n      .pipe(pairwise(), takeUntilDestroyed())\n      .subscribe(([prevConfig, currentConfig]) => {\n        if (!this.isInPreviewMode()) {\n          return;\n        }\n\n        const prevContext = this.extractContextState(prevConfig);\n        const newContext = this.extractContextState(currentConfig);\n        this.contextConfig.set(newContext);\n\n        const datapointsChanged = !isEqual(prevConfig.datapoints, currentConfig.datapoints);\n        const decimalPlacesChanged = prevConfig.decimalPlaces !== currentConfig.decimalPlaces;\n        const contextChanged = !isEqual(prevContext, newContext);\n\n        if (datapointsChanged || decimalPlacesChanged || contextChanged) {\n          this.isLoading.set(true);\n          this.loadDatapoints();\n        }\n      });\n  }\n\n  ngOnInit(): void {\n    const config = this.configSignal();\n\n    const displayMode = config.displayMode || GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD;\n    this.displayMode.set(displayMode as DisplayMode);\n\n    this.contextConfig.set(this.extractContextState(config));\n\n    if (displayMode !== GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD || this.isInPreviewMode()) {\n      this.loadDatapoints();\n    }\n  }\n\n  onContextChange(event: { context: GlobalContextState; diff: GlobalContextState }): void {\n    const { diff, context } = event;\n\n    if (\n      diff.isAutoRefreshEnabled === false &&\n      Object.keys(diff).length === 1 &&\n      context.refreshOption === REFRESH_OPTION.LIVE\n    ) {\n      return;\n    }\n\n    this.contextConfig.set(context);\n    this.isLoading.set(true);\n    this.loadDatapoints();\n  }\n\n  onRefresh(): void {\n    this.isLoading.set(true);\n    this.loadDatapoints();\n  }\n\n  onExportModalOpen(isOpened: boolean): void {\n    this.setAutoRefreshPaused(isOpened);\n  }\n\n  async redirectToAsset(assetId: string | number | undefined): Promise<void> {\n    if (this.isInPreviewMode() || !assetId) {\n      return;\n    }\n\n    try {\n      const { data: mo } = await this.inventoryService.detail(assetId);\n\n      if (mo) {\n        const assetPath = this.groupService.getAssetPath(mo);\n        this.router.navigateByUrl(`/${assetPath}/${mo.id}`);\n      }\n    } catch (error) {\n      this.alertService.addServerFailure(error);\n    }\n  }\n\n  getTargetManagedObject(targetId: string | number): IManagedObject | undefined {\n    return this.targetManagedObjects.get(targetId.toString());\n  }\n\n  getDashboardChild(): DashboardChildComponent | null {\n    return this.dashboardChild ?? null;\n  }\n\n  getRangeValues(dp: KPIDetails): ColorRangeBoundaries {\n    return {\n      yellowRangeMin: dp.yellowRangeMin,\n      yellowRangeMax: dp.yellowRangeMax,\n      redRangeMin: dp.redRangeMin,\n      redRangeMax: dp.redRangeMax\n    };\n  }\n\n  onListScrolled(): void {\n    this.setAutoRefreshPaused(true);\n  }\n\n  onListScrolledToTop(): void {\n    this.setAutoRefreshPaused(false);\n  }\n\n  private extractContextState(config: Partial<GlobalContextState>): GlobalContextState {\n    return {\n      dateTimeContext: config.dateTimeContext,\n      aggregation: config.aggregation,\n      isAutoRefreshEnabled: config.isAutoRefreshEnabled,\n      refreshInterval: config.refreshInterval,\n      refreshOption: config.refreshOption\n    };\n  }\n\n  private setAutoRefreshPaused(paused: boolean): void {\n    if (this.isInPreviewMode()) {\n      return;\n    }\n\n    const current = this.contextConfig();\n    if (current.refreshOption === REFRESH_OPTION.HISTORY) {\n      return;\n    }\n\n    this.contextConfig.set({\n      ...current,\n      isAutoRefreshEnabled: !paused\n    });\n    this.isLinkedToGlobal.set(!paused);\n  }\n\n  private loadDatapoints(): void {\n    if (this.activeDataPoints().length > 0) {\n      this.fetchMeasurements();\n    } else {\n      this.dataPoints.set([]);\n      this.hasLoadedOnce.set(true);\n      this.isLoading.set(false);\n    }\n  }\n\n  private async fetchMeasurements(): Promise<void> {\n    const requestId = ++this.loadRequestId;\n\n    try {\n      this.isLoading.set(true);\n\n      const effectiveConfig = {\n        ...this.configSignal(),\n        ...this.contextConfig()\n      };\n\n      const dateFrom = effectiveConfig.dateTimeContext?.dateFrom;\n      const dateTo = effectiveConfig.dateTimeContext?.dateTo;\n\n      const dateFromStr = dateFrom instanceof Date ? dateFrom.toISOString() : dateFrom;\n      const dateToStr = dateTo instanceof Date ? dateTo.toISOString() : dateTo;\n\n      const result = await this.fetchService.fetchDatapointsWithMeasurements(\n        this.activeDataPoints(),\n        { fractionSize: this.fractionSize(), dateFrom: dateFromStr, dateTo: dateToStr }\n      );\n\n      if (requestId === this.loadRequestId) {\n        this.dataPoints.set(result.dataPoints);\n        this.targetManagedObjects = result.targetManagedObjects;\n        this.hasLoadedOnce.set(true);\n        this.seriesWithoutPermissionToReadCount.set(result.seriesWithoutPermissionCount);\n        this.checkAndDisplayPermissionErrors();\n      }\n    } finally {\n      if (requestId === this.loadRequestId) {\n        this.isLoading.set(false);\n      }\n    }\n  }\n\n  private checkAndDisplayPermissionErrors(): void {\n    if (this.seriesWithoutPermissionToReadCount()) {\n      this.missingAllPermissionsAlert.clear();\n      this.handleNoPermissionErrorMessage();\n    }\n  }\n\n  private handleNoPermissionErrorMessage(): void {\n    const noPermissions =\n      this.seriesWithoutPermissionToReadCount() === this.activeDataPoints().length;\n    this.hasNoPermissionsToReadAnyMeasurement.set(noPermissions);\n\n    if (noPermissions) {\n      this.showMessageForMissingPermissionsForAllSeries();\n    }\n  }\n\n  private showMessageForMissingPermissionsForAllSeries(): void {\n    this.missingAllPermissionsAlert.addAlerts(\n      new DynamicComponentAlert({\n        allowHtml: true,\n        text: gettext(`<p>To view data, you must meet at least one of these criteria:</p>\n          <ul>\n            <li>\n              Have\n              <b>READ permission for \"Measurements\" permission type</b>\n              (either as a global role or for the specific source)\n            </li>\n            <li>\n              Be the\n              <b>owner of the source</b>\n              you want to export data from\n            </li>\n          </ul>\n          <p>Don't meet these requirements? Contact your system administrator for assistance.</p>`),\n        type: 'system'\n      })\n    );\n  }\n}\n","@if (!isInPreviewMode()) {\n  <div class=\"d-flex gap-16 p-r-16 inner-scroll h-auto min-width-0\">\n    @if (displayMode() === GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD) {\n      <c8y-global-context-connector\n        [controls]=\"widgetControls()\"\n        [config]=\"contextConfig()\"\n        [isLoading]=\"isLoading()\"\n        [dashboardChild]=\"getDashboardChild()!\"\n        [linked]=\"isLinkedToGlobal()\"\n        (configChange)=\"onContextChange($event)\"\n        (refresh)=\"onRefresh()\"\n      ></c8y-global-context-connector>\n    } @else {\n      <c8y-local-controls\n        [controls]=\"widgetControls()\"\n        [displayMode]=\"displayMode()\"\n        [config]=\"contextConfig()\"\n        [isLoading]=\"isLoading()\"\n        (configChange)=\"onContextChange($event)\"\n        (refresh)=\"onRefresh()\"\n      ></c8y-local-controls>\n    }\n  </div>\n}\n\n@if (!isInPreviewMode() && exportConfig(); as config) {\n  <c8y-widget-action>\n    <c8y-datapoints-export-selector\n      [displayMode]=\"'icon-only'\"\n      [exportConfig]=\"config\"\n      [containerClass]=\"'d-contents'\"\n      (isOpen)=\"onExportModalOpen($event)\"\n    ></c8y-datapoints-export-selector>\n  </c8y-widget-action>\n}\n\n@if (!hasNoPermissionsToReadAnyMeasurement()) {\n  <!-- the .page-sticky-header -->\n  @if (dataPoints().length > 0) {\n    <div class=\"hidden-xs hidden-sm c8y-list__item\">\n      <div class=\"c8y-list__item__block flex-grow min-width-0\">\n        <div class=\"c8y-list__item__icon\">\n          <i style=\"width: 22px\"></i>\n        </div>\n        <div class=\"c8y-list__item__body\">\n          <div class=\"d-flex-md row\">\n            @for (column of visibleColumns(); track column.id) {\n              <div\n                [class]=\"\n                  column.id === 'kpi' || column.id === 'asset'\n                    ? 'col-md-3 flex-grow min-width-0'\n                    : column.id == 'diff' || column.id == 'diffPercentage'\n                      ? 'col-md-1 flex-grow min-width-0'\n                      : 'col-md-2 flex-grow min-width-0'\n                \"\n                [class.text-right]=\"column.id !== 'asset' && column.id !== 'kpi'\"\n              >\n                <span\n                  class=\"text-medium text-truncate\"\n                  translate\n                >\n                  {{ column.label }}\n                </span>\n              </div>\n            }\n          </div>\n        </div>\n      </div>\n    </div>\n  }\n  <!-- The record list -->\n  @if (isLoading() && !hasLoadedOnce()) {\n    <!-- Initial load: full spinner -->\n    <ng-container [ngTemplateOutlet]=\"loading\"></ng-container>\n  } @else {\n    @if (isLoading()) {\n      <!-- Refresh: inline loading overlay -->\n      <div class=\"p-absolute fit-w overflow-hidden p-b-4\">\n        <c8y-loading [layout]=\"'page'\"></c8y-loading>\n      </div>\n    }\n    @if (dataPoints().length) {\n      <c8y-list-group\n        class=\"flex-grow\"\n        role=\"list\"\n        c8yVirtualScrollListener\n        (scrolled)=\"onListScrolled()\"\n        (scrolledToTop)=\"onListScrolledToTop()\"\n      >\n        <c8y-li\n          role=\"listitem\"\n          *c8yFor=\"\n            let dp of { data: dataPoints(), res: null! };\n            enableVirtualScroll: true;\n            virtualScrollElementSize: 48;\n            virtualScrollStrategy: 'fixed'\n          \"\n        >\n          <c8y-li-icon>\n            <i\n              c8yIcon=\"circle\"\n              [style.color]=\"dp.color\"\n            ></i>\n          </c8y-li-icon>\n          <c8y-li-body>\n            <div class=\"d-flex-md row\">\n              @for (column of visibleColumns(); track column.id) {\n                @switch (column.id) {\n                  @case ('kpi') {\n                    <div\n                      class=\"col-md-3 flex-grow\"\n                      [attr.data-cy]=\"'datapointlist-' + column.id\"\n                    >\n                      <div class=\"d-flex a-i-center d-contents-md p-t-4 p-b-4 separator-bottom\">\n                        <small\n                          class=\"text-label-small flex-grow visible-xs-inline-block visible-sm-inline-block\"\n                          >{{ column.label }}</small\n                        >\n                        {{ dp.label | translate }}\n                        @if (dp.unit) {\n                          <small class=\"text-muted\">{{ dp.unit }}</small>\n                        }\n                      </div>\n                    </div>\n                  }\n                  @case ('target') {\n                    <div\n                      class=\"col-md-2 text-right-md flex-grow\"\n                      [attr.data-cy]=\"'datapointlist-' + column.id\"\n                    >\n                      <div class=\"d-flex a-i-center d-contents-md p-t-4 p-b-4 separator-bottom\">\n                        <small\n                          class=\"text-label-small flex-grow visible-xs-inline-block visible-sm-inline-block\"\n                          >{{ column.label }}</small\n                        >\n                        <span>{{ dp.target }}</span>\n                      </div>\n                    </div>\n                  }\n                  @case ('current') {\n                    <div\n                      class=\"col-md-2 text-right-md flex-grow\"\n                      [attr.data-cy]=\"'datapointlist-' + column.id\"\n                    >\n                      <div class=\"d-flex a-i-center d-contents-md p-t-4 p-b-4 separator-bottom\">\n                        <small\n                          class=\"text-label-small flex-grow visible-xs-inline-block visible-sm-inline-block\"\n                          >{{ column.label }}</small\n                        >\n                        <span\n                          [class]=\"dp.currentValue | applyRangeClass: getRangeValues(dp)\"\n                          [title]=\"dp.timestamp | c8yDate: 'medium'\"\n                          [attr.aria-label]=\"\n                            ('Last updated: ' | translate) + (dp.timestamp | c8yDate: 'medium')\n                          \"\n                        >\n                          {{ dp.currentValue | number: dp.currentFractionSize }}\n                        </span>\n                      </div>\n                    </div>\n                  }\n                  @case ('diff') {\n                    <div\n                      class=\"col-md-1 text-right-md flex-grow\"\n                      [attr.data-cy]=\"'datapointlist-' + column.id\"\n                    >\n                      <div class=\"d-flex a-i-center d-contents-md p-t-4 p-b-4 separator-bottom\">\n                        <small\n                          class=\"text-label-small flex-grow visible-xs-inline-block visible-sm-inline-block\"\n                          >{{ column.label }}</small\n                        >\n                        <span>\n                          {{ dp.diffValue | number: dp.diffFractionSize }}\n                        </span>\n                      </div>\n                    </div>\n                  }\n                  @case ('diffPercentage') {\n                    <div\n                      class=\"col-md-1 text-right-md flex-grow\"\n                      [attr.data-cy]=\"'datapointlist-' + column.id\"\n                    >\n                      <div class=\"d-flex a-i-center d-contents-md p-t-4 p-b-4 separator-bottom\">\n                        <small\n                          class=\"text-label-small flex-grow visible-xs-inline-block visible-sm-inline-block\"\n                          >{{ column.label }}</small\n                        >\n                        <span>\n                          {{ dp.diffPercentValue | number: dp.diffPercentFractionSize }}\n                        </span>\n                      </div>\n                    </div>\n                  }\n                  @case ('asset') {\n                    <div\n                      class=\"col-md-3 flex-grow\"\n                      [attr.data-cy]=\"'datapointlist-' + column.id\"\n                    >\n                      <div class=\"d-flex a-i-center d-contents-md p-t-4 p-b-4 separator-bottom\">\n                        <small\n                          class=\"text-label-small flex-grow visible-xs-inline-block visible-sm-inline-block\"\n                          >{{ column.label }}</small\n                        >\n                        <button\n                          class=\"btn-clean d-flex a-i-center gap-4 text-muted\"\n                          [attr.aria-label]=\"('Navigate to ' | translate) + dp.__target?.name\"\n                          type=\"button\"\n                          (click)=\"redirectToAsset(dp.__target?.id)\"\n                        >\n                          @if (dp.__target?.id && getTargetManagedObject(dp.__target.id); as mo) {\n                            <c8y-device-status\n                              [mo]=\"mo\"\n                              [size]=\"16\"\n                            ></c8y-device-status>\n                          }\n                          <small\n                            class=\"text-truncate\"\n                            [title]=\"dp.__target?.name\"\n                            >{{ dp.__target?.name }}</small\n                          >\n                        </button>\n                      </div>\n                    </div>\n                  }\n                }\n              }\n            </div>\n          </c8y-li-body>\n        </c8y-li>\n      </c8y-list-group>\n    } @else {\n      <ng-container [ngTemplateOutlet]=\"emptyState\"></ng-container>\n    }\n  }\n} @else {\n  <div class=\"p-t-24 p-r-16 p-l-16 p-b-16 d-flex\">\n    <div class=\"center-block\">\n      <c8y-dynamic-component-alerts\n        [alerts]=\"missingAllPermissionsAlert\"\n      ></c8y-dynamic-component-alerts>\n    </div>\n  </div>\n}\n\n<ng-template #loading>\n  <c8y-loading></c8y-loading>\n</ng-template>\n\n<ng-template #emptyState>\n  <div class=\"p-relative p-l-24\">\n    <c8y-ui-empty-state\n      [icon]=\"'c8y-alert-idle'\"\n      [title]=\"'No data to display.' | translate\"\n      [horizontal]=\"true\"\n      data-cy=\"datapoints-list--empty-state\"\n    >\n      <p c8y-guide-docs>\n        <small translate>\n          Find out more in the\n          <a c8y-guide-href=\"/docs/cockpit/widgets-collection/#data-point-list\">\n            user documentation\n          </a>\n          .\n        </small>\n      </p>\n    </c8y-ui-empty-state>\n  </div>\n</ng-template>\n","import { CdkDragDrop, DragDropModule } from '@angular/cdk/drag-drop';\nimport { AsyncPipe } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectionStrategy,\n  Component,\n  computed,\n  DestroyRef,\n  inject,\n  input,\n  OnInit,\n  signal,\n  TemplateRef,\n  viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n  AbstractControl,\n  FormArray,\n  FormBuilder,\n  FormGroup,\n  NgForm,\n  ReactiveFormsModule,\n  ValidationErrors,\n  ValidatorFn,\n  Validators\n} from '@angular/forms';\nimport {\n  C8yTranslatePipe,\n  DynamicComponentModule,\n  FormGroupComponent,\n  IconDirective,\n  ListGroupModule\n} from '@c8y/ngx-components';\nimport { WidgetConfigService } from '@c8y/ngx-components/context-dashboard';\nimport {\n  LocalControlsComponent,\n  PRESET_NAME,\n  PresetName\n} from '@c8y/ngx-components/global-context';\nimport { isEqual } from 'lodash-es';\nimport { debounceTime, distinctUntilChanged, filter, Observable, take } from 'rxjs';\nimport { DatapointsListViewComponent } from '../datapoints-list-view/datapoints-list-view.component';\nimport { ColumnConfig, DatapointsListConfig } from '../datapoints-list-widget.model';\nimport { DEFAULT_DATAPOINTS_LIST_COLUMNS } from '../datapoints-list.constants';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\n\nconst DEFAULT_DECIMAL_PLACES = 2;\nconst MIN_DECIMAL_PLACES = 0;\nconst MAX_DECIMAL_PLACES = 10;\n\n@Component({\n  selector: 'c8y-datapoints-list-view-config',\n  templateUrl: './datapoints-list-config.component.html',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  imports: [\n    AsyncPipe,\n    C8yTranslatePipe,\n    DatapointsListViewComponent,\n    DragDropModule,\n    DynamicComponentModule,\n    FormGroupComponent,\n    IconDirective,\n    ListGroupModule,\n    LocalControlsComponent,\n    ReactiveFormsModule,\n    PopoverModule\n  ]\n})\nexport class DatapointsListConfigComponent implements OnInit, AfterViewInit {\n  config = input.required<DatapointsListConfig>();\n  private readonly previewTemplate = viewChild<TemplateRef<unknown>>('dataPointsListPreview');\n\n  private readonly defaultColumns = DEFAULT_DATAPOINTS_LIST_COLUMNS;\n  private readonly destroyRef = inject(DestroyRef);\n  private readonly form = inject(NgForm);\n  private readonly formBuilder = inject(FormBuilder);\n  private readonly widgetConfigService = inject(WidgetConfigService);\n\n  readonly controls: PresetName = PRESET_NAME.DATA_POINTS_LIST;\n  readonly minDecimalPlaces = MIN_DECIMAL_PLACES;\n  readonly maxDecimalPlaces = MAX_DECIMAL_PLACES;\n  configForm = signal<ReturnType<DatapointsListConfigComponent['createForm']> | undefined>(\n    undefined\n  );\n  readonly columnsFormArray = computed(() => this.configForm()?.get('columns') as FormArray);\n\n  /**\n   * Debounced config for preview to prevent multiple series requests on initial load.\n   * Uses debounceTime to batch rapid emissions (e.g., from initConfig + GlobalContext processing).\n   */\n  previewConfig$ = this.widgetConfigService.currentConfig$.pipe(\n    filter(config => !!config?.dateTimeContext),\n    debounceTime(300)\n  ) as Observable<DatapointsListConfig>;\n\n  ngOnInit(): void {\n    this.widgetConfigService.currentConfig$\n      .pipe(\n        filter(config => !!config?.dateTimeContext),\n        take(1),\n        takeUntilDestroyed(this.destroyRef)\n      )\n      .subscribe(() => this.initForm());\n  }\n\n  ngAfterViewInit(): void {\n    this.widgetConfigService.setPreview(this.previewTemplate() ?? null);\n  }\n\n  onColumnDrop(event: CdkDragDrop<ColumnConfig[]>): void {\n    const columnsArray = this.columnsFormArray();\n    const item = columnsArray.at(event.previousIndex);\n    columnsArray.removeAt(event.previousIndex);\n    columnsArray.insert(event.currentIndex, item);\n    columnsArray.controls.forEach((control, index) => control.patchValue({ order: index }));\n  }\n\n  private initForm(): void {\n    const form = this.createForm();\n    this.form.form.addControl('config', form);\n    form.patchValue(this.config(), { emitEvent: false });\n\n    this.pushFormToService(form.value);\n\n    form.valueChanges\n      .pipe(\n        distinctUntilChanged((prev, curr) => isEqual(prev, curr)),\n        debounceTime(300),\n        takeUntilDestroyed(this.destroyRef)\n      )\n      .subscribe(formValue => {\n        if (form.invalid) {\n          return;\n        }\n\n        const { decimalPlaces } = formValue;\n        if (\n          typeof decimalPlaces === 'number' &&\n          (decimalPlaces < MIN_DECIMAL_PLACES || decimalPlaces > MAX_DECIMAL_PLACES)\n        ) {\n          return;\n        }\n\n        this.pushFormToService(formValue);\n      });\n\n    this.configForm.set(form);\n  }\n\n  private pushFormToService(formValue: unknown): void {\n    const formData = formValue as { columns?: ColumnConfig[]; [key: string]: unknown };\n    const { columns, ...formValueWithoutColumns } = formData;\n    const currentOptions = this.widgetConfigService.currentConfig?.options;\n    this.widgetConfigService.updateConfig({\n      ...formValueWithoutColumns,\n      options: {\n        ...currentOptions,\n        columns: columns || []\n      }\n    });\n  }\n\n  private createForm() {\n    const currentConfig = this.config();\n    const columns = this.migrateColumnsConfig(currentConfig);\n\n    return this.formBuilder.group({\n      decimalPlaces: [\n        currentConfig?.decimalPlaces ?? DEFAULT_DECIMAL_PLACES,\n        [\n          Validators.required,\n          Validators.min(MIN_DECIMAL_PLACES),\n          Validators.max(MAX_DECIMAL_PLACES),\n          Validators.pattern('^[0-9]+$')\n        ]\n      ],\n      columns: this.formBuilder.array(\n        columns.map(col => this.createColumnFormGroup(col)),\n        [Validators.required, Validators.minLength(1), this.minOneColumnVisible()]\n      )\n    });\n  }\n\n  private createColumnFormGroup(column: ColumnConfig): FormGroup {\n    return this.formBuilder.group({\n      id: [column.id, Validators.required],\n      label: [column.label, Validators.required],\n      visible: [column.visible],\n      order: [column.order]\n    });\n  }\n\n  private migrateColumnsConfig(config: DatapointsListConfig): ColumnConfig[] {\n    if (config?.options?.columns?.length > 0) {\n      return [...config.options.columns].sort((a, b) => a.order - b.order);\n    }\n\n    return this.defaultColumns.map(defaultCol => ({\n      ...defaultCol,\n      visible: config?.options?.[defaultCol.id] ?? defaultCol.visible\n    }));\n  }\n\n  private minOneColumnVisible(): ValidatorFn {\n    return (control: AbstractControl): ValidationErrors | null => {\n      const columns: ColumnConfig[] = control.value;\n\n      if (!columns?.length) {\n        return null;\n      }\n\n      const visibleColumns = columns.filter(column => column.visible);\n      return visibleColumns.length >= 1 ? null : { atLeastOneColumnMustBeVisible: true };\n    };\n  }\n}\n","@if (configForm(); as form) {\n  <form\n    class=\"no-card-context\"\n    [formGroup]=\"form\"\n  >\n    <fieldset class=\"c8y-fieldset\">\n      <legend>{{ 'Columns (drag to reorder)' | translate }}</legend>\n      <c8y-list-group\n        formArrayName=\"columns\"\n        cdkDropList\n        (cdkDropListDropped)=\"onColumnDrop($event)\"\n      >\n        @if (columnsFormArray().errors?.atLeastOneColumnMustBeVisible) {\n          <div\n            class=\"alert alert-warning m-t-8\"\n            role=\"alert\"\n          >\n            {{ 'At least 1 column must be visible.' | translate }}\n          </div>\n        }\n\n        @for (column of columnsFormArray().controls; track column.value.id; let i = $index) {\n          <c8y-li\n            class=\"c8y-list__item__collapse--container-small\"\n            [formGroupName]=\"i\"\n            cdkDrag\n          >\n            <c8y-li-drag-handle\n              [title]=\"'Click and drag to reorder' | translate\"\n              cdkDragHandle\n            >\n              <i c8yIcon=\"drag-reorder\"></i>\n            </c8y-li-drag-handle>\n            <c8y-li-checkbox\n              class=\"a-s-center p-r-0\"\n              [displayAsSwitch]=\"true\"\n              formControlName=\"visible\"\n              (click)=\"$event.stopPropagation()\"\n            ></c8y-li-checkbox>\n            <c8y-li-body>\n              <div class=\"d-flex a-i-center\">\n                <span class=\"text-truncate\">{{ column.value.label | translate }}</span>\n                @switch (column.value.label) {\n                  @case ('Target') {\n                    <button\n                      class=\"btn-help\"\n                      [attr.aria-label]=\"'Help content' | translate\"\n                      [popover]=\"\n                        'The Target column shows the value set on the target field of the data point'\n                          | translate\n                      \"\n                      placement=\"right\"\n                      triggers=\"focus\"\n                      container=\"body\"\n                      type=\"button\"\n                    ></button>\n                  }\n                  @case ('Diff') {\n                    <button\n                      class=\"btn-help\"\n                      [attr.aria-label]=\"'Help content' | translate\"\n                      [popover]=\"\n                        'The Diff column shows the difference between the current value and the target value of the data point'\n                          | translate\n                      \"\n                      placement=\"right\"\n                      triggers=\"focus\"\n                      container=\"body\"\n                      type=\"button\"\n                    ></button>\n                  }\n                }\n              </div>\n            </c8y-li-body>\n          </c8y-li>\n        }\n      </c8y-list-group>\n    </fieldset>\n\n    <!-- decimal input -->\n    <fieldset class=\"c8y-fieldset\">\n      <legend>\n        {{ 'Decimal places' | translate }}\n      </legend>\n      <c8y-form-group class=\"p-t-8\">\n        <input\n          class=\"form-control\"\n          name=\"decimalPlaces\"\n          type=\"number\"\n          formControlName=\"decimalPlaces\"\n          step=\"1\"\n          [min]=\"minDecimalPlaces\"\n          [max]=\"maxDecimalPlaces\"\n        />\n      </c8y-form-group>\n    </fieldset>\n  </form>\n}\n\n<ng-template #dataPointsListPreview>\n  @let previewConfig = previewConfig$ | async;\n  @if (previewConfig && previewConfig.displayMode !== 'dashboard') {\n    <c8y-local-controls\n      [controls]=\"controls\"\n      [displayMode]=\"previewConfig.displayMode!\"\n      [config]=\"previewConfig\"\n      [disabled]=\"true\"\n    ></c8y-local-controls>\n  }\n\n  @if (previewConfig) {\n    <c8y-datapoints-list\n      [config]=\"previewConfig\"\n      [isInPreviewMode]=\"true\"\n      data-cy=\"c8y-datapoints-list-widget-config--preview-datapoints-list\"\n    ></c8y-datapoints-list>\n  }\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2"],"mappings":"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"}