@c8y/ngx-components 1023.17.20 → 1023.22.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/auth-configuration/index.d.ts +4 -2
  2. package/auth-configuration/index.d.ts.map +1 -1
  3. package/datapoint-explorer/view/index.d.ts.map +1 -1
  4. package/echart/index.d.ts +3 -0
  5. package/echart/index.d.ts.map +1 -1
  6. package/echart/models/index.d.ts +3 -0
  7. package/echart/models/index.d.ts.map +1 -1
  8. package/fesm2022/c8y-ngx-components-auth-configuration.mjs +25 -17
  9. package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
  10. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +4 -2
  11. package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
  12. package/fesm2022/c8y-ngx-components-echart-models.mjs.map +1 -1
  13. package/fesm2022/c8y-ngx-components-echart.mjs +98 -59
  14. package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
  15. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs +2 -3
  16. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-firmware.mjs.map +1 -1
  17. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +7 -9
  18. package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
  19. package/fesm2022/c8y-ngx-components-protocol-opcua-mappings.mjs +2 -2
  20. package/fesm2022/c8y-ngx-components-protocol-opcua-mappings.mjs.map +1 -1
  21. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs +1 -1
  22. package/fesm2022/c8y-ngx-components-protocol-opcua.mjs.map +1 -1
  23. package/fesm2022/c8y-ngx-components-repository-firmware.mjs +6 -8
  24. package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
  25. package/fesm2022/c8y-ngx-components-repository-software.mjs +6 -8
  26. package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
  27. package/fesm2022/c8y-ngx-components-tenants.mjs +2 -2
  28. package/fesm2022/c8y-ngx-components-tenants.mjs.map +1 -1
  29. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs +9 -4
  30. package/fesm2022/c8y-ngx-components-trusted-certificates.mjs.map +1 -1
  31. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +4 -2
  32. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
  33. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs +6 -6
  34. package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-table.mjs.map +1 -1
  35. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs +5 -4
  36. package/fesm2022/c8y-ngx-components-widgets-implementations-info-gauge.mjs.map +1 -1
  37. package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs +5 -5
  38. package/fesm2022/c8y-ngx-components-widgets-implementations-kpi.mjs.map +1 -1
  39. package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs +2 -3
  40. package/fesm2022/c8y-ngx-components-widgets-implementations-linear-gauge.mjs.map +1 -1
  41. package/fesm2022/c8y-ngx-components.mjs +31 -16
  42. package/fesm2022/c8y-ngx-components.mjs.map +1 -1
  43. package/index.d.ts +2 -1
  44. package/index.d.ts.map +1 -1
  45. package/locales/de.po +49 -35
  46. package/locales/es.po +50 -30
  47. package/locales/fr.po +50 -33
  48. package/locales/ja_JP.po +43 -33
  49. package/locales/ko.po +47 -33
  50. package/locales/locales.pot +37 -25
  51. package/locales/nl.po +50 -29
  52. package/locales/pl.po +49 -30
  53. package/locales/pt_BR.po +50 -30
  54. package/locales/zh_CN.po +51 -33
  55. package/locales/zh_TW.po +51 -33
  56. package/operations/stepper-bulk-type-firmware/index.d.ts.map +1 -1
  57. package/operations/stepper-bulk-type-software/index.d.ts.map +1 -1
  58. package/package.json +1 -1
  59. package/repository/firmware/index.d.ts.map +1 -1
  60. package/repository/software/index.d.ts.map +1 -1
  61. package/trusted-certificates/index.d.ts.map +1 -1
  62. package/widgets/implementations/datapoints-graph/index.d.ts.map +1 -1
  63. package/widgets/implementations/datapoints-table/index.d.ts +1 -1
  64. package/widgets/implementations/info-gauge/index.d.ts.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"c8y-ngx-components-widgets-implementations-datapoints-graph.mjs","sources":["../../widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.ts","../../widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.html","../../widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.ts","../../widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.html","../../widgets/implementations/datapoints-graph/c8y-ngx-components-widgets-implementations-datapoints-graph.ts"],"sourcesContent":["import {\n Component,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n signal,\n SimpleChanges,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { FormBuilder, NgForm, Validators } from '@angular/forms';\nimport {\n CommonModule,\n CoreModule,\n DynamicComponentAlertAggregator,\n DynamicComponentService,\n FormsModule,\n GainsightService,\n OnBeforeSave,\n WidgetTimeContextDateRangeService\n} from '@c8y/ngx-components';\nimport {\n AlarmDetails,\n AlarmEventSelectorModule,\n EventDetails,\n SelectedDatapoint\n} from '@c8y/ngx-components/alarm-event-selector';\nimport {\n ContextDashboardComponent,\n WidgetConfigComponent,\n WidgetConfigService\n} from '@c8y/ngx-components/context-dashboard';\nimport {\n DatapointAttributesFormConfig,\n DatapointSelectorModalOptions,\n DatapointSelectorModule,\n KPIDetails\n} from '@c8y/ngx-components/datapoint-selector';\nimport {\n CHART_VIEW_CONTEXT,\n ChartAlarmsService,\n ChartEventsService,\n ChartHelpersService,\n ChartsComponent,\n DatapointsGraphKPIDetails,\n DatapointsGraphWidgetConfig,\n DatapointsGraphWidgetTimeProps,\n LEGEND_DISPLAY_OPTIONS,\n PRODUCT_EXPERIENCE_DATA_EXPLORER_AND_GRAPH\n} from '@c8y/ngx-components/echart';\nimport {\n GlobalContextWidgetWrapperComponent,\n WidgetControls\n} from '@c8y/ngx-components/global-context';\nimport { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { Subject, takeUntil } from 'rxjs';\nimport { Observable } from 'rxjs/internal/Observable';\n\n@Component({\n selector: 'c8y-datapoints-graph-widget-config',\n host: { class: 'd-contents' },\n templateUrl: './datapoints-graph-widget-config.component.html',\n standalone: true,\n imports: [\n CommonModule,\n CoreModule,\n FormsModule,\n TooltipModule,\n PopoverModule,\n ChartsComponent,\n DatapointSelectorModule,\n AlarmEventSelectorModule,\n GlobalContextWidgetWrapperComponent\n ],\n providers: [\n ChartEventsService,\n ChartAlarmsService,\n ChartHelpersService,\n WidgetTimeContextDateRangeService\n ]\n})\nexport class DatapointsGraphWidgetConfigComponent\n implements OnInit, OnChanges, OnBeforeSave, OnDestroy\n{\n private _config = signal<DatapointsGraphWidgetConfig>({} as DatapointsGraphWidgetConfig);\n private isFirstConfigSet = true;\n\n @Input() set config(value: DatapointsGraphWidgetConfig | undefined) {\n if (!value) return;\n\n if (this.isFirstConfigSet) {\n this._config.set({ ...value });\n this.isFirstConfigSet = false;\n } else {\n this._config.set({\n ...this._config(),\n dateFrom: value.dateFrom,\n dateTo: value.dateTo,\n interval: value.interval,\n refreshInterval: value.refreshInterval,\n isAutoRefreshEnabled: value.isAutoRefreshEnabled,\n aggregation: value.aggregation,\n realtime: value.realtime,\n displayMode: value.displayMode,\n refreshOption: value.refreshOption,\n dateTimeContext: value.dateTimeContext\n });\n }\n }\n\n get config(): DatapointsGraphWidgetConfig | undefined {\n return this._config();\n }\n\n @ViewChild('dataPointsGraphPreview')\n set previewMapSet(template: TemplateRef<any>) {\n if (template) {\n this.widgetConfigService.setPreview(template);\n return;\n }\n this.widgetConfigService.setPreview(null);\n }\n\n private readonly formBuilder = inject(FormBuilder);\n private readonly form = inject(NgForm);\n private readonly widgetConfigService = inject(WidgetConfigService);\n private readonly chartHelpersService = inject(ChartHelpersService);\n private readonly gainsightService = inject(GainsightService);\n\n alerts: DynamicComponentAlertAggregator | undefined;\n formGroup: ReturnType<DatapointsGraphWidgetConfigComponent['initForm']>;\n datapointSelectDefaultFormOptions: Partial<DatapointAttributesFormConfig> = {\n showRange: true,\n showChart: true\n };\n datapointSelectionConfig: Partial<DatapointSelectorModalOptions> = {};\n activeDatapointsExists = false;\n alarmsOrEventsHaveNoMatchingDps = false;\n widgetControls: WidgetControls;\n chartViewContext: CHART_VIEW_CONTEXT = CHART_VIEW_CONTEXT.WIDGET_CONFIG;\n legendDisplayOptions = LEGEND_DISPLAY_OPTIONS;\n private destroy$ = new Subject<void>();\n private isInitialized = false;\n\n constructor(\n @Optional() private widgetConfig: WidgetConfigComponent,\n @Optional() private dashboardContextComponent: ContextDashboardComponent,\n private dynamicComponentService: DynamicComponentService\n ) {\n this.formGroup = this.initForm();\n }\n\n async ngOnInit() {\n this.widgetControls =\n (await this.dynamicComponentService.getById(defaultWidgetIds.DATAPOINTS_GRAPH_NEW)).data\n ?.widgetControls || {};\n\n const currentConfig = this._config();\n currentConfig.datapoints?.forEach(dp => this.assignContextFromContextDashboard(dp));\n\n this.form.form.addControl('config', this.formGroup);\n\n const alarms =\n currentConfig.alarmsEventsConfigs?.filter(ae => ae.timelineType === 'ALARM') || [];\n const events =\n currentConfig.alarmsEventsConfigs?.filter(ae => ae.timelineType === 'EVENT') || [];\n this.formGroup.patchValue({ ...currentConfig, alarms, events }, { emitEvent: false });\n this.isInitialized = true;\n\n this.formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(formValue => {\n const { alarms, events, datapoints } = formValue;\n\n this._config.set({\n ...this._config(),\n datapoints: datapoints || [],\n dataPointLegendDisplay: formValue.dataPointLegendDisplay,\n alarmsEventsConfigs: [...(alarms || []), ...(events || [])],\n displayMarkedLine: formValue.displayMarkedLine,\n displayMarkedPoint: formValue.displayMarkedPoint,\n mergeMatchingDatapoints: formValue.mergeMatchingDatapoints,\n forceMergeDatapoints: formValue.forceMergeDatapoints,\n smoothLines: formValue.smoothLines,\n showLabelAndUnit: formValue.showLabelAndUnit,\n showSlider: formValue.showSlider,\n yAxisSplitLines: formValue.yAxisSplitLines,\n xAxisSplitLines: formValue.xAxisSplitLines,\n numberOfDecimalPlaces: formValue.numberOfDecimalPlaces,\n aggregatedDatapoint: formValue.aggregatedDatapoint\n });\n\n this.setActiveDatapointsExists();\n this.checkForMatchingDatapoints();\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (!changes.config || changes.config.isFirstChange() || !this.isInitialized) return;\n\n this.setActiveDatapointsExists();\n this.checkForMatchingDatapoints();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n onBeforeSave(\n config?: DatapointsGraphWidgetConfig\n ): boolean | Promise<boolean> | Observable<boolean> {\n if (!this.formGroup.valid || !config) return false;\n\n const snapshot = { ...this._config() };\n\n for (const key in snapshot) {\n if (snapshot.hasOwnProperty(key)) {\n try {\n config[key] = snapshot[key];\n } catch (e) {\n // do nothing\n }\n }\n }\n\n if (snapshot.alarmsEventsConfigs) {\n config.alarmsEventsConfigs = [...snapshot.alarmsEventsConfigs];\n }\n if (snapshot.datapoints) {\n config.datapoints = [...snapshot.datapoints];\n }\n\n this.widgetConfigService.updateConfig(snapshot, true);\n\n const configSummaryGS = this.chartHelpersService.getConfigSummaryForGainsight(config);\n this.gainsightService.triggerEvent(\n PRODUCT_EXPERIENCE_DATA_EXPLORER_AND_GRAPH.EVENTS.DATA_EXPLORER_AND_GRAPH,\n {\n component: PRODUCT_EXPERIENCE_DATA_EXPLORER_AND_GRAPH.COMPONENTS.DATA_EXPLORER_DETAILS,\n action: PRODUCT_EXPERIENCE_DATA_EXPLORER_AND_GRAPH.ACTIONS.DATA_GRAPH_WIDGET_CONFIG,\n ...configSummaryGS\n }\n );\n\n return true;\n }\n\n updateTimeRangeOnRealtime(\n timeRange: Pick<DatapointsGraphWidgetConfig, 'dateFrom' | 'dateTo'>\n ): void {\n const current = this._config();\n this._config.set({\n ...current,\n ...timeRange,\n interval: current.interval || 'hours'\n });\n }\n\n updateDashboardTimeContext(timeProps: DatapointsGraphWidgetTimeProps): void {\n const dateTimeContext = {\n dateFrom: new Date(timeProps.dateFrom).toISOString(),\n dateTo: new Date(timeProps.dateTo).toISOString(),\n interval: timeProps.interval\n };\n this._config.set({\n ...this._config(),\n dateTimeContext\n });\n }\n\n updateAggregatedSliderDatapoint(selectedDatapoint: SelectedDatapoint | null): void {\n const aggregatedDatapoint = this.chartHelpersService.findMatchingDatapoint(\n this._config().datapoints || [],\n selectedDatapoint\n ) as DatapointsGraphKPIDetails | undefined;\n\n this._config.set({\n ...this._config(),\n aggregatedDatapoint\n });\n }\n\n private assignContextFromContextDashboard(datapoint: KPIDetails) {\n if (!this.dashboardContextComponent?.isDeviceTypeDashboard) {\n return;\n }\n const context = this.widgetConfig?.context;\n if (context?.id) {\n const { name, id } = context;\n datapoint.__target = { name, id };\n this.datapointSelectionConfig.contextAsset = { id };\n }\n }\n\n private checkForMatchingDatapoints(): void {\n const config = this._config();\n const alarmsEventsConfigs = config.alarmsEventsConfigs || [];\n const datapoints = config.datapoints || [];\n\n const allMatch = alarmsEventsConfigs.every(ae =>\n datapoints.some(dp => dp.__target?.id === ae.__target?.id)\n );\n\n queueMicrotask(() => {\n this.alarmsOrEventsHaveNoMatchingDps = !allMatch;\n });\n }\n\n private initForm() {\n const initialState = this._config();\n\n const form = this.formBuilder.group({\n datapoints: [\n [] as DatapointsGraphKPIDetails[],\n [Validators.required, Validators.minLength(1)]\n ],\n dataPointLegendDisplay: ['auto', []],\n alarms: [[] as AlarmDetails[]],\n events: [[] as EventDetails[]],\n displayMarkedLine: [true, []],\n displayMarkedPoint: [true, []],\n mergeMatchingDatapoints: [true, []],\n forceMergeDatapoints: [false, []],\n smoothLines: [false, []],\n showLabelAndUnit: [true, []],\n displayAggregationSelection: [false, []],\n canDecoupleGlobalTimeContext: [false, []],\n showSlider: [true, [Validators.required]],\n yAxisSplitLines: [false, [Validators.required]],\n xAxisSplitLines: [false, [Validators.required]],\n numberOfDecimalPlaces: [2, [Validators.required, Validators.min(0), Validators.max(10)]],\n aggregatedDatapoint: [initialState?.aggregatedDatapoint || null]\n });\n return form;\n }\n\n private setActiveDatapointsExists() {\n const datapoints = this._config().datapoints || [];\n this.activeDatapointsExists = datapoints.filter(dp => dp.__active).length > 0;\n }\n}\n","<form [formGroup]=\"formGroup\">\n <c8y-datapoint-selection-list\n class=\"bg-component separator-bottom d-block\"\n name=\"datapoints\"\n [minActiveCount]=\"1\"\n [defaultFormOptions]=\"datapointSelectDefaultFormOptions\"\n [config]=\"datapointSelectionConfig\"\n formControlName=\"datapoints\"\n ></c8y-datapoint-selection-list>\n\n <c8y-alarm-event-selection-list\n class=\"bg-component separator-bottom d-block\"\n name=\"alarms\"\n formControlName=\"alarms\"\n [timelineType]=\"'ALARM'\"\n [datapoints]=\"config?.datapoints\"\n ></c8y-alarm-event-selection-list>\n\n <c8y-alarm-event-selection-list\n class=\"bg-inherit\"\n name=\"events\"\n formControlName=\"events\"\n [timelineType]=\"'EVENT'\"\n [datapoints]=\"config?.datapoints\"\n ></c8y-alarm-event-selection-list>\n\n <div class=\"form-group form-group-sm\">\n <label\n [title]=\"'Number of decimal places' | translate\"\n translate\n >\n Number of decimal places\n </label>\n <input\n class=\"form-control\"\n name=\"numberOfDecimalPlaces\"\n type=\"number\"\n formControlName=\"numberOfDecimalPlaces\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 1 }\"\n />\n <c8y-messages\n [show]=\"\n formGroup.controls?.numberOfDecimalPlaces?.touched &&\n formGroup?.controls?.numberOfDecimalPlaces?.errors\n \"\n ></c8y-messages>\n </div>\n <c8y-form-group class=\"form-group-sm\">\n <label>\n {{ 'Data point legend display' | translate }}\n </label>\n <div\n class=\"c8y-select-wrapper\"\n [formGroup]=\"formGroup\"\n >\n <select\n class=\"form-control\"\n [title]=\"'Data point legend display' | translate\"\n id=\"dataPointLegendDisplay\"\n formControlName=\"dataPointLegendDisplay\"\n >\n @for (option of legendDisplayOptions; track option) {\n <option [ngValue]=\"option.value\">\n {{ option.label | translate }}\n </option>\n }\n </select>\n </div>\n </c8y-form-group>\n</form>\n\n<form\n class=\"d-block p-t-8\"\n [formGroup]=\"formGroup\"\n>\n <label>{{ 'Display options' | translate }}</label>\n <fieldset class=\"c8y-fieldset m-b-24 m-t-0\">\n <legend>{{ 'Axis' | translate }}</legend>\n <c8y-form-group class=\"p-b-16 m-b-0 p-t-8 form-group-sm\">\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Y-axis helper lines' | translate\"\n >\n <input\n name=\"yAxisSplitLines\"\n type=\"checkbox\"\n formControlName=\"yAxisSplitLines\"\n />\n <span></span>\n <span translate>Y-axis helper lines</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'X-axis helper lines' | translate\"\n >\n <input\n name=\"xAxisSplitLines\"\n type=\"checkbox\"\n formControlName=\"xAxisSplitLines\"\n />\n <span></span>\n <span translate>X-axis helper lines</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Merge matching data points into single axis' | translate\"\n >\n <input\n name=\"mergeMatchingDatapoints\"\n type=\"checkbox\"\n formControlName=\"mergeMatchingDatapoints\"\n />\n <span></span>\n <span translate>Merge matching data points into single axis</span>\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"\n 'Data points with the same min and max values will be merged into a single axis. The values must be defined in the data point configuration.'\n | translate\n \"\n [popover]=\"\n 'Data points with the same min and max values will be merged into a single axis. The values must be defined in the data point configuration.'\n | translate\n \"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n ></button>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Force merge all data points into single axis' | translate\"\n >\n <input\n name=\"forceMergeDatapoints\"\n type=\"checkbox\"\n formControlName=\"forceMergeDatapoints\"\n />\n <span></span>\n <span translate>Force merge all datapoints into a single axis</span>\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"\n 'All axes will be force merged to a single axis with the scale being set to the max and min value of all axes. It\\'s recommended to use this option for data points with similar values.'\n | translate\n \"\n [popover]=\"\n 'All axes will be force merged to a single axis with the scale being set to the max and min value of all axes. It\\'s recommended to use this option for data points with similar values.'\n | translate\n \"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n ></button>\n </label>\n </c8y-form-group>\n </fieldset>\n <fieldset class=\"c8y-fieldset m-b-24 m-t-0\">\n <legend>{{ 'Alarms & events' | translate }}</legend>\n <c8y-form-group class=\"p-b-16 m-b-0 p-t-8 form-group-sm\">\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show vertical line on every occurrence' | translate\"\n >\n <input\n name=\"displayMarkedLine\"\n type=\"checkbox\"\n formControlName=\"displayMarkedLine\"\n />\n <span></span>\n <span translate>Show vertical line on every occurrence</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show icon when triggered' | translate\"\n >\n <input\n name=\"displayMarkedPoint\"\n type=\"checkbox\"\n formControlName=\"displayMarkedPoint\"\n />\n <span></span>\n <span translate>Show icon when triggered</span>\n @if (alarmsOrEventsHaveNoMatchingDps) {\n <button\n class=\"btn-clean m-l-8\"\n [attr.aria-label]=\"\n 'Some alarms or events have no matching data points. No icons will be shown for them.'\n | translate\n \"\n [tooltip]=\"\n 'Some alarms or events have no matching data points. No icons will be shown for them.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-warning\"\n c8yIcon=\"exclamation-triangle\"\n ></i>\n </button>\n }\n </label>\n </c8y-form-group>\n </fieldset>\n <fieldset class=\"c8y-fieldset m-b-24 m-t-0\">\n <legend>{{ 'Chart' | translate }}</legend>\n <c8y-form-group class=\"p-b-16 m-b-0 p-t-8 form-group-sm\">\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show labels and units' | translate\"\n >\n <input\n name=\"showLabelAndUnit\"\n type=\"checkbox\"\n formControlName=\"showLabelAndUnit\"\n />\n <span></span>\n <span translate>Display labels and units on Y-axis</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show slider' | translate\"\n >\n <input\n name=\"showSlider\"\n type=\"checkbox\"\n formControlName=\"showSlider\"\n />\n <span></span>\n <span translate>Show slider</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show smooth lines' | translate\"\n >\n <input\n name=\"smoothLines\"\n type=\"checkbox\"\n formControlName=\"smoothLines\"\n />\n <span></span>\n <span translate>Show smooth lines</span>\n </label>\n </c8y-form-group>\n </fieldset>\n</form>\n\n<ng-template #dataPointsGraphPreview>\n @if (widgetControls) {\n <c8y-global-context-widget-wrapper\n [config]=\"config\"\n [displayMode]=\"'preview'\"\n [widgetControls]=\"widgetControls\"\n ></c8y-global-context-widget-wrapper>\n }\n\n @if (activeDatapointsExists) {\n <c8y-charts\n class=\"d-block p-relative\"\n [config]=\"config\"\n [alerts]=\"alerts\"\n [chartViewContext]=\"chartViewContext\"\n (timeRangeChangeOnRealtime)=\"updateTimeRangeOnRealtime($event)\"\n (configChangeOnZoomOut)=\"updateDashboardTimeContext($event)\"\n (updateAggregatedSliderDatapoint)=\"updateAggregatedSliderDatapoint($event)\"\n ></c8y-charts>\n }\n\n @if (!activeDatapointsExists) {\n <c8y-ui-empty-state\n class=\"d-block m-t-24\"\n [icon]=\"'search'\"\n [title]=\"'No data points selected' | translate\"\n [subtitle]=\"'Select data point to render content' | translate\"\n data-cy=\"datapoints-graph-list--empty-state-no-data-point-selected\"\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-graph\">\n user documentation\n </a>\n .\n </small>\n </p>\n </c8y-ui-empty-state>\n }\n</ng-template>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, Input, OnDestroy, Optional, ViewChild } from '@angular/core';\nimport { ALARM_STATUS_LABELS, AlarmStatusType, SeveritySettings } from '@c8y/client';\nimport {\n AGGREGATION_ICONS,\n AGGREGATION_TEXTS,\n CoreModule,\n DynamicComponentAlertAggregator,\n DynamicComponentService,\n SelectableItem,\n SelectComponent,\n SelectItemDirective,\n SelectedItemsDirective,\n WidgetTimeContextDateRangeService\n} from '@c8y/ngx-components';\nimport { AlarmsModule } from '@c8y/ngx-components/alarms';\nimport { ContextDashboardComponent } from '@c8y/ngx-components/context-dashboard';\nimport type { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport {\n AlarmDetailsExtended,\n AlarmOrEventExtended,\n CHART_VIEW_CONTEXT,\n ChartAlarmsService,\n ChartEventsService,\n ChartsComponent,\n DatapointsGraphKPIDetails,\n DatapointsGraphWidgetConfig,\n DatapointsGraphWidgetTimeProps,\n EventDetailsExtended,\n SelectableDatapoint,\n SeverityType\n} from '@c8y/ngx-components/echart';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n GLOBAL_CONTEXT_DISPLAY_MODE,\n GLOBAL_CONTEXT_EVENTS,\n GLOBAL_CONTEXT_SOURCE,\n GlobalContextEvent,\n GlobalContextState,\n GlobalContextWidgetWrapperComponent,\n REFRESH_OPTION,\n WidgetConfigMigrationService,\n WidgetControls\n} from '@c8y/ngx-components/global-context';\nimport { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep, merge } from 'lodash-es';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\n@Component({\n selector: 'c8y-datapoints-graph-widget-view',\n templateUrl: './datapoints-graph-widget-view.component.html',\n standalone: true,\n imports: [\n A11yModule,\n CommonModule,\n ChartsComponent,\n CoreModule,\n TooltipModule,\n BsDropdownModule,\n PopoverModule,\n AlarmsModule,\n GlobalContextWidgetWrapperComponent,\n SelectComponent,\n SelectItemDirective,\n SelectedItemsDirective\n ],\n providers: [ChartEventsService, ChartAlarmsService, WidgetTimeContextDateRangeService]\n})\nexport class DatapointsGraphWidgetViewComponent implements OnDestroy {\n events: EventDetailsExtended[] = [];\n alarms: AlarmDetailsExtended[] = [];\n AGGREGATION_ICONS = AGGREGATION_ICONS;\n AGGREGATION_TEXTS = AGGREGATION_TEXTS;\n alerts: DynamicComponentAlertAggregator | undefined;\n datapointsOutOfSync = new Map<DatapointsGraphKPIDetails, boolean>();\n hasAtLeastOneDatapointActive = true;\n hasAtLeastOneAlarmActive = true;\n isMarkedAreaEnabled = false;\n loadedDatapoints: DatapointsGraphKPIDetails[] = [];\n loadedAlarmsOrEvents: AlarmOrEventExtended[] = [];\n isLoading$ = new BehaviorSubject<boolean>(false);\n isSliderBeingDragged$ = new BehaviorSubject<boolean>(false);\n /*\n * @description: The type of alarm that has marked area enabled.\n */\n enabledMarkedAreaAlarmType: string | undefined;\n chartViewContext = CHART_VIEW_CONTEXT.WIDGET_VIEW;\n\n currentConfig: Partial<GlobalContextState>;\n widgetControls: WidgetControls;\n globalContextState: Partial<DatapointsGraphWidgetConfig> & Partial<GlobalContextState> = null;\n /** Combined number of datapoints, alarms, and events */\n totalLegendItems = 0;\n /** Selectable items for the datapoints, alarms, events dropdown */\n selectableItems: SelectableItem<SelectableDatapoint>[] = [];\n /** Selected items from the dropdown */\n selectedItems: SelectableItem<SelectableDatapoint>[] = [];\n\n @Input() set config(value: DatapointsGraphWidgetConfig) {\n // Special case: sync the config with migrated values.\n // This is needed to reflect migrated states in the widget config.\n const migratedConfig = this.widgetConfigMigrationService.migrateWidgetConfig(value);\n const newConfig = merge(value, migratedConfig);\n this.displayConfig = cloneDeep(newConfig);\n }\n get config(): never {\n throw Error(\n '\"config\" property should not be referenced in view component to avoid mutating data.'\n );\n }\n @ViewChild(GlobalContextWidgetWrapperComponent) wrapper?: GlobalContextWidgetWrapperComponent;\n @ViewChild(ChartsComponent) chartComponent!: ChartsComponent;\n displayConfig: DatapointsGraphWidgetConfig | undefined;\n legendHelp = this.translate.instant(\n gettext(`<ul class=\"m-l-0 p-l-8 m-t-8 m-b-0\">\n <li>\n <b>Visibility:</b>\n use visibility icon to toggle datapoint, alarm or event visibility on chart. At least one datapoint is required to display chart.\n </li>\n <li>\n <b>Alarm details</b>\n Click alarm legend item to highlight area between alarm raised timestamp and alarm cleared timestamp.\n You can also click alarm markline on chart to highlight alarm and to pause tooltip. Click on highlighted area or legend item to cancel highlighting.\n </li>\n </ul>`)\n );\n readonly disableZoomInLabel = gettext('Disable zoom in');\n readonly enableZoomInLabel = gettext(\n 'Click to enable zoom, then click and drag on the desired area in the chart.'\n );\n readonly hideDatapointLabel = gettext('Hide data point');\n readonly showDatapointLabel = gettext('Show data point');\n private destroy$ = new Subject<void>();\n private readonly widgetInstanceId = crypto.randomUUID();\n\n constructor(\n private translate: TranslateService,\n @Optional() private dashboardContextComponent: ContextDashboardComponent,\n private dynamicComponentService: DynamicComponentService,\n private widgetConfigMigrationService: WidgetConfigMigrationService,\n private widgetTimeContextDateRangeService: WidgetTimeContextDateRangeService,\n private cdr: ChangeDetectorRef\n ) {}\n\n async ngOnInit() {\n this.displayConfig?.datapoints?.forEach(dp => this.assignContextFromContextDashboard(dp));\n this.displayConfig.isRealtimeEnabled = this.displayConfig.realtime;\n\n this.totalLegendItems =\n (this.displayConfig?.datapoints?.length || 0) +\n (this.displayConfig?.alarmsEventsConfigs?.length || 0);\n\n this.loadedDatapoints = (this.displayConfig?.datapoints || []).filter(dp => dp.__active);\n this.loadedAlarmsOrEvents = (this.displayConfig?.alarmsEventsConfigs || []).filter(\n aOrE => aOrE.__active && !aOrE.__hidden\n );\n if (this.totalLegendItems > 5 || this.displayConfig?.dataPointLegendDisplay === 'dropdown') {\n this.selectableItems = this.buildSelectableItems();\n // Initialize selectedItems with the currently active items\n this.selectedItems = this.selectableItems.filter(item => {\n if (item.value.type === 'DATAPOINT') {\n return !!item.value.original.__active;\n } else {\n return item.value.original.__active && !item.value.original.__hidden;\n }\n });\n }\n\n this.widgetControls =\n (await this.dynamicComponentService.getById(defaultWidgetIds.DATAPOINTS_GRAPH_NEW)).data\n ?.widgetControls || {};\n }\n\n onGlobalContextChange(event: GlobalContextEvent) {\n const { context, diff } = event;\n const { dateTimeContext } = context;\n const { dateFrom, dateTo, interval } = dateTimeContext;\n\n const isRealtimeEnabled =\n context.refreshOption === REFRESH_OPTION.LIVE &&\n context.isAutoRefreshEnabled &&\n context.refreshInterval === 5000;\n\n if (this.displayConfig.displayMode !== GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD) {\n this.displayConfig = {\n ...this.displayConfig,\n ...structuredClone(context),\n dateFrom: new Date(dateFrom),\n dateTo: new Date(dateTo),\n interval\n };\n\n this.globalContextState = {\n ...this.displayConfig,\n realtime: isRealtimeEnabled,\n dateTimeContext: { ...this.displayConfig.dateTimeContext }\n };\n\n if (this.isSliderBeingDragged$.value === true) {\n this.isSliderBeingDragged$.next(false);\n return;\n }\n\n this.widgetTimeContextDateRangeService.updateInitialTimeRange(null);\n return;\n }\n\n if (this.displayConfig?.realtime !== isRealtimeEnabled) {\n // Sync dates to avoid jumps in the chart\n this.displayConfig = merge(this.displayConfig, {\n dateTimeContext: structuredClone(context),\n dateFrom: new Date(dateFrom),\n dateTo: new Date(dateTo),\n interval\n });\n\n // Update global context state when realtime state changes\n this.globalContextState = merge({}, this.globalContextState, this.displayConfig);\n\n this.displayConfig = {\n ...this.displayConfig,\n realtime: isRealtimeEnabled\n };\n\n this.globalContextState = { ...this.globalContextState, realtime: isRealtimeEnabled };\n }\n\n // Realtime is a special case, we need to block \"automatic\" emissions from the global context\n // GC in auto mode emits every 5 seconds. We only want to react to user changes.\n if (\n isRealtimeEnabled &&\n diff?.dateTimeContext &&\n Object.keys(diff).length === 1 &&\n Object.keys(diff.dateTimeContext).length === 2\n ) {\n // Sync dates to avoid jumps in the chart\n this.displayConfig = merge(this.displayConfig, {\n dateTimeContext: structuredClone(context),\n dateFrom: new Date(dateFrom),\n dateTo: new Date(dateTo),\n interval\n });\n\n this.globalContextState = merge({}, this.globalContextState, this.displayConfig);\n\n return;\n }\n\n this.displayConfig = {\n ...this.displayConfig,\n ...structuredClone(context),\n dateFrom: new Date(dateFrom),\n dateTo: new Date(dateTo),\n interval\n };\n\n this.globalContextState = {\n ...this.displayConfig,\n dateTimeContext: { ...this.displayConfig.dateTimeContext }\n };\n\n if (\n context.source === GLOBAL_CONTEXT_SOURCE.DASHBOARD &&\n this.displayConfig.displayMode === GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD\n ) {\n this.widgetTimeContextDateRangeService.updateInitialTimeRange(null);\n }\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n updateDashboardTimeContext(timeProps: DatapointsGraphWidgetTimeProps): void {\n const chartOptions = this.chartComponent?.echartsInstance?.getOption();\n const isEndZoomChanged = chartOptions?.dataZoom[0]?.end !== 100;\n\n if (this.displayConfig.displayMode === GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD) {\n const dateTimeContext = isEndZoomChanged\n ? {\n dateFrom: new Date(timeProps.dateFrom).toISOString(),\n dateTo: new Date(timeProps.dateTo).toISOString(),\n interval: timeProps.interval\n }\n : { dateFrom: new Date(timeProps.dateFrom).toISOString(), interval: timeProps.interval };\n\n window.dispatchEvent(\n new CustomEvent(GLOBAL_CONTEXT_EVENTS.UPDATE_GLOBAL_CONTEXT_HISTORY, {\n detail: {\n type: GLOBAL_CONTEXT_EVENTS.UPDATE_GLOBAL_CONTEXT_HISTORY,\n payload: {\n dateTimeContext,\n isAutoRefreshEnabled: false,\n aggregation: this.displayConfig.aggregation,\n source: GLOBAL_CONTEXT_SOURCE.WIDGET,\n eventSourceId: this.widgetInstanceId\n },\n timestamp: Date.now()\n }\n })\n );\n } else {\n this.isSliderBeingDragged$.next(true);\n const dateTimeContext = {\n dateFrom: new Date(timeProps.dateFrom),\n dateTo: new Date(timeProps.dateTo),\n interval: timeProps.interval\n };\n\n // Update displayConfig for internal state\n this.displayConfig = {\n ...this.displayConfig,\n dateTimeContext: structuredClone(dateTimeContext) as any,\n dateFrom: new Date(timeProps.dateFrom),\n dateTo: new Date(timeProps.dateTo),\n interval: timeProps.interval,\n isAutoRefreshEnabled: false\n };\n\n this.globalContextState = {\n ...this.displayConfig,\n dateTimeContext: { ...dateTimeContext } as any\n };\n\n // Trigger wrapper to update its internal state\n this.wrapper.pauseAutoRefresh();\n this.wrapper.updateDateTimeContext(dateTimeContext);\n }\n }\n\n buildSelectableItems(): SelectableItem<SelectableDatapoint>[] {\n const dpItems: SelectableItem<SelectableDatapoint>[] = (\n this.displayConfig.datapoints || []\n ).map(dp => {\n return {\n label: dp.label,\n value: {\n type: 'DATAPOINT',\n original: dp\n }\n };\n });\n\n const alarmItems: SelectableItem<SelectableDatapoint>[] = (\n this.displayConfig.alarmsEventsConfigs || []\n )\n .filter(ae => ae.timelineType === 'ALARM')\n .map(alarm => {\n return {\n label: alarm.label,\n value: {\n type: 'ALARM',\n original: alarm\n }\n };\n });\n\n const eventItems: SelectableItem<SelectableDatapoint>[] = (\n this.displayConfig.alarmsEventsConfigs || []\n )\n .filter(ae => ae.timelineType === 'EVENT')\n .map(event => {\n return {\n label: event.label,\n value: {\n type: 'EVENT',\n original: event\n }\n };\n });\n\n return [...dpItems, ...alarmItems, ...eventItems];\n }\n\n onItemSelected(item: SelectableItem<SelectableDatapoint>): void {\n if (item.value.type === 'DATAPOINT') {\n this.toggleChart(item.value.original as DatapointsGraphKPIDetails);\n } else {\n this.toggleAlarmEventType(item.value.original as AlarmOrEventExtended);\n }\n }\n\n onItemDeselected(item: SelectableItem<SelectableDatapoint>): void {\n if (item.value.type === 'DATAPOINT') {\n this.toggleChart(item.value.original as DatapointsGraphKPIDetails);\n } else {\n this.toggleAlarmEventType(item.value.original as AlarmOrEventExtended);\n }\n }\n\n toggleChart(datapoint: DatapointsGraphKPIDetails): void {\n if (\n this.displayConfig?.datapoints?.filter(dp => dp.__active).length === 1 &&\n datapoint.__active\n ) {\n // at least 1 datapoint should be active\n this.hasAtLeastOneDatapointActive = false;\n this.updateSelectedItems();\n return;\n }\n datapoint.__active = !datapoint.__active;\n this.hasAtLeastOneDatapointActive = true;\n\n this.updateSelectedItems();\n\n if (!this.loadedDatapoints.find(dp => dp.label === datapoint.label)) {\n this.loadedDatapoints.push(datapoint);\n this.displayConfig = { ...this.displayConfig };\n return;\n }\n this.chartComponent.toggleDatapointSeriesVisibility(datapoint);\n }\n\n handleDatapointOutOfSync(dpOutOfSync: DatapointsGraphKPIDetails): void {\n const key = (dp: KPIDetails) => dp.__target?.id + dp.fragment + dp.series;\n const dpMatch = this.displayConfig?.datapoints?.find(dp => key(dp) === key(dpOutOfSync));\n if (!dpMatch) {\n return;\n }\n this.datapointsOutOfSync.set(dpMatch, true);\n }\n\n toggleMarkedArea(alarm: AlarmDetailsExtended): void {\n this.enabledMarkedAreaAlarmType = alarm.filters.type;\n const params = {\n data: {\n itemType: alarm.filters.type\n }\n };\n this.chartComponent.onChartClick(params);\n }\n\n toggleAlarmEventType(alarmOrEvent: AlarmOrEventExtended): void {\n if (alarmOrEvent.timelineType === 'ALARM') {\n this.alarms = this.alarms.map(alarm => {\n if (alarm.filters.type === alarmOrEvent.filters.type) {\n alarm.__hidden = !alarm.__hidden;\n }\n return alarm;\n });\n } else {\n this.events = this.events.map(event => {\n if (event.filters.type === alarmOrEvent.filters.type) {\n event.__hidden = !event.__hidden;\n }\n return event;\n });\n }\n\n this.updateSelectedItems();\n\n if (!this.loadedAlarmsOrEvents.find(aOrE => aOrE.filters.type === alarmOrEvent.filters.type)) {\n this.loadedAlarmsOrEvents.push(alarmOrEvent);\n this.displayConfig.alarmsEventsConfigs.map(ae => {\n if (ae.filters.type === alarmOrEvent.filters.type) {\n ae.__active = !ae.__active;\n ae.__hidden = !alarmOrEvent.__hidden;\n }\n });\n this.updateSelectedItems();\n this.displayConfig = { ...this.displayConfig };\n return;\n }\n this.chartComponent.toggleAlarmEventSeriesVisibility(alarmOrEvent);\n }\n\n updateAlarmsAndEvents(alarmsEventsConfigs: AlarmOrEventExtended[]): void {\n this.alarms = alarmsEventsConfigs.filter(\n alarm => alarm.timelineType === 'ALARM'\n ) as AlarmDetailsExtended[];\n this.events = alarmsEventsConfigs.filter(\n event => event.timelineType === 'EVENT'\n ) as EventDetailsExtended[];\n if (this.alarms.length === 0 || !this.alarms.find(alarm => alarm.__active)) {\n this.hasAtLeastOneAlarmActive = false;\n }\n }\n\n filterSeverity(eventTarget: any): void {\n this.alarms = this.alarms.map(alarm => {\n if (!alarm.__severity) {\n alarm.__severity = [];\n }\n alarm.__severity = Object.keys(eventTarget.severityOptions).filter(\n (severity): severity is keyof SeveritySettings =>\n eventTarget.severityOptions[severity as keyof SeveritySettings]\n ) as SeverityType[];\n\n if (!alarm.__status) {\n alarm.__status = [];\n }\n const statuses = Object.keys(ALARM_STATUS_LABELS) as AlarmStatusType[];\n const filteredStatuses = eventTarget.showCleared\n ? statuses\n : statuses.filter(status => status !== 'CLEARED');\n alarm.__status = filteredStatuses;\n return alarm;\n });\n this.displayConfig = { ...this.displayConfig };\n }\n\n isLastActiveDatapoint(selectedItem: SelectableItem<SelectableDatapoint>): boolean {\n if (!selectedItem) {\n return false;\n }\n\n if (!selectedItem?.value || selectedItem.value.type !== 'DATAPOINT') {\n return false;\n }\n // Check if this is the last active datapoint\n return !this.hasAtLeastOneDatapointActive && selectedItem.value.original.__active;\n }\n\n private updateSelectedItems(): void {\n const filtered = this.selectableItems.filter(item => {\n if (item.value.type === 'DATAPOINT') {\n return !!item.value.original.__active;\n } else {\n return item.value.original.__active && !item.value.original.__hidden;\n }\n });\n this.selectedItems = [...filtered];\n this.cdr.detectChanges();\n }\n\n private assignContextFromContextDashboard(\n dpOrAlarmOrEvent: KPIDetails | AlarmOrEventExtended\n ): void {\n if (!this.dashboardContextComponent?.isDeviceTypeDashboard) {\n return;\n }\n const context = this.dashboardContextComponent?.context;\n if (context?.id) {\n const { name, id } = context;\n dpOrAlarmOrEvent.__target = { name, id };\n }\n }\n}\n","@if (widgetControls) {\n <c8y-global-context-widget-wrapper\n [widgetControls]=\"widgetControls\"\n [isLoading]=\"isLoading$ | async\"\n [config]=\"displayConfig\"\n (globalContextChange)=\"onGlobalContextChange($event)\"\n ></c8y-global-context-widget-wrapper>\n}\n<div\n class=\"p-l-16 p-r-16\"\n style=\"min-height: 34px\"\n>\n <div class=\"d-flex gap-16 a-i-center\">\n @if (hasAtLeastOneAlarmActive) {\n <c8y-alarms-filter\n class=\"d-contents form-group-sm min-width-0\"\n (onFilterApplied)=\"filterSeverity($event)\"\n ></c8y-alarms-filter>\n }\n @if (displayConfig?.datapoints.length > 0) {\n <div class=\"d-flex a-i-center min-width-0\">\n @if (\n displayConfig.dataPointLegendDisplay === 'dropdown' ||\n (displayConfig.dataPointLegendDisplay === 'auto' && totalLegendItems > 5)\n ) {\n <c8y-select\n class=\"min-width-0 c8y-select-v2--sm\"\n aria-label=\"Select datapoints, alarms or events\"\n [placeholder]=\"'Select datapoints, alarms or events' | translate\"\n [multi]=\"true\"\n [filterItems]=\"true\"\n [(ngModel)]=\"selectedItems\"\n (onSelect)=\"onItemSelected($event)\"\n (onDeselect)=\"onItemDeselected($event)\"\n >\n @for (item of selectableItems; track item.value) {\n <div\n class=\"d-flex a-i-center gap-4\"\n *c8ySelectItem=\"item.value; label: item.label\"\n >\n @if (\n !hasAtLeastOneDatapointActive &&\n item.value.type === 'DATAPOINT' &&\n item.value.original.__active\n ) {\n <i\n class=\"text-warning m-r-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"'At least 1 data point must be active.' | translate\"\n container=\"body\"\n data-cy=\"datapoint-warning-icon\"\n [adaptivePosition]=\"false\"\n ></i>\n }\n @if (item.value.type === 'DATAPOINT') {\n <span\n class=\"circle-icon-wrapper a-s-start circle-icon-wrapper--small\"\n [style.background-color]=\"item.value.original.color\"\n ></span>\n }\n @if (item.value.type === 'ALARM') {\n <span\n class=\"circle-icon-wrapper a-s-start circle-icon-wrapper--small\"\n [style.background-color]=\"item.value.original.color\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n }\n @if (item.value.type === 'EVENT') {\n <span\n class=\"circle-icon-wrapper a-s-start circle-icon-wrapper--small\"\n [ngStyle]=\"{ 'background-color': item.value.original.color }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"online1\"\n ></i>\n </span>\n }\n <span class=\"text-truncate d-col\">\n <small class=\"text-truncate\">{{ item.value.original.label }}</small>\n <span class=\"text-muted text-10\">{{ item.value.original.__target?.name }}</span>\n </span>\n </div>\n }\n <span\n class=\"tag tag--info chip\"\n title=\"{{ selectedItem.label }}\"\n *c8ySelectedItems=\"let selectedItem\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ selectedItem.label }}\"\n type=\"button\"\n (click)=\"\n $event.preventDefault(); $event.stopPropagation(); onItemDeselected(selectedItem)\n \"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n @if (isLastActiveDatapoint(selectedItem)) {\n <i\n class=\"text-warning a-s-start\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"'At least 1 data point must be active.' | translate\"\n container=\"body\"\n data-cy=\"datapoint-warning-icon\"\n [adaptivePosition]=\"false\"\n ></i>\n }\n @if (selectedItem.value.type === 'DATAPOINT') {\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small\"\n [style.background-color]=\"selectedItem.value?.original.color || ''\"\n ></span>\n }\n @if (selectedItem.value?.type === 'ALARM') {\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small\"\n [style.background-color]=\"selectedItem.value?.original.color || ''\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n }\n @if (selectedItem.value?.type === 'EVENT') {\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small\"\n [ngStyle]=\"{\n 'background-color': selectedItem.value?.original.color || ''\n }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"online1\"\n ></i>\n </span>\n }\n </span>\n </c8y-select>\n } @else {\n <div class=\"inner-scroll\">\n <div class=\"p-t-4 d-flex a-i-start gap-8\">\n @for (datapoint of displayConfig.datapoints; track datapoint) {\n @if (datapoint.retrievalError) {\n <i\n class=\"text-warning m-l-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"'Data point no longer exists.' | translate\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n ></i>\n } @else {\n <div\n class=\"c8y-datapoint-pill pill--sm flex-no-shrink\"\n title=\"{{ datapoint.label }} - {{ datapoint.__target.name }}\"\n [ngClass]=\"{ active: datapoint.__active }\"\n >\n @if (!hasAtLeastOneDatapointActive && datapoint.__active) {\n <i\n class=\"text-warning m-l-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"'At least 1 data point must be active.' | translate\"\n container=\"body\"\n data-cy=\"datapoint-warning-icon\"\n [adaptivePosition]=\"false\"\n ></i>\n }\n <button\n class=\"c8y-datapoint-pill__btn\"\n title=\"{{\n (datapoint.__active ? hideDatapointLabel : showDatapointLabel) | translate\n }} \"\n type=\"button\"\n data-cy=\"datapoint-toggle-visibility-btn\"\n (click)=\"toggleChart(datapoint)\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"datapoint.__active ? 'eye text-primary' : 'eye-slash text-muted'\"\n ></i>\n </button>\n <div class=\"c8y-datapoint-pill__label c8y-datapoint-pill__btn\">\n <i\n class=\"m-r-4 icon-14\"\n c8yIcon=\"circle\"\n [ngStyle]=\"{\n color: datapoint.color\n }\"\n ></i>\n <span\n class=\"text-truncate\"\n [ngClass]=\"{ 'text-muted': !datapoint.__active }\"\n >\n <span class=\"text-truncate text-bold\">\n {{ datapoint.label }}\n </span>\n <small class=\"text-muted text-10\">\n {{ datapoint.__target.name }}\n </small>\n </span>\n @if (datapointsOutOfSync.get(datapoint)) {\n <i\n class=\"text-warning m-l-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"\n 'Measurements received for this data point may be out of sync.'\n | translate\n \"\n container=\"body\"\n [adaptivePosition]=\"false\"\n ></i>\n }\n </div>\n </div>\n }\n }\n\n @for (alarm of alarms; track alarm) {\n <div\n class=\"c8y-alarm-pill pill--sm flex-no-shrink\"\n title=\"{{ alarm.filters.type }} \"\n >\n @if (displayConfig?.activeAlarmTypesOutOfRange?.includes(alarm.filters.type)) {\n <i\n class=\"text-warning m-l-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"\n 'Alarm of this type is currently active and outside of the selected time range'\n | translate\n \"\n container=\"body\"\n [adaptivePosition]=\"false\"\n ></i>\n }\n <button\n class=\"c8y-alarm-pill__btn\"\n title=\"{{ alarm.filters.type }} \"\n type=\"button\"\n (click)=\"toggleAlarmEventType(alarm)\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"\n alarm.__hidden || !alarm.__active\n ? 'eye-slash text-muted'\n : 'eye text-primary'\n \"\n ></i>\n </button>\n <button\n class=\"c8y-alarm-pill__label c8y-alarm-pill__btn\"\n (click)=\"toggleMarkedArea(alarm)\"\n [ngClass]=\"{\n active:\n !isMarkedAreaEnabled && alarm.filters.type === enabledMarkedAreaAlarmType\n }\"\n >\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small m-r-4\"\n [style.background-color]=\"alarm.color\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n <span\n class=\"text-truncate\"\n [ngClass]=\"{ 'text-muted': alarm.__hidden }\"\n >\n <span class=\"text-truncate text-bold\">\n {{ alarm.label || alarm.filters.type }}\n </span>\n <small class=\"text-muted text-10\">\n {{ alarm.__target.name }}\n </small>\n </span>\n </button>\n </div>\n }\n\n @for (event of events; track event) {\n <div\n class=\"c8y-event-pill pill--sm flex-no-shrink\"\n title=\"{{ event.filters.type }}\"\n >\n <button\n class=\"c8y-event-pill__btn\"\n title=\"{{ event.filters.type }} \"\n type=\"button\"\n (click)=\"toggleAlarmEventType(event)\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"\n event.__hidden || !event.__active\n ? 'eye-slash text-muted'\n : 'eye text-primary'\n \"\n ></i>\n </button>\n <div class=\"c8y-event-pill__label c8y-event-pill__btn\">\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small m-r-4\"\n [ngStyle]=\"{ 'background-color': event.color }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"online1\"\n ></i>\n </span>\n <span\n class=\"text-truncate text-bold\"\n [ngClass]=\"{ 'text-muted': event.__hidden }\"\n >\n <span class=\"text-truncate\">\n {{ event.label || event.filters.type }}\n </span>\n <small class=\"text-muted text-10\">\n {{ event.__target.name }}\n </small>\n </span>\n </div>\n </div>\n }\n </div>\n </div>\n <button\n class=\"btn-help btn-help--sm m-r-8\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"legendHelpTemplate\"\n placement=\"left\"\n triggers=\"focus\"\n container=\"body\"\n [adaptivePosition]=\"true\"\n ></button>\n }\n </div>\n }\n <button\n class=\"btn btn-default btn-sm flex-no-shrink m-l-auto\"\n [attr.aria-label]=\"'Save as image' | translate\"\n tooltip=\"{{ 'Save as image' | translate }}\"\n container=\"body\"\n type=\"button\"\n (click)=\"chartComponent.saveAsImage()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"icon-14\"\n c8yIcon=\"image-file-checked\"\n ></i>\n </button>\n </div>\n</div>\n\n@if (globalContextState !== null) {\n <c8y-charts\n #chart\n [config]=\"globalContextState\"\n [alerts]=\"alerts\"\n [chartViewContext]=\"chartViewContext\"\n (updateAlarmsAndEvents)=\"updateAlarmsAndEvents($event)\"\n (configChangeOnZoomOut)=\"updateDashboardTimeContext($event)\"\n (datapointOutOfSync)=\"handleDatapointOutOfSync($event)\"\n (finishLoading)=\"this.isLoading$.next($event)\"\n (isMarkedAreaEnabled)=\"isMarkedAreaEnabled = $event\"\n ></c8y-charts>\n}\n\n<ng-template #legendHelpTemplate>\n <div [innerHTML]=\"legendHelp\"></div>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4","CommonModule","i5","i6","i7","i8"],"mappings":"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"}
1
+ {"version":3,"file":"c8y-ngx-components-widgets-implementations-datapoints-graph.mjs","sources":["../../widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.ts","../../widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.html","../../widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.ts","../../widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.html","../../widgets/implementations/datapoints-graph/c8y-ngx-components-widgets-implementations-datapoints-graph.ts"],"sourcesContent":["import {\n Component,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n signal,\n SimpleChanges,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { FormBuilder, NgForm, Validators } from '@angular/forms';\nimport {\n CommonModule,\n CoreModule,\n DynamicComponentAlertAggregator,\n DynamicComponentService,\n FormsModule,\n GainsightService,\n OnBeforeSave,\n WidgetTimeContextDateRangeService\n} from '@c8y/ngx-components';\nimport {\n AlarmDetails,\n AlarmEventSelectorModule,\n EventDetails,\n SelectedDatapoint\n} from '@c8y/ngx-components/alarm-event-selector';\nimport {\n ContextDashboardComponent,\n WidgetConfigComponent,\n WidgetConfigService\n} from '@c8y/ngx-components/context-dashboard';\nimport {\n DatapointAttributesFormConfig,\n DatapointSelectorModalOptions,\n DatapointSelectorModule,\n KPIDetails\n} from '@c8y/ngx-components/datapoint-selector';\nimport {\n CHART_VIEW_CONTEXT,\n ChartAlarmsService,\n ChartEventsService,\n ChartHelpersService,\n ChartsComponent,\n DatapointsGraphKPIDetails,\n DatapointsGraphWidgetConfig,\n DatapointsGraphWidgetTimeProps,\n LEGEND_DISPLAY_OPTIONS,\n PRODUCT_EXPERIENCE_DATA_EXPLORER_AND_GRAPH\n} from '@c8y/ngx-components/echart';\nimport {\n GlobalContextWidgetWrapperComponent,\n WidgetControls\n} from '@c8y/ngx-components/global-context';\nimport { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { Subject, takeUntil } from 'rxjs';\nimport { Observable } from 'rxjs/internal/Observable';\n\n@Component({\n selector: 'c8y-datapoints-graph-widget-config',\n host: { class: 'd-contents' },\n templateUrl: './datapoints-graph-widget-config.component.html',\n standalone: true,\n imports: [\n CommonModule,\n CoreModule,\n FormsModule,\n TooltipModule,\n PopoverModule,\n ChartsComponent,\n DatapointSelectorModule,\n AlarmEventSelectorModule,\n GlobalContextWidgetWrapperComponent\n ],\n providers: [\n ChartEventsService,\n ChartAlarmsService,\n ChartHelpersService,\n WidgetTimeContextDateRangeService\n ]\n})\nexport class DatapointsGraphWidgetConfigComponent\n implements OnInit, OnChanges, OnBeforeSave, OnDestroy\n{\n private _config = signal<DatapointsGraphWidgetConfig>({} as DatapointsGraphWidgetConfig);\n private isFirstConfigSet = true;\n\n @Input() set config(value: DatapointsGraphWidgetConfig | undefined) {\n if (!value) return;\n\n if (this.isFirstConfigSet) {\n this._config.set({ ...value });\n this.isFirstConfigSet = false;\n } else {\n this._config.set({\n ...this._config(),\n dateFrom: value.dateFrom,\n dateTo: value.dateTo,\n interval: value.interval,\n refreshInterval: value.refreshInterval,\n isAutoRefreshEnabled: value.isAutoRefreshEnabled,\n aggregation: value.aggregation,\n realtime: value.realtime,\n displayMode: value.displayMode,\n refreshOption: value.refreshOption,\n dateTimeContext: value.dateTimeContext\n });\n }\n }\n\n get config(): DatapointsGraphWidgetConfig | undefined {\n return this._config();\n }\n\n @ViewChild('dataPointsGraphPreview')\n set previewMapSet(template: TemplateRef<any>) {\n if (template) {\n this.widgetConfigService.setPreview(template);\n return;\n }\n this.widgetConfigService.setPreview(null);\n }\n\n private readonly formBuilder = inject(FormBuilder);\n private readonly form = inject(NgForm);\n private readonly widgetConfigService = inject(WidgetConfigService);\n private readonly chartHelpersService = inject(ChartHelpersService);\n private readonly gainsightService = inject(GainsightService);\n\n alerts: DynamicComponentAlertAggregator | undefined;\n formGroup: ReturnType<DatapointsGraphWidgetConfigComponent['initForm']>;\n datapointSelectDefaultFormOptions: Partial<DatapointAttributesFormConfig> = {\n showRange: true,\n showChart: true\n };\n datapointSelectionConfig: Partial<DatapointSelectorModalOptions> = {};\n activeDatapointsExists = false;\n alarmsOrEventsHaveNoMatchingDps = false;\n widgetControls: WidgetControls;\n chartViewContext: CHART_VIEW_CONTEXT = CHART_VIEW_CONTEXT.WIDGET_CONFIG;\n legendDisplayOptions = LEGEND_DISPLAY_OPTIONS;\n private destroy$ = new Subject<void>();\n private isInitialized = false;\n\n constructor(\n @Optional() private widgetConfig: WidgetConfigComponent,\n @Optional() private dashboardContextComponent: ContextDashboardComponent,\n private dynamicComponentService: DynamicComponentService\n ) {\n this.formGroup = this.initForm();\n }\n\n async ngOnInit() {\n this.widgetControls =\n (await this.dynamicComponentService.getById(defaultWidgetIds.DATAPOINTS_GRAPH_NEW)).data\n ?.widgetControls || {};\n\n const currentConfig = this._config();\n currentConfig.datapoints?.forEach(dp => this.assignContextFromContextDashboard(dp));\n\n this.form.form.addControl('config', this.formGroup);\n\n const alarms =\n currentConfig.alarmsEventsConfigs?.filter(ae => ae.timelineType === 'ALARM') || [];\n const events =\n currentConfig.alarmsEventsConfigs?.filter(ae => ae.timelineType === 'EVENT') || [];\n this.formGroup.patchValue({ ...currentConfig, alarms, events }, { emitEvent: false });\n this.isInitialized = true;\n\n this.formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(formValue => {\n const { alarms, events, datapoints } = formValue;\n\n this._config.set({\n ...this._config(),\n datapoints: datapoints || [],\n dataPointLegendDisplay: formValue.dataPointLegendDisplay,\n alarmsEventsConfigs: [...(alarms || []), ...(events || [])],\n displayMarkedLine: formValue.displayMarkedLine,\n displayMarkedPoint: formValue.displayMarkedPoint,\n mergeMatchingDatapoints: formValue.mergeMatchingDatapoints,\n forceMergeDatapoints: formValue.forceMergeDatapoints,\n setYaxisStartToZero: formValue.setYaxisStartToZero,\n smoothLines: formValue.smoothLines,\n showLabelAndUnit: formValue.showLabelAndUnit,\n showSlider: formValue.showSlider,\n yAxisSplitLines: formValue.yAxisSplitLines,\n xAxisSplitLines: formValue.xAxisSplitLines,\n numberOfDecimalPlaces: formValue.numberOfDecimalPlaces,\n aggregatedDatapoint: formValue.aggregatedDatapoint\n });\n\n this.setActiveDatapointsExists();\n this.checkForMatchingDatapoints();\n });\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (!changes.config || changes.config.isFirstChange() || !this.isInitialized) return;\n\n this.setActiveDatapointsExists();\n this.checkForMatchingDatapoints();\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n onBeforeSave(\n config?: DatapointsGraphWidgetConfig\n ): boolean | Promise<boolean> | Observable<boolean> {\n if (!this.formGroup.valid || !config) return false;\n\n const snapshot = { ...this._config() };\n\n for (const key in snapshot) {\n if (snapshot.hasOwnProperty(key)) {\n try {\n config[key] = snapshot[key];\n } catch (e) {\n // do nothing\n }\n }\n }\n\n if (snapshot.alarmsEventsConfigs) {\n config.alarmsEventsConfigs = [...snapshot.alarmsEventsConfigs];\n }\n if (snapshot.datapoints) {\n config.datapoints = [...snapshot.datapoints];\n }\n\n this.widgetConfigService.updateConfig(snapshot, true);\n\n const configSummaryGS = this.chartHelpersService.getConfigSummaryForGainsight(config);\n this.gainsightService.triggerEvent(\n PRODUCT_EXPERIENCE_DATA_EXPLORER_AND_GRAPH.EVENTS.DATA_EXPLORER_AND_GRAPH,\n {\n component: PRODUCT_EXPERIENCE_DATA_EXPLORER_AND_GRAPH.COMPONENTS.DATA_EXPLORER_DETAILS,\n action: PRODUCT_EXPERIENCE_DATA_EXPLORER_AND_GRAPH.ACTIONS.DATA_GRAPH_WIDGET_CONFIG,\n ...configSummaryGS\n }\n );\n\n return true;\n }\n\n updateTimeRangeOnRealtime(\n timeRange: Pick<DatapointsGraphWidgetConfig, 'dateFrom' | 'dateTo'>\n ): void {\n const current = this._config();\n this._config.set({\n ...current,\n ...timeRange,\n interval: current.interval || 'hours'\n });\n }\n\n updateDashboardTimeContext(timeProps: DatapointsGraphWidgetTimeProps): void {\n const dateTimeContext = {\n dateFrom: new Date(timeProps.dateFrom).toISOString(),\n dateTo: new Date(timeProps.dateTo).toISOString(),\n interval: timeProps.interval\n };\n this._config.set({\n ...this._config(),\n dateTimeContext\n });\n }\n\n updateAggregatedSliderDatapoint(selectedDatapoint: SelectedDatapoint | null): void {\n const aggregatedDatapoint = this.chartHelpersService.findMatchingDatapoint(\n this._config().datapoints || [],\n selectedDatapoint\n ) as DatapointsGraphKPIDetails | undefined;\n\n this._config.set({\n ...this._config(),\n aggregatedDatapoint\n });\n }\n\n private assignContextFromContextDashboard(datapoint: KPIDetails) {\n if (!this.dashboardContextComponent?.isDeviceTypeDashboard) {\n return;\n }\n const context = this.widgetConfig?.context;\n if (context?.id) {\n const { name, id } = context;\n datapoint.__target = { name, id };\n this.datapointSelectionConfig.contextAsset = { id };\n }\n }\n\n private checkForMatchingDatapoints(): void {\n const config = this._config();\n const alarmsEventsConfigs = config.alarmsEventsConfigs || [];\n const datapoints = config.datapoints || [];\n\n const allMatch = alarmsEventsConfigs.every(ae =>\n datapoints.some(dp => dp.__target?.id === ae.__target?.id)\n );\n\n queueMicrotask(() => {\n this.alarmsOrEventsHaveNoMatchingDps = !allMatch;\n });\n }\n\n private initForm() {\n const initialState = this._config();\n\n const form = this.formBuilder.group({\n datapoints: [\n [] as DatapointsGraphKPIDetails[],\n [Validators.required, Validators.minLength(1)]\n ],\n dataPointLegendDisplay: ['auto', []],\n alarms: [[] as AlarmDetails[]],\n events: [[] as EventDetails[]],\n displayMarkedLine: [true, []],\n displayMarkedPoint: [true, []],\n mergeMatchingDatapoints: [true, []],\n forceMergeDatapoints: [false, []],\n setYaxisStartToZero: [false, []],\n smoothLines: [false, []],\n showLabelAndUnit: [true, []],\n displayAggregationSelection: [false, []],\n canDecoupleGlobalTimeContext: [false, []],\n showSlider: [true, [Validators.required]],\n yAxisSplitLines: [false, [Validators.required]],\n xAxisSplitLines: [false, [Validators.required]],\n numberOfDecimalPlaces: [2, [Validators.required, Validators.min(0), Validators.max(10)]],\n aggregatedDatapoint: [initialState?.aggregatedDatapoint || null]\n });\n return form;\n }\n\n private setActiveDatapointsExists() {\n const datapoints = this._config().datapoints || [];\n this.activeDatapointsExists = datapoints.filter(dp => dp.__active).length > 0;\n }\n}\n","<form [formGroup]=\"formGroup\">\n <c8y-datapoint-selection-list\n class=\"bg-component separator-bottom d-block\"\n name=\"datapoints\"\n [minActiveCount]=\"1\"\n [defaultFormOptions]=\"datapointSelectDefaultFormOptions\"\n [config]=\"datapointSelectionConfig\"\n formControlName=\"datapoints\"\n ></c8y-datapoint-selection-list>\n\n <c8y-alarm-event-selection-list\n class=\"bg-component separator-bottom d-block\"\n name=\"alarms\"\n formControlName=\"alarms\"\n [timelineType]=\"'ALARM'\"\n [datapoints]=\"config?.datapoints\"\n ></c8y-alarm-event-selection-list>\n\n <c8y-alarm-event-selection-list\n class=\"bg-inherit\"\n name=\"events\"\n formControlName=\"events\"\n [timelineType]=\"'EVENT'\"\n [datapoints]=\"config?.datapoints\"\n ></c8y-alarm-event-selection-list>\n\n <div class=\"form-group form-group-sm\">\n <label\n [title]=\"'Number of decimal places' | translate\"\n translate\n >\n Number of decimal places\n </label>\n <input\n class=\"form-control\"\n name=\"numberOfDecimalPlaces\"\n type=\"number\"\n formControlName=\"numberOfDecimalPlaces\"\n [placeholder]=\"'e.g. {{ example }}' | translate: { example: 1 }\"\n />\n <c8y-messages\n [show]=\"\n formGroup.controls?.numberOfDecimalPlaces?.touched &&\n formGroup?.controls?.numberOfDecimalPlaces?.errors\n \"\n ></c8y-messages>\n </div>\n <c8y-form-group class=\"form-group-sm\">\n <label>\n {{ 'Data point legend display' | translate }}\n </label>\n <div\n class=\"c8y-select-wrapper\"\n [formGroup]=\"formGroup\"\n >\n <select\n class=\"form-control\"\n [title]=\"'Data point legend display' | translate\"\n id=\"dataPointLegendDisplay\"\n formControlName=\"dataPointLegendDisplay\"\n >\n @for (option of legendDisplayOptions; track option) {\n <option [ngValue]=\"option.value\">\n {{ option.label | translate }}\n </option>\n }\n </select>\n </div>\n </c8y-form-group>\n</form>\n\n<form\n class=\"d-block p-t-8\"\n [formGroup]=\"formGroup\"\n>\n <label>{{ 'Display options' | translate }}</label>\n <fieldset class=\"c8y-fieldset m-b-24 m-t-0\">\n <legend>{{ 'Axis' | translate }}</legend>\n <c8y-form-group class=\"p-b-16 m-b-0 p-t-8 form-group-sm\">\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Y-axis helper lines' | translate\"\n >\n <input\n name=\"yAxisSplitLines\"\n type=\"checkbox\"\n formControlName=\"yAxisSplitLines\"\n />\n <span></span>\n <span translate>Y-axis helper lines</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'X-axis helper lines' | translate\"\n >\n <input\n name=\"xAxisSplitLines\"\n type=\"checkbox\"\n formControlName=\"xAxisSplitLines\"\n />\n <span></span>\n <span translate>X-axis helper lines</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Merge matching data points into single axis' | translate\"\n >\n <input\n name=\"mergeMatchingDatapoints\"\n type=\"checkbox\"\n formControlName=\"mergeMatchingDatapoints\"\n />\n <span></span>\n <span translate>Merge matching data points into single axis</span>\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"\n 'Data points with the same min and max values will be merged into a single axis. The values must be defined in the data point configuration.'\n | translate\n \"\n [popover]=\"\n 'Data points with the same min and max values will be merged into a single axis. The values must be defined in the data point configuration.'\n | translate\n \"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n ></button>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Force merge all data points into single axis' | translate\"\n >\n <input\n name=\"forceMergeDatapoints\"\n type=\"checkbox\"\n formControlName=\"forceMergeDatapoints\"\n />\n <span></span>\n <span translate>Force merge all datapoints into a single axis</span>\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"\n 'All axes will be force merged to a single axis with the scale being set to the max and min value of all axes. It\\'s recommended to use this option for data points with similar values.'\n | translate\n \"\n [popover]=\"\n 'All axes will be force merged to a single axis with the scale being set to the max and min value of all axes. It\\'s recommended to use this option for data points with similar values.'\n | translate\n \"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n ></button>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Set Y-axis start to 0' | translate\"\n >\n <input\n name=\"setYaxisStartToZero\"\n type=\"checkbox\"\n formControlName=\"setYaxisStartToZero\"\n />\n <span></span>\n <span translate>Set Y-axis start to 0</span>\n <button\n class=\"btn-help\"\n [attr.aria-label]=\"\n 'Sets the Y-axis minimum to 0 for all data points with positive values. If any data point includes negative values, the axis may still extend below 0. Explicitly configured minimum and maximum values take precedence over this option.'\n | translate\n \"\n [popover]=\"\n 'Sets the Y-axis minimum to 0 for all data points with positive values. If any data point includes negative values, the axis may still extend below 0. Explicitly configured minimum and maximum values take precedence over this option.'\n | translate\n \"\n triggers=\"focus\"\n container=\"body\"\n type=\"button\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n ></button>\n </label>\n </c8y-form-group>\n </fieldset>\n <fieldset class=\"c8y-fieldset m-b-24 m-t-0\">\n <legend>{{ 'Alarms & events' | translate }}</legend>\n <c8y-form-group class=\"p-b-16 m-b-0 p-t-8 form-group-sm\">\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show vertical line on every occurrence' | translate\"\n >\n <input\n name=\"displayMarkedLine\"\n type=\"checkbox\"\n formControlName=\"displayMarkedLine\"\n />\n <span></span>\n <span translate>Show vertical line on every occurrence</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show icon when triggered' | translate\"\n >\n <input\n name=\"displayMarkedPoint\"\n type=\"checkbox\"\n formControlName=\"displayMarkedPoint\"\n />\n <span></span>\n <span translate>Show icon when triggered</span>\n @if (alarmsOrEventsHaveNoMatchingDps) {\n <button\n class=\"btn-clean m-l-8\"\n [attr.aria-label]=\"\n 'Some alarms or events have no matching data points. No icons will be shown for them.'\n | translate\n \"\n [tooltip]=\"\n 'Some alarms or events have no matching data points. No icons will be shown for them.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-warning\"\n c8yIcon=\"exclamation-triangle\"\n ></i>\n </button>\n }\n </label>\n </c8y-form-group>\n </fieldset>\n <fieldset class=\"c8y-fieldset m-b-24 m-t-0\">\n <legend>{{ 'Chart' | translate }}</legend>\n <c8y-form-group class=\"p-b-16 m-b-0 p-t-8 form-group-sm\">\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show labels and units' | translate\"\n >\n <input\n name=\"showLabelAndUnit\"\n type=\"checkbox\"\n formControlName=\"showLabelAndUnit\"\n />\n <span></span>\n <span translate>Display labels and units on Y-axis</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show slider' | translate\"\n >\n <input\n name=\"showSlider\"\n type=\"checkbox\"\n formControlName=\"showSlider\"\n />\n <span></span>\n <span translate>Show slider</span>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Show smooth lines' | translate\"\n >\n <input\n name=\"smoothLines\"\n type=\"checkbox\"\n formControlName=\"smoothLines\"\n />\n <span></span>\n <span translate>Show smooth lines</span>\n </label>\n </c8y-form-group>\n </fieldset>\n</form>\n\n<ng-template #dataPointsGraphPreview>\n @if (widgetControls) {\n <c8y-global-context-widget-wrapper\n [config]=\"config\"\n [displayMode]=\"'preview'\"\n [widgetControls]=\"widgetControls\"\n ></c8y-global-context-widget-wrapper>\n }\n\n @if (activeDatapointsExists) {\n <c8y-charts\n class=\"d-block p-relative\"\n [config]=\"config\"\n [alerts]=\"alerts\"\n [chartViewContext]=\"chartViewContext\"\n (timeRangeChangeOnRealtime)=\"updateTimeRangeOnRealtime($event)\"\n (configChangeOnZoomOut)=\"updateDashboardTimeContext($event)\"\n (updateAggregatedSliderDatapoint)=\"updateAggregatedSliderDatapoint($event)\"\n ></c8y-charts>\n }\n\n @if (!activeDatapointsExists) {\n <c8y-ui-empty-state\n class=\"d-block m-t-24\"\n [icon]=\"'search'\"\n [title]=\"'No data points selected' | translate\"\n [subtitle]=\"'Select data point to render content' | translate\"\n data-cy=\"datapoints-graph-list--empty-state-no-data-point-selected\"\n >\n <p c8y-guide-docs>\n <small\n translate\n ngNonBindable\n >\n Find out more in the\n <a c8y-guide-href=\"/docs/cockpit/widgets-collection/#data-point-graph\">\n user documentation\n </a>\n .\n </small>\n </p>\n </c8y-ui-empty-state>\n }\n</ng-template>\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport { ChangeDetectorRef, Component, Input, OnDestroy, Optional, ViewChild } from '@angular/core';\nimport { ALARM_STATUS_LABELS, AlarmStatusType, SeveritySettings } from '@c8y/client';\nimport {\n AGGREGATION_ICONS,\n AGGREGATION_TEXTS,\n CoreModule,\n DynamicComponentAlertAggregator,\n DynamicComponentService,\n SelectableItem,\n SelectComponent,\n SelectItemDirective,\n SelectedItemsDirective,\n WidgetTimeContextDateRangeService\n} from '@c8y/ngx-components';\nimport { AlarmsModule } from '@c8y/ngx-components/alarms';\nimport { ContextDashboardComponent } from '@c8y/ngx-components/context-dashboard';\nimport type { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport {\n AlarmDetailsExtended,\n AlarmOrEventExtended,\n CHART_VIEW_CONTEXT,\n ChartAlarmsService,\n ChartEventsService,\n ChartsComponent,\n DatapointsGraphKPIDetails,\n DatapointsGraphWidgetConfig,\n DatapointsGraphWidgetTimeProps,\n EventDetailsExtended,\n SelectableDatapoint,\n SeverityType\n} from '@c8y/ngx-components/echart';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n GLOBAL_CONTEXT_DISPLAY_MODE,\n GLOBAL_CONTEXT_EVENTS,\n GLOBAL_CONTEXT_SOURCE,\n GlobalContextEvent,\n GlobalContextState,\n GlobalContextWidgetWrapperComponent,\n REFRESH_OPTION,\n WidgetConfigMigrationService,\n WidgetControls\n} from '@c8y/ngx-components/global-context';\nimport { defaultWidgetIds } from '@c8y/ngx-components/widgets/definitions';\nimport { TranslateService } from '@ngx-translate/core';\nimport { cloneDeep, merge } from 'lodash-es';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { BehaviorSubject, Subject } from 'rxjs';\n\n@Component({\n selector: 'c8y-datapoints-graph-widget-view',\n templateUrl: './datapoints-graph-widget-view.component.html',\n standalone: true,\n imports: [\n A11yModule,\n CommonModule,\n ChartsComponent,\n CoreModule,\n TooltipModule,\n BsDropdownModule,\n PopoverModule,\n AlarmsModule,\n GlobalContextWidgetWrapperComponent,\n SelectComponent,\n SelectItemDirective,\n SelectedItemsDirective\n ],\n providers: [ChartEventsService, ChartAlarmsService, WidgetTimeContextDateRangeService]\n})\nexport class DatapointsGraphWidgetViewComponent implements OnDestroy {\n events: EventDetailsExtended[] = [];\n alarms: AlarmDetailsExtended[] = [];\n AGGREGATION_ICONS = AGGREGATION_ICONS;\n AGGREGATION_TEXTS = AGGREGATION_TEXTS;\n alerts: DynamicComponentAlertAggregator | undefined;\n datapointsOutOfSync = new Map<DatapointsGraphKPIDetails, boolean>();\n hasAtLeastOneDatapointActive = true;\n hasAtLeastOneAlarmActive = true;\n isMarkedAreaEnabled = false;\n loadedDatapoints: DatapointsGraphKPIDetails[] = [];\n loadedAlarmsOrEvents: AlarmOrEventExtended[] = [];\n isLoading$ = new BehaviorSubject<boolean>(false);\n isSliderBeingDragged$ = new BehaviorSubject<boolean>(false);\n /*\n * @description: The type of alarm that has marked area enabled.\n */\n enabledMarkedAreaAlarmType: string | undefined;\n chartViewContext = CHART_VIEW_CONTEXT.WIDGET_VIEW;\n\n currentConfig: Partial<GlobalContextState>;\n widgetControls: WidgetControls;\n globalContextState: Partial<DatapointsGraphWidgetConfig> & Partial<GlobalContextState> = null;\n /** Combined number of datapoints, alarms, and events */\n totalLegendItems = 0;\n /** Selectable items for the datapoints, alarms, events dropdown */\n selectableItems: SelectableItem<SelectableDatapoint>[] = [];\n /** Selected items from the dropdown */\n selectedItems: SelectableItem<SelectableDatapoint>[] = [];\n\n @Input() set config(value: DatapointsGraphWidgetConfig) {\n // Special case: sync the config with migrated values.\n // This is needed to reflect migrated states in the widget config.\n const migratedConfig = this.widgetConfigMigrationService.migrateWidgetConfig(value);\n const newConfig = merge(value, migratedConfig);\n this.displayConfig = cloneDeep(newConfig);\n }\n get config(): never {\n throw Error(\n '\"config\" property should not be referenced in view component to avoid mutating data.'\n );\n }\n @ViewChild(GlobalContextWidgetWrapperComponent) wrapper?: GlobalContextWidgetWrapperComponent;\n @ViewChild(ChartsComponent) chartComponent!: ChartsComponent;\n displayConfig: DatapointsGraphWidgetConfig | undefined;\n legendHelp = this.translate.instant(\n gettext(`<ul class=\"m-l-0 p-l-8 m-t-8 m-b-0\">\n <li>\n <b>Visibility:</b>\n use visibility icon to toggle datapoint, alarm or event visibility on chart. At least one datapoint is required to display chart.\n </li>\n <li>\n <b>Alarm details</b>\n Click alarm legend item to highlight area between alarm raised timestamp and alarm cleared timestamp.\n You can also click alarm markline on chart to highlight alarm and to pause tooltip. Click on highlighted area or legend item to cancel highlighting.\n </li>\n </ul>`)\n );\n readonly disableZoomInLabel = gettext('Disable zoom in');\n readonly enableZoomInLabel = gettext(\n 'Click to enable zoom, then click and drag on the desired area in the chart.'\n );\n readonly hideDatapointLabel = gettext('Hide data point');\n readonly showDatapointLabel = gettext('Show data point');\n private destroy$ = new Subject<void>();\n private readonly widgetInstanceId = crypto.randomUUID();\n\n constructor(\n private translate: TranslateService,\n @Optional() private dashboardContextComponent: ContextDashboardComponent,\n private dynamicComponentService: DynamicComponentService,\n private widgetConfigMigrationService: WidgetConfigMigrationService,\n private widgetTimeContextDateRangeService: WidgetTimeContextDateRangeService,\n private cdr: ChangeDetectorRef\n ) {}\n\n async ngOnInit() {\n this.displayConfig?.datapoints?.forEach(dp => this.assignContextFromContextDashboard(dp));\n this.displayConfig.isRealtimeEnabled = this.displayConfig.realtime;\n\n this.totalLegendItems =\n (this.displayConfig?.datapoints?.length || 0) +\n (this.displayConfig?.alarmsEventsConfigs?.length || 0);\n\n this.loadedDatapoints = (this.displayConfig?.datapoints || []).filter(dp => dp.__active);\n this.loadedAlarmsOrEvents = (this.displayConfig?.alarmsEventsConfigs || []).filter(\n aOrE => aOrE.__active && !aOrE.__hidden\n );\n if (this.totalLegendItems > 5 || this.displayConfig?.dataPointLegendDisplay === 'dropdown') {\n this.selectableItems = this.buildSelectableItems();\n // Initialize selectedItems with the currently active items\n this.selectedItems = this.selectableItems.filter(item => {\n if (item.value.type === 'DATAPOINT') {\n return !!item.value.original.__active;\n } else {\n return item.value.original.__active && !item.value.original.__hidden;\n }\n });\n }\n\n this.widgetControls =\n (await this.dynamicComponentService.getById(defaultWidgetIds.DATAPOINTS_GRAPH_NEW)).data\n ?.widgetControls || {};\n }\n\n onGlobalContextChange(event: GlobalContextEvent) {\n const { context, diff } = event;\n const { dateTimeContext } = context;\n const { dateFrom, dateTo, interval } = dateTimeContext;\n\n const isRealtimeEnabled =\n context.refreshOption === REFRESH_OPTION.LIVE &&\n context.isAutoRefreshEnabled &&\n context.refreshInterval === 5000;\n\n if (this.displayConfig.displayMode !== GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD) {\n this.displayConfig = {\n ...this.displayConfig,\n ...structuredClone(context),\n dateFrom: new Date(dateFrom),\n dateTo: new Date(dateTo),\n interval\n };\n\n this.globalContextState = {\n ...this.displayConfig,\n realtime: isRealtimeEnabled,\n dateTimeContext: { ...this.displayConfig.dateTimeContext }\n };\n\n if (this.isSliderBeingDragged$.value === true) {\n this.isSliderBeingDragged$.next(false);\n return;\n }\n\n this.widgetTimeContextDateRangeService.updateInitialTimeRange(null);\n return;\n }\n\n if (this.displayConfig?.realtime !== isRealtimeEnabled) {\n // Sync dates to avoid jumps in the chart\n this.displayConfig = merge(this.displayConfig, {\n dateTimeContext: structuredClone(context),\n dateFrom: new Date(dateFrom),\n dateTo: new Date(dateTo),\n interval\n });\n\n // Update global context state when realtime state changes\n this.globalContextState = merge({}, this.globalContextState, this.displayConfig);\n\n this.displayConfig = {\n ...this.displayConfig,\n realtime: isRealtimeEnabled\n };\n\n this.globalContextState = { ...this.globalContextState, realtime: isRealtimeEnabled };\n }\n\n // Realtime is a special case, we need to block \"automatic\" emissions from the global context\n // GC in auto mode emits every 5 seconds. We only want to react to user changes.\n if (\n isRealtimeEnabled &&\n diff?.dateTimeContext &&\n Object.keys(diff).length === 1 &&\n Object.keys(diff.dateTimeContext).length === 2\n ) {\n // Sync dates to avoid jumps in the chart\n this.displayConfig = merge(this.displayConfig, {\n dateTimeContext: structuredClone(context),\n dateFrom: new Date(dateFrom),\n dateTo: new Date(dateTo),\n interval\n });\n\n this.globalContextState = merge({}, this.globalContextState, this.displayConfig);\n\n return;\n }\n\n this.displayConfig = {\n ...this.displayConfig,\n ...structuredClone(context),\n dateFrom: new Date(dateFrom),\n dateTo: new Date(dateTo),\n interval\n };\n\n this.globalContextState = {\n ...this.displayConfig,\n dateTimeContext: { ...this.displayConfig.dateTimeContext }\n };\n\n if (\n context.source === GLOBAL_CONTEXT_SOURCE.DASHBOARD &&\n this.displayConfig.displayMode === GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD\n ) {\n this.widgetTimeContextDateRangeService.updateInitialTimeRange(null);\n }\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n updateDashboardTimeContext(timeProps: DatapointsGraphWidgetTimeProps): void {\n const chartOptions = this.chartComponent?.echartsInstance?.getOption();\n const isEndZoomChanged = chartOptions?.dataZoom[0]?.end !== 100;\n\n if (this.displayConfig.displayMode === GLOBAL_CONTEXT_DISPLAY_MODE.DASHBOARD) {\n const dateTimeContext = isEndZoomChanged\n ? {\n dateFrom: new Date(timeProps.dateFrom).toISOString(),\n dateTo: new Date(timeProps.dateTo).toISOString(),\n interval: timeProps.interval\n }\n : { dateFrom: new Date(timeProps.dateFrom).toISOString(), interval: timeProps.interval };\n\n window.dispatchEvent(\n new CustomEvent(GLOBAL_CONTEXT_EVENTS.UPDATE_GLOBAL_CONTEXT_HISTORY, {\n detail: {\n type: GLOBAL_CONTEXT_EVENTS.UPDATE_GLOBAL_CONTEXT_HISTORY,\n payload: {\n dateTimeContext,\n isAutoRefreshEnabled: false,\n aggregation: this.displayConfig.aggregation,\n source: GLOBAL_CONTEXT_SOURCE.WIDGET,\n eventSourceId: this.widgetInstanceId\n },\n timestamp: Date.now()\n }\n })\n );\n } else {\n this.isSliderBeingDragged$.next(true);\n const dateTimeContext = {\n dateFrom: new Date(timeProps.dateFrom),\n dateTo: new Date(timeProps.dateTo),\n interval: timeProps.interval\n };\n\n // Update displayConfig for internal state\n this.displayConfig = {\n ...this.displayConfig,\n dateTimeContext: structuredClone(dateTimeContext) as any,\n dateFrom: new Date(timeProps.dateFrom),\n dateTo: new Date(timeProps.dateTo),\n interval: timeProps.interval,\n isAutoRefreshEnabled: false\n };\n\n this.globalContextState = {\n ...this.displayConfig,\n dateTimeContext: { ...dateTimeContext } as any\n };\n\n // Trigger wrapper to update its internal state\n this.wrapper.pauseAutoRefresh();\n this.wrapper.updateDateTimeContext(dateTimeContext);\n }\n }\n\n buildSelectableItems(): SelectableItem<SelectableDatapoint>[] {\n const dpItems: SelectableItem<SelectableDatapoint>[] = (\n this.displayConfig.datapoints || []\n ).map(dp => {\n return {\n label: dp.label,\n value: {\n type: 'DATAPOINT',\n original: dp\n }\n };\n });\n\n const alarmItems: SelectableItem<SelectableDatapoint>[] = (\n this.displayConfig.alarmsEventsConfigs || []\n )\n .filter(ae => ae.timelineType === 'ALARM')\n .map(alarm => {\n return {\n label: alarm.label,\n value: {\n type: 'ALARM',\n original: alarm\n }\n };\n });\n\n const eventItems: SelectableItem<SelectableDatapoint>[] = (\n this.displayConfig.alarmsEventsConfigs || []\n )\n .filter(ae => ae.timelineType === 'EVENT')\n .map(event => {\n return {\n label: event.label,\n value: {\n type: 'EVENT',\n original: event\n }\n };\n });\n\n return [...dpItems, ...alarmItems, ...eventItems];\n }\n\n onItemSelected(item: SelectableItem<SelectableDatapoint>): void {\n if (item.value.type === 'DATAPOINT') {\n this.toggleChart(item.value.original as DatapointsGraphKPIDetails);\n } else {\n this.toggleAlarmEventType(item.value.original as AlarmOrEventExtended);\n }\n }\n\n onItemDeselected(item: SelectableItem<SelectableDatapoint>): void {\n if (item.value.type === 'DATAPOINT') {\n this.toggleChart(item.value.original as DatapointsGraphKPIDetails);\n } else {\n this.toggleAlarmEventType(item.value.original as AlarmOrEventExtended);\n }\n }\n\n toggleChart(datapoint: DatapointsGraphKPIDetails): void {\n if (\n this.displayConfig?.datapoints?.filter(dp => dp.__active).length === 1 &&\n datapoint.__active\n ) {\n // at least 1 datapoint should be active\n this.hasAtLeastOneDatapointActive = false;\n this.updateSelectedItems();\n return;\n }\n datapoint.__active = !datapoint.__active;\n this.hasAtLeastOneDatapointActive = true;\n\n this.updateSelectedItems();\n\n if (!this.loadedDatapoints.find(dp => dp.label === datapoint.label)) {\n this.loadedDatapoints.push(datapoint);\n this.displayConfig = { ...this.displayConfig };\n return;\n }\n this.chartComponent.toggleDatapointSeriesVisibility(datapoint);\n }\n\n handleDatapointOutOfSync(dpOutOfSync: DatapointsGraphKPIDetails): void {\n const key = (dp: KPIDetails) => dp.__target?.id + dp.fragment + dp.series;\n const dpMatch = this.displayConfig?.datapoints?.find(dp => key(dp) === key(dpOutOfSync));\n if (!dpMatch) {\n return;\n }\n this.datapointsOutOfSync.set(dpMatch, true);\n }\n\n toggleMarkedArea(alarm: AlarmDetailsExtended): void {\n this.enabledMarkedAreaAlarmType = alarm.filters.type;\n const params = {\n data: {\n itemType: alarm.filters.type\n }\n };\n this.chartComponent.onChartClick(params);\n }\n\n toggleAlarmEventType(alarmOrEvent: AlarmOrEventExtended): void {\n if (alarmOrEvent.timelineType === 'ALARM') {\n this.alarms = this.alarms.map(alarm => {\n if (alarm.filters.type === alarmOrEvent.filters.type) {\n alarm.__hidden = !alarm.__hidden;\n }\n return alarm;\n });\n } else {\n this.events = this.events.map(event => {\n if (event.filters.type === alarmOrEvent.filters.type) {\n event.__hidden = !event.__hidden;\n }\n return event;\n });\n }\n\n this.updateSelectedItems();\n\n if (!this.loadedAlarmsOrEvents.find(aOrE => aOrE.filters.type === alarmOrEvent.filters.type)) {\n this.loadedAlarmsOrEvents.push(alarmOrEvent);\n this.displayConfig.alarmsEventsConfigs.map(ae => {\n if (ae.filters.type === alarmOrEvent.filters.type) {\n ae.__active = !ae.__active;\n ae.__hidden = !alarmOrEvent.__hidden;\n }\n });\n this.updateSelectedItems();\n this.displayConfig = { ...this.displayConfig };\n return;\n }\n this.chartComponent.toggleAlarmEventSeriesVisibility(alarmOrEvent);\n }\n\n updateAlarmsAndEvents(alarmsEventsConfigs: AlarmOrEventExtended[]): void {\n this.alarms = alarmsEventsConfigs.filter(\n alarm => alarm.timelineType === 'ALARM'\n ) as AlarmDetailsExtended[];\n this.events = alarmsEventsConfigs.filter(\n event => event.timelineType === 'EVENT'\n ) as EventDetailsExtended[];\n if (this.alarms.length === 0 || !this.alarms.find(alarm => alarm.__active)) {\n this.hasAtLeastOneAlarmActive = false;\n }\n }\n\n filterSeverity(eventTarget: any): void {\n this.alarms = this.alarms.map(alarm => {\n if (!alarm.__severity) {\n alarm.__severity = [];\n }\n alarm.__severity = Object.keys(eventTarget.severityOptions).filter(\n (severity): severity is keyof SeveritySettings =>\n eventTarget.severityOptions[severity as keyof SeveritySettings]\n ) as SeverityType[];\n\n if (!alarm.__status) {\n alarm.__status = [];\n }\n const statuses = Object.keys(ALARM_STATUS_LABELS) as AlarmStatusType[];\n const filteredStatuses = eventTarget.showCleared\n ? statuses\n : statuses.filter(status => status !== 'CLEARED');\n alarm.__status = filteredStatuses;\n return alarm;\n });\n this.displayConfig = { ...this.displayConfig };\n }\n\n isLastActiveDatapoint(selectedItem: SelectableItem<SelectableDatapoint>): boolean {\n if (!selectedItem) {\n return false;\n }\n\n if (!selectedItem?.value || selectedItem.value.type !== 'DATAPOINT') {\n return false;\n }\n // Check if this is the last active datapoint\n return !this.hasAtLeastOneDatapointActive && selectedItem.value.original.__active;\n }\n\n private updateSelectedItems(): void {\n const filtered = this.selectableItems.filter(item => {\n if (item.value.type === 'DATAPOINT') {\n return !!item.value.original.__active;\n } else {\n return item.value.original.__active && !item.value.original.__hidden;\n }\n });\n this.selectedItems = [...filtered];\n this.cdr.detectChanges();\n }\n\n private assignContextFromContextDashboard(\n dpOrAlarmOrEvent: KPIDetails | AlarmOrEventExtended\n ): void {\n if (!this.dashboardContextComponent?.isDeviceTypeDashboard) {\n return;\n }\n const context = this.dashboardContextComponent?.context;\n if (context?.id) {\n const { name, id } = context;\n dpOrAlarmOrEvent.__target = { name, id };\n }\n }\n}\n","@if (widgetControls) {\n <c8y-global-context-widget-wrapper\n [widgetControls]=\"widgetControls\"\n [isLoading]=\"isLoading$ | async\"\n [config]=\"displayConfig\"\n (globalContextChange)=\"onGlobalContextChange($event)\"\n ></c8y-global-context-widget-wrapper>\n}\n<div\n class=\"p-l-16 p-r-16\"\n style=\"min-height: 34px\"\n>\n <div class=\"d-flex gap-16 a-i-center\">\n @if (hasAtLeastOneAlarmActive) {\n <c8y-alarms-filter\n class=\"d-contents form-group-sm min-width-0\"\n (onFilterApplied)=\"filterSeverity($event)\"\n ></c8y-alarms-filter>\n }\n @if (displayConfig?.datapoints.length > 0) {\n <div class=\"d-flex a-i-center min-width-0\">\n @if (\n displayConfig.dataPointLegendDisplay === 'dropdown' ||\n (displayConfig.dataPointLegendDisplay === 'auto' && totalLegendItems > 5)\n ) {\n <c8y-select\n class=\"min-width-0 c8y-select-v2--sm\"\n aria-label=\"Select datapoints, alarms or events\"\n [placeholder]=\"'Select datapoints, alarms or events' | translate\"\n [multi]=\"true\"\n [filterItems]=\"true\"\n [(ngModel)]=\"selectedItems\"\n (onSelect)=\"onItemSelected($event)\"\n (onDeselect)=\"onItemDeselected($event)\"\n >\n @for (item of selectableItems; track item.value) {\n <div\n class=\"d-flex a-i-center gap-4\"\n *c8ySelectItem=\"item.value; label: item.label\"\n >\n @if (\n !hasAtLeastOneDatapointActive &&\n item.value.type === 'DATAPOINT' &&\n item.value.original.__active\n ) {\n <i\n class=\"text-warning m-r-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"'At least 1 data point must be active.' | translate\"\n container=\"body\"\n data-cy=\"datapoint-warning-icon\"\n [adaptivePosition]=\"false\"\n ></i>\n }\n @if (item.value.type === 'DATAPOINT') {\n <span\n class=\"circle-icon-wrapper a-s-start circle-icon-wrapper--small\"\n [style.background-color]=\"item.value.original.color\"\n ></span>\n }\n @if (item.value.type === 'ALARM') {\n <span\n class=\"circle-icon-wrapper a-s-start circle-icon-wrapper--small\"\n [style.background-color]=\"item.value.original.color\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n }\n @if (item.value.type === 'EVENT') {\n <span\n class=\"circle-icon-wrapper a-s-start circle-icon-wrapper--small\"\n [ngStyle]=\"{ 'background-color': item.value.original.color }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"online1\"\n ></i>\n </span>\n }\n <span class=\"text-truncate d-col\">\n <small class=\"text-truncate\">{{ item.value.original.label }}</small>\n <span class=\"text-muted text-10\">{{ item.value.original.__target?.name }}</span>\n </span>\n </div>\n }\n <span\n class=\"tag tag--info chip\"\n title=\"{{ selectedItem.label }}\"\n *c8ySelectedItems=\"let selectedItem\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ selectedItem.label }}\"\n type=\"button\"\n (click)=\"\n $event.preventDefault(); $event.stopPropagation(); onItemDeselected(selectedItem)\n \"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n @if (isLastActiveDatapoint(selectedItem)) {\n <i\n class=\"text-warning a-s-start\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"'At least 1 data point must be active.' | translate\"\n container=\"body\"\n data-cy=\"datapoint-warning-icon\"\n [adaptivePosition]=\"false\"\n ></i>\n }\n @if (selectedItem.value.type === 'DATAPOINT') {\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small\"\n [style.background-color]=\"selectedItem.value?.original.color || ''\"\n ></span>\n }\n @if (selectedItem.value?.type === 'ALARM') {\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small\"\n [style.background-color]=\"selectedItem.value?.original.color || ''\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n }\n @if (selectedItem.value?.type === 'EVENT') {\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small\"\n [ngStyle]=\"{\n 'background-color': selectedItem.value?.original.color || ''\n }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"online1\"\n ></i>\n </span>\n }\n </span>\n </c8y-select>\n } @else {\n <div class=\"inner-scroll\">\n <div class=\"p-t-4 d-flex a-i-start gap-8\">\n @for (datapoint of displayConfig.datapoints; track datapoint) {\n @if (datapoint.retrievalError) {\n <i\n class=\"text-warning m-l-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"'Data point no longer exists.' | translate\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n ></i>\n } @else {\n <div\n class=\"c8y-datapoint-pill pill--sm flex-no-shrink\"\n title=\"{{ datapoint.label }} - {{ datapoint.__target.name }}\"\n [ngClass]=\"{ active: datapoint.__active }\"\n >\n @if (!hasAtLeastOneDatapointActive && datapoint.__active) {\n <i\n class=\"text-warning m-l-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"'At least 1 data point must be active.' | translate\"\n container=\"body\"\n data-cy=\"datapoint-warning-icon\"\n [adaptivePosition]=\"false\"\n ></i>\n }\n <button\n class=\"c8y-datapoint-pill__btn\"\n title=\"{{\n (datapoint.__active ? hideDatapointLabel : showDatapointLabel) | translate\n }} \"\n type=\"button\"\n data-cy=\"datapoint-toggle-visibility-btn\"\n (click)=\"toggleChart(datapoint)\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"datapoint.__active ? 'eye text-primary' : 'eye-slash text-muted'\"\n ></i>\n </button>\n <div class=\"c8y-datapoint-pill__label c8y-datapoint-pill__btn\">\n <i\n class=\"m-r-4 icon-14\"\n c8yIcon=\"circle\"\n [ngStyle]=\"{\n color: datapoint.color\n }\"\n ></i>\n <span\n class=\"text-truncate\"\n [ngClass]=\"{ 'text-muted': !datapoint.__active }\"\n >\n <span class=\"text-truncate text-bold\">\n {{ datapoint.label }}\n </span>\n <small class=\"text-muted text-10\">\n {{ datapoint.__target.name }}\n </small>\n </span>\n @if (datapointsOutOfSync.get(datapoint)) {\n <i\n class=\"text-warning m-l-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"\n 'Measurements received for this data point may be out of sync.'\n | translate\n \"\n container=\"body\"\n [adaptivePosition]=\"false\"\n ></i>\n }\n </div>\n </div>\n }\n }\n\n @for (alarm of alarms; track alarm) {\n <div\n class=\"c8y-alarm-pill pill--sm flex-no-shrink\"\n title=\"{{ alarm.filters.type }} \"\n >\n @if (displayConfig?.activeAlarmTypesOutOfRange?.includes(alarm.filters.type)) {\n <i\n class=\"text-warning m-l-4\"\n c8yIcon=\"exclamation-triangle\"\n [tooltip]=\"\n 'Alarm of this type is currently active and outside of the selected time range'\n | translate\n \"\n container=\"body\"\n [adaptivePosition]=\"false\"\n ></i>\n }\n <button\n class=\"c8y-alarm-pill__btn\"\n title=\"{{ alarm.filters.type }} \"\n type=\"button\"\n (click)=\"toggleAlarmEventType(alarm)\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"\n alarm.__hidden || !alarm.__active\n ? 'eye-slash text-muted'\n : 'eye text-primary'\n \"\n ></i>\n </button>\n <button\n class=\"c8y-alarm-pill__label c8y-alarm-pill__btn\"\n (click)=\"toggleMarkedArea(alarm)\"\n [ngClass]=\"{\n active:\n !isMarkedAreaEnabled && alarm.filters.type === enabledMarkedAreaAlarmType\n }\"\n >\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small m-r-4\"\n [style.background-color]=\"alarm.color\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"bell\"\n ></i>\n </span>\n <span\n class=\"text-truncate\"\n [ngClass]=\"{ 'text-muted': alarm.__hidden }\"\n >\n <span class=\"text-truncate text-bold\">\n {{ alarm.label || alarm.filters.type }}\n </span>\n <small class=\"text-muted text-10\">\n {{ alarm.__target.name }}\n </small>\n </span>\n </button>\n </div>\n }\n\n @for (event of events; track event) {\n <div\n class=\"c8y-event-pill pill--sm flex-no-shrink\"\n title=\"{{ event.filters.type }}\"\n >\n <button\n class=\"c8y-event-pill__btn\"\n title=\"{{ event.filters.type }} \"\n type=\"button\"\n (click)=\"toggleAlarmEventType(event)\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"\n event.__hidden || !event.__active\n ? 'eye-slash text-muted'\n : 'eye text-primary'\n \"\n ></i>\n </button>\n <div class=\"c8y-event-pill__label c8y-event-pill__btn\">\n <span\n class=\"circle-icon-wrapper circle-icon-wrapper--small m-r-4\"\n [ngStyle]=\"{ 'background-color': event.color }\"\n >\n <i\n class=\"stroked-icon\"\n c8yIcon=\"online1\"\n ></i>\n </span>\n <span\n class=\"text-truncate text-bold\"\n [ngClass]=\"{ 'text-muted': event.__hidden }\"\n >\n <span class=\"text-truncate\">\n {{ event.label || event.filters.type }}\n </span>\n <small class=\"text-muted text-10\">\n {{ event.__target.name }}\n </small>\n </span>\n </div>\n </div>\n }\n </div>\n </div>\n <button\n class=\"btn-help btn-help--sm m-r-8\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"legendHelpTemplate\"\n placement=\"left\"\n triggers=\"focus\"\n container=\"body\"\n [adaptivePosition]=\"true\"\n ></button>\n }\n </div>\n }\n <button\n class=\"btn btn-default btn-sm flex-no-shrink m-l-auto\"\n [attr.aria-label]=\"'Save as image' | translate\"\n tooltip=\"{{ 'Save as image' | translate }}\"\n container=\"body\"\n type=\"button\"\n (click)=\"chartComponent.saveAsImage()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"icon-14\"\n c8yIcon=\"image-file-checked\"\n ></i>\n </button>\n </div>\n</div>\n\n@if (globalContextState !== null) {\n <c8y-charts\n #chart\n [config]=\"globalContextState\"\n [alerts]=\"alerts\"\n [chartViewContext]=\"chartViewContext\"\n (updateAlarmsAndEvents)=\"updateAlarmsAndEvents($event)\"\n (configChangeOnZoomOut)=\"updateDashboardTimeContext($event)\"\n (datapointOutOfSync)=\"handleDatapointOutOfSync($event)\"\n (finishLoading)=\"this.isLoading$.next($event)\"\n (isMarkedAreaEnabled)=\"isMarkedAreaEnabled = $event\"\n ></c8y-charts>\n}\n\n<ng-template #legendHelpTemplate>\n <div [innerHTML]=\"legendHelp\"></div>\n</ng-template>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4","CommonModule","i5","i6","i7","i8"],"mappings":"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"}