{"version":3,"file":"c8y-ngx-components-datapoint-library-list.mjs","sources":["../../datapoint-library/list/datapoint-library-list.component.ts","../../datapoint-library/list/datapoint-library-list.component.html","../../datapoint-library/list/c8y-ngx-components-datapoint-library-list.ts"],"sourcesContent":["import { Component } from '@angular/core';\nimport { Router, RouterModule } from '@angular/router';\nimport { IManagedObject, InventoryService, IResultList } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { AlertService, CoreModule, ModalService } from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, Observable, pipe } from 'rxjs';\nimport { map, shareReplay, switchMap, tap } from 'rxjs/operators';\nimport { pathToDatapointLibrary } from '@c8y/ngx-components/datapoint-library/model';\nimport { A11yModule } from '@angular/cdk/a11y';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { DatapointParserService } from '@c8y/ngx-components/datapoint-library/services';\n\n@Component({\n  selector: 'c8y-datapoint-library-list',\n  templateUrl: './datapoint-library-list.component.html',\n  standalone: true,\n  imports: [A11yModule, CoreModule, BsDropdownModule, RouterModule]\n})\nexport class DatapointLibraryListComponent {\n  readonly title = gettext('Data point library');\n  listClass = '';\n  isLoading = true;\n  reload$: BehaviorSubject<void> = new BehaviorSubject(null);\n  datapoints$: Observable<IResultList<IManagedObject>> = this.reload$.pipe(\n    tap(() => {\n      this.isLoading = true;\n    }),\n    switchMap(() => this.getDatapoints()),\n    tap(() => {\n      this.isLoading = false;\n    }),\n    shareReplay()\n  );\n\n  parsePipe = pipe(map((data: IManagedObject[]) => this.parser.parseDatapoints(data)));\n\n  constructor(\n    private inventory: InventoryService,\n    private router: Router,\n    private modalService: ModalService,\n    private translateService: TranslateService,\n    private alertService: AlertService,\n    private parser: DatapointParserService\n  ) {}\n\n  getDatapoints(): Promise<IResultList<IManagedObject>> {\n    return this.inventory.list({ pageSize: 20, fragmentType: 'c8y_Kpi', withTotalPages: true });\n  }\n\n  addDatapointEntry() {\n    this.router.navigate([pathToDatapointLibrary, 'new']);\n  }\n\n  editDatapointEntry(entry: IManagedObject) {\n    this.router.navigate([pathToDatapointLibrary, entry.id]);\n  }\n\n  async removeDatapointEntry(entry: IManagedObject) {\n    try {\n      await this.modalService.confirm(\n        gettext('Delete data point'),\n        this.translateService.instant(\n          gettext('You are about to delete data point \"{{ dpLabel }}\". Do you want to proceed?'),\n          { dpLabel: entry.c8y_Kpi.label }\n        ),\n        'danger'\n      );\n    } catch (e) {\n      return;\n    }\n    try {\n      await this.inventory.delete(entry.id);\n      this.reload$.next();\n    } catch (e) {\n      this.alertService.addServerFailure(e);\n    }\n  }\n\n  reload() {\n    this.reload$.next();\n  }\n}\n","<c8y-title>{{ title | translate }}</c8y-title>\n<c8y-breadcrumb>\n  <c8y-breadcrumb-item\n    [icon]=\"'c8y-tools'\"\n    [label]=\"'Configuration' | translate\"\n  ></c8y-breadcrumb-item>\n  <c8y-breadcrumb-item\n    [icon]=\"'c8y-tools'\"\n    [label]=\"title | translate\"\n  ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n<c8y-action-bar-item\n  [placement]=\"'right'\"\n  *c8yIfAllowed=\"['ROLE_INVENTORY_ADMIN']\"\n  [priority]=\"1\"\n>\n  <button\n    class=\"btn btn-link\"\n    [title]=\"'Add data point' | translate\"\n    type=\"button\"\n    (click)=\"addDatapointEntry()\"\n    data-cy=\"c8y-datapoint-library-list--add-data-point\"\n  >\n    <i c8yIcon=\"plus-circle\"></i>\n    {{ 'Add data point' | translate }}\n  </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n  [placement]=\"'right'\"\n  [priority]=\"0\"\n>\n  <button\n    class=\"btn btn-link\"\n    [title]=\"'Reload' | translate\"\n    type=\"button\"\n    [disabled]=\"isLoading\"\n    (click)=\"reload()\"\n  >\n    <i\n      c8yIcon=\"refresh\"\n      [ngClass]=\"{ 'icon-spin': isLoading }\"\n    ></i>\n    {{ 'Reload' | translate }}\n  </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n  [placement]=\"'left'\"\n  itemClass=\"navbar-form hidden-xs\"\n>\n  <c8y-list-display-switch\n    (onListClassChange)=\"listClass = $event\"\n    [listLength]=\"(datapoints$ | async)?.data?.length\"\n  ></c8y-list-display-switch>\n</c8y-action-bar-item>\n\n<c8y-help src=\"/docs/cockpit/data-point-library/#data-point-library\"></c8y-help>\n\n<!-- empty state\n-->\n<c8y-ui-empty-state\n  [icon]=\"'c8y-data-points'\"\n  [title]=\"'No data points to display.' | translate\"\n  [subtitle]=\"'Add a data point using the button below.' | translate\"\n  *ngIf=\"(datapoints$ | async)?.data?.length === 0\"\n>\n  <p>\n    <button\n      class=\"btn btn-primary\"\n      [title]=\"'Add data point' | translate\"\n      type=\"button\"\n      (click)=\"addDatapointEntry()\"\n    >\n      <i c8yIcon=\"plus-circle\"></i>\n      {{ 'Add data point' | translate }}\n    </button>\n  </p>\n</c8y-ui-empty-state>\n\n<!-- loading indicator -->\n<div\n  class=\"d-flex j-c-center\"\n  *ngIf=\"isLoading\"\n>\n  <c8y-loading></c8y-loading>\n</div>\n\n<div\n  class=\"card-group\"\n  [ngClass]=\"listClass\"\n  *ngIf=\"!isLoading && (datapoints$ | async) as datapoints\"\n>\n  <div\n    class=\"page-sticky-header hidden-xs\"\n    *ngIf=\"datapoints.data.length\"\n  >\n    <div class=\"d-flex\">\n      <div class=\"card-header\">\n        <div class=\"card-icon\"></div>\n        <p translate>Label</p>\n      </div>\n      <div class=\"card-actions\"></div>\n      <div class=\"card-block p-l-0\">\n        <div class=\"col-sm-3 p-l-16\">\n          <p translate>Fragment</p>\n        </div>\n        <div class=\"col-sm-2\">\n          <p translate>Series</p>\n        </div>\n        <div class=\"col-sm-1\">\n          <span translate>Unit</span>\n        </div>\n        <div class=\"col-sm-2\">\n          <span translate>Target</span>\n        </div>\n        <div class=\"col-sm-4\">\n          <span translate>Range</span>\n        </div>\n      </div>\n    </div>\n  </div>\n  <div\n    class=\"col-sm-6 col-md-4 col-lg-3 col-xs-12\"\n    *c8yFor=\"let datapoint of datapoints; loadMore: 'hidden'; pipe: parsePipe\"\n  >\n    <div\n      class=\"card pointer\"\n      (click)=\"editDatapointEntry(datapoint)\"\n    >\n      <div\n        class=\"card-actions\"\n        (click)=\"$event.stopPropagation()\"\n      >\n        <div\n          class=\"dropdown settings\"\n          dropdown\n          #datapointOptionsDropdown=\"bs-dropdown\"\n          [cdkTrapFocus]=\"datapointOptionsDropdown.isOpen\"\n        >\n          <button\n            class=\"dropdown-toggle c8y-dropdown\"\n            [title]=\"'Actions' | translate\"\n            type=\"button\"\n            dropdownToggle\n          >\n            <i c8yIcon=\"ellipsis-v\"></i>\n          </button>\n          <ul\n            class=\"dropdown-menu dropdown-menu-right\"\n            *dropdownMenu\n          >\n            <li>\n              <button\n                [title]=\"'Edit' | translate\"\n                type=\"button\"\n                (click)=\"editDatapointEntry(datapoint)\"\n              >\n                <i c8yIcon=\"pencil\"></i>\n                {{ 'Edit' | translate }}\n              </button>\n            </li>\n            <li>\n              <button\n                [title]=\"'Remove' | translate\"\n                type=\"button\"\n                (click)=\"removeDatapointEntry(datapoint)\"\n              >\n                <i c8yIcon=\"delete\"></i>\n                {{ 'Remove' | translate }}\n              </button>\n            </li>\n          </ul>\n        </div>\n      </div>\n\n      <div class=\"card-header separator\">\n        <div class=\"card-icon\">\n          <i\n            c8yIcon=\"circle\"\n            [style.color]=\"datapoint.c8y_Kpi?.color\"\n          ></i>\n        </div>\n        <div\n          class=\"card-title text-truncate\"\n          [title]=\"datapoint.c8y_Kpi?.label\"\n        >\n          {{ datapoint.c8y_Kpi?.label }}\n        </div>\n      </div>\n      <div class=\"card-block bg-level-1 p-b-24 card-hidden-list\">\n        <div class=\"col-sm-3 col-md-2\">\n          <c8y-range-display\n            [config]=\"datapoint.c8y_Kpi\"\n            [display]=\"'compact'\"\n          ></c8y-range-display>\n        </div>\n      </div>\n      <div class=\"card-block\">\n        <div class=\"col-sm-3 text-truncate\">\n          <span>\n            <label\n              class=\"text-label-small m-r-4\"\n              translate\n            >\n              Fragment\n            </label>\n            <span [title]=\"datapoint.c8y_Kpi?.fragment\">\n              {{ datapoint.c8y_Kpi?.fragment }}\n            </span>\n          </span>\n        </div>\n        <div class=\"col-sm-2 text-truncate\">\n          <label\n            class=\"text-label-small m-r-4\"\n            translate\n          >\n            Series\n          </label>\n          <span [title]=\"datapoint.c8y_Kpi?.series\">\n            {{ datapoint.c8y_Kpi?.series }}\n          </span>\n        </div>\n        <div class=\"col-sm-1 text-truncate card-hidden-grid\">\n          <span *ngIf=\"datapoint.c8y_Kpi?.unit\">\n            <label\n              class=\"text-label-small m-r-4\"\n              translate\n            >\n              Unit\n            </label>\n            <span [title]=\"datapoint.c8y_Kpi?.unit\">\n              {{ datapoint.c8y_Kpi?.unit }}\n            </span>\n          </span>\n        </div>\n        <div class=\"col-sm-2 text-truncate\">\n          <span *ngIf=\"datapoint.c8y_Kpi?.target\">\n            <label\n              class=\"text-label-small m-r-4\"\n              translate\n            >\n              Target\n            </label>\n            <span [title]=\"datapoint.c8y_Kpi?.target\">\n              {{ datapoint.c8y_Kpi?.target }}\n            </span>\n          </span>\n        </div>\n        <div class=\"col-sm-4 card-hidden-grid\">\n          <c8y-range-display\n            [config]=\"datapoint.c8y_Kpi\"\n            [display]=\"'inline'\"\n          ></c8y-range-display>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}