{"version":3,"file":"c8y-ngx-components-datapoint-explorer-view.mjs","sources":["../../datapoint-explorer/view/send-as-widget-to-report-modal/send-as-widget-to-report-modal.component.ts","../../datapoint-explorer/view/send-as-widget-to-report-modal/send-as-widget-to-report-modal.component.html","../../datapoint-explorer/view/create-new-report-modal/create-new-report-modal.component.ts","../../datapoint-explorer/view/create-new-report-modal/create-new-report-modal.component.html","../../datapoint-explorer/view/datapoint-explorer.service.ts","../../datapoint-explorer/view/configuration/workspace-configuration.service.ts","../../datapoint-explorer/view/configuration/naming-dictionary.ts","../../datapoint-explorer/view/configuration/name-generator.service.ts","../../datapoint-explorer/view/configuration/workspace-configuration.component.ts","../../datapoint-explorer/view/configuration/workspace-configuration.component.html","../../datapoint-explorer/view/datapoint-explorer.component.ts","../../datapoint-explorer/view/datapoint-explorer.component.html","../../datapoint-explorer/view/c8y-ngx-components-datapoint-explorer-view.ts"],"sourcesContent":["import { Component, inject } from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule } from '@angular/forms';\nimport { CoreModule, gettext, ModalLabels } from '@c8y/ngx-components';\nimport { Observable, merge, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport {\n  ReportDashboardModule,\n  ReportDashboardService\n} from '@c8y/ngx-components/report-dashboard';\nimport { IManagedObject } from '@c8y/client';\n@Component({\n  selector: 'c8y-apply-branding-to-app-modal',\n  templateUrl: './send-as-widget-to-report-modal.component.html',\n  standalone: true,\n  imports: [ReactiveFormsModule, CoreModule, ReportDashboardModule]\n})\nexport class SendAsWidgetToReportModal {\n  reports: IManagedObject[] = [];\n  numberOfSelectedReports$: Observable<number>;\n  form: ReturnType<typeof this.initForm>;\n  result = new Promise<ReturnType<typeof this.initForm>['value']>((resolve, reject) => {\n    this._resolve = resolve;\n    this._reject = reject;\n  });\n  labels: ModalLabels = { cancel: gettext('Cancel'), ok: gettext('Send') };\n  private reportDashboardService = inject(ReportDashboardService);\n  private _resolve: (value: ReturnType<typeof this.initForm>['value']) => void;\n  private _reject: (reason?: any) => void;\n  async ngOnInit() {\n    this.reports = (await this.reportDashboardService.listReports({ pageSize: 2000 })).data;\n    if (this.reports.length > 0) {\n      this.form = this.initForm();\n    }\n    this.numberOfSelectedReports$ = merge(this.form.valueChanges, of(this.form.value)).pipe(\n      map(value => Object.values(value).filter(Boolean).length)\n    );\n  }\n  save() {\n    this._resolve(this.form.value);\n  }\n  cancel() {\n    this._reject();\n  }\n  private initForm(): FormGroup<Record<string, FormControl<boolean>>> {\n    const controls = this.reports.reduce(\n      (acc, report) => ({\n        ...acc,\n        [report.id]: new FormControl(false)\n      }),\n      {}\n    );\n    return new FormGroup(controls);\n  }\n}\n","<c8y-modal\n  [title]=\"'Send as widget to reports' | translate\"\n  [disabled]=\"!form || form.invalid\"\n  [headerClasses]=\"'dialog-header'\"\n  (onDismiss)=\"cancel()\"\n  (onClose)=\"save()\"\n  [labels]=\"labels\"\n>\n  <ng-container c8y-modal-title>\n    <span c8yIcon=\"c8y-reports\"></span>\n  </ng-container>\n\n  <c8y-list-group\n    class=\"m-b-0 no-border-last\"\n    *ngIf=\"form\"\n    [formGroup]=\"form\"\n  >\n    <c8y-li>\n      <p\n        class=\"text-center text-medium\"\n        *ngIf=\"numberOfSelectedReports$ | async as numberOfReports; else noSelectedReports\"\n        translate\n        [translateParams]=\"{ numberOfReports: numberOfReports }\"\n        ngNonBindable\n      >\n        {{ numberOfReports }} reports selected for widget\n      </p>\n      <ng-template #noSelectedReports>\n        <p\n          class=\"text-center text-medium\"\n          translate\n        >\n          Select one or more reports to send the Data points graph widget with the current configuration\n        </p>\n      </ng-template>\n    </c8y-li>\n    <c8y-li *ngFor=\"let report of reports\">\n      <c8y-li-checkbox\n        [attr.data-cy]=\"'branding-apply-branding-to-app-checkbox-' + report.id\"\n        [formControlName]=\"report.id\"\n      ></c8y-li-checkbox>\n      <c8y-li-icon class=\"p-l-0\">\n        <i c8yIcon=\"{{ report.icon }}\"></i>\n      </c8y-li-icon>\n      <div class=\"text-truncate\" title=\"{{report.name}}\">{{ report.name }}</div>\n    </c8y-li>\n  </c8y-list-group>\n\n  <c8y-ui-empty-state\n    [icon]=\"'c8y-reports'\"\n    [title]=\"'There are no reports defined.' | translate\"\n    [subtitle]=\"'Add a report first.' | translate\"\n    *ngIf=\"reports.length === 0\"\n  ></c8y-ui-empty-state>\n</c8y-modal>\n","import { Component } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { CoreModule, gettext, ModalLabels } from '@c8y/ngx-components';\nimport { ReportDashboardModule } from '@c8y/ngx-components/report-dashboard';\nimport { ContextDashboardService } from '@c8y/ngx-components/context-dashboard';\nimport { IManagedObject } from '@c8y/client';\n\n@Component({\n  selector: 'c8y-create-new-report-modal',\n  templateUrl: './create-new-report-modal.component.html',\n  standalone: true,\n  imports: [ReactiveFormsModule, CoreModule, ReportDashboardModule]\n})\nexport class CreateNewReportModalComponent {\n  reportName = '';\n  labels: ModalLabels = { cancel: gettext('Cancel'), ok: gettext('Send') };\n\n  result = new Promise<IManagedObject>((resolve, reject) => {\n    this._resolve = resolve;\n    this._reject = reject;\n  });\n\n  styling = {\n    themeClass: 'dashboard-theme-light',\n    headerClass: 'panel-title-regular'\n  };\n\n  readonly DEFAULT_DASHBOARD_ICON = 'th';\n  readonly DEFAULT_DASHBOARD_PRIORITY = 5000;\n  readonly DEFAULT_DASHBOARD_MARGIN = 12;\n  private _resolve: (value: IManagedObject) => void;\n  private _reject: (reason?: any) => void;\n  constructor(private contextDashboardService: ContextDashboardService) {}\n\n  async save() {\n    const dashboard = {\n      name: this.reportName,\n      icon: this.DEFAULT_DASHBOARD_ICON,\n      c8y_IsNavigatorNode: null,\n      priority: this.DEFAULT_DASHBOARD_PRIORITY,\n      description: '',\n      widgetMargin: this.DEFAULT_DASHBOARD_MARGIN,\n      classes: { [this.styling.headerClass]: true },\n      widgetClasses: { [this.styling.headerClass]: true }\n    };\n    try {\n      const { name, icon, c8y_IsNavigatorNode, priority, description } = dashboard;\n      const report = (\n        await this.contextDashboardService.createReport({\n          name,\n          icon,\n          c8y_IsNavigatorNode,\n          priority,\n          description\n        } as Partial<IManagedObject>)\n      ).data;\n\n      await this.contextDashboardService.create(\n        dashboard,\n        undefined,\n        `${this.contextDashboardService.REPORT_PARTIAL_NAME}${report.id}`\n      );\n\n      this._resolve(report);\n    } catch (ex) {\n      this._reject(ex);\n    }\n  }\n\n  cancel() {\n    this._reject();\n  }\n}\n","<c8y-modal\n  [title]=\"'Create new report with widget' | translate\"\n  [headerClasses]=\"'dialog-header'\"\n  [disabled]=\"reportName === ''\"\n  (onDismiss)=\"cancel()\"\n  (onClose)=\"save()\"\n  [labels]=\"labels\"\n>\n  <ng-container c8y-modal-title>\n    <span c8yIcon=\"c8y-reports\"></span>\n  </ng-container>\n\n  <p class=\"text-center bg-component text-balance sticky-top p-l-24 p-r-24 p-t-8 p-b-8 separator-bottom\">\n   {{' Create a new report with the Data points graph widget using the current configuration.' | translate}}\n  </p>\n  <div class=\"p-24 p-t-8\">\n    <c8y-form-group>\n      <label\n        for=\"reportName\"\n        translate\n        >\n        Report name\n      </label>\n      <input\n        class=\"form-control\"\n        id=\"reportName\"\n        placeholder=\"{{ 'e.g. My data point Report' }}\"\n        name=\"name\"\n        type=\"text\"\n        autocomplete=\"off\"\n        required\n        [(ngModel)]=\"reportName\"\n      />\n      <c8y-messages></c8y-messages>\n    </c8y-form-group>\n  </div>\n</c8y-modal>\n","import { inject, Injectable } from '@angular/core';\nimport { IManagedObject, InventoryService } from '@c8y/client';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class DataExplorerService {\n  private readonly inventory = inject(InventoryService);\n\n  async fetchReportDashboard(reportId: string): Promise<IManagedObject> {\n    return (\n      await this.inventory.list({\n        pageSize: 1,\n        query: `has('c8y_Dashboard!name!report_${reportId}')`\n      })\n    ).data[0];\n  }\n}\n","import { effect, Injectable, signal, WritableSignal } from '@angular/core';\nimport { WorkspaceConfiguration } from './workspace-configuration.model';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class WorkspaceConfigurationService {\n  LOCAL_STORAGE_KEY = 'c8y-configs';\n  LOCAL_STORAGE_DEFAULT_ID_KEY = 'c8y-default-config-id';\n  contextIdSignal: WritableSignal<number | string | null> = signal(null);\n\n  constructor() {\n    effect(() => {\n      const signalValue = this.contextIdSignal();\n      if (signalValue !== null) {\n        this.LOCAL_STORAGE_KEY = `c8y-configs-${signalValue}`;\n        this.LOCAL_STORAGE_DEFAULT_ID_KEY = `c8y-default-config-id-${signalValue}`;\n      }\n      if (signalValue == null) {\n        this.LOCAL_STORAGE_KEY = 'c8y-configs';\n        this.LOCAL_STORAGE_DEFAULT_ID_KEY = 'c8y-default-config-id';\n      }\n    });\n  }\n\n  getConfigurations(): WorkspaceConfiguration[] {\n    const configurations = localStorage.getItem(this.LOCAL_STORAGE_KEY);\n    return configurations ? JSON.parse(configurations) : [];\n  }\n\n  getDefaultConfigurationId(): string | null {\n    return localStorage.getItem(this.LOCAL_STORAGE_DEFAULT_ID_KEY);\n  }\n\n  saveConfigurations(configurations: WorkspaceConfiguration[], id: string): void {\n    localStorage.setItem(this.LOCAL_STORAGE_KEY, JSON.stringify(configurations));\n    localStorage.setItem(this.LOCAL_STORAGE_DEFAULT_ID_KEY, id);\n  }\n}\n","export const adjectives = [\n  'caffeinated',\n  'sleepy',\n  'hungry',\n  'puzzled',\n  'overexcited',\n  'daydreaming',\n  'chocolate-loving',\n  'coffee-powered',\n  'cookie-craving',\n  'disco-ready',\n  'weekend-mode',\n  'pizza-powered',\n  'nap-seeking',\n  'wifi-hunting',\n  'battery-hungry',\n  'donut-powered',\n  'tea-sipping',\n  'keyboard-loving',\n  'screen-staring',\n  'mouse-chasing',\n  'code-dreaming',\n  'pixel-perfect',\n  'bug-finding',\n  'zoom-tired',\n  'meeting-dodging',\n  'deadline-racing',\n  'coffee-seeking',\n  'sandwich-craving',\n  'debug-ready',\n  'rest-needing'\n];\nexport const nouns = [\n  'sensor',\n  'robot',\n  'thermostat',\n  'gateway',\n  'dashboard',\n  'widget',\n  'gadget',\n  'button',\n  'antenna',\n  'beacon',\n  'adapter',\n  'gizmo',\n  'hub',\n  'switch',\n  'chip',\n  'controller',\n  'display',\n  'terminal',\n  'processor',\n  'transmitter',\n  'receiver',\n  'pod',\n  'device',\n  'module',\n  'relay',\n  'node',\n  'bridge',\n  'screen',\n  'router',\n  'box'\n];\n","import { Injectable } from '@angular/core';\nimport { adjectives, nouns } from './naming-dictionary';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class NameGeneratorService {\n  generateName(): string {\n    const getRandomElement = (arr: string[]) => arr[Math.floor(Math.random() * arr.length)];\n    const randomAdjective = getRandomElement(adjectives);\n    const randomNoun = getRandomElement(nouns);\n\n    return `${randomAdjective}_${randomNoun}`;\n  }\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport {\n  Component,\n  EventEmitter,\n  inject,\n  Input,\n  OnChanges,\n  OnInit,\n  Output,\n  SimpleChanges\n} from '@angular/core';\nimport { FormArray, FormBuilder, FormGroup, FormsModule } from '@angular/forms';\nimport {\n  ClipboardService,\n  ContextRouteService,\n  CoreModule,\n  gettext,\n  ViewContext\n} from '@c8y/ngx-components';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { WorkspaceConfiguration } from './workspace-configuration.model';\nimport { DatapointsGraphWidgetConfig } from '@c8y/ngx-components/echart';\nimport { WorkspaceConfigurationService } from './workspace-configuration.service';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { NameGeneratorService } from './name-generator.service';\n\n@Component({\n  selector: 'c8y-workspace-config',\n  templateUrl: './workspace-configuration.component.html',\n  standalone: true,\n  imports: [CoreModule, BsDropdownModule, FormsModule, A11yModule, TooltipModule]\n})\nexport class WorkspaceConfigComponent implements OnInit, OnChanges {\n  @Input() updatedConfig: DatapointsGraphWidgetConfig;\n  @Output() onConfigurationChange = new EventEmitter<DatapointsGraphWidgetConfig>();\n\n  currentConfiguration: WorkspaceConfiguration;\n  configurations: WorkspaceConfiguration[] = [];\n  configurationsFormGroup: FormGroup;\n  activeConfigTooltip = gettext('Active configuration cannot be removed');\n  removeConfigTooltip = gettext('Remove configuration');\n\n  private readonly formBuilder = inject(FormBuilder);\n  private readonly workspaceConfigurationService = inject(WorkspaceConfigurationService);\n  private readonly contextRouteService = inject(ContextRouteService);\n  private readonly clipboardService = inject(ClipboardService);\n  private readonly activatedRoute = inject(ActivatedRoute);\n  private readonly router = inject(Router);\n  private readonly nameGeneratorService = inject(NameGeneratorService);\n\n  ngOnInit(): void {\n    this.initializeContextSourceId();\n    this.initializeConfigurations();\n    this.initWorkspaceForm();\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.updatedConfig && !changes.updatedConfig.firstChange) {\n      this.updateConfigurations();\n    }\n  }\n\n  addConfig(duplicatedConfig?: DatapointsGraphWidgetConfig): void {\n    const name = this.nameGeneratorService.generateName();\n    const workspace: WorkspaceConfiguration = {\n      id: new Date().toISOString(),\n      label: name,\n      config: { datapoints: [], alarmsEventsConfigs: [] }\n    };\n    if (duplicatedConfig) {\n      workspace.config = duplicatedConfig;\n    }\n    this.configurations = [workspace, ...this.configurations];\n    this.initWorkspaceForm();\n    this.changeConfiguration(true, workspace);\n  }\n\n  changeConfiguration(selected: boolean, configuration: WorkspaceConfiguration): void {\n    if (!selected) {\n      return;\n    }\n    this.currentConfiguration = configuration;\n    localStorage.setItem(\n      this.workspaceConfigurationService.LOCAL_STORAGE_DEFAULT_ID_KEY,\n      this.currentConfiguration.id\n    );\n    this.onConfigurationChange.emit(configuration.config);\n  }\n\n  updateConfigurationLabel(configuration: WorkspaceConfiguration): void {\n    this.configurations = this.configurations.map(c =>\n      c.id === configuration.id ? configuration : c\n    );\n    this.workspaceConfigurationService.saveConfigurations(\n      this.configurations,\n      this.currentConfiguration?.id || ''\n    );\n    this.currentConfiguration = configuration;\n    this.onConfigurationChange.emit(configuration.config);\n  }\n\n  deleteConfiguration(configuration: WorkspaceConfiguration): void {\n    this.configurations = this.configurations.filter(c => c.id !== configuration.id);\n    this.initWorkspaceForm();\n    this.workspaceConfigurationService.saveConfigurations(\n      this.configurations,\n      this.currentConfiguration?.id || ''\n    );\n  }\n\n  clearAll(): void {\n    this.configurations = [this.currentConfiguration];\n    this.initWorkspaceForm();\n    this.workspaceConfigurationService.saveConfigurations(\n      this.configurations,\n      this.currentConfiguration?.id || ''\n    );\n  }\n\n  async shareConfig(configuration: WorkspaceConfiguration): Promise<void> {\n    await this.clipboardService.writeText(JSON.stringify(configuration.config));\n  }\n\n  private addConfigFromUrl(queryParams: any): void {\n    this.addConfig();\n    const config = JSON.parse(queryParams.config);\n    this.onConfigurationChange.emit(config);\n  }\n\n  private updateConfigurations(): void {\n    this.currentConfiguration.config = this.updatedConfig;\n    this.configurations = this.configurations.map(currentConfig =>\n      currentConfig.id === this.currentConfiguration.id ? this.currentConfiguration : currentConfig\n    );\n    const queryParams = {\n      configId: this.currentConfiguration.id,\n      label: this.currentConfiguration.label,\n      config: JSON.stringify(this.updatedConfig)\n    };\n    this.workspaceConfigurationService.saveConfigurations(\n      this.configurations,\n      this.currentConfiguration.id\n    );\n    const control = <FormArray>this.configurationsFormGroup.controls['configurations'];\n    const index = this.configurations.findIndex(c => c.id === this.currentConfiguration.id);\n    if (index !== -1) {\n      control.at(index).patchValue({\n        label: this.currentConfiguration.label,\n        config: this.currentConfiguration.config,\n        id: this.currentConfiguration.id\n      });\n    }\n    this.router.navigate([], { queryParams });\n  }\n\n  private initializeConfigurations(): void {\n    const configurations = this.workspaceConfigurationService.getConfigurations();\n    const defaultId = this.workspaceConfigurationService.getDefaultConfigurationId();\n    const queryParams = this.router.parseUrl(this.router.url).queryParams;\n    if (configurations.length) {\n      this.configurations = configurations;\n      this.currentConfiguration =\n        this.configurations.find(c => c.id === defaultId) || this.configurations[0];\n\n      this.onConfigurationChange.emit(this.currentConfiguration.config);\n      if (queryParams?.configId && !this.configurations.find(c => c.id === queryParams.configId)) {\n        this.addConfigFromUrl(queryParams);\n      } else if (\n        queryParams?.configId &&\n        this.configurations.find(c => c.id === queryParams.configId) &&\n        this.currentConfiguration.id !== queryParams.configId\n      ) {\n        this.currentConfiguration = this.configurations.find(c => c.id === queryParams.configId);\n        this.changeConfiguration(true, this.currentConfiguration);\n      }\n    }\n\n    if (!this.currentConfiguration) {\n      if (Object.keys(queryParams).length === 0) {\n        this.addConfig();\n        return;\n      }\n      this.addConfigFromUrl(queryParams);\n    }\n  }\n\n  private initWorkspaceForm(): void {\n    this.configurationsFormGroup = this.formBuilder.group({\n      configurations: this.formBuilder.array([])\n    });\n\n    this.patchForm();\n  }\n\n  private patchForm(): void {\n    const control = <FormArray>this.configurationsFormGroup.controls['configurations'];\n    this.configurations.forEach(workspace => {\n      control.push(this.patchValues(workspace));\n    });\n  }\n\n  private patchValues(workspace: WorkspaceConfiguration): FormGroup {\n    return this.formBuilder.group({\n      label: [workspace.label],\n      config: [workspace.config],\n      id: [workspace.id]\n    });\n  }\n\n  private initializeContextSourceId(): void {\n    const routeContext = this.contextRouteService.getContextData(this.activatedRoute);\n    if (!routeContext) {\n      return;\n    }\n    const { context, contextData } = routeContext;\n    if ([ViewContext.Device, ViewContext.Group].includes(context)) {\n      this.workspaceConfigurationService.contextIdSignal.set(contextData?.id);\n    }\n  }\n}\n","<div\n  class=\"dropdown\"\n  #actionbar_dropdown=\"bs-dropdown\"\n  [cdkTrapFocus]=\"actionbar_dropdown.isOpen\"\n  dropdown\n  [insideClick]=\"true\"\n>\n\n  <button\n    class=\"dropdown-toggle form-control l-h-tight d-flex a-i-center\"\n    attr.aria-label=\"{{ currentConfiguration.label }}\"\n    tooltip=\"{{ 'Selected configuration' | translate }}\"\n    placement=\"top\"\n    container=\"body\"\n    data-cy=\"current-configuration-dropdown-button\"\n    [adaptivePosition]=\"false\"\n    [delay]=\"500\"\n    dropdownToggle\n  >\n    <i\n      class=\"m-r-4\"\n      c8yIcon=\"list\"\n    ></i>\n    <div class=\"d-col text-left fit-w\">\n      <span class=\"text-12\">\n        {{ 'Configuration' | translate }}\n      </span>\n      <span class=\"text-10 text-muted text-truncate\">\n        {{ currentConfiguration.label }}\n      </span>\n    </div>\n    <span class=\"caret m-r-16 m-l-4\"></span>\n  </button>\n  <div\n    class=\"dropdown-menu dropdown-menu-wide dropdown-menu-action-bar\"\n    *dropdownMenu\n  >\n    <div class=\"sticky-top separator-bottom p-t-8 p-b-8 p-l-16 p-r-16\">\n      <p>\n        <strong>{{ 'Data explorer configurations' | translate }}</strong>\n      </p>\n      <p>\n        <small>{{ 'Easily switch and manage configurations.' | translate }}</small>\n      </p>\n    </div>\n    <c8y-list-group class=\"no-border-last\">\n      <form [formGroup]=\"configurationsFormGroup\">\n        <div formArrayName=\"configurations\">\n          <c8y-li\n            class=\"p-0\"\n            *ngFor=\"\n              let configuration of configurationsFormGroup.controls.configurations['controls'];\n              let i = index\n            \"\n            [dense]=\"true\"\n          >\n            <c8y-li-radio\n              [selected]=\"configuration.value.id === currentConfiguration.id\"\n              (onSelect)=\"changeConfiguration($event, configuration.value)\"\n            ></c8y-li-radio>\n            <div class=\"d-flex a-i-center gap-8\">\n              <div\n                class=\"flex-grow min-width-0\"\n                [formGroupName]=\"i\"\n              >\n                <label\n                  class=\"editable\"\n                  [ngClass]=\"{\n                    updated:\n                      configuration.controls.label.touched && configuration.controls.label.dirty\n                  }\"\n                >\n                  <input\n                    class=\"form-control\"\n                    [style.width.ch]=\"configuration.value.label || 25\"\n                    [attr.aria-label]=\"'Configuration label' | translate\"\n                    placeholder=\"{{ 'Configuration 1' | translate }}\"\n                    type=\"text\"\n                    autocomplete=\"off\"\n                    required\n                    formControlName=\"label\"\n                    (blur)=\"updateConfigurationLabel(configuration.value)\"\n                  />\n                </label>\n              </div>\n              <div class=\"flex-nogrow d-flex gap-8\">\n                <button\n                  class=\"btn-dot btn\"\n                  [attr.aria-label]=\"'Duplicate configuration' | translate\"\n                  tooltip=\"{{ 'Duplicate configuration' | translate }}\"\n                  placement=\"left\"\n                  (click)=\"addConfig(configuration.value.config)\"\n                  [delay]=\"500\"\n                >\n                  <i c8yIcon=\"copy\"></i>\n                </button>\n\n                <button\n                  class=\"btn-dot btn btn-dot--danger\"\n                  [attr.aria-label]=\"'Remove configurations' | translate\"\n                  tooltip=\"{{\n                    (configuration.value.id === currentConfiguration.id\n                      ? activeConfigTooltip\n                      : removeConfigTooltip\n                    ) | translate\n                  }}\"\n                  placement=\"left\"\n                  [delay]=\"500\"\n                  (click)=\"$event.stopPropagation(); deleteConfiguration(configuration.value)\"\n                  [disabled]=\"configuration.value.id === currentConfiguration.id\"\n                >\n                  <i c8yIcon=\"minus-circle\"></i>\n                </button>\n              </div>\n            </div>\n          </c8y-li>\n        </div>\n      </form>\n    </c8y-list-group>\n    <div class=\"sticky-bottom separator-top\">\n      <div class=\"d-flex p-l-16 p-r-16 p-t-8 p-b-8\">\n        <button\n          class=\"btn btn-danger btn-sm flex-grow\"\n          (click)=\"clearAll()\"\n          [disabled]=\"configurations.length < 2\"\n        >\n          <i [c8yIcon]=\"'delete'\"></i>\n          {{ 'Delete all configurations' | translate }}\n        </button>\n        <button\n          class=\"btn btn-default btn-sm flex-grow\"\n          type=\"button\"\n          (click)=\"addConfig()\"\n        >\n          <i [c8yIcon]=\"'add-circle-outline'\"></i>\n          {{ 'Add configuration' | translate }}\n        </button>\n      </div>\n    </div>\n  </div>\n</div>\n","import { Component, DestroyRef, ElementRef, inject, ViewChild } from '@angular/core';\nimport {\n  AlertService,\n  CommonModule,\n  ContextRouteService,\n  CoreModule,\n  DynamicComponentAlertAggregator,\n  FormsModule,\n  gettext,\n  Permissions,\n  ViewContext\n} from '@c8y/ngx-components';\nimport { AlarmEventSelectorModule } from '@c8y/ngx-components/alarm-event-selector';\nimport { TimeContextComponent } from '@c8y/ngx-components/time-context';\nimport {\n  DatapointAttributesFormConfig,\n  DatapointSelectorModule,\n  KPIDetails\n} from '@c8y/ngx-components/datapoint-selector';\nimport {\n  AlarmDetailsExtended,\n  AlarmOrEventExtended,\n  DatapointsGraphKPIDetails,\n  DatapointsGraphWidgetConfig,\n  EventDetailsExtended,\n  TimeContextProps\n} from '@c8y/ngx-components/echart/models';\nimport {\n  ChartAlarmsService,\n  ChartEventsService,\n  ChartsComponent\n} from '@c8y/ngx-components/echart';\nimport { FormBuilder, FormGroup } from '@angular/forms';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { aggregationType, IIdentified } from '@c8y/client';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { Interval } from '@c8y/ngx-components/interval-picker';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { SendAsWidgetToReportModal } from './send-as-widget-to-report-modal/send-as-widget-to-report-modal.component';\nimport { ContextDashboardService } from '@c8y/ngx-components/context-dashboard';\nimport {\n  DatapointsExportSelectorComponent,\n  ExportConfig\n} from '@c8y/ngx-components/datapoints-export-selector';\nimport { CreateNewReportModalComponent } from './create-new-report-modal/create-new-report-modal.component';\nimport { DataExplorerService } from './datapoint-explorer.service';\nimport { WorkspaceConfigComponent } from './configuration/workspace-configuration.component';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute } from '@angular/router';\n\n@Component({\n  selector: 'c8y-datapoint-explorer',\n  templateUrl: './datapoint-explorer.component.html',\n  standalone: true,\n  imports: [\n    CoreModule,\n    CommonModule,\n    DatapointSelectorModule,\n    AlarmEventSelectorModule,\n    TooltipModule,\n    PopoverModule,\n    TimeContextComponent,\n    ChartsComponent,\n    BsDropdownModule,\n    FormsModule,\n    A11yModule,\n    DatapointsExportSelectorComponent,\n    WorkspaceConfigComponent\n  ],\n  providers: [ChartEventsService, ChartAlarmsService]\n})\nexport class DatapointExplorerComponent {\n  @ViewChild('chart') chart: ElementRef;\n  config: DatapointsGraphWidgetConfig = { datapoints: [], alarmsEventsConfigs: [] };\n  exportConfig: ExportConfig;\n  alerts: DynamicComponentAlertAggregator | undefined;\n  alarms: AlarmDetailsExtended[] = [];\n  events: EventDetailsExtended[] = [];\n  datapointsOutOfSync = new Map<DatapointsGraphKPIDetails, boolean>();\n  contextAsset: IIdentified;\n  formGroup: FormGroup;\n  hasAtLeastOneDatapointActive = true;\n  hasAtLeastOneAlarmActive = true;\n  isMarkedAreaEnabled = false;\n  alarmsOrEventsHaveNoMatchingDps = false;\n  canAddReport = false;\n  timeProps: {\n    dateFrom: Date;\n    dateTo: Date;\n    interval?: Interval['id'];\n    realtime?: boolean;\n    aggregation?: aggregationType | null;\n  };\n  datapointSelectDefaultFormOptions: Partial<DatapointAttributesFormConfig> = {\n    showRange: true,\n    showChart: true\n  };\n\n  #destroyRef = inject(DestroyRef);\n\n  private readonly dataExplorerService = inject(DataExplorerService);\n  private readonly formBuilder = inject(FormBuilder);\n  private readonly alertService = inject(AlertService);\n  private readonly bsModalService = inject(BsModalService);\n  private readonly permissions = inject(Permissions);\n  private readonly contextDashboardService = inject(ContextDashboardService);\n  private readonly activatedRoute = inject(ActivatedRoute);\n  private readonly contextRouteService = inject(ContextRouteService);\n\n  constructor() {\n    this.formGroup = this.initForm();\n  }\n\n  ngOnInit(): void {\n    this.contextAsset = this.initializeContextSourceId();\n    this.checkForMatchingDatapoints();\n    this.canAddReport = this.permissions.hasAnyRole([\n      Permissions.ROLE_INVENTORY_CREATE,\n      Permissions.ROLE_INVENTORY_ADMIN,\n      Permissions.ROLE_MANAGED_OBJECT_ADMIN,\n      Permissions.ROLE_MANAGED_OBJECT_CREATE\n    ]);\n    this.formGroup.valueChanges\n      .pipe(takeUntilDestroyed(this.#destroyRef))\n      .subscribe(configChange => {\n        const { alarms, events, ...configValues } = configChange;\n        this.config = {\n          ...configValues,\n          alarmsEventsConfigs: [...(alarms || []), ...(events || [])]\n        };\n        this.updateExportConfig();\n        this.checkForMatchingDatapoints();\n      });\n  }\n\n  onTimeContextChange(timeProps: TimeContextProps): void {\n    const realtime = this.formGroup.controls.realtime.value;\n    if (timeProps.realtime !== 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    this.formGroup.patchValue({\n      dateFrom: timeProps.currentDateContextFromDate,\n      dateTo: timeProps.currentDateContextToDate,\n      interval: timeProps.currentDateContextInterval,\n      aggregation: timeProps.aggregation || null\n    });\n  }\n\n  onConfigurationChange(config: DatapointsGraphWidgetConfig): void {\n    if (config.dateFrom && config.dateTo) {\n      this.timeProps = {\n        dateFrom: new Date(config?.dateFrom),\n        dateTo: new Date(config?.dateTo),\n        interval: config?.interval,\n        realtime: config?.realtime,\n        aggregation: config?.realtime ? null : config?.aggregation\n      };\n    }\n    this.alarms = config.alarmsEventsConfigs.filter(ae => ae.timelineType === 'ALARM');\n    this.events = config.alarmsEventsConfigs.filter(ae => ae.timelineType === 'EVENT');\n    this.formGroup.patchValue({ alarms: this.alarms, events: this.events, ...config });\n  }\n\n  onSliderZoom(timeProps: { dateFrom: Date; dateTo: Date; interval?: Interval['id'] }) {\n    this.formGroup.patchValue(timeProps);\n    this.timeProps = { ...timeProps, realtime: false };\n  }\n\n  updateTimeRangeOnRealtime(\n    timeRange: Pick<DatapointsGraphWidgetConfig, 'dateFrom' | 'dateTo'>\n  ): void {\n    this.formGroup.patchValue(timeRange, { emitEvent: false });\n  }\n\n  createNewReportWithWidget(): void {\n    const modal = this.bsModalService.show(CreateNewReportModalComponent, {\n      ignoreBackdropClick: true,\n      keyboard: false,\n      class: 'modal-sm'\n    });\n    const content = modal.content as CreateNewReportModalComponent;\n    content.result\n      .then(async report => {\n        const reportDashboard = await this.dataExplorerService.fetchReportDashboard(report.id);\n        const widget = this.createWidgetConfig();\n        reportDashboard.c8y_Dashboard.children = { [widget.id]: widget };\n        await this.contextDashboardService.update(reportDashboard);\n        this.alertService.success(gettext('Report and widget created.'));\n      })\n      .catch(e => {\n        if (e) {\n          this.alertService.danger(gettext('Failed to create report and widget.'));\n          this.alertService.addServerFailure(e);\n        }\n        // else: modal was closed\n      });\n  }\n\n  sendAsWidgetToReport(): void {\n    const modal = this.bsModalService.show(SendAsWidgetToReportModal, {\n      ignoreBackdropClick: true,\n      keyboard: false,\n      class: 'modal-sm'\n    });\n    const content = modal.content as SendAsWidgetToReportModal;\n    content.result\n      .then(async reports => {\n        const selectedReports = Object.entries(reports).filter(([, value]) => value);\n        const reportPromises = selectedReports.map(async ([reportId]) => {\n          const reportDashboard = await this.dataExplorerService.fetchReportDashboard(reportId);\n          const widget = this.createWidgetConfig();\n          const children = reportDashboard.c8y_Dashboard.children || {};\n          reportDashboard.c8y_Dashboard.children = { ...children, [widget.id]: widget };\n          await this.contextDashboardService.update(reportDashboard);\n        });\n\n        await Promise.all(reportPromises);\n        this.alertService.success(gettext('Widget created.'));\n      })\n      .catch(e => {\n        if (e) {\n          this.alertService.danger(gettext('Failed to create widget.'));\n          this.alertService.addServerFailure(e);\n        }\n        // else: modal was closed\n      });\n  }\n\n  updateAlarmsAndEvents(alarmsEventsConfigs: AlarmOrEventExtended[]): void {\n    this.alarms = alarmsEventsConfigs.filter(this.isAlarm);\n    this.events = alarmsEventsConfigs.filter(this.isEvent);\n    this.hasAtLeastOneAlarmActive = this.hasActiveAlarms(this.alarms);\n  }\n\n  handleDatapointOutOfSync(dpOutOfSync: DatapointsGraphKPIDetails): void {\n    const key = (dp: KPIDetails) => dp.__target?.id + dp.fragment + dp.series;\n    const dpMatch = this.config.datapoints?.find(dp => key(dp) === key(dpOutOfSync));\n    if (!dpMatch) {\n      return;\n    }\n    this.datapointsOutOfSync.set(dpMatch, true);\n  }\n\n  private isAlarm(item: AlarmOrEventExtended): item is AlarmDetailsExtended {\n    return item.timelineType === 'ALARM';\n  }\n\n  private isEvent(item: AlarmOrEventExtended): item is EventDetailsExtended {\n    return item.timelineType === 'EVENT';\n  }\n\n  private hasActiveAlarms(alarms: AlarmDetailsExtended[]): boolean {\n    return alarms.length > 0 && alarms.some(alarm => alarm.__active);\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      this.alarmsOrEventsHaveNoMatchingDps = !allMatch;\n    });\n  }\n\n  private updateExportConfig(): void {\n    const datapointDetails = this.config.datapoints\n      .filter(({ __active }) => __active)\n      .map(({ __target, fragment, series }) => ({\n        deviceName: __target.name,\n        source: __target.id,\n        valueFragmentSeries: series,\n        valueFragmentType: fragment\n      }));\n\n    if (datapointDetails.length === 0) {\n      this.exportConfig = null;\n    } else {\n      this.exportConfig = {\n        aggregation: this.config.aggregation,\n        dateFrom: new Date(this.config.dateFrom).toISOString(),\n        dateTo: new Date(this.config.dateTo).toISOString(),\n        datapointDetails: datapointDetails\n      };\n    }\n  }\n\n  private initializeContextSourceId(): IIdentified {\n    const routeContext = this.contextRouteService.getContextData(this.activatedRoute);\n    if (!routeContext) {\n      return;\n    }\n    const { context, contextData } = routeContext;\n    if ([ViewContext.Device, ViewContext.Group].includes(context)) {\n      return contextData;\n    }\n  }\n\n  private createWidgetConfig(): any {\n    return {\n      name: 'Data points graph 2',\n      title: gettext('Data points graph 2'),\n      id: String(Math.random()).substr(2),\n      _width: 24,\n      _height: 5,\n      config: this.config\n    };\n  }\n\n  private initForm() {\n    return this.formBuilder.group({\n      datapoints: [this.config.datapoints || []],\n      alarms: [this.alarms || []],\n      events: [this.events || []],\n      dateFrom: [this.config.dateFrom || (null as Date)],\n      dateTo: [this.config.dateFrom || (null as Date)],\n      interval: [this.config.interval || 'hours'],\n      aggregation: [this.config.aggregation || (null as aggregationType | null)],\n      realtime: [this.config.realtime || false],\n      displayMarkedLine: [true, []],\n      displayMarkedPoint: [true, []],\n      mergeMatchingDatapoints: [true, []],\n      showLabelAndUnit: [true, []],\n      showSlider: [true, []],\n      displayDateSelection: [false, []],\n      yAxisSplitLines: [false],\n      xAxisSplitLines: [false]\n    });\n  }\n}\n","<c8y-title>{{ 'Data explorer' | translate }}</c8y-title>\n\n<c8y-time-context\n  (contextChange)=\"onTimeContextChange($event)\"\n  [changedDateContext]=\"timeProps\"\n></c8y-time-context>\n\n<c8y-action-bar-item [placement]=\"'left'\">\n  <c8y-workspace-config\n    [updatedConfig]=\"config\"\n    (onConfigurationChange)=\"onConfigurationChange($event)\"\n  ></c8y-workspace-config>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item placement=\"right\">\n  <c8y-datapoints-export-selector [exportConfig]=\"exportConfig\"></c8y-datapoints-export-selector>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n  [placement]=\"'more'\"\n  [priority]=\"-2000\"\n>\n  <button\n    title=\"{{ 'Send as widget to report' | translate }}\"\n    type=\"button\"\n    data-cy=\"widgets-dashboard--copy-dashboard\"\n    (click)=\"sendAsWidgetToReport()\"\n    [disabled]=\"config?.datapoints?.length === 0 || !canAddReport\"\n  >\n    <i c8yIcon=\"c8y-reports\"></i>\n    <span>{{ 'Send as widget to report' | translate }}</span>\n  </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n  [placement]=\"'more'\"\n  [priority]=\"-2000\"\n>\n  <button\n    title=\"{{ 'Create a new report with widget' | translate }}\"\n    type=\"button\"\n    data-cy=\"widgets-dashboard--copy-dashboard\"\n    (click)=\"createNewReportWithWidget()\"\n    [disabled]=\"config?.datapoints?.length === 0 || !canAddReport\"\n  >\n    <i c8yIcon=\"c8y-reports\"></i>\n    <span>{{ 'Create a new report with widget' | translate }}</span>\n  </button>\n</c8y-action-bar-item>\n\n<div class=\"content-fullpage d-grid grid_col--auto-360 gap-24\">\n  <div class=\"d-col gap-16\">\n    <c8y-charts\n      class=\"flex-grow data-point-explorer\"\n      #chart\n      [config]=\"config\"\n      [alerts]=\"alerts\"\n      (updateAlarmsAndEvents)=\"updateAlarmsAndEvents($event)\"\n      (configChangeOnZoomOut)=\"onSliderZoom($event)\"\n      (datapointOutOfSync)=\"handleDatapointOutOfSync($event)\"\n      (timeRangeChangeOnRealtime)=\"updateTimeRangeOnRealtime($event)\"\n      (isMarkedAreaEnabled)=\"isMarkedAreaEnabled = $event\"\n    ></c8y-charts>\n    <form\n      class=\"m-l-48 m-r-48\"\n      [formGroup]=\"formGroup\"\n    >\n      <div class=\"d-grid-md grid__col--4-4-4 gap-16\">\n        <fieldset class=\"c8y-fieldset form-group-sm m-t-md-0 p-b-8\">\n          <legend>{{ 'Axis' | translate }}</legend>\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          </label>\n        </fieldset>\n        <fieldset class=\"c8y-fieldset form-group-sm m-t-md-0 p-b-8\">\n          <legend>{{ 'Alarms & events' | translate }}</legend>\n          <label\n            class=\"c8y-checkbox\"\n            [title]=\"'Show vertical line when alarm occurs' | 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\n          <label\n            class=\"c8y-checkbox\"\n            [title]=\"'Show icon when alarm or event occurs' | translate\"\n          >\n            <input\n              name=\"displayMarkedPoint\"\n              type=\"checkbox\"\n              formControlName=\"displayMarkedPoint\"\n            />\n            <span></span>\n            <span>\n              {{\n                'Show icon when triggered`When alarms and events occur the icon will be shown`'\n                  | translate\n              }}\n            </span>\n            <button\n              class=\"btn-dot 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-info\"\n                c8yIcon=\"info\"\n              ></i>\n            </button>\n          </label>\n        </fieldset>\n        <fieldset class=\"c8y-fieldset form-group-sm m-t-md-0 p-b-8\">\n          <legend>{{ 'Chart' | translate }}</legend>\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        </fieldset>\n      </div>\n    </form>\n  </div>\n  <div class=\"card inner-scroll bg-level-1\">\n    <form\n      class=\"bg-inherit\"\n      [formGroup]=\"formGroup\"\n    >\n      <c8y-datapoint-selection-list\n        class=\"bg-inherit separator-top d-block\"\n        name=\"datapoints\"\n        [minActiveCount]=\"0\"\n        [defaultFormOptions]=\"datapointSelectDefaultFormOptions\"\n        [config]=\"{ contextAsset: contextAsset }\"\n        formControlName=\"datapoints\"\n        [allowDragAndDrop]=\"true\"\n      ></c8y-datapoint-selection-list>\n\n      <c8y-alarm-event-selection-list\n        class=\"bg-inherit\"\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    </form>\n  </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i4","i5","FormsModule"],"mappings":"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"}