{"version":3,"file":"c8y-ngx-components-datapoint-selector.mjs","sources":["../../datapoint-selector/datapoint-attributes-form/datapoint-attributes.model.ts","../../datapoint-selector/datapoint-attributes-form/datapoint-attributes-form-validation.service.ts","../../datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.ts","../../datapoint-selector/datapoint-attributes-form/datapoint-attributes-form.component.html","../../datapoint-selector/datapoint-selection.model.ts","../../datapoint-selector/datapoint-library.service.ts","../../datapoint-selector/datapoint-template-popover/datapoint-template-popover.component.ts","../../datapoint-selector/datapoint-template-popover/datapoint-template-popover.component.html","../../datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.ts","../../datapoint-selector/datapoint-selector-list-item/datapoint-selector-list-item.component.html","../../datapoint-selector/pipes/includes-datapoint.pipe.ts","../../datapoint-selector/pipes/datapoint-label.pipe.ts","../../datapoint-selector/datapoint-selector.component.ts","../../datapoint-selector/datapoint-selector.component.html","../../datapoint-selector/datapoint-selector-modal/datapoint-selector-modal.component.ts","../../datapoint-selector/datapoint-selector-modal/datapoint-selector-modal.component.html","../../datapoint-selector/datapoint-selector.service.ts","../../datapoint-selector/datapoint-selection-list/datapoint-selection-list.component.ts","../../datapoint-selector/datapoint-selection-list/datapoint-selection-list.component.html","../../datapoint-selector/pipes/filter-datapoints.pipe.ts","../../datapoint-selector/datapoint-selector.module.ts","../../datapoint-selector/c8y-ngx-components-datapoint-selector.ts"],"sourcesContent":["import { gettext } from '@c8y/ngx-components';\n\nexport const AXIS_TYPES = [\n  { val: undefined, text: gettext('Auto') },\n  { val: 'left', text: gettext('Left') },\n  { val: 'right', text: gettext('Right') }\n] as const;\n\nexport type AxisTypes = (typeof AXIS_TYPES)[1 | 2]['val'];\n\nexport const CHART_LINE_TYPES = [\n  { val: 'line', text: gettext('Line') },\n  { val: 'points', text: gettext('Points') },\n  { val: 'linePoints', text: gettext('Line and points') },\n  { val: 'bars', text: gettext('Bars') },\n  { val: 'step-before', text: gettext('Step before') },\n  { val: 'step-after', text: gettext('Step after') }\n] as const;\n\nexport type ChartLineTypes = (typeof CHART_LINE_TYPES)[number]['val'];\n\nexport const CHART_RENDER_TYPES = [\n  { val: 'min', text: gettext('Minimum') },\n  { val: 'max', text: gettext('Maximum') },\n  { val: 'area', text: gettext('Minimum and maximum') }\n] as const;\n\nexport type ChartRenderTypes = (typeof CHART_RENDER_TYPES)[number]['val'];\n","import { Injectable } from '@angular/core';\nimport {\n  AbstractControl,\n  FormBuilder,\n  FormGroup,\n  ValidationErrors,\n  ValidatorFn,\n  Validators\n} from '@angular/forms';\nimport { C8yValidators, gettext } from '@c8y/ngx-components';\nimport { AXIS_TYPES, CHART_LINE_TYPES, CHART_RENDER_TYPES } from './datapoint-attributes.model';\n\n@Injectable({ providedIn: 'root' })\nexport class DatapointAttributesFormValidationService {\n  constructor(private formBuilder: FormBuilder) {}\n\n  getDefaultFormGroup(fieldsToRemove: string[] = []): FormGroup {\n    const formFields = {\n      __active: [true, []],\n      __target: this.getTargetFormGroup(),\n      __template: [undefined, []],\n      color: ['', this.getColorValidators()],\n      label: ['', this.getLabelValidators()],\n      description: ['', this.getDescriptionValidators()],\n      fragment: ['', this.getFragmentValidators()],\n      series: ['', this.getSeriesValidators()],\n      range: this.getMinMaxFormGroup(),\n      unit: [undefined, this.getUnitValidators()],\n      target: [undefined, this.getTargetValidators()],\n      redRange: this.getMinMaxFormGroup(),\n      yellowRange: this.getMinMaxFormGroup(),\n      chart: this.getChartFormGroup(),\n      display: this.getDisplayFormGroup()\n    };\n    if (fieldsToRemove.length) {\n      for (const field of fieldsToRemove) {\n        delete formFields[field];\n      }\n    }\n    return this.formBuilder.group(formFields, {\n      validators: this.getOverallValidators()\n    });\n  }\n\n  convertToBackendFormat(formDataStructure: any, showChart: boolean) {\n    if (!formDataStructure) {\n      return {};\n    }\n\n    const {\n      __active,\n      __target,\n      __template,\n      color,\n      label,\n      description,\n      fragment,\n      series,\n      range,\n      unit,\n      target,\n      redRange,\n      yellowRange,\n      chart,\n      display\n    } = formDataStructure;\n    const obj = {\n      __active,\n      __target,\n      __template,\n      color,\n      label,\n      description,\n      fragment,\n      series,\n      min: range?.min,\n      max: range?.max,\n      unit,\n      target,\n      redRangeMin: redRange?.min,\n      redRangeMax: redRange?.max,\n      yellowRangeMin: yellowRange?.min,\n      yellowRangeMax: yellowRange?.max,\n      renderType: showChart ? chart?.renderType : display?.renderType,\n      lineType: chart?.lineType,\n      yAxisType: chart?.yAxisType\n    };\n    return obj;\n  }\n\n  convertToFormGroupFormat(backendDataStructure: any) {\n    if (!backendDataStructure) {\n      return {};\n    }\n\n    const {\n      __active,\n      __target,\n      __template,\n      color,\n      label,\n      description,\n      fragment,\n      series,\n      min,\n      max,\n      unit,\n      target,\n      redRangeMin,\n      redRangeMax,\n      yellowRangeMin,\n      yellowRangeMax,\n      renderType,\n      lineType,\n      yAxisType\n    } = backendDataStructure;\n\n    const obj = {\n      __active,\n      __target,\n      __template,\n      color,\n      label,\n      description,\n      fragment,\n      series,\n      range: {\n        min: this.convertStringToNumber(min),\n        max: this.convertStringToNumber(max)\n      },\n      unit,\n      target: this.convertStringToNumber(target),\n      redRange: {\n        min: this.convertStringToNumber(redRangeMin),\n        max: this.convertStringToNumber(redRangeMax)\n      },\n      yellowRange: {\n        min: this.convertStringToNumber(yellowRangeMin),\n        max: this.convertStringToNumber(yellowRangeMax)\n      },\n      chart: renderType || lineType || yAxisType ? { renderType, lineType, yAxisType } : undefined,\n      display: renderType ? { renderType } : undefined\n    };\n    return obj;\n  }\n\n  getColorValidators(): ValidatorFn[] {\n    return [Validators.required, Validators.minLength(4)];\n  }\n\n  getLabelValidators(): ValidatorFn[] {\n    return [Validators.required, Validators.minLength(1), Validators.maxLength(120)];\n  }\n\n  getDescriptionValidators(): ValidatorFn[] {\n    return [];\n  }\n\n  getFragmentValidators(): ValidatorFn[] {\n    return [\n      Validators.required,\n      Validators.minLength(1),\n      Validators.maxLength(120),\n      Validators.pattern(/^[^.]*$/)\n    ];\n  }\n\n  getSeriesValidators(): ValidatorFn[] {\n    return [\n      Validators.required,\n      Validators.minLength(1),\n      Validators.maxLength(120),\n      (control: AbstractControl): ValidationErrors | null => {\n        const forbidden = control.value?.includes('.') || '';\n        return forbidden\n          ? { noPeriods: { message: gettext('Series cannot contain periods.') } }\n          : null;\n      }\n    ];\n  }\n\n  getMinMaxValidators(): ValidatorFn[] {\n    return [C8yValidators.minMaxValidator(), C8yValidators.requireBothMinAndMax()];\n  }\n\n  getUnitValidators(): ValidatorFn[] {\n    return [];\n  }\n\n  getTargetValidators(): ValidatorFn[] {\n    return [];\n  }\n\n  getOverallValidators(): ValidatorFn[] {\n    return [\n      C8yValidators.withinScale('redRange.min'),\n      C8yValidators.withinScale('redRange.max'),\n      C8yValidators.withinScale('yellowRange.min'),\n      C8yValidators.withinScale('yellowRange.max'),\n      C8yValidators.withinScale('target')\n    ];\n  }\n\n  getMinMaxFormGroup(): FormGroup {\n    return this.formBuilder.group(\n      { min: [undefined, []], max: [undefined, []] },\n      { validators: this.getMinMaxValidators() }\n    );\n  }\n\n  getChartFormGroup(): FormGroup {\n    return this.formBuilder.group({\n      renderType: [CHART_RENDER_TYPES[0].val, []],\n      lineType: [CHART_LINE_TYPES[0].val, []],\n      yAxisType: [AXIS_TYPES[0].val, []]\n    });\n  }\n\n  getDisplayFormGroup(): FormGroup {\n    return this.formBuilder.group({\n      renderType: [CHART_RENDER_TYPES[0].val, []]\n    });\n  }\n\n  getTargetFormGroup(): FormGroup {\n    return this.formBuilder.group({\n      id: [undefined, []],\n      name: [undefined, []]\n    });\n  }\n\n  private convertStringToNumber(possibleString: string | number): number {\n    if (typeof possibleString === 'string') {\n      try {\n        return Number.parseFloat(possibleString);\n      } catch {\n        return undefined;\n      }\n    } else {\n      return possibleString;\n    }\n  }\n}\n","import { Component, forwardRef, Input, OnInit } from '@angular/core';\nimport {\n  AbstractControl,\n  ControlValueAccessor,\n  FormGroup,\n  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  ValidationErrors,\n  Validator\n} from '@angular/forms';\nimport { map, take } from 'rxjs/operators';\nimport { DatapointAttributesFormValidationService } from './datapoint-attributes-form-validation.service';\nimport {\n  AXIS_TYPES,\n  AxisTypes,\n  CHART_LINE_TYPES,\n  CHART_RENDER_TYPES,\n  ChartLineTypes,\n  ChartRenderTypes\n} from './datapoint-attributes.model';\n\n@Component({\n  selector: 'c8y-datapoint-attributes-form',\n  templateUrl: './datapoint-attributes-form.component.html',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DatapointAttributesFormComponent),\n      multi: true\n    },\n    {\n      provide: NG_VALIDATORS,\n      useExisting: forwardRef(() => DatapointAttributesFormComponent),\n      multi: true\n    }\n  ]\n})\nexport class DatapointAttributesFormComponent implements ControlValueAccessor, Validator, OnInit {\n  @Input() selectableChartRenderTypes: ChartRenderTypes[] = [];\n  @Input() selectableChartLineTypes: ChartLineTypes[] = [];\n  @Input() selectableAxisTypes: AxisTypes[] = [];\n  @Input() showTarget = true;\n  @Input() showRange = true;\n  @Input() showYellowRange = true;\n  @Input() showRedRange = true;\n  @Input() showChart = true;\n  @Input() showFormIfTemplateWasSelected = false;\n  formGroup: FormGroup;\n  range: FormGroup;\n  yellowRange: FormGroup;\n  redRange: FormGroup;\n  chart: FormGroup;\n  display: FormGroup;\n  rawValue: any = {};\n  CHART_RENDER_TYPES: Array<(typeof CHART_RENDER_TYPES)[number]> = Array.from(CHART_RENDER_TYPES);\n  CHART_LINE_TYPES: Array<(typeof CHART_LINE_TYPES)[number]> = Array.from(CHART_LINE_TYPES);\n  AXIS_TYPES: Array<(typeof AXIS_TYPES)[number]> = Array.from(AXIS_TYPES);\n\n  customValidationErrorMessages: {\n    [formField: string]: {\n      [validationError: string]: string;\n    };\n  } = {};\n  shouldForceInitialValidation = true;\n  showOnlyDisplayForm: boolean;\n  showChartForm: boolean;\n\n  constructor(private formValidations: DatapointAttributesFormValidationService) {\n    this.formGroup = this.formValidations.getDefaultFormGroup();\n    this.setSubForms();\n  }\n\n  ngOnInit(): void {\n    this.initializeFormVisibility();\n    this.filterChartTypes();\n  }\n\n  validate(_control: AbstractControl): ValidationErrors {\n    if (this.formGroup?.get('series')?.errors?.noPeriods) {\n      return this.formGroup?.get('series')?.errors;\n    }\n    return this.formGroup?.valid ? null : { formInvalid: {} };\n  }\n\n  writeValue(obj: any): void {\n    this.rawValue = obj || {};\n    if (obj) {\n      this.formGroup.patchValue(this.formValidations.convertToFormGroupFormat(obj), {\n        emitEvent: false\n      });\n    }\n    if (this.shouldForceInitialValidation) {\n      queueMicrotask(() => {\n        this.formGroup.updateValueAndValidity();\n      });\n      this.shouldForceInitialValidation = false;\n    }\n  }\n\n  registerOnChange(fn: any): void {\n    this.formGroup.valueChanges\n      .pipe(\n        map(formValue => this.formValidations.convertToBackendFormat(formValue, this.showChart)),\n        map(formValue => Object.assign(this.rawValue, formValue))\n      )\n      .subscribe(fn);\n  }\n\n  registerOnTouched(fn: any): void {\n    this.formGroup.valueChanges.pipe(take(1)).subscribe(fn);\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    if (this.formGroup?.disabled === isDisabled) {\n      return;\n    }\n    isDisabled ? this.formGroup.disable() : this.formGroup.enable();\n  }\n\n  private setSubForms() {\n    if (!this.formGroup) {\n      this.range = this.yellowRange = this.redRange = this.chart = undefined;\n      return;\n    }\n    this.range = this.formGroup.get('range') as FormGroup;\n    this.yellowRange = this.formGroup.get('yellowRange') as FormGroup;\n    this.redRange = this.formGroup.get('redRange') as FormGroup;\n    this.chart = this.formGroup.get('chart') as FormGroup;\n    this.display = this.formGroup.get('display') as FormGroup;\n  }\n\n  private initializeFormVisibility(): void {\n    this.showChartForm = this.chart && this.showChart;\n\n    const hasLineTypes = !!this.selectableChartLineTypes?.length;\n    const hasAxisTypes = !!this.selectableAxisTypes?.length;\n    const hasRenderTypes =\n      this.selectableChartRenderTypes?.length > 0 || this.selectableChartRenderTypes === undefined;\n\n    this.showOnlyDisplayForm =\n      !this.showChartForm && !hasLineTypes && !hasAxisTypes && hasRenderTypes;\n  }\n\n  private filterChartTypes(): void {\n    this.filterRenderTypes();\n    this.filterLineTypes();\n    this.filterAxisTypes();\n  }\n\n  private filterRenderTypes(): void {\n    if (!!this.selectableChartRenderTypes?.length) {\n      this.CHART_RENDER_TYPES = this.CHART_RENDER_TYPES.filter(renderType =>\n        this.selectableChartRenderTypes.includes(renderType.val)\n      );\n    }\n  }\n\n  private filterLineTypes(): void {\n    if (!!this.selectableChartLineTypes?.length) {\n      this.CHART_LINE_TYPES = this.CHART_LINE_TYPES.filter(lineType =>\n        this.selectableChartLineTypes.includes(lineType.val)\n      );\n    }\n  }\n\n  private filterAxisTypes(): void {\n    if (!!this.selectableAxisTypes?.length) {\n      this.AXIS_TYPES = this.AXIS_TYPES.filter(axisType =>\n        this.selectableAxisTypes.includes(axisType.val)\n      );\n    }\n  }\n}\n","<div [formGroup]=\"formGroup\">\n  <ng-container *ngIf=\"!rawValue?.__template || showFormIfTemplateWasSelected\">\n    <fieldset\n      class=\"c8y-fieldset\"\n      *ngIf=\"formGroup.controls?.label || formGroup.controls?.unit || formGroup.controls?.target\"\n    >\n      <legend translate>Details</legend>\n      <div class=\"row\">\n        <div\n          class=\"col-md-6\"\n          *ngIf=\"formGroup.controls?.label\"\n        >\n          <c8y-form-group class=\"form-group-sm\">\n            <label translate>Label</label>\n            <input\n              class=\"form-control\"\n              name=\"label\"\n              formControlName=\"label\"\n              [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'Temperature' }\"\n            />\n            <c8y-messages\n              [show]=\"formGroup.controls.label.touched && formGroup.controls.label.errors\"\n            >\n              <c8y-message\n                *ngFor=\"let item of customValidationErrorMessages['label'] | keyvalue\"\n                [name]=\"item.key\"\n                [text]=\"item.value\"\n              ></c8y-message>\n            </c8y-messages>\n          </c8y-form-group>\n        </div>\n\n        <div\n          class=\"col-md-6\"\n          *ngIf=\"formGroup.controls?.unit\"\n        >\n          <c8y-form-group class=\"form-group-sm\">\n            <label translate>Unit</label>\n            <input\n              class=\"form-control\"\n              name=\"unit\"\n              formControlName=\"unit\"\n              [placeholder]=\"'e.g. {{ example }}' | translate: { example: 'ºC' }\"\n            />\n            <c8y-messages\n              [show]=\"formGroup.controls.unit.touched && formGroup.controls.unit.errors\"\n            >\n              <c8y-message\n                *ngFor=\"let item of customValidationErrorMessages['unit'] | keyvalue\"\n                [name]=\"item.key\"\n                [text]=\"item.value\"\n              ></c8y-message>\n            </c8y-messages>\n          </c8y-form-group>\n        </div>\n\n        <div\n          class=\"col-md-6\"\n          *ngIf=\"formGroup.controls?.target && showTarget\"\n        >\n          <c8y-form-group class=\"form-group-sm\"\n            [ngClass]=\"{\n              'has-error':\n                (range?.touched || formGroup.controls.target.touched) &&\n                formGroup.controls?.target?.errors\n            }\"\n          >\n            <label translate>Target</label>\n            <input\n              class=\"form-control\"\n              name=\"target\"\n              type=\"number\"\n              formControlName=\"target\"\n              [placeholder]=\"'e.g. {{ example }}' | translate: { example: 25 }\"\n            />\n            <c8y-messages\n              [show]=\"\n                (range?.touched || formGroup.controls.target.touched) &&\n                formGroup.controls.target.errors\n              \"\n            >\n              <c8y-message\n                *ngFor=\"let item of customValidationErrorMessages['target'] | keyvalue\"\n                [name]=\"item.key\"\n                [text]=\"item.value\"\n              ></c8y-message>\n            </c8y-messages>\n          </c8y-form-group>\n        </div>\n      </div>\n    </fieldset>\n    <fieldset\n      class=\"c8y-fieldset\"\n      *ngIf=\"range && showRange\"\n    >\n      <legend translate>Range</legend>\n      <div\n        class=\"row\"\n        formGroupName=\"range\"\n      >\n        <div class=\"col-md-6\">\n          <c8y-form-group class=\"form-group-sm\"\n            [ngClass]=\"{ 'has-error': range?.touched && range?.controls?.min?.errors }\"\n          >\n            <label translate>Min</label>\n            <input\n              class=\"form-control\"\n              name=\"min\"\n              type=\"number\"\n              formControlName=\"min\"\n              [placeholder]=\"'e.g. {{ example }}' | translate: { example: 0 }\"\n            />\n            <c8y-messages [show]=\"range?.touched && range.controls?.min?.errors\"></c8y-messages>\n          </c8y-form-group>\n        </div>\n        <div class=\"col-md-6\">\n          <c8y-form-group class=\"form-group-sm\"\n            [ngClass]=\"{ 'has-error': range?.touched && range?.controls?.max?.errors }\"\n          >\n            <label translate>Max</label>\n            <input\n              class=\"form-control\"\n              name=\"max\"\n              type=\"number\"\n              formControlName=\"max\"\n              [placeholder]=\"'e.g. {{ example }}' | translate: { example: 100 }\"\n            />\n            <c8y-messages [show]=\"range?.touched && range.controls?.max?.errors\">\n              <c8y-message\n                *ngFor=\"let item of customValidationErrorMessages['max'] | keyvalue\"\n                [name]=\"item.key\"\n                [text]=\"item.value\"\n              ></c8y-message>\n            </c8y-messages>\n          </c8y-form-group>\n        </div>\n      </div>\n    </fieldset>\n\n    <fieldset\n      class=\"c8y-fieldset\"\n      formGroupName=\"yellowRange\"\n      *ngIf=\"yellowRange && showYellowRange\"\n    >\n      <legend translate>Yellow range</legend>\n      <div class=\"row\">\n        <div class=\"col-md-6\">\n          <c8y-form-group class=\"form-group-sm\"\n            [ngClass]=\"{\n              'has-error':\n                (range?.touched || yellowRange?.touched) && yellowRange?.controls?.min?.errors\n            }\"\n          >\n            <label translate>Min</label>\n            <input\n              class=\"form-control\"\n              name=\"min\"\n              type=\"number\"\n              formControlName=\"min\"\n              [placeholder]=\"'e.g. {{ example }}' | translate: { example: 50 }\"\n            />\n            <c8y-messages\n              [show]=\"(range?.touched || yellowRange?.touched) && yellowRange.controls?.min?.errors\"\n            ></c8y-messages>\n          </c8y-form-group>\n        </div>\n\n        <div class=\"col-md-6\">\n          <c8y-form-group class=\"form-group-sm\"\n            [ngClass]=\"{\n              'has-error':\n                (range?.touched || yellowRange?.touched) && yellowRange?.controls?.max?.errors\n            }\"\n          >\n            <label translate>Max</label>\n            <input\n              class=\"form-control\"\n              name=\"max\"\n              type=\"number\"\n              formControlName=\"max\"\n              [placeholder]=\"'e.g. {{ example }}' | translate: { example: 75 }\"\n            />\n            <c8y-messages\n              [show]=\"(range?.touched || yellowRange?.touched) && yellowRange.controls?.max?.errors\"\n            ></c8y-messages>\n          </c8y-form-group>\n        </div>\n      </div>\n    </fieldset>\n\n    <fieldset\n      class=\"c8y-fieldset\"\n      formGroupName=\"redRange\"\n      *ngIf=\"redRange && showRedRange\"\n    >\n      <legend translate>Red range</legend>\n      <div class=\"row\">\n        <div class=\"col-md-6\">\n          <c8y-form-group class=\"form-group-sm\"\n            [ngClass]=\"{\n              'has-error': (range?.touched || redRange?.touched) && redRange?.controls?.min?.errors\n            }\"\n          >\n            <label translate>Min</label>\n            <input\n              class=\"form-control\"\n              name=\"min\"\n              type=\"number\"\n              formControlName=\"min\"\n              [placeholder]=\"'e.g. {{ example }}' | translate: { example: 75 }\"\n            />\n            <c8y-messages\n              [show]=\"(range?.touched || redRange?.touched) && redRange.controls?.min?.errors\"\n            ></c8y-messages>\n          </c8y-form-group>\n        </div>\n\n        <div class=\"col-md-6\">\n          <c8y-form-group class=\"form-group-sm\"\n            [ngClass]=\"{\n              'has-error': (range?.touched || redRange?.touched) && redRange?.controls?.max?.errors\n            }\"\n          >\n            <label translate>Max</label>\n            <input\n              class=\"form-control\"\n              name=\"max\"\n              type=\"number\"\n              formControlName=\"max\"\n              [placeholder]=\"'e.g. {{ example }}' | translate: { example: 100 }\"\n            />\n            <c8y-messages\n              [show]=\"(range?.touched || redRange?.touched) && redRange.controls?.max?.errors\"\n            ></c8y-messages>\n          </c8y-form-group>\n        </div>\n      </div>\n    </fieldset>\n  </ng-container>\n\n  <fieldset\n    class=\"c8y-fieldset\"\n    *ngIf=\"showChartForm\"\n    formGroupName=\"chart\"\n  >\n    <legend translate>Chart</legend>\n    <div class=\"tight-grid\">\n      <div\n        class=\"col-xs-6 col-sm-4\"\n        *ngIf=\"selectableChartRenderTypes?.length !== 0\"\n      >\n        <c8y-form-group class=\"form-group-sm\">\n          <ng-container *ngTemplateOutlet=\"displayHelpButton\"></ng-container>\n          <div class=\"c8y-select-wrapper\">\n            <select\n              class=\"form-control\"\n              formControlName=\"renderType\"\n            >\n              <option\n                *ngFor=\"let type of CHART_RENDER_TYPES\"\n                [ngValue]=\"type.val\"\n              >\n                {{ type.text | translate }}\n              </option>\n            </select>\n          </div>\n        </c8y-form-group>\n      </div>\n      <div\n        class=\"col-xs-6 col-sm-4\"\n        *ngIf=\"selectableChartLineTypes?.length !== 0\"\n      >\n        <c8y-form-group class=\"form-group-sm\">\n          <label\n            for=\"chartType\"\n            translate\n          >\n            Chart type\n          </label>\n          <div class=\"c8y-select-wrapper\">\n            <select\n              class=\"form-control\"\n              formControlName=\"lineType\"\n            >\n              <option\n                *ngFor=\"let type of CHART_LINE_TYPES\"\n                [ngValue]=\"type.val\"\n              >\n                {{ type.text | translate }}\n              </option>\n            </select>\n            <span></span>\n          </div>\n        </c8y-form-group>\n      </div>\n      <div\n        class=\"col-xs-6 col-sm-4\"\n        *ngIf=\"selectableAxisTypes?.length !== 0\"\n      >\n        <c8y-form-group class=\"form-group-sm\">\n          <label\n            for=\"yAxis\"\n            translate\n          >\n            Y-axis\n          </label>\n          <div class=\"c8y-select-wrapper\">\n            <select\n              class=\"form-control\"\n              formControlName=\"yAxisType\"\n            >\n              <option\n                *ngFor=\"let type of AXIS_TYPES\"\n                [ngValue]=\"type.val\"\n              >\n                {{ type.text | translate }}\n              </option>\n            </select>\n            <span></span>\n          </div>\n        </c8y-form-group>\n      </div>\n    </div>\n  </fieldset>\n  <fieldset\n    class=\"c8y-fieldset\"\n    *ngIf=\"showOnlyDisplayForm\"\n    formGroupName=\"display\"\n  >\n    <legend>\n      <ng-container *ngTemplateOutlet=\"displayHelpButton\"></ng-container>\n    </legend>\n    <div class=\"tight-grid\">\n      <div class=\"col-xs-6 col-sm-4\">\n        <c8y-form-group class=\"form-group-sm\">\n          <div class=\"c8y-select-wrapper\">\n            <select\n              class=\"form-control\"\n              formControlName=\"renderType\"\n            >\n              <option\n                *ngFor=\"let type of CHART_RENDER_TYPES\"\n                [ngValue]=\"type.val\"\n              >\n                {{ type.text | translate }}\n              </option>\n            </select>\n          </div>\n        </c8y-form-group>\n      </div>\n    </div>\n  </fieldset>\n</div>\n\n<ng-template #displayHelpButton>\n  <label>\n    {{ 'Display' | translate }}\n    <button\n      class=\"btn-help btn-help--sm\"\n      [attr.aria-label]=\"'Help' | translate\"\n      popover=\"{{ 'Value displayed when data is aggregated' | translate }}\"\n      triggers=\"focus\"\n      type=\"button\"\n      placement=\"right\"\n    ></button>\n  </label>\n</ng-template>\n","import { IIdentified, IManagedObject } from '@c8y/client';\nimport { MillerViewComponent } from '@c8y/ngx-components/assets-navigator';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\nimport {\n  AxisTypes,\n  ChartLineTypes,\n  ChartRenderTypes\n} from './datapoint-attributes-form/datapoint-attributes.model';\n\nexport const DATAPOINT_LIBRARY_FRAGMENT = 'c8y_Kpi';\n\nexport interface KPIDetails {\n  fragment: string;\n  series: string;\n  orientation?: string | null;\n  __target?: IIdentified | null;\n  __active?: boolean | null;\n  __template?: string | null | number;\n  unit?: string | null;\n  min?: number | null;\n  color?: string | null;\n  max?: number | null;\n  label?: string | null;\n  target?: number | null;\n  yellowRangeMax?: number | null;\n  yellowRangeMin?: number | null;\n  redRangeMin?: number | null;\n  redRangeMax?: number | null;\n  description?: string | null;\n  renderType?: string | null;\n  lineType?: string | null;\n  yAxisType?: string | null;\n  [key: string]: any;\n}\n\nexport interface ManagedObjectKPI extends IManagedObject {\n  [DATAPOINT_LIBRARY_FRAGMENT]: KPIDetails;\n}\n\nexport interface DatapointAction {\n  label: string;\n  callback: (datapoint: KPIDetails) => void;\n  icon: SupportedIconsSuggestions;\n}\n\nexport interface DatapointAttributesFormConfig {\n  showTarget: boolean;\n  showRange: boolean;\n  showYellowRange: boolean;\n  showRedRange: boolean;\n  showChart: boolean;\n  showFormIfTemplateWasSelected: boolean;\n  selectableChartRenderTypes: ChartRenderTypes[];\n  selectableChartLineTypes: ChartLineTypes[];\n  selectableAxisTypes: AxisTypes[];\n}\n\nexport type DatapointSelectorModalAssetSelectorOptions = Omit<\n  MillerViewComponent,\n  | 'multi'\n  | 'singleColumn'\n  | 'onSelected'\n  | 'millerViewWrapper'\n  | 'columns'\n  | 'ngOnInit'\n  | 'ngOnChanges'\n  | 'addNewColumn'\n  | 'onSelectionChange'\n>;\n","import { Injectable } from '@angular/core';\nimport {\n  IIdentified,\n  IManagedObject,\n  InventoryService,\n  IResultList,\n  MeasurementService\n} from '@c8y/client';\nimport { AppStateService, ColorService, MAX_PAGE_SIZE } from '@c8y/ngx-components';\nimport { get, sortBy, uniq } from 'lodash-es';\nimport { filter } from 'rxjs/operators';\nimport {\n  DATAPOINT_LIBRARY_FRAGMENT,\n  KPIDetails,\n  ManagedObjectKPI\n} from './datapoint-selection.model';\n\n@Injectable({ providedIn: 'root' })\nexport class DatapointLibraryService {\n  protected cache: Promise<ManagedObjectKPI[]>;\n  constructor(\n    private inventory: InventoryService,\n    private appState: AppStateService,\n    private measurements: MeasurementService,\n    private color: ColorService\n  ) {\n    this.appState.currentUser.pipe(filter(user => !user)).subscribe(() => {\n      this.cache = undefined;\n    });\n  }\n\n  async getAllDatapointLibraryEntriesCached(forceCacheRenew = false): Promise<ManagedObjectKPI[]> {\n    if (forceCacheRenew) {\n      this.cache = undefined;\n    }\n    if (!this.cache) {\n      this.cache = this.getAllDatapointLibraryEntries();\n    }\n    return this.cache;\n  }\n\n  async getFirstDatapointLibraryPage(): Promise<IResultList<ManagedObjectKPI>> {\n    const filterObj = {\n      currentPage: 1,\n      pageSize: 50,\n      fragmentType: DATAPOINT_LIBRARY_FRAGMENT,\n      withTotalPages: true\n    };\n    return (await this.inventory.list(filterObj)) as IResultList<ManagedObjectKPI>;\n  }\n\n  async getAllDatapointLibraryItemsCached(): Promise<KPIDetails[]> {\n    if (!this.cache) {\n      this.cache = this.getAllDatapointLibraryEntries();\n    }\n    const res = await this.cache;\n    return res.map(tmp => tmp[DATAPOINT_LIBRARY_FRAGMENT]);\n  }\n\n  async updateDatapoints(\n    datapoints: KPIDetails[],\n    skipUpdatingTarget = false\n  ): Promise<KPIDetails[]> {\n    if (!Array.isArray(datapoints)) {\n      return datapoints;\n    }\n    const currentTargetsPromise: Promise<IManagedObject[]> = !skipUpdatingTarget\n      ? this.getCurrentVersionOfTargetsFromDatapoints(datapoints)\n      : Promise.resolve([]);\n    const [currentTemplates, currentTargets] = await Promise.all([\n      this.getCurrentTemplatesFromDatapoints(datapoints),\n      currentTargetsPromise\n    ]);\n    const currentTemplateVersions = currentTemplates\n      .map(tmp => this.mapDatapointLibraryEntry(tmp as ManagedObjectKPI))\n      .filter(tmp => !!tmp);\n    for (const datapoint of datapoints) {\n      const { fragment, series, __active, __target, color, label, __template } = datapoint;\n      const foundCurrentTemplateVersion = currentTemplateVersions.find(\n        tmp => tmp.__template === datapoint.__template\n      );\n      if (foundCurrentTemplateVersion) {\n        Object.assign(datapoint, foundCurrentTemplateVersion);\n        Object.assign(datapoint, {\n          fragment,\n          series,\n          __active,\n          __target,\n          color,\n          label,\n          __template\n        });\n      }\n\n      const foundCurrentTarget = currentTargets.find(target => target.id === __target?.id);\n      if (foundCurrentTarget) {\n        const { id, name } = foundCurrentTarget;\n        datapoint.__target = { id, name };\n      }\n    }\n    return datapoints;\n  }\n\n  async getDatapointsOfAsset(\n    parentReference: IIdentified,\n    ignoreDatapointTemplates?: boolean,\n    datapointTemplatesOnly = false\n  ): Promise<KPIDetails[]> {\n    const [kpiResponse, details] = await Promise.all([\n      (ignoreDatapointTemplates\n        ? Promise.resolve(null)\n        : this.inventory.assetKPIsList(parentReference, { pageSize: MAX_PAGE_SIZE })) as Promise<\n        IResultList<ManagedObjectKPI>\n      >,\n      this.inventory.getMeasurementsAndSeries(parentReference)\n    ]);\n    const kpis = kpiResponse && kpiResponse.data ? kpiResponse.data : [];\n    const sortedDetails = sortBy(details, ['fragment', 'series']);\n\n    return await this.combineFragmentSeriesTuplesWithDetails(\n      sortedDetails,\n      parentReference,\n      kpis,\n      datapointTemplatesOnly\n    );\n  }\n\n  /**\n   * Requests the last measurement with the given fragment and series to extract it's unit.\n   * If the source attribute is provided, it will check the last measurement for this specific source.\n   * @returns found unit or an empty string instead\n   */\n  async guessUnitOfDatapoint(\n    fragment: string,\n    series: string,\n    source?: IIdentified\n  ): Promise<string> {\n    const measurementfilter: any = {\n      valueFragmentSeries: series,\n      valueFragmentType: fragment,\n      pageSize: 1,\n      revert: true,\n      dateFrom: '1970-01-01'\n    };\n    if (source?.id) {\n      measurementfilter.source = source?.id;\n    }\n    try {\n      const { data: lastMeasurements } = await this.measurements.list(measurementfilter);\n      const measurement = lastMeasurements[0];\n      if (measurement) {\n        const pathToUnit = `${fragment}.${series}.unit`;\n        const unit = get(measurement, pathToUnit);\n        if (unit?.length && typeof unit === 'string') {\n          return unit;\n        }\n      }\n    } catch {\n      // nothing to do\n    }\n    return '';\n  }\n\n  protected async combineFragmentSeriesTuplesWithDetails(\n    tuples: Array<{ fragment: string; series: string }>,\n    target: IIdentified,\n    kpis: ManagedObjectKPI[],\n    datapointTemplatesOnly = false\n  ) {\n    const datapoints = tuples\n      .map(tuple => {\n        const foundDatapointLibraryEntry = kpis.find(\n          kpi =>\n            kpi[DATAPOINT_LIBRARY_FRAGMENT] &&\n            kpi[DATAPOINT_LIBRARY_FRAGMENT].fragment === tuple.fragment &&\n            kpi[DATAPOINT_LIBRARY_FRAGMENT].series === tuple.series\n        );\n        if (!foundDatapointLibraryEntry && datapointTemplatesOnly) {\n          return null;\n        }\n        const datapoint: KPIDetails =\n          this.mapDatapointLibraryEntry(foundDatapointLibraryEntry) || tuple;\n        if (!datapoint.label) {\n          datapoint.label = `${datapoint.fragment} → ${datapoint.series}`;\n        }\n        if (!datapoint.unit?.length) {\n          datapoint.unit = '';\n        }\n        datapoint.__target = target;\n        return datapoint;\n      })\n      .filter(Boolean);\n    await this.assignColorToDatapoints(datapoints);\n    return datapoints;\n  }\n\n  protected async assignColorToDatapoints(datapoints: KPIDetails[]): Promise<void> {\n    const datapointsWithoutColor = datapoints.filter(datapoint => !datapoint.color);\n    await Promise.all(\n      datapointsWithoutColor.map(datapoint =>\n        this.color\n          .generateColorForDatapoint(datapoint.fragment, datapoint.series)\n          .then(color => (datapoint.color = color))\n      )\n    );\n  }\n\n  protected async getAllDatapointLibraryEntries(): Promise<ManagedObjectKPI[]> {\n    const entries = new Array<ManagedObjectKPI>();\n    const filterObj = {\n      currentPage: 1,\n      pageSize: MAX_PAGE_SIZE,\n      fragmentType: DATAPOINT_LIBRARY_FRAGMENT\n    };\n    let res = await this.inventory.list(filterObj);\n    while (res.data.length) {\n      entries.push(...(res.data as ManagedObjectKPI[]));\n      if (res.data.length < res.paging.pageSize) {\n        break;\n      }\n      if (!res.paging.nextPage) {\n        break;\n      }\n\n      res = await res.paging.next();\n    }\n    return entries;\n  }\n\n  protected mapDatapointLibraryEntry(entry: ManagedObjectKPI): KPIDetails {\n    if (!entry || !entry[DATAPOINT_LIBRARY_FRAGMENT]) {\n      return null;\n    }\n\n    const datapoint = entry[DATAPOINT_LIBRARY_FRAGMENT];\n    datapoint.__template = entry.id;\n    return datapoint;\n  }\n\n  protected async getCurrentTemplatesFromDatapoints(\n    datapoints: KPIDetails[]\n  ): Promise<IManagedObject[]> {\n    const datapointsWithTemplateId = datapoints.filter(dp => !!dp.__template);\n    const usedTemplateIds = datapointsWithTemplateId.map(dp => dp.__template);\n    return await this.getMOsByIds(usedTemplateIds);\n  }\n\n  protected async getCurrentVersionOfTargetsFromDatapoints(\n    datapoints: KPIDetails[]\n  ): Promise<IManagedObject[]> {\n    const datapointsWithTarget = datapoints.filter(dp => !!dp.__target?.id);\n    const usedTargetIds = datapointsWithTarget.map(dp => dp.__target.id);\n    return await this.getMOsByIds(usedTargetIds);\n  }\n\n  protected async getMOsByIds(ids: Array<string | number>): Promise<IManagedObject[]> {\n    const uniqManagedObjectIds = uniq(ids);\n    if (!uniqManagedObjectIds.length) {\n      return [];\n    }\n    try {\n      const { data: managedObjects } = await this.inventory.list({\n        ids: uniqManagedObjectIds.join(),\n        pageSize: MAX_PAGE_SIZE\n      });\n      return managedObjects;\n    } catch {\n      // Fail silently in case we are not able to talk to the inventory API.\n      // Should only be reached in case of an server side error.\n      // instead of failing, pretend like we didn't receive any items.\n      console.warn(\n        `Failed to get the current version of the following managedObjects: ${uniqManagedObjectIds.join()}.`\n      );\n      return [];\n    }\n  }\n}\n","import { Component, Input } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components';\nimport { KPIDetails } from '../datapoint-selection.model';\n\n@Component({\n  selector: 'c8y-datapoint-template-popover',\n  templateUrl: './datapoint-template-popover.component.html'\n})\nexport class DatapointTemplatePopoverComponent {\n  @Input() datapoint: KPIDetails;\n  @Input() attributes: Array<{\n    label: string;\n    labelColor?: string;\n    key: keyof KPIDetails;\n  }> = [\n    {\n      label: gettext('Fragment'),\n      key: 'fragment'\n    },\n    {\n      label: gettext('Series'),\n      key: 'series'\n    },\n    {\n      label: gettext('Unit'),\n      key: 'unit'\n    },\n    {\n      label: gettext('Range'),\n      key: 'min'\n    },\n    {\n      label: gettext('Target'),\n      key: 'target'\n    },\n    {\n      label: gettext('Yellow range'),\n      labelColor: 'yellow',\n      key: 'yellowRangeMin'\n    },\n    {\n      label: gettext('Red range'),\n      labelColor: 'red',\n      key: 'redRangeMin'\n    }\n  ];\n}\n","<p class=\"text-medium\">\n  <i c8yIcon=\"circle\" [style.color]=\"datapoint.color\"></i>\n  {{ datapoint.label }}\n</p>\n<p>{{ datapoint.description }}</p>\n\n<ul class=\"list-unstyled small p-t-16\">\n  <ng-container *ngFor=\"let attribute of attributes; let i = index\">\n    <li\n      class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\"\n      *ngIf=\"datapoint[attribute.key] !== undefined\"\n    >\n      <label class=\"small m-b-0 m-r-8\">\n        <i *ngIf=\"attribute.labelColor\" c8yIcon=\"square\" [style.color]=\"attribute.labelColor\"></i>\n        {{ attribute.label | translate }}\n      </label>\n      <ng-container [ngSwitch]=\"attribute.key\">\n        <span *ngSwitchCase=\"'min'\" class=\"m-l-auto\">\n          {{ datapoint['min'] }} — {{ datapoint['max'] }}\n        </span>\n        <span *ngSwitchCase=\"'yellowRangeMin'\" class=\"m-l-auto\">\n          {{ datapoint['yellowRangeMin'] }} — {{ datapoint['yellowRangeMax'] }}\n        </span>\n        <span *ngSwitchCase=\"'redRangeMin'\" class=\"m-l-auto\">\n          {{ datapoint['redRangeMin'] }} — {{ datapoint['redRangeMax'] }}\n        </span>\n        <span *ngSwitchDefault class=\"m-l-auto\">\n          {{ datapoint[attribute.key] }}\n        </span>\n      </ng-container>\n    </li>\n  </ng-container>\n</ul>\n","import { Component, ContentChild, EventEmitter, forwardRef, Input, Output } from '@angular/core';\nimport {\n  AbstractControl,\n  ControlValueAccessor,\n  FormBuilder,\n  FormGroup,\n  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  ValidationErrors,\n  Validator\n} from '@angular/forms';\nimport { IResultList } from '@c8y/client';\nimport { Observable, pipe } from 'rxjs';\nimport { map, startWith, take } from 'rxjs/operators';\nimport { ForOfFilterPipe, ListItemDragHandleComponent } from '@c8y/ngx-components';\nimport {\n  DatapointAction,\n  DatapointAttributesFormConfig,\n  DATAPOINT_LIBRARY_FRAGMENT,\n  KPIDetails,\n  ManagedObjectKPI\n} from '../datapoint-selection.model';\n\nexport const AddButtonTypes = {\n  none: 'none',\n  addRemove: 'add-remove',\n  select: 'select'\n} as const;\nexport type AddButtonType = (typeof AddButtonTypes)[keyof typeof AddButtonTypes];\n\n@Component({\n  selector: 'c8y-datapoint-selector-list-item',\n  templateUrl: './datapoint-selector-list-item.component.html',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => DatapointSelectorListItemComponent),\n      multi: true\n    },\n    {\n      provide: NG_VALIDATORS,\n      useExisting: forwardRef(() => DatapointSelectorListItemComponent),\n      multi: true\n    }\n  ]\n})\nexport class DatapointSelectorListItemComponent implements ControlValueAccessor, Validator {\n  formGroup: FormGroup;\n  @Input() defaultFormOptions: Partial<DatapointAttributesFormConfig> = {};\n  @Input() isSelected = false;\n  @Input() isCollapsed = true;\n  @Input() addButtonType: AddButtonType = AddButtonTypes.addRemove;\n  @Input() editable = true;\n  @Input() showActiveToggle = false;\n  @Input() activeToggleDisabled = false;\n  @Input() showOptions = false;\n  @Input() datapointLibraryEntries: Observable<IResultList<ManagedObjectKPI>>;\n  @Input() actions: DatapointAction[] = [];\n  @Input() optionToRemove = false;\n  @Input() hasUnlinkTemplateOption = false;\n  @Output() added = new EventEmitter<KPIDetails>();\n  @Output() removed = new EventEmitter<KPIDetails>();\n  @Input() colorPickerDisabled = true;\n  @Input() disableTypeaheadIfSelected = false;\n  @Input() highlightText: string;\n  @ContentChild(ListItemDragHandleComponent) dragHandle: ListItemDragHandleComponent;\n\n  pattern = '';\n  filterPipe: ForOfFilterPipe<ManagedObjectKPI>;\n  isValid$: Observable<boolean>;\n  errorMessage: string;\n  AddButtonTypes = AddButtonTypes;\n\n  constructor(private formBuilder: FormBuilder) {\n    this.formGroup = this.formBuilder.group({\n      details: [],\n      color: [],\n      __active: [],\n      __target: [],\n      fragment: [],\n      series: [],\n      __template: []\n    });\n    this.isValid$ = this.formGroup.statusChanges.pipe(\n      map(status => status === 'VALID'),\n      startWith(this.formGroup.valid)\n    );\n  }\n\n  validate(_control: AbstractControl): ValidationErrors {\n    if (this.formGroup?.invalid) {\n      Object.keys(this.formGroup.controls).forEach(controlName => {\n        const control = this.formGroup.controls[controlName];\n        if (control.invalid) {\n          const errors = control.errors;\n          if (errors) {\n            this.errorMessage = Object.values(errors)[0].message;\n          }\n        }\n      });\n    }\n    return this.formGroup?.valid ? null : { formInvalid: {} };\n  }\n\n  writeValue(obj: any): void {\n    this.formGroup.patchValue({ ...obj, details: obj });\n  }\n\n  registerOnChange(fn: any): void {\n    this.formGroup.valueChanges.pipe(map(tmp => this.transformFormValue(tmp))).subscribe(fn);\n  }\n\n  registerOnTouched(fn: any): void {\n    this.formGroup.valueChanges.pipe(take(1)).subscribe(fn);\n  }\n\n  setDisabledState(isDisabled: boolean): void {\n    if (this.formGroup?.disabled === isDisabled) {\n      return;\n    }\n    isDisabled ? this.formGroup.disable() : this.formGroup.enable();\n  }\n\n  collapse() {\n    this.isCollapsed = !this.isCollapsed;\n  }\n\n  addOrRemoveItem() {\n    const value = this.transformFormValue(this.formGroup.value);\n    if (this.isSelected) {\n      this.removed.emit(value);\n    } else {\n      this.added.emit(value);\n    }\n  }\n\n  remove() {\n    this.removed.emit(this.transformFormValue(this.formGroup.value));\n  }\n\n  setPipe(filterStr: string) {\n    this.pattern = filterStr;\n    this.filterPipe = pipe(\n      map((data: ManagedObjectKPI[]) => {\n        return this.filterDatapointLabel(data, filterStr);\n      })\n    );\n  }\n\n  unlinkDatapointTemplate(): void {\n    const details = this.formGroup.value.details || {};\n    this.resetUnusedProperties(details);\n    this.formGroup.patchValue({ __template: undefined, details });\n  }\n\n  dataPointTemplateSelected(template: ManagedObjectKPI) {\n    const attributesToAssign: Array<keyof KPIDetails> = [\n      'color',\n      'label',\n      'min',\n      'max',\n      'yellowRangeMax',\n      'yellowRangeMin',\n      'redRangeMax',\n      'redRangeMin',\n      'target',\n      'orientation',\n      'unit'\n    ];\n    const { fragment, series, __target, __active } = this.formGroup.value;\n    const dataPoint: KPIDetails = {\n      fragment,\n      series,\n      __active,\n      __target,\n      __template: template.id\n    };\n    for (const attribute of attributesToAssign) {\n      const value = template[DATAPOINT_LIBRARY_FRAGMENT][attribute];\n      dataPoint[attribute] = value;\n    }\n    this.writeValue(dataPoint);\n    this.setPipe('');\n  }\n\n  private resetUnusedProperties(details: Partial<KPIDetails>): void {\n    const { showTarget, showYellowRange, showRedRange } = this.defaultFormOptions;\n    details.__template = undefined;\n    if (!showTarget) {\n      details.target = undefined;\n    }\n    if (!showYellowRange) {\n      details.yellowRangeMin = undefined;\n      details.yellowRangeMax = undefined;\n    }\n    if (!showRedRange) {\n      details.redRangeMin = undefined;\n      details.redRangeMax = undefined;\n    }\n  }\n\n  private filterDatapointLabel(kpis: ManagedObjectKPI[], filterStr: string): ManagedObjectKPI[] {\n    return kpis.filter(\n      (mo: ManagedObjectKPI) =>\n        mo[DATAPOINT_LIBRARY_FRAGMENT] &&\n        mo[DATAPOINT_LIBRARY_FRAGMENT].label &&\n        typeof mo[DATAPOINT_LIBRARY_FRAGMENT].label === 'string' &&\n        mo[DATAPOINT_LIBRARY_FRAGMENT].label.toLowerCase().indexOf(filterStr.toLowerCase()) > -1\n    );\n  }\n\n  private transformFormValue(formValue: any) {\n    const obj = Object.assign({}, formValue.details || {}, formValue);\n    delete obj.details;\n    return obj;\n  }\n}\n","<c8y-li class=\"c8y-list__item__collapse--container-small\" [formGroup]=\"formGroup\" #li>\n  <c8y-li-drag-handle><ng-content select=\"c8y-li-drag-handle\"></ng-content></c8y-li-drag-handle>\n  <c8y-li-checkbox\n    class=\"a-s-center p-r-0\"\n    *ngIf=\"showActiveToggle\"\n    [displayAsSwitch]=\"true\"\n    formControlName=\"__active\"\n    (click)=\"$event.stopPropagation()\"\n  ></c8y-li-checkbox>\n\n  <div class=\"d-flex a-i-center \">\n    <div class=\"c8y-list__item__colorpicker p-t-0 p-b-0 p-l-4\" [title]=\"'Change color' | translate\">\n      <div class=\"c8y-colorpicker\">\n        <input\n          type=\"color\"\n          [attr.aria-label]=\"'Color' | translate\"\n          formControlName=\"color\"\n          (click)=\"$event.stopPropagation()\"\n        />\n        <span [style.background-color]=\"formGroup.value.color\"></span>\n      </div>\n    </div>\n    <button\n      class=\"btn-clean data-point-label text-truncate\"\n      type=\"button\"\n      [attr.aria-expanded]=\"!li.collapsed\"\n      (click)=\"li.collapsed = !li.collapsed\"\n    >\n      <span class=\"text-truncate\" [title]=\"formGroup.value.details?.label\">\n        <c8y-highlight\n          [text]=\"formGroup.value.details?.label\"\n          [pattern]=\"highlightText\"\n          [shouldTrimPattern]=\"true\"\n        ></c8y-highlight>\n      </span>\n      <small class=\"text-truncate text-muted icon-flex\" *ngIf=\"formGroup.value.__target\">\n        <i c8yIcon=\"exchange\"></i>\n        <span class=\"text-truncate\">{{ formGroup.value.__target.name }}</span>\n      </small>\n    </button>\n\n    <button\n      class=\"btn btn-dot btn-dot--danger m-l-auto\"\n      type=\"button\"\n      [attr.aria-label]=\"'Invalid' | translate\"\n      [popover]=\"\n        errorMessage\n          ? errorMessage\n          : ('Some entries are invalid. Check the input fields with red borders.' | translate)\n      \"\n      triggers=\"focus\"\n      placement=\"left\"\n      container=\"body\"\n      *ngIf=\"!(isValid$ | async)\"\n    >\n      <i c8yIcon=\"warning\"></i>\n    </button>\n    <div class=\"m-l-auto a-s-center p-r-4\" *ngIf=\"addButtonType === AddButtonTypes.addRemove\">\n      <button\n        class=\"btn btn-dot btn-dot--danger\"\n        type=\"button\"\n        [attr.aria-label]=\"'Remove' | translate\"\n        [tooltip]=\"'Remove from selected data points' | translate\"\n        [delay]=\"500\"\n        (click)=\"addOrRemoveItem()\"\n        *ngIf=\"isSelected\"\n        [attr.data-cy]=\"'datapoint-selector-list-item--remove-datapoint-button'\"\n      >\n        <i class=\"icon-20\" c8yIcon=\"minus-circle\"></i>\n      </button>\n      <button\n        class=\"btn btn-dot text-primary\"\n        type=\"button\"\n        [attr.aria-label]=\"'Add to selected data points' | translate\"\n        [tooltip]=\"'Add to selected data points' | translate\"\n        [delay]=\"500\"\n        [disabled]=\"!(isValid$ | async)\"\n        (click)=\"addOrRemoveItem()\"\n        *ngIf=\"!isSelected\"\n        [attr.data-cy]=\"'datapoint-selector-list-item--add-datapoint-button'\"\n      >\n        <i class=\"text-primary icon-20\" c8yIcon=\"plus-circle\"></i>\n      </button>\n    </div>\n    <button\n        *ngIf=\"addButtonType === AddButtonTypes.select\"\n        class=\"btn btn-default btn-sm m-l-auto\"\n        type=\"button\"\n        [attr.aria-label]=\"'Select' | translate\"\n        [tooltip]=\"'Select data point' | translate\"\n        [delay]=\"500\"\n        (click)=\"addOrRemoveItem()\"\n      >{{ 'Select' | translate }}</button>\n  </div>\n\n  <c8y-li-action\n    *ngIf=\"optionToRemove\"\n    [icon]=\"'minus-circle'\"\n    [label]=\"'Remove from list' | translate\"\n    (click)=\"remove()\"\n  ></c8y-li-action>\n  <c8y-li-action\n    *ngFor=\"let action of actions\"\n    [icon]=\"action.icon\"\n    [label]=\"action.label\"\n    (click)=\"action.callback(formGroup.value)\"\n  ></c8y-li-action>\n  <c8y-li-collapse *ngIf=\"editable\">\n    <div class=\"data-point-details\">\n      <ul class=\"list-unstyled small m-b-16\">\n        <li class=\"p-t-4 p-b-4 d-flex separator-top-bottom\">\n          <label class=\"small m-b-0 m-r-8 a-s-start text-muted\" translate>Fragment</label>\n          <span class=\"m-l-auto\">\n            <c8y-highlight\n              [text]=\"formGroup.value.fragment\"\n              [pattern]=\"highlightText\"\n              [shouldTrimPattern]=\"true\"\n            ></c8y-highlight>\n          </span>\n        </li>\n        <li class=\"p-t-4 p-b-4 d-flex separator-bottom\">\n          <label class=\"small m-b-0 m-r-8 a-s-start text-muted\" translate>Series</label>\n          <span class=\"m-l-auto\">\n            <c8y-highlight\n              [text]=\"formGroup.value.series\"\n              [pattern]=\"highlightText\"\n              [shouldTrimPattern]=\"true\"\n            ></c8y-highlight>\n          </span>\n        </li>\n      </ul>\n      <div\n        class=\"form-group form-group-sm\"\n        *ngIf=\"datapointLibraryEntries && datapointLibraryEntries | async as libraryEntries\"\n      >\n        <label>\n          {{ 'Data point template' | translate }} \n          <button\n            class=\"btn-help btn-help--sm\"\n            type=\"button\"\n            [attr.aria-label]=\"'Help' | translate\"\n            [popover]=\"datapointHintPopoverTemplate\"\n            (click)=\"$event.stopPropagation()\"\n            triggers=\"focus\"\n            placement=\"top\"\n          ></button>\n        </label>\n      \n\n        <ng-template #datapointHintPopoverTemplate>\n          {{\n            'Using a data point template sets color, label, unit and ranges. Removing the template allows you to set the values manually.'\n              | translate\n          }}\n        </ng-template>\n        <div class=\"input-group input-group-sm\">\n          <c8y-typeahead\n            class=\"flex-grow\"\n            [placeholder]=\"'No template' | translate\"\n            [ngModel]=\"formGroup.value.__template ? formGroup.value.details : undefined\"\n            [ngModelOptions]=\"{ standalone: true }\"\n            (onSearch)=\"setPipe($event)\"\n            [displayProperty]=\"'label'\"\n            [hideNew]=\"true\"\n            *ngIf=\"datapointLibraryEntries\"\n            [disabled]=\"isSelected && disableTypeaheadIfSelected\"\n          >\n            <c8y-li\n              class=\"p-l-8 p-r-8 c8y-list__item--link interact\"\n              *c8yFor=\"\n                let item of datapointLibraryEntries;\n                loadMore: 'auto';\n                pipe: filterPipe;\n                notFound: notFoundTemplate\n              \"\n              (click)=\"dataPointTemplateSelected(item)\"\n              [active]=\"formGroup.value.__template === item.id\"\n              [attr.role]=\"'menuitem'\"\n            >\n              <c8y-highlight [text]=\"item.c8y_Kpi?.label\" [pattern]=\"pattern\"></c8y-highlight>\n              <c8y-li-icon icon=\"circle\" [style.color]=\"item.c8y_Kpi?.color\"></c8y-li-icon>\n            </c8y-li>\n            <ng-template #notFoundTemplate>\n              <c8y-li class=\"bg-level-2 p-8\" *ngIf=\"pattern.length > 0\">\n                <span>No match found.</span>\n              </c8y-li>\n            </ng-template>\n          </c8y-typeahead>\n          <div class=\"input-group-btn\">\n            <button\n              class=\"btn btn-default\"\n              type=\"button\"\n              [attr.aria-label]=\"'Info' | translate\"\n              [popover]=\"datapointOverviewPopoverTemplate\"\n              placement=\"left\"\n              triggers=\"focus\"\n              container=\"body\"\n              *ngIf=\"formGroup.value.__template\"\n            >\n              <i class=\"text-info\" c8yIcon=\"info\"></i>\n            </button>\n          </div>\n          <div class=\"input-group-btn\">\n            <button\n              class=\"btn btn-default\"\n              type=\"button\"\n              tooltip=\"{{ 'Unlink data point template' | translate }}\"\n              [attr.aria-label]=\"'Unlink data point template' | translate\"\n              [delay]=\"500\"\n              placement=\"left\"\n              container=\"body\"\n              [adaptivePosition]=\"false\"\n              *ngIf=\"formGroup.value.__template && hasUnlinkTemplateOption\"\n              (click)=\"unlinkDatapointTemplate()\"\n            >\n              <i c8yIcon=\"unlink\"></i>\n            </button>\n          </div>\n        </div>\n      </div>\n      <ng-template #datapointOverviewPopoverTemplate>\n        <c8y-datapoint-template-popover\n          [datapoint]=\"formGroup.value.details\"\n        ></c8y-datapoint-template-popover>\n      </ng-template>\n      <c8y-datapoint-attributes-form\n        *ngIf=\"defaultFormOptions\"\n        [showTarget]=\"defaultFormOptions.showTarget\"\n        [showRange]=\"defaultFormOptions.showRange\"\n        [showYellowRange]=\"defaultFormOptions.showYellowRange\"\n        [showRedRange]=\"defaultFormOptions.showRedRange\"\n        [showChart]=\"defaultFormOptions.showChart\"\n        [showFormIfTemplateWasSelected]=\"defaultFormOptions.showFormIfTemplateWasSelected\"\n        [selectableChartRenderTypes]=\"defaultFormOptions.selectableChartRenderTypes\"\n        [selectableChartLineTypes]=\"defaultFormOptions.selectableChartLineTypes\"\n        [selectableAxisTypes]=\"defaultFormOptions.selectableAxisTypes\"\n        formControlName=\"details\"\n      ></c8y-datapoint-attributes-form>\n    </div>\n  </c8y-li-collapse>\n</c8y-li>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { KPIDetails } from '../datapoint-selection.model';\n\n@Pipe({\n  name: 'includesDatapoint'\n})\nexport class IncludesDatapointPipe implements PipeTransform {\n  transform(datapointList: KPIDetails[], datapoint?: KPIDetails): boolean {\n    if (!Array.isArray(datapointList) || !datapoint) {\n      return false;\n    }\n    return datapointList.some(\n      tmp =>\n        tmp.fragment === datapoint.fragment &&\n        tmp.series === datapoint.series &&\n        tmp.__target?.id === datapoint.__target?.id\n    );\n  }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { KPIDetails } from '../datapoint-selection.model';\n\n@Pipe({\n  name: 'datapointLabel'\n})\nexport class DatapointLabelPipe implements PipeTransform {\n  transform(\n    datapoint: KPIDetails,\n    options = { includeDevice: false, doNotUseLabel: false }\n  ): string {\n    let label = '';\n    try {\n      if (!options?.doNotUseLabel && datapoint.label) {\n        label = datapoint.label;\n      } else {\n        label = `${datapoint.fragment} → ${datapoint.series}`;\n      }\n\n      if (options?.includeDevice && (datapoint.__target?.name || datapoint.__target?.id)) {\n        label += ` (${datapoint.__target?.name || datapoint.__target?.id})`;\n      }\n    } catch (e) {\n      // nothing to do\n    }\n\n    return label;\n  }\n}\n","import { Component, forwardRef, Input, OnInit } from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { IIdentified, IResultList } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components';\nimport { BehaviorSubject, combineLatest, from, Observable } from 'rxjs';\nimport {\n  debounceTime,\n  distinctUntilChanged,\n  map,\n  shareReplay,\n  switchMap,\n  tap\n} from 'rxjs/operators';\nimport { DatapointLibraryService } from './datapoint-library.service';\nimport { KPIDetails, ManagedObjectKPI } from './datapoint-selection.model';\nimport { AddButtonTypes } from './datapoint-selector-list-item/datapoint-selector-list-item.component';\n\n@Component({\n  selector: 'c8y-datapoint-selector',\n  templateUrl: './datapoint-selector.component.html',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      multi: true,\n      useExisting: forwardRef(() => DatapointSelectorComponent)\n    }\n  ]\n})\nexport class DatapointSelectorComponent implements OnInit, ControlValueAccessor {\n  @Input() contextAsset: IIdentified;\n  @Input() allowChangingContext = true;\n  @Input() allowDatapointsFromMultipleAssets = true;\n  selectedDatapoints = new Array<KPIDetails>();\n  @Input() defaultActiveState = true;\n  @Input() ignoreDatapointTemplates = false;\n  @Input() datapointTemplatesOnly = false;\n  @Input() guessDatapointUnit = true;\n  @Input() allowSearch = true;\n  @Input() hideSelection = false;\n  @Input() itemsEditable = true;\n  searchString = '';\n  maxNumberOfDatapoints = 50;\n  selectorTitle: string;\n  emptyStateTitle: string;\n  selectedListTitle: string;\n  AddButtonTypes = AddButtonTypes;\n\n  loadingDatapoints = false;\n  assetSelection = new BehaviorSubject<IIdentified>(null);\n  datapoints$: Observable<KPIDetails[]>;\n  filteredDatapoints$: Observable<KPIDetails[]>;\n  searchStringChanges$: Observable<string>;\n  datapointLibraryEntries: Observable<IResultList<ManagedObjectKPI>>;\n\n  emptyStateSubtitleWhenNoMatchingDataPoints = gettext('Try another search term.');\n  emptyStateSubtitleWhenNoDataPointsInAsset = gettext(\n    'Select an asset with data points from the list.'\n  );\n\n  private searchString$ = new BehaviorSubject('');\n  private touched = false;\n  private onChange: (quantity: KPIDetails[]) => void;\n  private onTouched: () => void;\n\n  constructor(private datapointService: DatapointLibraryService) {}\n\n  ngOnInit(): void {\n    this.selectorTitle = this.datapointTemplatesOnly\n      ? gettext('Available data point templates')\n      : gettext('Available data points');\n    this.emptyStateTitle = this.datapointTemplatesOnly\n      ? gettext('No data point templates to display.')\n      : gettext('No data points to display.');\n    this.selectedListTitle = this.datapointTemplatesOnly\n      ? gettext('Selected data point templates')\n      : gettext('Selected data points');\n    this.setupObservables();\n    if (!this.ignoreDatapointTemplates) {\n      this.datapointLibraryEntries = from(this.datapointService.getFirstDatapointLibraryPage());\n    }\n\n    if (this.contextAsset) {\n      this.selectionChanged(this.contextAsset);\n    }\n  }\n\n  writeValue(obj: KPIDetails[]): void {\n    this.selectedDatapoints = obj;\n  }\n\n  registerOnChange(fn: any): void {\n    this.onChange = fn;\n  }\n\n  registerOnTouched(fn: any): void {\n    this.onTouched = fn;\n  }\n\n  datapointAdded(dp: KPIDetails): void {\n    this.markAsTouched();\n    dp.__active = this.defaultActiveState;\n    if (this.guessDatapointUnit && !dp.unit) {\n      this.datapointService.guessUnitOfDatapoint(dp.fragment, dp.series, dp.__target).then(unit => {\n        dp.unit = unit;\n      });\n    }\n    this.selectedDatapoints = [...this.selectedDatapoints, dp];\n    this.emitCurrentSelection();\n  }\n\n  datapointRemoved(dp: KPIDetails): void {\n    this.markAsTouched();\n    this.selectedDatapoints = this.selectedDatapoints.filter(\n      tmp =>\n        tmp.fragment !== dp.fragment ||\n        tmp.series !== dp.series ||\n        tmp.__target?.id !== dp.__target?.id\n    );\n    this.emitCurrentSelection();\n  }\n\n  selectionChanged(evt: IIdentified | IIdentified[]): void {\n    if (Array.isArray(evt) && evt.length !== 0) {\n      return this.selectAsset(evt[0]);\n    }\n\n    if (!Array.isArray(evt) && evt.items) {\n      return this.selectionChanged(evt.items);\n    }\n\n    if (!Array.isArray(evt) && evt.id) {\n      return this.selectAsset(evt);\n    }\n\n    // reset selection\n    this.assetSelection.next(null);\n  }\n\n  trackByFn(_index: number, item: KPIDetails): string {\n    return `${item.fragment}-${item.__target?.id}-${item.series}`;\n  }\n\n  searchStringChanged(newValue = ''): void {\n    this.searchString$.next(newValue);\n    this.searchString = newValue;\n  }\n\n  private setupObservables(): void {\n    this.datapoints$ = this.assetSelection.pipe(\n      tap(() => {\n        this.loadingDatapoints = true;\n      }),\n      switchMap(asset =>\n        asset?.id\n          ? this.datapointService.getDatapointsOfAsset(\n              asset,\n              this.ignoreDatapointTemplates,\n              this.datapointTemplatesOnly\n            )\n          : []\n      ),\n      tap(() => (this.loadingDatapoints = false)),\n      shareReplay(1)\n    );\n\n    this.searchStringChanges$ = this.searchString$.pipe(\n      distinctUntilChanged(),\n      debounceTime(500),\n      shareReplay(1)\n    );\n\n    this.filteredDatapoints$ = combineLatest([this.searchStringChanges$, this.datapoints$]).pipe(\n      map(([searchString, datapoints]) => {\n        if (!searchString) {\n          return datapoints;\n        }\n        const lowerCaseSearchString = searchString.toLowerCase();\n        return datapoints.filter(datapoint =>\n          this.includesSearchString(datapoint, lowerCaseSearchString)\n        );\n      }),\n      map(filtered => filtered.slice(0, this.maxNumberOfDatapoints))\n    );\n  }\n\n  private selectAsset(asset: IIdentified) {\n    this.assetSelection.next(asset);\n    this.searchStringChanged();\n    if (!this.allowDatapointsFromMultipleAssets) {\n      this.clearSelection();\n    }\n  }\n\n  private clearSelection(): void {\n    this.selectedDatapoints = [];\n    this.emitCurrentSelection();\n  }\n\n  private emitCurrentSelection() {\n    this.onChange(this.selectedDatapoints);\n  }\n\n  private markAsTouched() {\n    if (!this.touched) {\n      this.onTouched();\n      this.touched = true;\n    }\n  }\n\n  private includesSearchString(datapoint: KPIDetails, lowerCaseSearchString: string): boolean {\n    const label = datapoint.label?.toLowerCase();\n    if (label && label.includes(lowerCaseSearchString)) {\n      return true;\n    }\n\n    const fragment = datapoint.fragment?.toLowerCase();\n    if (fragment && fragment.includes(lowerCaseSearchString)) {\n      return true;\n    }\n\n    const series = datapoint.series?.toLowerCase();\n    if (series && series.includes(lowerCaseSearchString)) {\n      return true;\n    }\n\n    return false;\n  }\n}\n","<div\n  class=\"d-grid grid__row--1 fit-h\"\n  [ngClass]=\"{\n    'grid__col--3-6-3--md': allowChangingContext && !hideSelection,\n    'grid__col--8-4--md': !allowChangingContext && !hideSelection,\n    'grid__col--4-8--md': allowChangingContext && hideSelection\n  }\"\n>\n  <div class=\"d-flex d-col p-relative bg-level-1\" *ngIf=\"allowChangingContext\">\n    <c8y-asset-selector-miller\n      class=\"d-contents\"\n      [(ngModel)]=\"contextAsset\"\n      [asset]=\"contextAsset\"\n      (onSelected)=\"selectionChanged($event)\"\n      [container]=\"''\"\n      [config]=\"{\n        view: 'miller',\n        groupsSelectable: true,\n        columnHeaders: true,\n        showChildDevices: true,\n        showUnassignedDevices: true,\n        singleColumn: true,\n        search: allowSearch,\n        showFilter: true\n      }\"\n    ></c8y-asset-selector-miller>\n  </div>\n  <!-- center column -->\n  <div class=\"inner-scroll bg-component\">\n    <ng-template #noDeviceEmptyState>\n      <div class=\"p-16\">\n        <c8y-ui-empty-state\n          [icon]=\"'c8y-data-points'\"\n          [title]=\"emptyStateTitle | translate\"\n          [subtitle]=\"'Select an asset from the list.' | translate\"\n          [horizontal]=\"true\"\n        ></c8y-ui-empty-state>\n      </div>\n    </ng-template>\n    <ng-template #loadingData>\n      <div class=\"p-16 text-center\">\n        <c8y-loading></c8y-loading>\n      </div>\n    </ng-template>\n    <div class=\"bg-inherit\" *ngIf=\"assetSelection | async as asset; else noDeviceEmptyState\">\n      <div class=\"p-l-16 p-r-16 p-t-8 p-b-8 sticky-top bg-inherit separator-bottom\">\n        <p\n          class=\"text-medium text-truncate\"\n          [title]=\"selectorTitle | translate\"\n        >\n          {{ selectorTitle | translate }}\n        </p>\n        <div class=\"input-group input-group-search m-t-4\" id=\"search\" *ngIf=\"!loadingDatapoints\">\n          <input\n            class=\"form-control\"\n            type=\"search\"\n            placeholder=\"Search…\"\n            [ngModel]=\"searchString\"\n            (ngModelChange)=\"searchStringChanged($event)\"\n          />\n          <span class=\"input-group-addon\">\n            <i c8yIcon=\"search\" *ngIf=\"!searchString; else clearSearchString\"></i>\n            <ng-template #clearSearchString>\n              <i class=\"text-muted\" c8yIcon=\"times\" (click)=\"searchStringChanged()\"></i>\n            </ng-template>\n          </span>\n        </div>\n      </div>\n      <ng-container *ngIf=\"filteredDatapoints$ | async as filteredDatapoints; else loadingData\">\n        <ng-container *ngIf=\"!loadingDatapoints; else loadingData\">\n          <ng-container *ngIf=\"datapoints$ | async as datapoints\">\n            <div class=\"p-16\" *ngIf=\"!filteredDatapoints.length\">\n              <c8y-ui-empty-state\n                [icon]=\"'c8y-data-points'\"\n                [title]=\"emptyStateTitle | translate\"\n                [subtitle]=\"\n                  datapoints.length\n                    ? (emptyStateSubtitleWhenNoMatchingDataPoints | translate)\n                    : (emptyStateSubtitleWhenNoDataPointsInAsset | translate)\n                \"\n                [horizontal]=\"true\"\n              ></c8y-ui-empty-state>\n            </div>\n\n            <c8y-list-group>\n              <c8y-list-item\n                class=\"sticky-top\"\n                style=\"top: 72px\"\n                *ngIf=\"\n                  datapoints.length > maxNumberOfDatapoints &&\n                  filteredDatapoints.length >= maxNumberOfDatapoints\n                \"\n              >\n                <div class=\"alert alert-warning m-b-0\">\n                  {{\n                    'Due to the large number, only a subset of data points is displayed. Use search to narrow down the number of results.'\n                      | translate\n                  }}\n                </div>\n              </c8y-list-item>\n              <c8y-datapoint-selector-list-item\n                class=\"d-contents\"\n                [ngModel]=\"dp\"\n                [isSelected]=\"selectedDatapoints | includesDatapoint: dp\"\n                [datapointLibraryEntries]=\"datapointLibraryEntries\"\n                [disableTypeaheadIfSelected]=\"true\"\n                [addButtonType]=\"hideSelection ? AddButtonTypes.select : AddButtonTypes.addRemove\"\n                (added)=\"datapointAdded($event)\"\n                (removed)=\"datapointRemoved($event)\"\n                [highlightText]=\"searchStringChanges$ | async\"\n                *ngFor=\"let dp of filteredDatapoints; trackBy: trackByFn\"\n                [editable]=\"itemsEditable\"\n              ></c8y-datapoint-selector-list-item>\n            </c8y-list-group>\n          </ng-container>\n        </ng-container>\n      </ng-container>\n    </div>\n  </div>\n  <!-- last column  -->\n  <div class=\"inner-scroll bg-level-1\" *ngIf=\"!hideSelection\">\n    <p class=\"text-medium p-l-16 p-r-16 p-t-8 p-b-8 separator-bottom sticky-top text-truncate\"\n      [title]=\"selectedListTitle | translate\" translate>{{ selectedListTitle }}</p>\n    <div\n      class=\"d-flex flex-wrap gap-8 p-l-16 p-r-16 p-t-8 p-b-16\"\n      *ngIf=\"selectedDatapoints?.length\"\n    >\n      <div class=\"c8y-datapoint-pill\" *ngFor=\"let selectedDp of selectedDatapoints\">\n        <button\n          class=\"c8y-datapoint-pill__btn\"\n          type=\"button\"\n          [title]=\"'Remove' | translate\"\n          (click)=\"datapointRemoved(selectedDp)\"\n        >\n          <i class=\"icon-14\" c8yIcon=\"remove\"></i>\n        </button>\n        <div\n          class=\"c8y-datapoint-pill__label\"\n          [title]=\"selectedDp | datapointLabel: { doNotUseLabel: true, includeDevice: true }\"\n        >\n          <i class=\"m-r-4 icon-14\" c8yIcon=\"circle\" [style.color]=\"selectedDp.color\"></i>\n          <span class=\"text-truncate\">\n            <span class=\"text-truncate\">{{ selectedDp | datapointLabel }}</span>\n            <small class=\"text-muted text-10\" *ngIf=\"selectedDp?.__target?.name\">\n              {{ selectedDp?.__target?.name }}\n            </small>\n          </span>\n        </div>\n      </div>\n    </div>\n    <div class=\"p-r-8\" *ngIf=\"!selectedDatapoints || !selectedDatapoints.length\">\n      <c8y-ui-empty-state\n        [icon]=\"'c8y-data-points'\"\n        [title]=\"emptyStateTitle | translate\"\n        [subtitle]=\"\n          'Select the asset, then on the available data points list, click on the plus button on the desired data point.'\n            | translate\n        \"\n        [horizontal]=\"true\"\n      ></c8y-ui-empty-state>\n    </div>\n  </div>\n</div>\n","import { Component, ElementRef, OnInit } from '@angular/core';\nimport { IIdentified } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components';\nimport { get } from 'lodash-es';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport {\n  DatapointSelectorModalAssetSelectorOptions,\n  KPIDetails\n} from '../datapoint-selection.model';\n\n@Component({\n  selector: 'c8y-datapoint-selector-modal',\n  templateUrl: './datapoint-selector-modal.component.html'\n})\nexport class DatapointSelectorModalComponent implements OnInit {\n  contextAsset: IIdentified;\n  allowChangingContext = true;\n  allowSearch = true;\n  allowDatapointsFromMultipleAssets = true;\n  selectedDatapoints = new Array<KPIDetails>();\n  title: string = gettext('Data point selector');\n  saveButtonLabel: string = gettext('Add data points');\n  guessDatapointUnit = true;\n  defaultActiveState = true;\n  finishWithFirstSelection = false;\n  ignoreDatapointTemplates = false;\n  itemsEditable = true;\n  datapointTemplatesOnly = false;\n  assetSelectorConfig: Partial<DatapointSelectorModalAssetSelectorOptions> = {};\n  readonly result: Promise<KPIDetails[]> = new Promise((resolve, reject) => {\n    this.save = resolve;\n    this.cancel = reject;\n  });\n\n  private save: (value: KPIDetails[]) => void;\n  private cancel: (reason?: any) => void;\n\n  constructor(\n    private bsModal: BsModalRef,\n    private elementRef: ElementRef\n  ) {}\n\n  ngOnInit(): void {\n    this.applyWorkaroundForAngularJSModalsThatMightBeOpenedInParallel();\n  }\n\n  saveChanges(): void {\n    this.bsModal.hide();\n    this.save(this.selectedDatapoints);\n  }\n\n  close() {\n    this.bsModal.hide();\n    this.cancel();\n  }\n\n  selectionChange(selection: Array<KPIDetails>) {\n    this.selectedDatapoints = selection;\n    if (this.finishWithFirstSelection) {\n      this.saveChanges();\n    }\n  }\n\n  /**\n   * changes the z-index of the modal, to make sure this modal is on top.\n   * required as angularJS modals are placing them selves on top via adjusting z-index.\n   * while angular modals use the order within the dom for this..\n   */\n  private applyWorkaroundForAngularJSModalsThatMightBeOpenedInParallel() {\n    const modalContainer: HTMLElement = get(\n      this.elementRef,\n      'nativeElement.parentElement.parentElement.parentElement'\n    );\n    modalContainer.style.zIndex = '1060';\n  }\n}\n","<div class=\"modal-header separator\">\n  <h4 id=\"modal-title\" class=\"text-medium\">{{ title | translate }}</h4>\n</div>\n<div class=\"modal-inner-scroll modal-inner-scroll--fixed\" id=\"modal-body\">\n  <c8y-datapoint-selector\n    [contextAsset]=\"contextAsset\"\n    [guessDatapointUnit]=\"guessDatapointUnit\"\n    [allowDatapointsFromMultipleAssets]=\"allowDatapointsFromMultipleAssets\"\n    [allowChangingContext]=\"allowChangingContext\"\n    [defaultActiveState]=\"defaultActiveState\"\n    [allowSearch]=\"allowSearch\"\n    [hideSelection]=\"finishWithFirstSelection\"\n    [ignoreDatapointTemplates]=\"ignoreDatapointTemplates\"\n    [datapointTemplatesOnly]=\"datapointTemplatesOnly\"\n    [itemsEditable]=\"itemsEditable\"\n    [ngModel]=\"selectedDatapoints\"\n    (ngModelChange)=\"selectionChange($event)\"\n  ></c8y-datapoint-selector>\n</div>\n<div class=\"modal-footer\">\n  <button\n    type=\"button\"\n    [title]=\"'Cancel' | translate\"\n    class=\"btn btn-default\"\n    (click)=\"close()\"\n    translate\n  >\n    Cancel\n  </button>\n  <button\n    [title]=\"saveButtonLabel | translate\"\n    class=\"btn btn-primary\"\n    [disabled]=\"!this.selectedDatapoints?.length\"\n    (click)=\"saveChanges()\"\n    *ngIf=\"!finishWithFirstSelection\"\n  >\n    {{ saveButtonLabel | translate }}\n  </button>\n</div>\n","import { Injectable } from '@angular/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { KPIDetails } from './datapoint-selection.model';\nimport { DatapointSelectorModalComponent } from './datapoint-selector-modal/datapoint-selector-modal.component';\nimport { DatapointSelectorModalOptions } from './datapoint-selector-modal/datapoint-selector-modal.model';\n\n@Injectable({ providedIn: 'root' })\nexport class DatapointSelectorService {\n  constructor(protected modal: BsModalService) {}\n\n  selectDataPoints(\n    initialState: Partial<DatapointSelectorModalOptions> = {}\n  ): Promise<KPIDetails[]> {\n    const modal = this.modal.show(DatapointSelectorModalComponent, {\n      ignoreBackdropClick: true,\n      keyboard: false,\n      initialState,\n      ariaDescribedby: 'modal-body',\n      ariaLabelledBy: 'modal-title',\n      class: 'modal-lg'\n    });\n    const content = modal.content as DatapointSelectorModalComponent;\n    return content.result;\n  }\n}\n","import { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\nimport {\n  Component,\n  forwardRef,\n  Input,\n  OnChanges,\n  OnInit,\n  Optional,\n  Output,\n  SimpleChanges\n} from '@angular/core';\nimport {\n  AbstractControl,\n  ControlValueAccessor,\n  FormArray,\n  FormBuilder,\n  NG_VALIDATORS,\n  NG_VALUE_ACCESSOR,\n  ValidationErrors,\n  Validator,\n  ValidatorFn\n} from '@angular/forms';\nimport { IResultList } from '@c8y/client';\nimport { C8yValidators } from '@c8y/ngx-components';\nimport { WidgetConfigComponent } from '@c8y/ngx-components/context-dashboard';\nimport { from, Observable } from 'rxjs';\nimport { map, shareReplay, take, tap } from 'rxjs/operators';\nimport { DatapointLibraryService } from '../datapoint-library.service';\nimport {\n  DatapointAction,\n  DatapointAttributesFormConfig,\n  KPIDetails,\n  ManagedObjectKPI\n} from '../datapoint-selection.model';\nimport { DatapointSelectorModalOptions } from '../datapoint-selector-modal/datapoint-selector-modal.model';\nimport { DatapointSelectorService } from '../datapoint-selector.service';\nimport { AddButtonTypes } from '../datapoint-selector-list-item/datapoint-selector-list-item.component';\n\n@Component({\n  selector: 'c8y-datapoint-selection-list',\n  templateUrl: './datapoint-selection-list.component.html',\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      multi: true,\n      useExisting: forwardRef(() => DatapointSelectionListComponent)\n    },\n    {\n      provide: NG_VALIDATORS,\n      useExisting: forwardRef(() => DatapointSelectionListComponent),\n      multi: true\n    }\n  ]\n})\nexport class DatapointSelectionListComponent\n  implements ControlValueAccessor, Validator, OnInit, OnChanges\n{\n  @Input() actions: DatapointAction[] = [];\n  @Input() allowDragAndDrop = true;\n  @Input() config: Partial<DatapointSelectorModalOptions> = {};\n  @Input() defaultFormOptions: Partial<DatapointAttributesFormConfig> = {};\n  @Input() maxActiveCount: number;\n  @Input() minActiveCount = 1;\n  @Input() resolveContext = true;\n  @Input() listTitle = '';\n  formArray: FormArray;\n  datapointLibraryEntries: Observable<IResultList<ManagedObjectKPI>>;\n  maxActiveCountReached = false;\n  AddButtonTypes = AddButtonTypes;\n\n  @Output() isValid: Observable<boolean>;\n  @Output() change: Observable<any[]>;\n  private usedValidators: { [key: string]: ValidatorFn } = {};\n\n  constructor(\n    private datapointSelector: DatapointSelectorService,\n    private datapointLibrary: DatapointLibraryService,\n    private formBuilder: FormBuilder,\n    @Optional() private widgetComponent: WidgetConfigComponent\n  ) {\n    this.formArray = this.formBuilder.array([]);\n    this.isValid = this.formArray.statusChanges.pipe(map(status => status === 'VALID'));\n    this.datapointLibraryEntries = from(this.datapointLibrary.getFirstDatapointLibraryPage()).pipe(\n      shareReplay()\n    );\n    this.change = this.formArray.valueChanges.pipe(map(res => this.transformValue(res)));\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (!changes.maxActiveCount && !changes.minActiveCount) {\n      return;\n    }\n    if (changes.maxActiveCount) {\n      this.usedValidators.maxActiveCount = C8yValidators.maxActiveCount(this.maxActiveCount);\n    }\n\n    if (changes.minActiveCount) {\n      this.usedValidators.minActiveCount = C8yValidators.minActiveCount(this.minActiveCount);\n    }\n    const validators = Object.values(this.usedValidators);\n    this.formArray.setValidators(validators);\n  }\n\n  registerOnTouched(fn: any): void {\n    this.formArray.valueChanges.pipe(take(1)).subscribe(fn);\n  }\n\n  validate(_control: AbstractControl): ValidationErrors {\n    return this.formArray.valid ? null : { formInvalid: {} };\n  }\n\n  ngOnInit(): void {\n    const context = this.widgetComponent?.context;\n    if (context?.id && this.resolveContext) {\n      const { name, id, c8y_IsDevice } = context;\n      this.config.contextAsset = { name, id, c8y_IsDevice };\n    }\n  }\n\n  writeValue(obj: KPIDetails[]): void {\n    this.formArray.clear();\n    if (obj?.length) {\n      obj.forEach(val => {\n        const formgroup = this.formBuilder.group({ details: [] });\n        formgroup.patchValue({ details: val });\n        this.formArray.push(formgroup);\n      });\n    }\n    this.calculateMaxActiveCount();\n  }\n\n  registerOnChange(fn: any): void {\n    this.formArray.valueChanges\n      .pipe(\n        map(res => this.transformValue(res)),\n        // check maxActiveCount\n        tap(() => {\n          this.calculateMaxActiveCount();\n        })\n      )\n      .subscribe(fn);\n  }\n\n  add() {\n    const allowChangingContext =\n      !this.widgetComponent?.isDeviceTypeDashboard && this.config?.allowChangingContext !== false;\n    this.datapointSelector\n      .selectDataPoints({\n        ...(this.config || {}),\n        selectedDatapoints: this.transformValue(this.formArray.value),\n        defaultActiveState: true,\n        allowChangingContext,\n        allowSearch: !this.config?.contextAsset\n      })\n      .then(\n        result => {\n          this.writeValue(result);\n        },\n        () => {\n          // nothing to do, modal was closed\n        }\n      );\n  }\n\n  onItemRemoved(index: number) {\n    this.formArray.removeAt(index);\n  }\n\n  drop(event: CdkDragDrop<KPIDetails[]>) {\n    const currentSorting = this.formArray.value;\n    moveItemInArray(currentSorting, event.previousIndex, event.currentIndex);\n    this.formArray.setValue(currentSorting);\n  }\n\n  private transformValue(formArrayValue: any[]) {\n    if (!formArrayValue) {\n      return [];\n    }\n    return formArrayValue.map(tmp => Object.assign({}, ...Object.values(tmp)));\n  }\n\n  private calculateMaxActiveCount() {\n    if (this.maxActiveCount) {\n      const currentlyActive = this.formArray.value.filter(tmp => tmp.details?.__active).length;\n      this.maxActiveCountReached = currentlyActive >= this.maxActiveCount;\n    }\n    this.maxActiveCountReached = false;\n  }\n}\n","<div class=\"card-header separator sticky-top bg-inherit\">\n  <span\n    class=\"card-title h4\"\n    *ngIf=\"listTitle\"\n  >\n    {{ listTitle | translate }}\n  </span>\n  <span\n    class=\"card-title h4\"\n    *ngIf=\"!listTitle\"\n  >\n    {{ 'Data points' | translate }}\n  </span>\n</div>\n\n<c8y-list-group\n  class=\"flex-grow ff-scroll-fix cdk-droplist\"\n  cdkDropList\n  (cdkDropListDropped)=\"drop($event)\"\n  [cdkDropListDisabled]=\"!allowDragAndDrop || formArray.controls?.length < 2\"\n>\n  <div\n    class=\"alert alert-warning m-t-8\"\n    role=\"alert\"\n    ngNonBindable\n    *ngIf=\"formArray.errors?.minActiveCount\"\n    translate\n    [translateParams]=\"formArray.errors?.minActiveCount\"\n  >\n    At least {{ minActive }} active data points must be selected.\n  </div>\n\n  <div\n    class=\"alert alert-warning m-t-8\"\n    role=\"alert\"\n    ngNonBindable\n    *ngIf=\"formArray.errors?.maxActiveCount\"\n    translate\n    [translateParams]=\"formArray.errors?.maxActiveCount\"\n  >\n    At maximum {{ maxActive }} active data points are allowed to be selected.\n  </div>\n\n  <ng-content select=\".alert\"></ng-content>\n\n  <div\n    class=\"p-t-8\"\n    *ngIf=\"!formArray.controls?.length\"\n  >\n    <c8y-ui-empty-state\n      class=\"p-t-8\"\n      [icon]=\"'c8y-data-points'\"\n      [title]=\"'No data points to display.' | translate\"\n      [subtitle]=\"'Add your first data point.' | translate\"\n      [horizontal]=\"true\"\n    ></c8y-ui-empty-state>\n  </div>\n  <div\n    [formGroup]=\"dpForm\"\n    *ngFor=\"let dpForm of formArray.controls; let index = index\"\n  >\n    <c8y-datapoint-selector-list-item\n      class=\"d-block\"\n      [defaultFormOptions]=\"defaultFormOptions\"\n      [activeToggleDisabled]=\"maxActiveCountReached\"\n      [showActiveToggle]=\"true\"\n      [addButtonType]=\"AddButtonTypes.none\"\n      [showOptions]=\"true\"\n      [editable]=\"true\"\n      [colorPickerDisabled]=\"false\"\n      [actions]=\"actions\"\n      [optionToRemove]=\"true\"\n      [datapointLibraryEntries]=\"datapointLibraryEntries\"\n      [hasUnlinkTemplateOption]=\"true\"\n      formControlName=\"details\"\n      (removed)=\"onItemRemoved(index)\"\n      cdkDrag\n    >\n      <c8y-li-drag-handle\n        title=\"{{ 'Click and drag to reorder' | translate }}\"\n        cdkDragHandle\n      >\n        <i c8yIcon=\"drag-reorder\"></i>\n      </c8y-li-drag-handle>\n    </c8y-datapoint-selector-list-item>\n  </div>\n</c8y-list-group>\n\n<div class=\"card-footer bg-inherit\">\n  <button\n    class=\"btn btn-default btn-sm\"\n    [title]=\"'Add data point' | translate\"\n    type=\"button\"\n    data-cy=\"c8y-datapoint-selection-list--add-datapoint-button\"\n    (click)=\"add()\"\n  >\n    <i c8yIcon=\"plus-circle\"></i>\n    {{ 'Add data point' | translate }}\n  </button>\n</div>\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { KPIDetails } from '../datapoint-selection.model';\n\n@Pipe({\n  name: 'filterDatapoints'\n})\nexport class FilterDatapointsPipe implements PipeTransform {\n  transform(datapoints: KPIDetails[], searchString: string): KPIDetails[] {\n    if (!searchString || !datapoints || !Array.isArray(datapoints)) {\n      return datapoints;\n    }\n    const lowerCaseSearchString = searchString.toLowerCase().trim();\n    return datapoints.filter(datapoint =>\n      this.includesSearchStringIgnoringCasing(datapoint, lowerCaseSearchString)\n    );\n  }\n\n  private includesSearchStringIgnoringCasing(\n    datapoint: KPIDetails,\n    lowerCaseSearchString: string\n  ): boolean {\n    const label = datapoint.label?.toLowerCase();\n    if (label && label.includes(lowerCaseSearchString)) {\n      return true;\n    }\n\n    const fragment = datapoint.fragment?.toLowerCase();\n    if (fragment && fragment.includes(lowerCaseSearchString)) {\n      return true;\n    }\n\n    const series = datapoint.series?.toLowerCase();\n    if (series && series.includes(lowerCaseSearchString)) {\n      return true;\n    }\n\n    return false;\n  }\n}\n","import { DragDropModule } from '@angular/cdk/drag-drop';\nimport { NgModule } from '@angular/core';\nimport { CoreModule } from '@c8y/ngx-components';\nimport { AssetSelectorModule } from '@c8y/ngx-components/assets-navigator';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { ModalModule } from 'ngx-bootstrap/modal';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { DatapointAttributesFormComponent } from './datapoint-attributes-form/datapoint-attributes-form.component';\nimport { DatapointSelectionListComponent } from './datapoint-selection-list/datapoint-selection-list.component';\nimport { DatapointSelectorListItemComponent } from './datapoint-selector-list-item/datapoint-selector-list-item.component';\nimport { DatapointSelectorModalComponent } from './datapoint-selector-modal/datapoint-selector-modal.component';\nimport { DatapointSelectorComponent } from './datapoint-selector.component';\nimport { DatapointTemplatePopoverComponent } from './datapoint-template-popover/datapoint-template-popover.component';\nimport { DatapointLabelPipe } from './pipes/datapoint-label.pipe';\nimport { FilterDatapointsPipe } from './pipes/filter-datapoints.pipe';\nimport { IncludesDatapointPipe } from './pipes/includes-datapoint.pipe';\n\n@NgModule({\n  imports: [\n    AssetSelectorModule,\n    CollapseModule,\n    CoreModule,\n    BsDropdownModule,\n    ModalModule,\n    TooltipModule,\n    PopoverModule,\n    DragDropModule\n  ],\n  declarations: [\n    DatapointSelectorComponent,\n    DatapointSelectorModalComponent,\n    DatapointSelectorListItemComponent,\n    DatapointSelectionListComponent,\n    DatapointTemplatePopoverComponent,\n    IncludesDatapointPipe,\n    DatapointLabelPipe,\n    FilterDatapointsPipe,\n    DatapointAttributesFormComponent\n  ],\n  exports: [\n    DatapointSelectorComponent,\n    DatapointSelectorModalComponent,\n    DatapointSelectorListItemComponent,\n    DatapointSelectionListComponent,\n    DatapointTemplatePopoverComponent,\n    IncludesDatapointPipe,\n    DatapointLabelPipe,\n    DatapointAttributesFormComponent\n  ]\n})\nexport class DatapointSelectorModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i1.DatapointAttributesFormValidationService","i2","i4","i6.DatapointTemplatePopoverComponent","i7.DatapointAttributesFormComponent","i1.DatapointLibraryService","i3","i5","i6.DatapointSelectorListItemComponent","i7.IncludesDatapointPipe","i8.DatapointLabelPipe","i5.DatapointSelectorComponent","i1.DatapointSelectorService","i2.DatapointLibraryService","i6","i8.DatapointSelectorListItemComponent"],"mappings":"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"}