@c8y/ngx-components 1022.34.0 → 1022.35.1
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.
- package/core/common/date.pipe.d.ts.map +1 -1
- package/datapoint-explorer/view/datapoint-explorer.component.d.ts +7 -3
- package/datapoint-explorer/view/datapoint-explorer.component.d.ts.map +1 -1
- package/echart/charts.component.d.ts +11 -2
- package/echart/charts.component.d.ts.map +1 -1
- package/echart/index.d.ts +1 -0
- package/echart/index.d.ts.map +1 -1
- package/echart/models/chart.model.d.ts +5 -0
- package/echart/models/chart.model.d.ts.map +1 -1
- package/echart/models/datapoints-graph-widget.model.d.ts +2 -0
- package/echart/models/datapoints-graph-widget.model.d.ts.map +1 -1
- package/echart/select-aggregated-datapoint/select-aggregated-datapoint.component.d.ts +18 -0
- package/echart/select-aggregated-datapoint/select-aggregated-datapoint.component.d.ts.map +1 -0
- package/echart/services/chart-helpers.service.d.ts +4 -0
- package/echart/services/chart-helpers.service.d.ts.map +1 -1
- package/echart/services/echarts-options.service.d.ts +2 -2
- package/echart/services/echarts-options.service.d.ts.map +1 -1
- package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs +2 -2
- package/fesm2022/c8y-ngx-components-alarm-event-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs +22 -12
- package/fesm2022/c8y-ngx-components-datapoint-explorer-view.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-echart-models.mjs +9 -2
- package/fesm2022/c8y-ngx-components-echart-models.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-echart.mjs +313 -132
- package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs +15 -7
- package/fesm2022/c8y-ngx-components-widgets-implementations-datapoints-graph.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +2 -0
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +33 -0
- package/locales/es.po +33 -0
- package/locales/fr.po +33 -0
- package/locales/ja_JP.po +33 -0
- package/locales/ko.po +33 -0
- package/locales/locales.pot +6 -0
- package/locales/nl.po +33 -0
- package/locales/pl.po +33 -0
- package/locales/pt_BR.po +33 -0
- package/locales/zh_CN.po +33 -0
- package/locales/zh_TW.po +33 -0
- package/package.json +1 -1
- package/widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.d.ts +4 -1
- package/widgets/implementations/datapoints-graph/datapoints-graph-config/datapoints-graph-widget-config.component.d.ts.map +1 -1
- package/widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.d.ts +2 -1
- package/widgets/implementations/datapoints-graph/datapoints-graph-view/datapoints-graph-widget-view.component.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 OnDestroy,\n OnInit,\n Optional,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { FormBuilder, NgForm, Validators } from '@angular/forms';\nimport { Observable } from 'rxjs/internal/Observable';\nimport {\n CommonModule,\n CoreModule,\n DynamicComponentAlertAggregator,\n FormsModule,\n GainsightService,\n gettext,\n OnBeforeSave,\n WidgetTimeContextDateRangeService\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport {\n DatapointAttributesFormConfig,\n DatapointSelectorModalOptions,\n DatapointSelectorModule,\n KPIDetails\n} from '@c8y/ngx-components/datapoint-selector';\nimport { omit } from 'lodash-es';\nimport { aggregationType } from '@c8y/client';\nimport {\n ContextDashboardComponent,\n WidgetConfigComponent,\n WidgetConfigService\n} from '@c8y/ngx-components/context-dashboard';\nimport {\n AlarmDetails,\n AlarmEventSelectorModule,\n EventDetails\n} from '@c8y/ngx-components/alarm-event-selector';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport {\n ChartAlarmsService,\n ChartEventsService,\n ChartHelpersService,\n ChartsComponent,\n DatapointsGraphKPIDetails,\n DatapointsGraphWidgetConfig,\n DatapointsGraphWidgetTimeProps,\n DATE_SELECTION_EXTENDED,\n PRODUCT_EXPERIENCE_DATA_EXPLORER_AND_GRAPH,\n TimeContextProps\n} from '@c8y/ngx-components/echart';\nimport { TimeContextComponent } from '@c8y/ngx-components/time-context';\nimport { Interval } from '@c8y/ngx-components/interval-picker';\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 TimeContextComponent\n ],\n providers: [ChartEventsService, ChartAlarmsService, ChartHelpersService]\n})\nexport class DatapointsGraphWidgetConfigComponent implements OnInit, OnBeforeSave, OnDestroy {\n @Input() config: DatapointsGraphWidgetConfig | undefined;\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 translate = inject(TranslateService);\n private readonly widgetTimeContextDateRangeService = inject(WidgetTimeContextDateRangeService);\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 DATE_SELECTION = DATE_SELECTION_EXTENDED;\n dateSelection: DATE_SELECTION_EXTENDED | undefined;\n dateSelectionHelp = this.translate.instant(\n gettext(`Choose how to select a date range, the available options are:\n <ul class=\"m-l-0 p-l-8 m-t-8 m-b-0\">\n <li>\n <b>Widget configuration:</b>\n restricts the date selection only to the widget configuration\n </li>\n <li>\n <b>Widget and widget configuration:</b>\n restricts the date selection to the widget view and widget configuration only\n </li>\n <li>\n <b>Dashboard time range:</b>\n restricts date selection to the global dashboard configuration only\n </li>\n </ul>`)\n );\n datapointSelectDefaultFormOptions: Partial<DatapointAttributesFormConfig> = {\n showRange: true,\n showChart: true\n };\n datapointSelectionConfig: Partial<DatapointSelectorModalOptions> = {};\n activeDatapointsExists = false;\n alarmsOrEventsHaveNoMatchingDps = false;\n timeProps: DatapointsGraphWidgetTimeProps | undefined;\n private destroy$ = new Subject<void>();\n\n constructor(\n @Optional() private widgetConfig: WidgetConfigComponent,\n @Optional() private dashboardContextComponent: ContextDashboardComponent\n ) {\n this.formGroup = this.initForm();\n }\n\n ngOnInit() {\n this.config?.datapoints?.forEach(dp => this.assignContextFromContextDashboard(dp));\n this.form.form.addControl('config', this.formGroup);\n this.formGroup.patchValue(this.config || {});\n this.formGroup.controls.alarms.setValue(\n this.config?.alarmsEventsConfigs?.filter(ae => ae.timelineType === 'ALARM') as AlarmDetails[]\n );\n this.formGroup.controls.events.setValue(\n this.config?.alarmsEventsConfigs?.filter(ae => ae.timelineType === 'EVENT') as EventDetails[]\n );\n\n this.initDateSelection();\n this.setActiveDatapointsExists();\n this.checkForMatchingDatapoints();\n this.formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(value => {\n this.config = {\n ...value,\n alarmsEventsConfigs: [\n ...(this.formGroup.value.alarms || []),\n ...(this.formGroup.value.events || [])\n ]\n };\n this.setActiveDatapointsExists();\n this.checkForMatchingDatapoints();\n });\n\n if (this.config?.widgetInstanceGlobalTimeContext) {\n this.updateDashboardTimeContext(this.widgetTimeContextDateRangeService.initialTimeRange());\n }\n\n if (this.config.dateFrom && this.config.dateTo) {\n this.timeProps = {\n dateFrom: new Date(this.config?.dateFrom),\n dateTo: new Date(this.config?.dateTo),\n interval: this.config?.interval,\n realtime: this.config?.realtime,\n aggregation: this.config?.realtime ? null : this.config?.aggregation\n };\n }\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) {\n Object.assign(config, omit(this.formGroup.value, ['alarms', 'events']), {\n alarmsEventsConfigs: [\n ...(this.formGroup.value.alarms || []),\n ...(this.formGroup.value.events || [])\n ]\n });\n\n const configSummaryGS = this.chartHelpersService.getConfigSummaryForGainsight(config);\n\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 return false;\n }\n\n timePropsChanged(timeProps: TimeContextProps): void {\n if (timeProps.realtime !== this.config.realtime) {\n this.formGroup.patchValue({ realtime: timeProps.realtime });\n }\n if (timeProps.realtime) {\n if (timeProps.currentDateContextInterval !== this.formGroup.value.interval) {\n this.formGroup.patchValue({ interval: timeProps.currentDateContextInterval });\n }\n return;\n }\n const patchValues = {\n dateFrom: new Date(timeProps.currentDateContextFromDate),\n dateTo: new Date(timeProps.currentDateContextToDate),\n interval: timeProps.currentDateContextInterval,\n ...(timeProps.aggregation && { aggregation: timeProps.aggregation }),\n ...(timeProps.realtime && { realtime: timeProps.realtime })\n };\n\n this.formGroup.patchValue(patchValues);\n }\n\n updateDashboardTimeContext(timeProps: DatapointsGraphWidgetTimeProps): void {\n const initialTimeRange = {\n dateFrom: timeProps.dateFrom,\n dateTo: timeProps.dateTo,\n interval: timeProps.interval || 'custom'\n };\n if (!this.widgetTimeContextDateRangeService.initialTimeRange()) {\n this.widgetTimeContextDateRangeService.updateInitialTimeRange(initialTimeRange);\n }\n this.formGroup.patchValue({ ...timeProps, ...initialTimeRange });\n }\n\n updateTimeRangeOnRealtime(\n timeRange: Pick<DatapointsGraphWidgetConfig, 'dateFrom' | 'dateTo'>\n ): void {\n this.formGroup.patchValue(timeRange, { emitEvent: false });\n }\n\n dateSelectionChange(dateSelection: DATE_SELECTION_EXTENDED): void {\n this.dateSelection = dateSelection;\n\n if (dateSelection === DATE_SELECTION_EXTENDED.CONFIG) {\n this.formGroup.controls.displayDateSelection.enable();\n this.formGroup.patchValue({ widgetInstanceGlobalTimeContext: false });\n return;\n }\n\n // displayDateSelection should be false and disabled when dateSelection is not CONFIG\n this.formGroup.controls.displayDateSelection.disable();\n this.formGroup.patchValue({\n widgetInstanceGlobalTimeContext: true,\n realtime: false,\n displayDateSelection: false\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 allMatch = this.config?.alarmsEventsConfigs?.every(ae =>\n this.formGroup.value.datapoints?.some(dp => dp.__target?.id === ae.__target?.id)\n );\n\n queueMicrotask(() => {\n if (allMatch) {\n this.alarmsOrEventsHaveNoMatchingDps = false;\n } else {\n this.alarmsOrEventsHaveNoMatchingDps = true;\n }\n });\n }\n\n private initForm() {\n const form = this.formBuilder.group({\n datapoints: [\n [] as DatapointsGraphKPIDetails[],\n [Validators.required, Validators.minLength(1)]\n ],\n alarms: [[] as AlarmDetails[]],\n events: [[] as EventDetails[]],\n displayMarkedLine: [true, []],\n displayMarkedPoint: [true, []],\n mergeMatchingDatapoints: [true, []],\n forceMergeDatapoints: [false, []],\n showLabelAndUnit: [true, []],\n displayDateSelection: [false, []],\n displayAggregationSelection: [false, []],\n widgetInstanceGlobalTimeContext: [false, []],\n canDecoupleGlobalTimeContext: [false, []],\n dateFrom: [null as unknown as Date, []],\n dateTo: [null as unknown as Date, []],\n interval: ['days' as Interval['id'], [Validators.required]],\n aggregation: [null as aggregationType | null, []],\n realtime: [false, [Validators.required]],\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 });\n return form;\n }\n\n private initDateSelection(): void {\n if (!this.config?.widgetInstanceGlobalTimeContext) {\n this.dateSelection = DATE_SELECTION_EXTENDED.CONFIG;\n return;\n }\n\n this.dateSelection = DATE_SELECTION_EXTENDED.DASHBOARD_CONTEXT;\n this.formGroup.controls.displayDateSelection.disable();\n }\n\n private setActiveDatapointsExists() {\n this.activeDatapointsExists =\n (this.config?.datapoints?.filter(dp => dp.__active)?.length || 0) > 0;\n }\n}\n","<div class=\"no-card-context\">\n <div class=\"conf-col\">\n <form [formGroup]=\"formGroup\">\n <c8y-datapoint-selection-list\n class=\"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=\"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 <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 </form>\n </div>\n\n <div class=\"p-t-32 separator-top\">\n <div class=\"d-col fit-h\">\n <div class=\"form-group p-t-8 form-group-sm d-flex a-i-center m-b-8\">\n <div class=\"d-flex a-i-center m-r-4\">\n <label\n class=\"m-b-0\"\n translate\n >\n Date selection\n </label>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"dateSelectionHelpTemplate\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n ></button>\n </div>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control input-sm\"\n [ngModel]=\"dateSelection\"\n (ngModelChange)=\"dateSelectionChange($event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n >\n <option\n title=\"{{ 'Dashboard time range' | translate }}\"\n [value]=\"DATE_SELECTION.DASHBOARD_CONTEXT\"\n >\n {{ 'Dashboard time range' | translate }}\n </option>\n <option\n title=\"{{ 'Widget configuration' | translate }}\"\n [value]=\"DATE_SELECTION.CONFIG\"\n >\n {{ 'Widget configuration' | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n <label\n class=\"text-12\"\n *ngIf=\"dateSelection === DATE_SELECTION.CONFIG\"\n >\n {{ 'Options' | translate }}\n </label>\n <c8y-time-context\n *ngIf=\"dateSelection === DATE_SELECTION.CONFIG\"\n [changedDateContext]=\"timeProps\"\n [controlsAvailable]=\"{\n realtime: true,\n timeRange: true,\n interval: true,\n aggregation: true\n }\"\n (contextChange)=\"timePropsChanged($event)\"\n ></c8y-time-context>\n\n <form\n class=\"d-block p-t-16\"\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-dot m-l-8\"\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 [tooltip]=\"\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 container=\"body\"\n type=\"button\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-info\"\n c8yIcon=\"info\"\n ></i>\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-dot m-l-8\"\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 [tooltip]=\"\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 container=\"body\"\n type=\"button\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-info\"\n c8yIcon=\"info\"\n ></i>\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 <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 *ngIf=\"alarmsOrEventsHaveNoMatchingDps\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-warning\"\n c8yIcon=\"exclamation-triangle\"\n ></i>\n </button>\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]=\"'Enable date selection in the widget view.' | translate\"\n >\n <input\n name=\"displayDateSelection\"\n type=\"checkbox\"\n formControlName=\"displayDateSelection\"\n />\n <span></span>\n <span translate>Date selection in the widget view.</span>\n <button\n class=\"btn-clean m-l-8\"\n [attr.aria-label]=\"\n 'Date selection in widget view is not possible when using dashboard time range.'\n | translate\n \"\n [tooltip]=\"\n 'Date selection in widget view is not possible when using dashboard time range.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n *ngIf=\"dateSelection === DATE_SELECTION.DASHBOARD_CONTEXT\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-info\"\n c8yIcon=\"info\"\n ></i>\n </button>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Aggregation selection' | translate\"\n >\n <input\n name=\"displayAggregationSelection\"\n type=\"checkbox\"\n formControlName=\"displayAggregationSelection\"\n />\n <span></span>\n <span translate>Aggregation selection</span>\n </label>\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 </c8y-form-group>\n </fieldset>\n </form>\n </div>\n </div>\n</div>\n\n<ng-template #dataPointsGraphPreview>\n <c8y-charts\n class=\"d-block p-relative\"\n *ngIf=\"activeDatapointsExists\"\n [config]=\"config\"\n [alerts]=\"alerts\"\n (timeRangeChangeOnRealtime)=\"updateTimeRangeOnRealtime($event)\"\n (configChangeOnZoomOut)=\"updateDashboardTimeContext($event)\"\n ></c8y-charts>\n\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 chart' | translate\"\n *ngIf=\"!activeDatapointsExists\"\n ></c8y-ui-empty-state>\n</ng-template>\n\n<ng-template #dateSelectionHelpTemplate>\n <div [innerHTML]=\"dateSelectionHelp\"></div>\n</ng-template>\n","import {\n Component,\n Input,\n OnChanges,\n OnDestroy,\n Optional,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport {\n AGGREGATION_ICONS,\n AGGREGATION_TEXTS,\n CoreModule,\n DynamicComponentAlertAggregator,\n gettext,\n WidgetTimeContextDateRangeService\n} from '@c8y/ngx-components';\nimport { cloneDeep } from 'lodash-es';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { takeUntil } from 'rxjs/operators';\nimport {\n ALARM_STATUS_LABELS,\n AlarmStatusType,\n SeveritySettings,\n aggregationType\n} from '@c8y/client';\nimport type { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ContextDashboardComponent } from '@c8y/ngx-components/context-dashboard';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport {\n ChartsComponent,\n DatapointsGraphKPIDetails,\n DatapointsGraphWidgetConfig,\n DatapointsGraphWidgetTimeProps,\n SeverityType,\n AlarmDetailsExtended,\n AlarmOrEventExtended,\n EventDetailsExtended,\n ChartEventsService,\n ChartAlarmsService,\n TimeContextProps\n} from '@c8y/ngx-components/echart';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { AlarmsModule } from '@c8y/ngx-components/alarms';\nimport { Subject } from 'rxjs';\nimport { TimeContextComponent } from '@c8y/ngx-components/time-context';\nimport { Interval } from '@c8y/ngx-components/interval-picker';\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 TimeContextComponent\n ],\n providers: [ChartEventsService, ChartAlarmsService]\n})\nexport class DatapointsGraphWidgetViewComponent implements OnChanges, 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 timeProps: DatapointsGraphWidgetTimeProps | undefined;\n hasAtLeastOneDatapointActive = true;\n hasAtLeastOneAlarmActive = true;\n timeControlsFormGroup: ReturnType<DatapointsGraphWidgetViewComponent['initForm']>;\n isMarkedAreaEnabled = false;\n loadedDatapoints: DatapointsGraphKPIDetails[] = [];\n loadedAlarmsOrEvents: AlarmOrEventExtended[] = [];\n /*\n * @description: The type of alarm that has marked area enabled.\n */\n enabledMarkedAreaAlarmType: string | undefined;\n\n @Input() set config(value: DatapointsGraphWidgetConfig) {\n this.displayConfig = cloneDeep(value);\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(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\n constructor(\n private formBuilder: FormBuilder,\n private translate: TranslateService,\n private widgetTimeContextDateRangeService: WidgetTimeContextDateRangeService,\n @Optional() private dashboardContextComponent: ContextDashboardComponent\n ) {\n this.timeControlsFormGroup = this.initForm();\n this.timeControlsFormGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(value => {\n this.displayConfig = { ...this.displayConfig, ...value };\n });\n }\n\n ngOnInit() {\n this.displayConfig?.datapoints?.forEach(dp => this.assignContextFromContextDashboard(dp));\n this.displayConfig?.alarmsEventsConfigs?.forEach(alarmOrEvent =>\n this.assignContextFromContextDashboard(alarmOrEvent)\n );\n if (this.displayConfig.dateFrom && this.displayConfig.dateTo) {\n this.timeProps = {\n dateFrom: new Date(this.displayConfig?.dateFrom),\n dateTo: new Date(this.displayConfig?.dateTo),\n interval: this.displayConfig?.interval,\n realtime: this.displayConfig?.realtime,\n aggregation: this.displayConfig?.realtime ? null : this.displayConfig?.aggregation\n };\n }\n this.loadedDatapoints = this.displayConfig?.datapoints?.filter(dp => dp.__active) || [];\n this.loadedAlarmsOrEvents =\n this.displayConfig?.alarmsEventsConfigs?.filter(alarmOrEvent => alarmOrEvent.__active) || [];\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n this.timeControlsFormGroup.patchValue(this.displayConfig || {});\n const config: DatapointsGraphWidgetConfig = changes['config']?.currentValue;\n if (config?.date && config?.widgetInstanceGlobalTimeContext && this.displayConfig?.date) {\n if (!this.displayConfig.sliderChange) {\n this.widgetTimeContextDateRangeService.updateInitialTimeRange(null);\n }\n const patchValues = {\n dateFrom: new Date(this.displayConfig?.date[0].toISOString()),\n dateTo: new Date(this.displayConfig?.date[1].toISOString()),\n interval: this.displayConfig?.interval,\n ...(this.displayConfig?.aggregation && { aggregation: this.displayConfig?.aggregation }),\n ...(this.displayConfig?.realtime && { realtime: this.displayConfig?.realtime })\n };\n this.timeControlsFormGroup.patchValue(patchValues);\n }\n }\n\n timePropsChanged(timeProps: TimeContextProps): void {\n if (timeProps.realtime && !this.displayConfig.sliderChange) {\n this.widgetTimeContextDateRangeService.updateInitialTimeRange(null);\n }\n\n if (\n timeProps.realtime !== this.displayConfig?.realtime ||\n (!timeProps.realtime && !this.displayConfig?.realtime)\n ) {\n const patchValues = {\n dateFrom: new Date(timeProps.currentDateContextFromDate),\n dateTo: new Date(timeProps.currentDateContextToDate),\n interval: timeProps.currentDateContextInterval,\n aggregation: timeProps.aggregation,\n realtime: timeProps.realtime\n };\n this.timeControlsFormGroup.patchValue(patchValues);\n }\n }\n\n updateDashboardTimeContext(timeProps: DatapointsGraphWidgetTimeProps): void {\n if (this.displayConfig?.widgetInstanceGlobalTimeContext) {\n this.widgetTimeContextDateRangeService.emitPropertyUpdate(timeProps);\n }\n this.timeControlsFormGroup.patchValue(timeProps);\n this.timeProps = { ...timeProps, realtime: false };\n }\n\n updateTimeRangeOnRealtime(\n timeRange: Pick<DatapointsGraphWidgetConfig, 'dateFrom' | 'dateTo'>\n ): void {\n this.timeControlsFormGroup.patchValue(timeRange, { emitEvent: false });\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 return;\n }\n datapoint.__active = !datapoint.__active;\n this.hasAtLeastOneDatapointActive = true;\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 if (!this.loadedAlarmsOrEvents.find(aOrE => aOrE.filters.type === alarmOrEvent.filters.type)) {\n this.loadedAlarmsOrEvents.push(alarmOrEvent);\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 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 private initForm() {\n const form = this.formBuilder.group({\n dateFrom: [undefined as unknown as Date, [Validators.required]],\n dateTo: [undefined as unknown as Date, [Validators.required]],\n interval: [\n this.displayConfig?.interval || ('hours' as Interval['id']),\n [Validators.required]\n ],\n aggregation: [null as aggregationType | null, []],\n realtime: [false, [Validators.required]],\n widgetInstanceGlobalTimeContext: [false, []]\n });\n form.patchValue(this.displayConfig || {});\n return form;\n }\n}\n","<div class=\"p-l-16 p-r-16\">\n <div class=\"d-flex gap-16 a-i-start\">\n <div\n class=\"btn-group btn-group-sm flex-no-shrink\"\n *ngIf=\"\n !displayConfig?.widgetInstanceGlobalTimeContext && displayConfig?.datapoints.length > 0 && displayConfig?.displayDateSelection || displayConfig?.displayAggregationSelection\n \"\n >\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Aggregation' | translate\"\n tooltip=\"{{\n (displayConfig?.aggregation\n ? AGGREGATION_TEXTS[displayConfig.aggregation]\n : AGGREGATION_TEXTS.undefined\n ) | translate\n }}\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n [delay]=\"500\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"\n displayConfig?.aggregation\n ? AGGREGATION_ICONS[displayConfig.aggregation]\n : AGGREGATION_ICONS.undefined\n \"\n ></i>\n </button>\n\n <c8y-time-context\n class=\"d-contents\"\n (contextChange)=\"timePropsChanged($event)\"\n [changedDateContext]=\"timeProps\"\n [controlsAvailable]=\"{\n realtime: true,\n timeRange: displayConfig?.displayDateSelection,\n interval: displayConfig?.displayDateSelection,\n aggregation: displayConfig?.displayAggregationSelection\n }\"\n ></c8y-time-context>\n </div>\n <c8y-alarms-filter\n class=\"d-contents form-group-sm\"\n *ngIf=\"hasAtLeastOneAlarmActive\"\n (filterApplied)=\"filterSeverity($event)\"\n ></c8y-alarms-filter>\n\n <div class=\"m-l-auto btn-group btn-group-sm flex-no-shrink\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Save as image' | translate\"\n tooltip=\"{{ 'Save as image' | translate }}\"\n container=\"body\"\n type=\"button\"\n (click)=\"chart.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 <div\n class=\"d-flex\"\n style=\"align-items: center\"\n *ngIf=\"displayConfig?.datapoints.length > 0\"\n >\n <button\n class=\"btn-help btn-help--sm m-r-8\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"legendHelpTemplate\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n ></button>\n <div class=\"inner-scroll\">\n <div class=\"flex-grow p-t-8 d-flex a-i-start gap-8 p-b-4\">\n <div\n class=\"c8y-datapoint-pill flex-no-shrink\"\n title=\"{{ datapoint.label }} - {{ datapoint.__target.name }}\"\n *ngFor=\"let datapoint of displayConfig.datapoints\"\n [ngClass]=\"{ active: datapoint.__active }\"\n >\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 *ngIf=\"!hasAtLeastOneDatapointActive && datapoint.__active\"\n [adaptivePosition]=\"false\"\n ></i>\n <button\n class=\"c8y-datapoint-pill__btn\"\n title=\"{{\n (datapoint.__active ? hideDatapointLabel : showDatapointLabel) | translate\n }} \"\n type=\"button\"\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\">\n {{ datapoint.label }}\n </span>\n <small class=\"text-muted text-10\">\n {{ datapoint.__target.name }}\n </small>\n </span>\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.' | translate\n \"\n container=\"body\"\n *ngIf=\"datapointsOutOfSync.get(datapoint)\"\n [adaptivePosition]=\"false\"\n ></i>\n </div>\n </div>\n <!-- Alarms -->\n\n <ng-container *ngFor=\"let alarm of alarms\">\n <div\n class=\"c8y-alarm-pill flex-no-shrink\"\n title=\"{{ alarm.filters.type }} \"\n *ngIf=\"alarm.__active\"\n >\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 *ngIf=\"displayConfig?.activeAlarmTypesOutOfRange?.includes(alarm.filters.type)\"\n [adaptivePosition]=\"false\"\n ></i>\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]=\"alarm.__hidden ? 'eye-slash text-muted' : 'eye text-primary'\"\n ></i>\n </button>\n <button\n class=\"c8y-alarm-pill__label c8y-alarm-pill__btn\"\n (click)=\"toggleMarkedArea(alarm)\"\n [ngClass]=\"{\n active: !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\">\n {{ 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 </ng-container>\n\n <!-- Events -->\n <ng-container *ngFor=\"let event of events\">\n <div\n class=\"c8y-event-pill flex-no-shrink\"\n title=\"{{ event.filters.type }}\"\n *ngIf=\"event.__active\"\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]=\"event.__hidden ? 'eye-slash text-muted' : 'eye text-primary'\"\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\"\n [ngClass]=\"{ 'text-muted': event.__hidden }\"\n >\n <span class=\"text-truncate\">\n {{ 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 </ng-container>\n </div>\n </div>\n </div>\n</div>\n\n<c8y-charts\n #chart\n [config]=\"displayConfig\"\n [alerts]=\"alerts\"\n (updateAlarmsAndEvents)=\"updateAlarmsAndEvents($event)\"\n (configChangeOnZoomOut)=\"updateDashboardTimeContext($event)\"\n (datapointOutOfSync)=\"handleDatapointOutOfSync($event)\"\n (timeRangeChangeOnRealtime)=\"updateTimeRangeOnRealtime($event)\"\n (isMarkedAreaEnabled)=\"isMarkedAreaEnabled = $event\"\n></c8y-charts>\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":["i3","i5","i1","i2","i4","CommonModule","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 OnDestroy,\n OnInit,\n Optional,\n TemplateRef,\n ViewChild\n} from '@angular/core';\nimport { FormBuilder, NgForm, Validators } from '@angular/forms';\nimport { Observable } from 'rxjs/internal/Observable';\nimport {\n CommonModule,\n CoreModule,\n DynamicComponentAlertAggregator,\n FormsModule,\n GainsightService,\n OnBeforeSave,\n WidgetTimeContextDateRangeService\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TranslateService } from '@ngx-translate/core';\nimport { takeUntil } from 'rxjs/operators';\nimport { Subject } from 'rxjs';\nimport {\n DatapointAttributesFormConfig,\n DatapointSelectorModalOptions,\n DatapointSelectorModule,\n KPIDetails\n} from '@c8y/ngx-components/datapoint-selector';\nimport { omit } from 'lodash-es';\nimport { aggregationType } from '@c8y/client';\nimport {\n ContextDashboardComponent,\n WidgetConfigComponent,\n WidgetConfigService\n} from '@c8y/ngx-components/context-dashboard';\nimport {\n AlarmDetails,\n AlarmEventSelectorModule,\n EventDetails,\n SelectedDatapoint\n} from '@c8y/ngx-components/alarm-event-selector';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport {\n CHART_VIEW_CONTEXT,\n ChartAlarmsService,\n ChartEventsService,\n ChartHelpersService,\n ChartsComponent,\n DatapointsGraphKPIDetails,\n DatapointsGraphWidgetConfig,\n DatapointsGraphWidgetTimeProps,\n DATE_SELECTION_EXTENDED,\n PRODUCT_EXPERIENCE_DATA_EXPLORER_AND_GRAPH,\n TimeContextProps\n} from '@c8y/ngx-components/echart';\nimport { TimeContextComponent } from '@c8y/ngx-components/time-context';\nimport { Interval } from '@c8y/ngx-components/interval-picker';\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 TimeContextComponent\n ],\n providers: [ChartEventsService, ChartAlarmsService, ChartHelpersService]\n})\nexport class DatapointsGraphWidgetConfigComponent implements OnInit, OnBeforeSave, OnDestroy {\n @Input() config: DatapointsGraphWidgetConfig | undefined;\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 translate = inject(TranslateService);\n private readonly widgetTimeContextDateRangeService = inject(WidgetTimeContextDateRangeService);\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 DATE_SELECTION = DATE_SELECTION_EXTENDED;\n dateSelection: DATE_SELECTION_EXTENDED | undefined;\n dateSelectionHelp = this.translate.instant(\n gettext(`Choose how to select a date range, the available options are:\n <ul class=\"m-l-0 p-l-8 m-t-8 m-b-0\">\n <li>\n <b>Widget configuration:</b>\n restricts the date selection only to the widget configuration\n </li>\n <li>\n <b>Widget and widget configuration:</b>\n restricts the date selection to the widget view and widget configuration only\n </li>\n <li>\n <b>Dashboard time range:</b>\n restricts date selection to the global dashboard configuration only\n </li>\n </ul>`)\n );\n datapointSelectDefaultFormOptions: Partial<DatapointAttributesFormConfig> = {\n showRange: true,\n showChart: true\n };\n datapointSelectionConfig: Partial<DatapointSelectorModalOptions> = {};\n activeDatapointsExists = false;\n alarmsOrEventsHaveNoMatchingDps = false;\n timeProps: DatapointsGraphWidgetTimeProps | undefined;\n chartViewContext: CHART_VIEW_CONTEXT = CHART_VIEW_CONTEXT.WIDGET_CONFIG;\n private destroy$ = new Subject<void>();\n\n constructor(\n @Optional() private widgetConfig: WidgetConfigComponent,\n @Optional() private dashboardContextComponent: ContextDashboardComponent\n ) {\n this.formGroup = this.initForm();\n }\n\n ngOnInit() {\n this.config?.datapoints?.forEach(dp => this.assignContextFromContextDashboard(dp));\n this.form.form.addControl('config', this.formGroup);\n this.formGroup.patchValue(this.config || {});\n this.formGroup.controls.alarms.setValue(\n this.config?.alarmsEventsConfigs?.filter(ae => ae.timelineType === 'ALARM') as AlarmDetails[]\n );\n this.formGroup.controls.events.setValue(\n this.config?.alarmsEventsConfigs?.filter(ae => ae.timelineType === 'EVENT') as EventDetails[]\n );\n\n this.initDateSelection();\n this.setActiveDatapointsExists();\n this.checkForMatchingDatapoints();\n this.formGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(value => {\n this.config = {\n ...value,\n alarmsEventsConfigs: [\n ...(this.formGroup.value.alarms || []),\n ...(this.formGroup.value.events || [])\n ]\n };\n this.setActiveDatapointsExists();\n this.checkForMatchingDatapoints();\n });\n\n if (this.config?.widgetInstanceGlobalTimeContext) {\n this.updateDashboardTimeContext(this.widgetTimeContextDateRangeService.initialTimeRange());\n }\n\n if (this.config.dateFrom && this.config.dateTo) {\n this.timeProps = {\n dateFrom: new Date(this.config?.dateFrom),\n dateTo: new Date(this.config?.dateTo),\n interval: this.config?.interval,\n realtime: this.config?.realtime,\n aggregation: this.config?.realtime ? null : this.config?.aggregation\n };\n }\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) {\n Object.assign(config, omit(this.formGroup.value, ['alarms', 'events']), {\n alarmsEventsConfigs: [\n ...(this.formGroup.value.alarms || []),\n ...(this.formGroup.value.events || [])\n ]\n });\n\n const configSummaryGS = this.chartHelpersService.getConfigSummaryForGainsight(config);\n\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 return false;\n }\n\n timePropsChanged(timeProps: TimeContextProps): void {\n if (timeProps.realtime !== this.config.realtime) {\n this.formGroup.patchValue({ realtime: timeProps.realtime });\n }\n if (timeProps.realtime) {\n if (timeProps.currentDateContextInterval !== this.formGroup.value.interval) {\n this.formGroup.patchValue({ interval: timeProps.currentDateContextInterval });\n }\n return;\n }\n const patchValues = {\n dateFrom: new Date(timeProps.currentDateContextFromDate),\n dateTo: new Date(timeProps.currentDateContextToDate),\n interval: timeProps.currentDateContextInterval,\n ...(timeProps.aggregation && { aggregation: timeProps.aggregation }),\n ...(timeProps.realtime && { realtime: timeProps.realtime })\n };\n\n this.formGroup.patchValue(patchValues);\n }\n\n updateDashboardTimeContext(timeProps: DatapointsGraphWidgetTimeProps): void {\n const initialTimeRange = {\n dateFrom: timeProps.dateFrom,\n dateTo: timeProps.dateTo,\n interval: timeProps.interval || 'custom'\n };\n if (!this.widgetTimeContextDateRangeService.initialTimeRange()) {\n this.widgetTimeContextDateRangeService.updateInitialTimeRange(initialTimeRange);\n }\n this.formGroup.patchValue({ ...timeProps, ...initialTimeRange });\n }\n\n updateTimeRangeOnRealtime(\n timeRange: Pick<DatapointsGraphWidgetConfig, 'dateFrom' | 'dateTo'>\n ): void {\n this.formGroup.patchValue(timeRange, { emitEvent: false });\n }\n\n dateSelectionChange(dateSelection: DATE_SELECTION_EXTENDED): void {\n this.dateSelection = dateSelection;\n\n if (dateSelection === DATE_SELECTION_EXTENDED.CONFIG) {\n this.formGroup.controls.displayDateSelection.enable();\n this.formGroup.patchValue({ widgetInstanceGlobalTimeContext: false });\n return;\n }\n\n // displayDateSelection should be false and disabled when dateSelection is not CONFIG\n this.formGroup.controls.displayDateSelection.disable();\n this.formGroup.patchValue({\n widgetInstanceGlobalTimeContext: true,\n realtime: false,\n displayDateSelection: false\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 this.formGroup.patchValue({ aggregatedDatapoint });\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 allMatch = this.config?.alarmsEventsConfigs?.every(ae =>\n this.formGroup.value.datapoints?.some(dp => dp.__target?.id === ae.__target?.id)\n );\n\n queueMicrotask(() => {\n if (allMatch) {\n this.alarmsOrEventsHaveNoMatchingDps = false;\n } else {\n this.alarmsOrEventsHaveNoMatchingDps = true;\n }\n });\n }\n\n private initForm() {\n const form = this.formBuilder.group({\n datapoints: [\n [] as DatapointsGraphKPIDetails[],\n [Validators.required, Validators.minLength(1)]\n ],\n alarms: [[] as AlarmDetails[]],\n events: [[] as EventDetails[]],\n displayMarkedLine: [true, []],\n displayMarkedPoint: [true, []],\n mergeMatchingDatapoints: [true, []],\n forceMergeDatapoints: [false, []],\n showLabelAndUnit: [true, []],\n displayDateSelection: [false, []],\n displayAggregationSelection: [false, []],\n widgetInstanceGlobalTimeContext: [false, []],\n canDecoupleGlobalTimeContext: [false, []],\n dateFrom: [null as unknown as Date, []],\n dateTo: [null as unknown as Date, []],\n interval: ['days' as Interval['id'], [Validators.required]],\n aggregation: [null as aggregationType | null, []],\n realtime: [false, [Validators.required]],\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: [this.config?.aggregatedDatapoint || null]\n });\n return form;\n }\n\n private initDateSelection(): void {\n if (!this.config?.widgetInstanceGlobalTimeContext) {\n this.dateSelection = DATE_SELECTION_EXTENDED.CONFIG;\n return;\n }\n\n this.dateSelection = DATE_SELECTION_EXTENDED.DASHBOARD_CONTEXT;\n this.formGroup.controls.displayDateSelection.disable();\n }\n\n private setActiveDatapointsExists() {\n this.activeDatapointsExists =\n (this.config?.datapoints?.filter(dp => dp.__active)?.length || 0) > 0;\n }\n}\n","<div class=\"no-card-context\">\n <div class=\"conf-col\">\n <form [formGroup]=\"formGroup\">\n <c8y-datapoint-selection-list\n class=\"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=\"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 <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 </form>\n </div>\n\n <div class=\"p-t-32 separator-top\">\n <div class=\"d-col fit-h\">\n <div class=\"form-group p-t-8 form-group-sm d-flex a-i-center m-b-8\">\n <div class=\"d-flex a-i-center m-r-4\">\n <label\n class=\"m-b-0\"\n translate\n >\n Date selection\n </label>\n <button\n class=\"btn-help btn-help--sm\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"dateSelectionHelpTemplate\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n ></button>\n </div>\n <div class=\"c8y-select-wrapper\">\n <select\n class=\"form-control input-sm\"\n [ngModel]=\"dateSelection\"\n (ngModelChange)=\"dateSelectionChange($event)\"\n [ngModelOptions]=\"{ standalone: true }\"\n >\n <option\n title=\"{{ 'Dashboard time range' | translate }}\"\n [value]=\"DATE_SELECTION.DASHBOARD_CONTEXT\"\n >\n {{ 'Dashboard time range' | translate }}\n </option>\n <option\n title=\"{{ 'Widget configuration' | translate }}\"\n [value]=\"DATE_SELECTION.CONFIG\"\n >\n {{ 'Widget configuration' | translate }}\n </option>\n </select>\n <span></span>\n </div>\n </div>\n <label\n class=\"text-12\"\n *ngIf=\"dateSelection === DATE_SELECTION.CONFIG\"\n >\n {{ 'Options' | translate }}\n </label>\n <c8y-time-context\n *ngIf=\"dateSelection === DATE_SELECTION.CONFIG\"\n [changedDateContext]=\"timeProps\"\n [controlsAvailable]=\"{\n realtime: true,\n timeRange: true,\n interval: true,\n aggregation: true\n }\"\n (contextChange)=\"timePropsChanged($event)\"\n ></c8y-time-context>\n\n <form\n class=\"d-block p-t-16\"\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-dot m-l-8\"\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 [tooltip]=\"\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 container=\"body\"\n type=\"button\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-info\"\n c8yIcon=\"info\"\n ></i>\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-dot m-l-8\"\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 [tooltip]=\"\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 container=\"body\"\n type=\"button\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-info\"\n c8yIcon=\"info\"\n ></i>\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 <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 *ngIf=\"alarmsOrEventsHaveNoMatchingDps\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-warning\"\n c8yIcon=\"exclamation-triangle\"\n ></i>\n </button>\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]=\"'Enable date selection in the widget view.' | translate\"\n >\n <input\n name=\"displayDateSelection\"\n type=\"checkbox\"\n formControlName=\"displayDateSelection\"\n />\n <span></span>\n <span translate>Date selection in the widget view.</span>\n <button\n class=\"btn-clean m-l-8\"\n [attr.aria-label]=\"\n 'Date selection in widget view is not possible when using dashboard time range.'\n | translate\n \"\n [tooltip]=\"\n 'Date selection in widget view is not possible when using dashboard time range.'\n | translate\n \"\n container=\"body\"\n type=\"button\"\n *ngIf=\"dateSelection === DATE_SELECTION.DASHBOARD_CONTEXT\"\n (click)=\"$event.stopPropagation()\"\n [adaptivePosition]=\"false\"\n >\n <i\n class=\"text-info\"\n c8yIcon=\"info\"\n ></i>\n </button>\n </label>\n <label\n class=\"c8y-checkbox\"\n [title]=\"'Aggregation selection' | translate\"\n >\n <input\n name=\"displayAggregationSelection\"\n type=\"checkbox\"\n formControlName=\"displayAggregationSelection\"\n />\n <span></span>\n <span translate>Aggregation selection</span>\n </label>\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 </c8y-form-group>\n </fieldset>\n </form>\n </div>\n </div>\n</div>\n\n<ng-template #dataPointsGraphPreview>\n <c8y-charts\n class=\"d-block p-relative\"\n *ngIf=\"activeDatapointsExists\"\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 <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 chart' | translate\"\n *ngIf=\"!activeDatapointsExists\"\n ></c8y-ui-empty-state>\n</ng-template>\n\n<ng-template #dateSelectionHelpTemplate>\n <div [innerHTML]=\"dateSelectionHelp\"></div>\n</ng-template>\n","import {\n Component,\n Input,\n OnChanges,\n OnDestroy,\n Optional,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport {\n AGGREGATION_ICONS,\n AGGREGATION_TEXTS,\n CoreModule,\n DynamicComponentAlertAggregator,\n WidgetTimeContextDateRangeService\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { cloneDeep } from 'lodash-es';\nimport { FormBuilder, Validators } from '@angular/forms';\nimport { takeUntil } from 'rxjs/operators';\nimport {\n ALARM_STATUS_LABELS,\n AlarmStatusType,\n SeveritySettings,\n aggregationType\n} from '@c8y/client';\nimport type { KPIDetails } from '@c8y/ngx-components/datapoint-selector';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ContextDashboardComponent } from '@c8y/ngx-components/context-dashboard';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { CommonModule } from '@angular/common';\nimport {\n ChartsComponent,\n DatapointsGraphKPIDetails,\n DatapointsGraphWidgetConfig,\n DatapointsGraphWidgetTimeProps,\n SeverityType,\n AlarmDetailsExtended,\n AlarmOrEventExtended,\n EventDetailsExtended,\n ChartEventsService,\n ChartAlarmsService,\n TimeContextProps,\n CHART_VIEW_CONTEXT\n} from '@c8y/ngx-components/echart';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { AlarmsModule } from '@c8y/ngx-components/alarms';\nimport { Subject } from 'rxjs';\nimport { TimeContextComponent } from '@c8y/ngx-components/time-context';\nimport { Interval } from '@c8y/ngx-components/interval-picker';\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 TimeContextComponent\n ],\n providers: [ChartEventsService, ChartAlarmsService]\n})\nexport class DatapointsGraphWidgetViewComponent implements OnChanges, 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 timeProps: DatapointsGraphWidgetTimeProps | undefined;\n hasAtLeastOneDatapointActive = true;\n hasAtLeastOneAlarmActive = true;\n timeControlsFormGroup: ReturnType<DatapointsGraphWidgetViewComponent['initForm']>;\n isMarkedAreaEnabled = false;\n loadedDatapoints: DatapointsGraphKPIDetails[] = [];\n loadedAlarmsOrEvents: AlarmOrEventExtended[] = [];\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 @Input() set config(value: DatapointsGraphWidgetConfig) {\n this.displayConfig = cloneDeep(value);\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(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\n constructor(\n private formBuilder: FormBuilder,\n private translate: TranslateService,\n private widgetTimeContextDateRangeService: WidgetTimeContextDateRangeService,\n @Optional() private dashboardContextComponent: ContextDashboardComponent\n ) {\n this.timeControlsFormGroup = this.initForm();\n this.timeControlsFormGroup.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(value => {\n this.displayConfig = { ...this.displayConfig, ...value };\n });\n }\n\n ngOnInit() {\n this.displayConfig?.datapoints?.forEach(dp => this.assignContextFromContextDashboard(dp));\n this.displayConfig?.alarmsEventsConfigs?.forEach(alarmOrEvent =>\n this.assignContextFromContextDashboard(alarmOrEvent)\n );\n if (this.displayConfig.dateFrom && this.displayConfig.dateTo) {\n this.timeProps = {\n dateFrom: new Date(this.displayConfig?.dateFrom),\n dateTo: new Date(this.displayConfig?.dateTo),\n interval: this.displayConfig?.interval,\n realtime: this.displayConfig?.realtime,\n aggregation: this.displayConfig?.realtime ? null : this.displayConfig?.aggregation\n };\n }\n this.loadedDatapoints = this.displayConfig?.datapoints?.filter(dp => dp.__active) || [];\n this.loadedAlarmsOrEvents =\n this.displayConfig?.alarmsEventsConfigs?.filter(alarmOrEvent => alarmOrEvent.__active) || [];\n }\n\n ngOnDestroy() {\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n this.timeControlsFormGroup.patchValue(this.displayConfig || {});\n const config: DatapointsGraphWidgetConfig = changes['config']?.currentValue;\n if (config?.date && config?.widgetInstanceGlobalTimeContext && this.displayConfig?.date) {\n if (!this.displayConfig.sliderChange) {\n this.widgetTimeContextDateRangeService.updateInitialTimeRange(null);\n }\n const patchValues = {\n dateFrom: new Date(this.displayConfig?.date[0].toISOString()),\n dateTo: new Date(this.displayConfig?.date[1].toISOString()),\n interval: this.displayConfig?.interval,\n ...(this.displayConfig?.aggregation && { aggregation: this.displayConfig?.aggregation }),\n ...(this.displayConfig?.realtime && { realtime: this.displayConfig?.realtime })\n };\n this.timeControlsFormGroup.patchValue(patchValues);\n }\n }\n\n timePropsChanged(timeProps: TimeContextProps): void {\n if (timeProps.realtime && !this.displayConfig.sliderChange) {\n this.widgetTimeContextDateRangeService.updateInitialTimeRange(null);\n }\n\n if (\n timeProps.realtime !== this.displayConfig?.realtime ||\n (!timeProps.realtime && !this.displayConfig?.realtime)\n ) {\n const patchValues = {\n dateFrom: new Date(timeProps.currentDateContextFromDate),\n dateTo: new Date(timeProps.currentDateContextToDate),\n interval: timeProps.currentDateContextInterval,\n aggregation: timeProps.aggregation,\n realtime: timeProps.realtime\n };\n this.timeControlsFormGroup.patchValue(patchValues);\n }\n }\n\n updateDashboardTimeContext(timeProps: DatapointsGraphWidgetTimeProps): void {\n if (this.displayConfig?.widgetInstanceGlobalTimeContext) {\n this.widgetTimeContextDateRangeService.emitPropertyUpdate(timeProps);\n }\n this.timeControlsFormGroup.patchValue(timeProps);\n this.timeProps = { ...timeProps, realtime: false };\n }\n\n updateTimeRangeOnRealtime(\n timeRange: Pick<DatapointsGraphWidgetConfig, 'dateFrom' | 'dateTo'>\n ): void {\n this.timeControlsFormGroup.patchValue(timeRange, { emitEvent: false });\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 return;\n }\n datapoint.__active = !datapoint.__active;\n this.hasAtLeastOneDatapointActive = true;\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 if (!this.loadedAlarmsOrEvents.find(aOrE => aOrE.filters.type === alarmOrEvent.filters.type)) {\n this.loadedAlarmsOrEvents.push(alarmOrEvent);\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 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 private initForm() {\n const form = this.formBuilder.group({\n dateFrom: [undefined as unknown as Date, [Validators.required]],\n dateTo: [undefined as unknown as Date, [Validators.required]],\n interval: [\n this.displayConfig?.interval || ('hours' as Interval['id']),\n [Validators.required]\n ],\n aggregation: [null as aggregationType | null, []],\n realtime: [false, [Validators.required]],\n widgetInstanceGlobalTimeContext: [false, []]\n });\n form.patchValue(this.displayConfig || {});\n return form;\n }\n}\n","<div class=\"p-l-16 p-r-16\">\n <div class=\"d-flex gap-16 a-i-start\">\n <div\n class=\"btn-group btn-group-sm flex-no-shrink\"\n *ngIf=\"\n !displayConfig?.widgetInstanceGlobalTimeContext && displayConfig?.datapoints.length > 0 && displayConfig?.displayDateSelection || displayConfig?.displayAggregationSelection\n \"\n >\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Aggregation' | translate\"\n tooltip=\"{{\n (displayConfig?.aggregation\n ? AGGREGATION_TEXTS[displayConfig.aggregation]\n : AGGREGATION_TEXTS.undefined\n ) | translate\n }}\"\n placement=\"top\"\n container=\"body\"\n type=\"button\"\n [adaptivePosition]=\"false\"\n [delay]=\"500\"\n >\n <i\n class=\"icon-14\"\n [c8yIcon]=\"\n displayConfig?.aggregation\n ? AGGREGATION_ICONS[displayConfig.aggregation]\n : AGGREGATION_ICONS.undefined\n \"\n ></i>\n </button>\n\n <c8y-time-context\n class=\"d-contents\"\n (contextChange)=\"timePropsChanged($event)\"\n [changedDateContext]=\"timeProps\"\n [controlsAvailable]=\"{\n realtime: true,\n timeRange: displayConfig?.displayDateSelection,\n interval: displayConfig?.displayDateSelection,\n aggregation: displayConfig?.displayAggregationSelection\n }\"\n ></c8y-time-context>\n </div>\n <c8y-alarms-filter\n class=\"d-contents form-group-sm\"\n *ngIf=\"hasAtLeastOneAlarmActive\"\n (filterApplied)=\"filterSeverity($event)\"\n ></c8y-alarms-filter>\n\n <div class=\"m-l-auto btn-group btn-group-sm flex-no-shrink\">\n <button\n class=\"btn btn-default\"\n [attr.aria-label]=\"'Save as image' | translate\"\n tooltip=\"{{ 'Save as image' | translate }}\"\n container=\"body\"\n type=\"button\"\n (click)=\"chart.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 <div\n class=\"d-flex\"\n style=\"align-items: center\"\n *ngIf=\"displayConfig?.datapoints.length > 0\"\n >\n <button\n class=\"btn-help btn-help--sm m-r-8\"\n [attr.aria-label]=\"'Help' | translate\"\n [popover]=\"legendHelpTemplate\"\n placement=\"bottom\"\n triggers=\"focus\"\n container=\"body\"\n [adaptivePosition]=\"false\"\n ></button>\n <div class=\"inner-scroll\">\n <div class=\"flex-grow p-t-8 d-flex a-i-start gap-8 p-b-4\">\n <div\n class=\"c8y-datapoint-pill flex-no-shrink\"\n title=\"{{ datapoint.label }} - {{ datapoint.__target.name }}\"\n *ngFor=\"let datapoint of displayConfig.datapoints\"\n [ngClass]=\"{ active: datapoint.__active }\"\n >\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 *ngIf=\"!hasAtLeastOneDatapointActive && datapoint.__active\"\n [adaptivePosition]=\"false\"\n ></i>\n <button\n class=\"c8y-datapoint-pill__btn\"\n title=\"{{\n (datapoint.__active ? hideDatapointLabel : showDatapointLabel) | translate\n }} \"\n type=\"button\"\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\">\n {{ datapoint.label }}\n </span>\n <small class=\"text-muted text-10\">\n {{ datapoint.__target.name }}\n </small>\n </span>\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.' | translate\n \"\n container=\"body\"\n *ngIf=\"datapointsOutOfSync.get(datapoint)\"\n [adaptivePosition]=\"false\"\n ></i>\n </div>\n </div>\n <!-- Alarms -->\n\n <ng-container *ngFor=\"let alarm of alarms\">\n <div\n class=\"c8y-alarm-pill flex-no-shrink\"\n title=\"{{ alarm.filters.type }} \"\n *ngIf=\"alarm.__active\"\n >\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 *ngIf=\"displayConfig?.activeAlarmTypesOutOfRange?.includes(alarm.filters.type)\"\n [adaptivePosition]=\"false\"\n ></i>\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]=\"alarm.__hidden ? 'eye-slash text-muted' : 'eye text-primary'\"\n ></i>\n </button>\n <button\n class=\"c8y-alarm-pill__label c8y-alarm-pill__btn\"\n (click)=\"toggleMarkedArea(alarm)\"\n [ngClass]=\"{\n active: !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\">\n {{ 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 </ng-container>\n\n <!-- Events -->\n <ng-container *ngFor=\"let event of events\">\n <div\n class=\"c8y-event-pill flex-no-shrink\"\n title=\"{{ event.filters.type }}\"\n *ngIf=\"event.__active\"\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]=\"event.__hidden ? 'eye-slash text-muted' : 'eye text-primary'\"\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\"\n [ngClass]=\"{ 'text-muted': event.__hidden }\"\n >\n <span class=\"text-truncate\">\n {{ 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 </ng-container>\n </div>\n </div>\n </div>\n</div>\n\n<c8y-charts\n #chart\n [config]=\"displayConfig\"\n [alerts]=\"alerts\"\n [chartViewContext]=\"chartViewContext\"\n (updateAlarmsAndEvents)=\"updateAlarmsAndEvents($event)\"\n (configChangeOnZoomOut)=\"updateDashboardTimeContext($event)\"\n (datapointOutOfSync)=\"handleDatapointOutOfSync($event)\"\n (timeRangeChangeOnRealtime)=\"updateTimeRangeOnRealtime($event)\"\n (isMarkedAreaEnabled)=\"isMarkedAreaEnabled = $event\"\n></c8y-charts>\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":["i3","i5","i1","i2","i4","CommonModule","i6","i7","i8"],"mappings":"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"}
|
|
@@ -4611,6 +4611,8 @@ class DatePipe extends DatePipe$1 {
|
|
|
4611
4611
|
if (!currentLocale && this.appStateService) {
|
|
4612
4612
|
currentLocale = this.appStateService.state.lang;
|
|
4613
4613
|
}
|
|
4614
|
+
// Apply locale mapping to ensure consistent Angular locale usage
|
|
4615
|
+
currentLocale = getAngularLocalesLanguageString(currentLocale);
|
|
4614
4616
|
if (format === 'short' && this.dateFormatService && currentLocale) {
|
|
4615
4617
|
// Angular doesn't provide a predefined format with leading zeros (e.g., "01.01.2025")
|
|
4616
4618
|
// The 'shortDate' format would display as "1/1/25" (without leading zeros and with 2-digit year)
|