{"version":3,"file":"c8y-ngx-components-widgets-implementations-asset-table.mjs","sources":["../../widgets/implementations/asset-table/columns/date.cell-renderer.component.ts","../../widgets/implementations/asset-table/asset-table.model.ts","../../widgets/implementations/asset-table/columns/date.asset-table-column.ts","../../widgets/implementations/asset-table/columns/icon.cell-renderer.component.ts","../../widgets/implementations/asset-table/columns/icon.asset-table-column.ts","../../widgets/implementations/asset-table/columns/operation.cell-renderer.component.ts","../../widgets/implementations/asset-table/columns/operation.asset-table-column.ts","../../widgets/implementations/asset-table/columns/computed.cell-renderer.component.ts","../../widgets/implementations/asset-table/columns/computed.asset-table.column.ts","../../widgets/implementations/asset-table/columns/default.cell-renderer.component.ts","../../widgets/implementations/asset-table/columns/default.asset-table.column.ts","../../widgets/implementations/asset-table/asset-table.service.ts","../../widgets/implementations/asset-table/asset-table-auto-refresh/asset-table-auto-refresh.component.ts","../../widgets/implementations/asset-table/asset-table-auto-refresh/asset-table-auto-refresh.component.html","../../widgets/implementations/asset-table/asset-table-config/asset-table-widget-config.component.ts","../../widgets/implementations/asset-table/asset-table-config/asset-table-widget-config.component.html","../../widgets/implementations/asset-table/asset-table-view/asset-table-widget-view.component.ts","../../widgets/implementations/asset-table/asset-table-view/asset-table-widget-view.component.html","../../widgets/implementations/asset-table/icon-render-type-modal/icon-render-type-modal.component.ts","../../widgets/implementations/asset-table/icon-render-type-modal/icon-render-type-modal.component.html","../../widgets/implementations/asset-table/operation-render-type-modal/operation-render-type-modal.component.ts","../../widgets/implementations/asset-table/operation-render-type-modal/operation-render-type-modal.component.html","../../widgets/implementations/asset-table/asset-table-column-settings/asset-table-column-settings.component.ts","../../widgets/implementations/asset-table/asset-table-column-settings/asset-table-column-settings.component.html","../../widgets/implementations/asset-table/c8y-ngx-components-widgets-implementations-asset-table.ts"],"sourcesContent":["import { Component, OnInit } from '@angular/core';\nimport { CellRendererContext, DatePipe } from '@c8y/ngx-components';\nimport { ColumnUtilService } from '@c8y/ngx-components/device-grid';\n\n@Component({\n  template: `\n    @if (isLink) {\n      <a [href]=\"href\">\n        {{ context.value | c8yDate }}\n      </a>\n    } @else {\n      {{ context.value | c8yDate }}\n    }\n  `,\n  selector: 'c8y-date-cell-renderer',\n  imports: [DatePipe]\n})\nexport class DateCellRendererComponent implements OnInit {\n  isLink = false;\n  href: string | null = null;\n\n  constructor(\n    public context: CellRendererContext,\n    public columnUtilService: ColumnUtilService\n  ) {}\n\n  ngOnInit(): void {\n    this.isLink = !!this.context?.property?.isLink;\n    this.href = this.isLink ? this.columnUtilService.getHref(this.context.item) : null;\n  }\n}\n","import {\n  BaseColumn,\n  CustomColumn,\n  ColumnConfig,\n  CustomColumnType,\n  DisplayOptions,\n  WidgetDisplaySettings,\n  AssetTableExtendedColumn,\n  ComputedConfig,\n  IconConfigItem,\n  AssetColumnOperationType,\n  WidgetSettings\n} from '@c8y/ngx-components';\nimport { AlarmsDeviceGridColumn } from '@c8y/ngx-components/device-grid';\nimport { DefaultAssetTableGridColumn } from './columns/default.asset-table.column';\nimport { IIdentified } from '@c8y/client';\nimport { OperationAssetTableGridColumn } from './columns/operation.asset-table-column';\nimport { AssetPropertyType } from '@c8y/ngx-components/asset-properties';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\nexport interface AssetTableWidgetConfig {\n  columnSortOrders?: Record<string, 'asc' | 'desc' | ''>;\n  columns?: DefaultAssetTableGridColumn[];\n  configurableColumnsEnabled?: boolean;\n  device?: IIdentified;\n  displayOptions?: Partial<DisplayOptions>;\n  displaySettings?: WidgetDisplaySettings;\n  filterPredicate?: Record<string, any>;\n  isAutoRefreshEnabled?: boolean;\n  operationColumns?: OperationAssetTableGridColumn[];\n  refreshInterval?: number;\n  options?: any; // legacy configuration for the asset table properties.\n  refreshOption?: AssetTableRefreshOption;\n  includeDescendants?: boolean;\n  selectedProperties?: AssetPropertyType[];\n  showAsLink?: boolean;\n  showStatusIcon?: boolean;\n  showIconAndValue?: boolean;\n  settings?: WidgetSettings;\n  title?: string;\n  columnOrder?: AssetTableExtendedColumn[];\n  isDeviceAssetSelected?: boolean;\n  widgetInstanceGlobalAutoRefreshContext?: boolean;\n  widgetInstanceGlobalTimeContext?: boolean;\n}\n\nexport type AssetTableRefreshOption = 'interval' | 'global-interval';\n\nexport const GLOBAL_INTERVAL_OPTION: AssetTableRefreshOption = 'global-interval';\nexport const DEFAULT_INTERVAL_VALUE = 30_000;\n\nexport interface ComparisonOption {\n  label: string;\n  value: string;\n  sign: string;\n}\n\nexport const COMPARISON_OPTIONS: Record<string, ComparisonOption[]> = {\n  number: [\n    { label: gettext('Greater than'), value: 'GREATER_THAN', sign: '>' },\n    { label: gettext('Less than'), value: 'LESS_THAN', sign: '<' },\n    { label: gettext('Equal'), value: 'EQUAL', sign: '===' },\n    { label: gettext('Not equal'), value: 'NOT_EQUAL', sign: '!==' }\n  ],\n  date: [\n    { label: gettext('Before `date`'), value: 'BEFORE', sign: '<' },\n    { label: gettext('After `date`'), value: 'AFTER', sign: '>' },\n    { label: gettext('On `date`'), value: 'ON', sign: '===' }\n  ],\n  string: [\n    { label: gettext('Contains'), value: 'CONTAINS', sign: 'includes' },\n    { label: gettext('Equal'), value: 'EQUAL', sign: '===' },\n    { label: gettext('Not equal'), value: 'NOT_EQUAL', sign: '!==' },\n    { label: gettext('Starts with'), value: 'STARTS_WITH', sign: 'startsWith' },\n    { label: gettext('Ends with'), value: 'ENDS_WITH', sign: 'endsWith' }\n  ],\n  boolean: [\n    { label: gettext('Is true'), value: 'IS_TRUE', sign: 'true' },\n    { label: gettext('Is false'), value: 'IS_FALSE', sign: 'false' }\n  ]\n};\n\nexport type AssetColumnType = 'alarm' | 'date' | 'icon' | 'computed' | 'default' | 'operation';\n\nexport type AssetTableQuery = {\n  __filter: {\n    [key: string]: any;\n    __and?: any[];\n  };\n  __orderby: Array<{ [key: string]: number }>;\n  [key: string]: any;\n};\n\nexport class BaseColumnExtended extends BaseColumn {\n  iconConfig?: Array<IconConfigItem>;\n  isLink?: boolean;\n  command?: object;\n  isOperation?: boolean;\n  operationType?: AssetColumnOperationType;\n  computedConfig?: ComputedConfig;\n  showIconAndValue?: boolean;\n  buttonLabel?: string;\n  type?: AssetColumnType;\n}\n\nexport class CustomColumnExtended extends CustomColumn {\n  iconConfig?: Array<IconConfigItem>;\n  isLink?: boolean;\n  command?: object;\n  isOperation?: boolean;\n  operationType?: AssetColumnOperationType;\n  computedConfig?: ComputedConfig;\n  showIconAndValue?: boolean;\n  columnOrder?: [];\n}\n\nexport interface ColumnConfigExtended extends ColumnConfig {\n  /** Column header title */\n  header?: string;\n\n  /** The path in a row item to read the cell value from. */\n  path?: string;\n\n  /**\n   * Icon configuration for the column when renderType is 'icon'.\n   */\n  iconConfig?: Array<IconConfigItem>;\n\n  /** Configuration for computed column */\n  computedConfig?: ComputedConfig;\n\n  /** Whether the column is a link. */\n  isLink?: boolean;\n\n  /** The column operationType. E.g. 'maintenance' */\n  operationType?: AssetColumnOperationType;\n\n  /** Command to be executed */\n  command?: any;\n\n  /** Whether to show both icon and value in the cell */\n  showIconAndValue?: boolean;\n\n  /** Button label for operation columns */\n  buttonLabel?: string;\n\n  /** e.g. 'Restart Device', 'Firmware Update', 'Send Command' */\n  operation?: string;\n}\n\nexport interface CustomColumnConfigExtended extends ColumnConfigExtended {\n  /** JSON path to the managed object property to be displayed */\n  path: string;\n\n  /** Column header title */\n  header: string;\n\n  /** Flag to identify custom columns */\n  custom: boolean;\n\n  /** Column type of the custom column*/\n  type: CustomColumnType;\n}\n\nexport class AlarmsDeviceGridColumnExtended extends AlarmsDeviceGridColumn {\n  // Add any extra fields from BaseColumnExtended\n  iconConfig?: any;\n  isLink?: boolean;\n  command?: object;\n  isOperation?: boolean;\n  operationType?: AssetColumnOperationType;\n  computedConfig?: any;\n  showIconAndValue?: boolean;\n\n  constructor(initialColumnConfig?: ColumnConfigExtended) {\n    super(initialColumnConfig);\n  }\n}\n","import { FormGroup } from '@angular/forms';\nimport { DateCellRendererComponent } from './date.cell-renderer.component';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { BaseColumnExtended, ColumnConfigExtended } from '../asset-table.model';\n\nexport class DateAssetTableGridColumn extends BaseColumnExtended {\n  constructor(initialColumnConfig?: ColumnConfigExtended) {\n    super(initialColumnConfig);\n\n    this.path = this.path;\n    this.name = this.name;\n    this.header = this.header;\n    this.type = 'date';\n    this.cellRendererComponent = DateCellRendererComponent;\n\n    this.filterable = true;\n    this.filteringConfig = {\n      fields: [\n        {\n          fieldGroup: [\n            {\n              type: 'date-time',\n              key: 'after',\n              templateOptions: {\n                label: gettext('From date')\n              },\n              expressionProperties: {\n                'templateOptions.maxDate': (model: any) => model?.before\n              }\n            },\n            {\n              type: 'date-time',\n              key: 'before',\n              templateOptions: {\n                label: gettext('To date')\n              },\n              expressionProperties: {\n                'templateOptions.minDate': (model: any) => model?.after\n              }\n            }\n          ],\n          validators: {\n            atLeastOneFilled: {\n              expression: (formGroup: FormGroup) => {\n                const after = formGroup.get('after')?.value;\n                const before = formGroup.get('before')?.value;\n                return !!after || !!before;\n              },\n              message: gettext('Specify at least one date.')\n            }\n          }\n        }\n      ],\n      formGroup: new FormGroup({}),\n      getFilter: model => {\n        const filter: any = {};\n        const dates = model as { after?: string; before?: string };\n        if (dates && (dates.after || dates.before)) {\n          filter.__and = [];\n          if (dates.after) {\n            const after = this.formatDate(dates.after);\n            filter.__and.push({\n              [`${this.path}.date`]: { __gt: after }\n            });\n          }\n          if (dates.before) {\n            const before = this.formatDate(dates.before);\n            filter.__and.push({\n              [`${this.path}.date`]: { __lt: before }\n            });\n          }\n        }\n        return filter;\n      }\n    };\n\n    this.sortable = true;\n    this.sortingConfig = {\n      pathSortingConfigs: [{ path: `${this.path}.date` }]\n    };\n  }\n\n  protected formatDate(dateToFormat: string): string {\n    return new Date(dateToFormat).toISOString();\n  }\n}\n","import { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { Component, runInInjectionContext } from '@angular/core';\nimport { CellRendererContext, IconDirective } from '@c8y/ngx-components';\nimport {\n  AssetPropertyType,\n  ComputedPropertiesService,\n  ComputedPropertyContextValue\n} from '@c8y/ngx-components/asset-properties';\nimport { ColumnUtilService } from '@c8y/ngx-components/device-grid';\nimport { from, isObservable, Observable, of, switchMap } from 'rxjs';\n\n@Component({\n  template: ` <ng-template #iconAndValueTemplate let-value>\n      @if (matchedCondition(value); as match) {\n        <i class=\"m-r-4\" [c8yIcon]=\"match.icon\" [style.color]=\"match.color\"></i>\n        @if (context.property.showIconAndValue) {\n          <span class=\"text-truncate\" [title]=\"value\">{{ value }}</span>\n        }\n      } @else {\n        <span class=\"text-truncate\" [title]=\"value\">{{ value }}</span>\n      }\n    </ng-template>\n\n    @if (context?.property?.isLink) {\n      <a class=\"d-flex a-i-center text-truncate\" [href]=\"columnUtilService.getHref(context.item)\">\n        @if (computed$ | async; as computed) {\n          <ng-container\n            *ngTemplateOutlet=\"iconAndValueTemplate; context: { $implicit: computed }\"\n          ></ng-container>\n        } @else {\n          <ng-container\n            *ngTemplateOutlet=\"\n              iconAndValueTemplate;\n              context: {\n                $implicit: resolveValue(context)\n              }\n            \"\n          ></ng-container>\n        }\n      </a>\n    } @else {\n      <div class=\"d-flex a-i-center text-truncate\">\n        @if (computed$ | async; as computed) {\n          <ng-container\n            *ngTemplateOutlet=\"iconAndValueTemplate; context: { $implicit: computed }\"\n          ></ng-container>\n        } @else {\n          <ng-container\n            *ngTemplateOutlet=\"\n              iconAndValueTemplate;\n              context: {\n                $implicit: resolveValue(context)\n              }\n            \"\n          ></ng-container>\n        }\n      </div>\n    }`,\n  selector: 'c8y-icon-cell-renderer',\n  imports: [AsyncPipe, IconDirective, NgTemplateOutlet]\n})\nexport class IconCellRendererComponent {\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  computed$: Observable<any> | null = null;\n\n  constructor(\n    public context: CellRendererContext,\n    public computedPropertyService: ComputedPropertiesService,\n    public columnUtilService: ColumnUtilService\n  ) {}\n\n  async ngOnInit() {\n    if (this.context.property.computedConfig) {\n      this.computed$ = this.getComputedValue(\n        this.context.property as AssetPropertyType,\n        this.context.item\n      );\n    }\n  }\n\n  getComputedValue(\n    property: AssetPropertyType,\n    context: ComputedPropertyContextValue\n  ): Observable<any> {\n    return from(this.computedPropertyService.getByName(property.name)).pipe(\n      switchMap(definition => {\n        let value: any | Observable<any> | Promise<any> = '-';\n        runInInjectionContext(definition.injector, () => {\n          if (property.computedConfig?.dp?.length > 0) {\n            property.computedConfig.dp[0].__target = { ...context };\n          }\n          value = definition.value({\n            config: property.computedConfig,\n            context,\n            metadata: { mode: 'singleValue' }\n          });\n        });\n\n        if (isObservable(value) || value instanceof Promise) {\n          return value;\n        } else {\n          return of(value);\n        }\n      })\n    );\n  }\n\n  matchedCondition(cellValue: string | number | Date) {\n    const iconConfigs = this.context?.property?.iconConfig;\n    if (!Array.isArray(iconConfigs)) return null;\n\n    return (\n      iconConfigs.find(config => {\n        const { comparison, value } = config;\n        if (!comparison || value === undefined || value === null) return false;\n\n        return this.evaluateCondition(cellValue, comparison.value, value);\n      }) ?? null\n    );\n  }\n\n  resolveValue(context: CellRendererContext) {\n    const { item, property } = context;\n    if (!item || !property) {\n      return undefined;\n    }\n\n    const path = property.path;\n    if (Array.isArray(path)) {\n      return path.reduce((acc, key) => acc?.[key], item);\n    }\n\n    return item[path];\n  }\n\n  private evaluateCondition(\n    cellValue: string | number | Date | boolean,\n    operator: string,\n    value: string\n  ): boolean {\n    switch (operator) {\n      case 'GREATER_THAN':\n        return cellValue > value;\n      case 'LESS_THAN':\n        return cellValue < value;\n      case 'EQUAL':\n        return cellValue === value;\n      case 'NOT_EQUAL':\n        return cellValue !== value;\n      case 'CONTAINS':\n        return typeof cellValue === 'string' && cellValue.includes(value);\n      case 'STARTS_WITH':\n        return typeof cellValue === 'string' && cellValue.startsWith(value);\n      case 'ENDS_WITH':\n        return typeof cellValue === 'string' && cellValue.endsWith(value);\n      case 'IS_TRUE':\n        return cellValue === true;\n      case 'IS_FALSE':\n        return cellValue === false;\n      case 'BEFORE':\n        return new Date(cellValue as number | Date) < new Date(value);\n      case 'AFTER':\n        return new Date(cellValue as number | Date) > new Date(value);\n      case 'ON':\n        return (\n          new Date(cellValue as number | Date).toDateString() === new Date(value).toDateString()\n        );\n      default:\n        return false;\n    }\n  }\n}\n","import { IconCellRendererComponent } from './icon.cell-renderer.component';\nimport { BaseColumnExtended, ColumnConfigExtended } from '../asset-table.model';\n\nexport class IconAssetTableGridColumn extends BaseColumnExtended {\n  constructor(initialColumnConfig?: ColumnConfigExtended) {\n    super(initialColumnConfig);\n\n    this.path = this.path;\n    this.name = this.name;\n    this.header = this.header;\n    this.computedConfig = this.computedConfig;\n    this.type = 'icon';\n    this.cellRendererComponent = IconCellRendererComponent;\n    this.iconConfig = this.iconConfig;\n    this.showIconAndValue = this.showIconAndValue;\n\n    this.filterable = false;\n    this.sortable = false;\n  }\n}\n","import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';\nimport { AlertService, CellRendererContext, CommonModule } from '@c8y/ngx-components';\nimport { InventoryService, OperationService } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TranslateService } from '@ngx-translate/core';\n\n@Component({\n  selector: 'c8y-operation-cell-renderer',\n  changeDetection: ChangeDetectionStrategy.OnPush,\n  template: `\n    @if (shouldShowButton()) {\n      <button class=\"btn btn-primary btn-sm\" type=\"button\" (click)=\"onOperationClick()\">\n        {{ context.property?.name ?? '' | translate }}\n      </button>\n    } @else {\n      <span class=\"text-muted\">-</span>\n    }\n  `,\n  imports: [CommonModule]\n})\nexport class OperationCellRendererComponent {\n  private readonly operations = inject(OperationService);\n  private readonly alertService = inject(AlertService);\n  private readonly inventoryService = inject(InventoryService);\n  private readonly translateService = inject(TranslateService);\n  readonly context = inject(CellRendererContext);\n\n  readonly shouldShowButton = computed(() => {\n    const operationType = this.context.property?.operationType;\n    const device = this.context.item;\n\n    if (operationType !== 'maintenance') {\n      return true;\n    }\n\n    return this.canSwitchResponseInterval(device);\n  });\n\n  async onOperationClick() {\n    const operationType = this.context.property?.operationType;\n    const device = this.context.item;\n\n    try {\n      if (operationType === 'maintenance') {\n        let payload;\n\n        if (this.canSwitchResponseInterval(device)) {\n          payload = {\n            id: device.id,\n            c8y_RequiredAvailability: {\n              responseInterval: -device.c8y_RequiredAvailability.responseInterval\n            }\n          };\n        } else {\n          payload = { id: device.id, c8y_RequiredAvailability: null };\n        }\n\n        await this.inventoryService.update(payload);\n        this.alertService.success(gettext('Maintenance mode toggled.'));\n      } else {\n        const deviceId = this.context.value;\n        const commandBody =\n          typeof this.context.property.command === 'string'\n            ? JSON.parse(this.context.property.command)\n            : this.context.property.command;\n\n        const body = { deviceId, ...commandBody };\n        await this.operations.create(body);\n        this.alertService.success(gettext('Operation created.'));\n      }\n    } catch (error) {\n      this.alertService.danger(\n        this.translateService.instant(\n          gettext('Failed to execute operation: \"{{ errorMessage }}\"'),\n          {\n            errorMessage: this.translateService.instant(error.message)\n          }\n        )\n      );\n    }\n  }\n\n  private canSwitchResponseInterval(device: any): boolean {\n    return (\n      device &&\n      device.c8y_RequiredAvailability &&\n      device.c8y_RequiredAvailability.responseInterval &&\n      parseInt(device.c8y_RequiredAvailability.responseInterval, 10) !== 0\n    );\n  }\n}\n","import { OperationCellRendererComponent } from './operation.cell-renderer.component';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { BaseColumnExtended, ColumnConfigExtended } from '../asset-table.model';\n\nexport class OperationAssetTableGridColumn extends BaseColumnExtended {\n  constructor(initialColumnConfig?: ColumnConfigExtended) {\n    super(initialColumnConfig);\n\n    this.path = this.path;\n    this.name = this.name;\n    this.header = this.header || gettext('Operation');\n    this.type = 'operation';\n    this.cellRendererComponent = OperationCellRendererComponent;\n    this.command = this.command;\n    this.isOperation = true;\n    this.operationType = this.operationType || 'operation';\n\n    this.filterable = false;\n    this.sortable = false;\n  }\n}\n","import { AsyncPipe } from '@angular/common';\nimport { Component, runInInjectionContext } from '@angular/core';\nimport {\n  ComputedPropertiesService,\n  ComputedPropertyContextValue\n} from '@c8y/ngx-components/asset-properties';\nimport { from, isObservable, map, Observable, of, switchMap } from 'rxjs';\nimport { CellRendererContext, AssetTableExtendedColumn } from '@c8y/ngx-components';\n\n@Component({\n  template: `{{ computedValue | async }}`,\n  selector: 'c8y-computed-cell-renderer',\n  imports: [AsyncPipe]\n})\nexport class ComputedCellRendererComponent {\n  computedValue: any;\n\n  constructor(\n    public context: CellRendererContext,\n    public computedPropertyService: ComputedPropertiesService\n  ) {}\n\n  ngOnInit() {\n    this.computedValue = this.getCallbackComputedPropertyValue(\n      this.context.property,\n      this.context.item\n    ).pipe(\n      map(value => (typeof value === 'object' && value !== null ? JSON.stringify(value) : value))\n    );\n  }\n\n  private getCallbackComputedPropertyValue(\n    property: AssetTableExtendedColumn,\n    context: ComputedPropertyContextValue\n  ): any | Promise<any> | Observable<any> {\n    const propertyName = property.computedConfig?.__propertyName || property.name;\n    return from(this.computedPropertyService.getByName(propertyName)).pipe(\n      switchMap(definition => {\n        let value: any | Observable<any> | Promise<any> = '-';\n        runInInjectionContext(definition.injector, () => {\n          if (this.context?.property.computedConfig?.dp?.length > 0) {\n            this.context.property.computedConfig.dp[0].__target = { ...context };\n          }\n          value = definition.value({\n            config: this.context?.property.computedConfig,\n            context,\n            metadata: { mode: 'singleValue' }\n          });\n        });\n\n        if (isObservable(value) || value instanceof Promise) {\n          return value;\n        } else {\n          return of(value);\n        }\n      })\n    );\n  }\n}\n","import { ComputedCellRendererComponent } from './computed.cell-renderer.component';\nimport { BaseColumnExtended, ColumnConfigExtended } from '../asset-table.model';\n\nexport class ComputedAssetTableGridColumn extends BaseColumnExtended {\n  constructor(initialColumnConfig?: ColumnConfigExtended) {\n    super(initialColumnConfig);\n\n    this.name = this.name;\n    this.header = this.header;\n    this.computedConfig = this.computedConfig;\n    this.visible = this.visible;\n    this.type = 'computed';\n    this.cellRendererComponent = ComputedCellRendererComponent;\n    this.filterable = false;\n\n    this.sortable = true;\n  }\n}\n","import { Component, OnInit } from '@angular/core';\nimport { CellRendererContext } from '@c8y/ngx-components';\nimport { ColumnUtilService } from '@c8y/ngx-components/device-grid';\n\n@Component({\n  template: `\n    @if (isLink) {\n      <a [href]=\"href\">{{ displayValue }}</a>\n    } @else {\n      {{ displayValue }}\n    }\n  `,\n  selector: 'c8y-text-cell-renderer'\n})\nexport class DefaultCellRendererComponent implements OnInit {\n  isLink = false;\n  href: string | null = null;\n  displayValue: string | object | null = null;\n\n  constructor(\n    public context: CellRendererContext,\n    public columnUtilService: ColumnUtilService\n  ) {}\n\n  ngOnInit(): void {\n    this.isLink = !!this.context?.property?.isLink;\n    this.href = this.isLink ? this.columnUtilService.getHref(this.context.item) : null;\n\n    this.displayValue = this.formatValue(this.context.value);\n  }\n\n  private formatValue(value: unknown): string {\n    if (typeof value === 'object') {\n      return JSON.stringify(value);\n    }\n\n    return String(value);\n  }\n}\n","import { DefaultCellRendererComponent } from './default.cell-renderer.component';\nimport { CustomColumnConfigExtended, CustomColumnExtended } from '../asset-table.model';\n\nexport class DefaultAssetTableGridColumn extends CustomColumnExtended {\n  constructor(initialColumnConfig?: CustomColumnConfigExtended) {\n    super(initialColumnConfig);\n    this.type = this.type || 'default';\n    this.isLink = this.isLink || false;\n    this.cellRendererComponent = DefaultCellRendererComponent;\n    this.filterable = true;\n    this.sortable = true;\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { IManagedObject, InventoryService, IResultList, QueriesUtil } from '@c8y/client';\nimport { Column, AssetTableExtendedColumn, Pagination } from '@c8y/ngx-components';\nimport { AssetPropertyType } from '@c8y/ngx-components/asset-properties';\nimport { assign, get, identity, transform } from 'lodash';\nimport { DateAssetTableGridColumn } from './columns/date.asset-table-column';\nimport { IconAssetTableGridColumn } from './columns/icon.asset-table-column';\nimport { OperationAssetTableGridColumn } from './columns/operation.asset-table-column';\nimport { ComputedAssetTableGridColumn } from './columns/computed.asset-table.column';\nimport {\n  AlarmsDeviceGridColumnExtended,\n  AssetColumnType,\n  AssetTableQuery,\n  AssetTableWidgetConfig,\n  ColumnConfigExtended,\n  COMPARISON_OPTIONS,\n  ComparisonOption\n} from './asset-table.model';\nimport { DefaultAssetTableGridColumn } from './columns/default.asset-table.column';\nimport { AssetTypeGridColumn } from '@c8y/ngx-components/data-grid-columns';\nimport { gettext } from '@c8y/ngx-components/gettext';\n@Injectable({\n  providedIn: 'root'\n})\nexport class AssetTableService {\n  private queriesUtil = new QueriesUtil();\n\n  constructor(private inventoryService: InventoryService) {}\n\n  getColumns(\n    selectedProperties: AssetPropertyType[],\n    operationColumns: ColumnConfigExtended[],\n    config?: AssetTableWidgetConfig\n  ): AssetTableExtendedColumn[] {\n    const firstLinkableIndex = this.getFirstLinkableIndex(selectedProperties, config);\n\n    const propertyColumns = this.buildPropertyColumns(\n      selectedProperties,\n      firstLinkableIndex,\n      config\n    );\n\n    const opColumns = this.buildOperationColumns(operationColumns);\n\n    let allColumns = [...propertyColumns, ...opColumns];\n\n    if (config?.showStatusIcon) {\n      const statusCol = new AssetTypeGridColumn() as AssetTableExtendedColumn;\n      statusCol.name = '__status';\n      statusCol.__origin = 'status';\n      statusCol.__id = 'status';\n      statusCol.header = gettext('Status');\n      allColumns = [statusCol, ...allColumns];\n    }\n\n    return this.applySortingAndOrdering(allColumns, config);\n  }\n\n  buildAssetQueryObj(config: AssetTableWidgetConfig) {\n    const assetFilter = config.device\n      ? [\n          {\n            __or: [\n              config.includeDescendants\n                ? { __isinhierarchyof: config.device.id }\n                : config.isDeviceAssetSelected\n                  ? { id: config.device.id }\n                  : { __bygroupid: config.device.id }\n            ]\n          }\n        ]\n      : [];\n\n    return {\n      __and: [\n        ...assetFilter,\n        {\n          __or: [\n            { __has: 'c8y_IsDevice' },\n            { __has: 'c8y_IsAsset' },\n            { __has: 'c8y_IsDeviceGroup' }\n          ]\n        }\n      ]\n    };\n  }\n\n  getAssets(\n    config: AssetTableWidgetConfig,\n    columns: Column[],\n    preConfiguredFilter: Record<string, any> = {},\n    pagination: Pagination = { pageSize: 100 }\n  ): Promise<IResultList<IManagedObject>> {\n    const queryObj = this.buildAssetQueryObj(config);\n    const columnQueryObj = this.getQueryObj(columns);\n    const preConfigFilterObj = this.extractFilters(preConfiguredFilter);\n    const filterQuery = this.buildAndFilterQuery(preConfigFilterObj);\n\n    const andConditions: any[] = [queryObj];\n    if (Object.keys(columnQueryObj.__filter).length > 0) {\n      andConditions.push({ __filter: columnQueryObj.__filter });\n    }\n    if (Object.keys(preConfigFilterObj).length > 0) {\n      andConditions.push({ __filter: filterQuery });\n    }\n\n    const combinedQueryObj = {\n      __filter: {\n        __and: andConditions\n      },\n      __orderby: columnQueryObj.__orderby\n    };\n\n    const query = this.queriesUtil.buildQuery(combinedQueryObj);\n    return this.inventoryService.list({\n      query,\n      pageSize: pagination.pageSize,\n      currentPage: pagination.currentPage || 1,\n      withTotalElements: true,\n      withTotalPages: true\n    });\n  }\n\n  async migrateLegacyProperties(config: AssetTableWidgetConfig): Promise<AssetTableWidgetConfig> {\n    if (!config?.options?.properties) {\n      return config;\n    }\n\n    if (config.device) {\n      config.device = { ...(await this.inventoryService.detail(config.device.id)).data };\n      config.isDeviceAssetSelected = 'c8y_IsDevice' in config.device;\n    }\n\n    const selectedProperties = [];\n    const operationColumns = [];\n\n    for (const prop of config.options.properties) {\n      const isOperation = prop?.renderType === 'operationButton' || prop?.isAction;\n\n      if (isOperation) {\n        operationColumns.push({\n          header: prop.label,\n          operationType:\n            prop.renderConfig?.actionType === 'toggleMaintenanceMode' ? 'maintenance' : 'operation',\n          operation: null,\n          command: JSON.stringify(\n            prop?.config?.args?.[0] ?? {\n              description: 'Command description',\n              c8y_Command: { text: '<command>' }\n            },\n            null,\n            2\n          ),\n          buttonLabel: prop.renderConfig?.label ?? prop.label\n        });\n        continue;\n      }\n\n      // Map old renderConfig.map -> iconConfig using proper comparison\n      if (\n        prop.renderConfig?.map &&\n        Array.isArray(prop.renderConfig.map) &&\n        prop.renderType === 'iconMap'\n      ) {\n        prop.columnType = 'icon';\n        prop.name = prop.name || prop.keyPath?.[0] || prop.label;\n        prop.iconConfig = prop.renderConfig.map.map((mapItem: any) => {\n          const comparisonObj = this.lookupComparison(mapItem.comparison);\n          return {\n            comparison: comparisonObj,\n            color: mapItem.color,\n            icon: mapItem.icon,\n            value: mapItem.value\n          };\n        });\n      }\n\n      // preserve computed properties and build c8y_JsonSchema\n      if (prop.computed) {\n        prop.c8y_JsonSchema = this.convertIdToJsonSchema(prop);\n        const parts = prop.id.split('!!');\n        const propertyName = parts.length > 1 ? parts[1] : prop.id;\n        prop.name = propertyName;\n      }\n      prop.active = prop.__active;\n      // last keypath segment is used as name if name is not provided\n      prop.name = prop.name || prop.keyPath?.[prop.keyPath.length - 1] || prop.label;\n\n      selectedProperties.push(prop);\n    }\n\n    return {\n      ...config,\n      selectedProperties,\n      operationColumns,\n      refreshInterval: config.refreshInterval ?? 30000,\n      refreshOption: config.refreshOption ?? 'interval',\n      includeDescendants: config.includeDescendants ?? false,\n      isDeviceAssetSelected: config.isDeviceAssetSelected ?? true,\n      widgetInstanceGlobalAutoRefreshContext: config.widgetInstanceGlobalAutoRefreshContext ?? null,\n      widgetInstanceGlobalTimeContext: config.widgetInstanceGlobalTimeContext ?? false,\n      showAsLink: config.showAsLink ?? true,\n      showStatusIcon: config.showStatusIcon ?? true\n    };\n  }\n\n  migrateToLegacyProperties(config: AssetTableWidgetConfig): AssetTableWidgetConfig {\n    if (config.options) {\n      delete config.options.properties;\n    }\n    const properties: any[] = [];\n\n    // Convert selectedProperties back to legacy format\n    for (const prop of config.selectedProperties || []) {\n      const legacyProp: any = { ...prop };\n\n      // Restore computed property fields\n      if (prop.computed) {\n        legacyProp.__active = prop.active;\n        legacyProp.id = prop.name ? `c8ySchema!!${prop.name}` : prop.id;\n        legacyProp.label = prop.header || prop.label || prop.name;\n        legacyProp.type = prop.c8y_JsonSchema?.properties?.[prop.name]?.type || 'string';\n        legacyProp.computed = true;\n      }\n\n      // Restore iconMap\n      if (prop.columnType === 'icon' && Array.isArray(prop.iconConfig)) {\n        legacyProp.renderType = 'iconMap';\n        legacyProp.renderConfig = {\n          map: prop.iconConfig.map((icon: any) => ({\n            comparison: icon.comparison?.value ?? icon.comparison,\n            color: icon.color,\n            icon: icon.icon,\n            value: icon.value\n          }))\n        };\n      }\n\n      // Restore alarm type\n      if (prop.columnType === 'alarm') {\n        legacyProp.renderType = 'alarm';\n      }\n\n      // Restore default type\n      if (!prop.columnType || prop.columnType === 'default' || prop.columnType === 'base') {\n        legacyProp.renderType = 'default';\n      }\n\n      legacyProp.id = 'c8ySchema!!' + prop.name;\n      legacyProp.__active = prop.active;\n\n      properties.push(legacyProp);\n    }\n\n    // Convert operationColumns back to legacy format\n    for (const op of config.operationColumns || []) {\n      let commandObj;\n      if (typeof op.command === 'string') {\n        try {\n          commandObj = JSON.parse(op.command);\n        } catch {\n          commandObj = op.command; // fallback if not valid JSON\n        }\n      } else {\n        commandObj = op.command;\n      }\n      properties.push({\n        label: op.header,\n        renderType: 'operationButton',\n        isAction: true,\n        renderConfig: {\n          args: Array.isArray(commandObj) ? commandObj : [commandObj],\n          label: op.buttonLabel,\n          actionType:\n            op.operationType === 'maintenance' ? 'toggleMaintenanceMode' : 'createOperation',\n          deviceTypes: ['c8y_DeviceGroup', 'c8y_MQTTDevice', 'c8y_DeviceSubgroup']\n        },\n        keyPath: [op.operationType ? 'createOperation' : 'toggleMaintenanceMode'],\n        __active: true\n      });\n    }\n\n    // Build legacy config object\n    return {\n      ...config,\n      options: {\n        ...config.options,\n        properties\n      }\n    };\n  }\n\n  isMigrationNeeded(config: AssetTableWidgetConfig): boolean {\n    const legacyProps = config?.options?.properties;\n\n    if (!legacyProps?.length) {\n      return false;\n    }\n\n    if (!config.selectedProperties || !config.operationColumns) {\n      return true;\n    }\n\n    const selected = config.selectedProperties ?? [];\n    const operations = config.operationColumns ?? [];\n\n    if (legacyProps.length !== selected.length + operations.length) {\n      return true;\n    }\n\n    for (const legacyProp of legacyProps) {\n      if (legacyProp.renderType === 'operationButton') {\n        const legacyLabel = legacyProp.renderConfig?.label;\n\n        const match = operations.find(op => op.buttonLabel === legacyLabel);\n\n        if (!match) {\n          return true;\n        }\n      } else {\n        const legacyName = legacyProp.name;\n\n        const match = selected.find(prop => prop.name === legacyName);\n\n        if (!match) {\n          return true;\n        }\n      }\n    }\n\n    return false;\n  }\n\n  private getFirstLinkableIndex(\n    selectedProperties: AssetPropertyType[],\n    config?: AssetTableWidgetConfig\n  ): number {\n    if (!selectedProperties?.length) return -1;\n\n    if (config?.columnOrder?.length) {\n      for (const orderItem of config.columnOrder) {\n        if (orderItem.__origin !== 'selectedProperties') continue;\n\n        const idx = selectedProperties.findIndex(\n          prop => prop.name === orderItem.__id || prop.title === orderItem.__id\n        );\n\n        if (idx === -1) continue;\n\n        const type = this.getColumnType(selectedProperties[idx]);\n\n        if (type !== 'computed' && type !== 'alarm') {\n          return idx;\n        }\n      }\n    }\n\n    return selectedProperties.findIndex(prop => {\n      const type = this.getColumnType(prop);\n      return type !== 'computed' && type !== 'alarm';\n    });\n  }\n\n  private getColumnType(prop: AssetPropertyType): AssetColumnType {\n    return prop.columnType\n      ? prop.columnType\n      : prop.name === 'c8y_ActiveAlarmsStatus'\n        ? 'alarm'\n        : prop.computed\n          ? 'computed'\n          : 'default';\n  }\n\n  private buildPropertyColumns(\n    selectedProperties: AssetPropertyType[],\n    firstLinkableIndex: number,\n    config?: AssetTableWidgetConfig\n  ): AssetTableExtendedColumn[] {\n    return (selectedProperties || []).map((prop, index) => {\n      const columnType = this.getColumnType(prop);\n\n      const isLink =\n        index === firstLinkableIndex && config?.showAsLink !== undefined\n          ? config.showAsLink\n          : false;\n\n      const column = this.createPropertyColumn(prop, columnType, isLink, config);\n\n      const uniqueName = prop.instanceId || prop.name || prop.title;\n      if (prop.instanceId) {\n        column.name = uniqueName;\n        if (column.computedConfig) {\n          column.computedConfig.__propertyName = prop.name;\n        }\n      }\n      column.__origin = 'selectedProperties';\n      column.__id = uniqueName;\n\n      return column;\n    });\n  }\n\n  private createPropertyColumn(\n    prop: AssetPropertyType,\n    columnType: AssetColumnType,\n    isLink: boolean,\n    config?: AssetTableWidgetConfig\n  ): AssetTableExtendedColumn {\n    switch (columnType) {\n      case 'alarm':\n        return new AlarmsDeviceGridColumnExtended({\n          name: prop.name || prop.title,\n          header: prop.columnLabel || prop.label || prop.title,\n          visible: prop.visible ?? true\n        });\n\n      case 'date':\n        return new DateAssetTableGridColumn({\n          name: prop.name || prop.title,\n          header: prop.columnLabel || prop.label || prop.title,\n          visible: prop.visible ?? true,\n          path: prop.name || prop.keyPath,\n          sortOrder: prop.sortOrder ?? null\n        });\n\n      case 'icon':\n        return new IconAssetTableGridColumn({\n          name: prop.name || prop.title,\n          path: prop.keyPath || prop.name,\n          header: prop.columnLabel || prop.label || prop.title,\n          iconConfig: prop.iconConfig || {},\n          computedConfig: prop.computed ? prop.config || {} : null,\n          showIconAndValue: config?.showIconAndValue,\n          visible: prop.visible ?? true\n        });\n\n      case 'computed':\n        return new ComputedAssetTableGridColumn({\n          name: prop.name || prop.title,\n          header: prop.columnLabel || prop.label || prop.title,\n          computedConfig: prop.config || {},\n          visible: prop.visible ?? true,\n          sortOrder: prop.sortOrder ?? null\n        });\n\n      case 'default':\n      default:\n        return new DefaultAssetTableGridColumn({\n          name: prop.name || prop.title,\n          header: prop.columnLabel || prop.label || prop.title,\n          custom: true,\n          isLink,\n          type: 'default',\n          path: prop.keyPath || prop.name,\n          visible: prop.visible ?? true,\n          sortOrder: prop.sortOrder ?? null\n        });\n    }\n  }\n\n  private buildOperationColumns(\n    operationColumns: ColumnConfigExtended[]\n  ): AssetTableExtendedColumn[] {\n    return (operationColumns || []).map(op => {\n      const col = new OperationAssetTableGridColumn({\n        name: op.buttonLabel,\n        header: op.header,\n        visible: op.visible ?? true,\n        operationType: op.operationType,\n        command: op.command,\n        path: 'id'\n      });\n\n      (col as AssetTableExtendedColumn).__origin = 'operationColumns';\n      (col as AssetTableExtendedColumn).__id = op.buttonLabel;\n\n      return col;\n    });\n  }\n\n  private applySortingAndOrdering(\n    allColumns: AssetTableExtendedColumn[],\n    config?: AssetTableWidgetConfig\n  ): AssetTableExtendedColumn[] {\n    // Apply sort orders\n    if (config?.columnSortOrders) {\n      for (const [columnName, sortOrder] of Object.entries(config.columnSortOrders)) {\n        const col = allColumns.find(c => c.name === columnName);\n        if (col) {\n          col.sortOrder = sortOrder as 'asc' | 'desc';\n        }\n      }\n    }\n\n    // Apply column order\n    if (!Array.isArray(config?.columnOrder) || config.columnOrder.length === 0) {\n      return allColumns;\n    }\n\n    const ordered: AssetTableExtendedColumn[] = [];\n\n    for (const orderItem of config.columnOrder) {\n      const match = allColumns.find(\n        c =>\n          (c as AssetTableExtendedColumn).__id === orderItem.__id &&\n          (c as AssetTableExtendedColumn).__origin === orderItem.__origin\n      );\n\n      if (match) {\n        ordered.push(match);\n      }\n    }\n\n    const missing = allColumns.filter(\n      c =>\n        !config.columnOrder.some(\n          o =>\n            o.__id === (c as AssetTableExtendedColumn).__id &&\n            o.__origin === (c as AssetTableExtendedColumn).__origin\n        )\n    );\n\n    return [...ordered, ...missing];\n  }\n\n  private buildAndFilterQuery(filterObj: Record<string, any>) {\n    const andConditions: any[] = [];\n\n    Object.entries(filterObj).forEach(([key, value]) => {\n      if (Array.isArray(value)) {\n        value.forEach(v => andConditions.push({ [key]: v }));\n      } else if (typeof value === 'object' && value !== null) {\n        // Convert { gt: '...' } → { __gt: '...' }\n        const opEntries = Object.entries(value).map(([opKey, opValue]) => {\n          const prefixedKey = opKey.startsWith('__') ? opKey : `__${opKey}`;\n          return [prefixedKey, opValue];\n        });\n\n        const opObj = Object.fromEntries(opEntries);\n        andConditions.push({ [key]: opObj });\n      } else {\n        andConditions.push({ [key]: value });\n      }\n    });\n\n    return andConditions.length === 1 ? andConditions[0] : { __and: andConditions };\n  }\n\n  private extractFilters(obj: any, parentKey?: string, result: any = {}): Record<string, any> {\n    Object.entries(obj).forEach(([key, value]) => {\n      if (value && typeof value === 'object' && !Array.isArray(value)) {\n        const dateOps = ['after', 'before', 'gt', 'lt', 'ge', 'le'];\n        const hasDateOp = Object.keys(value).some(op => dateOps.includes(op));\n\n        if (hasDateOp) {\n          // Automatically add \".date\" for date filters\n          const effectiveKey = parentKey ? `${parentKey}.date` : `${key}.date`;\n\n          Object.entries(value).forEach(([opKey, opValue]) => {\n            if (opValue != null && dateOps.includes(opKey)) {\n              const op = opKey === 'after' ? 'gt' : opKey === 'before' ? 'lt' : opKey;\n\n              result[effectiveKey] = {\n                ...(result[effectiveKey] || {}),\n                [op]: opValue\n              };\n            }\n          });\n        } else {\n          const nextParent = parentKey ? `${parentKey}.${key}` : key;\n          this.extractFilters(value, nextParent, result);\n        }\n      } else if (key === 'equals' && Array.isArray(value) && value.length > 0) {\n        if (parentKey) {\n          result[parentKey] = value.length === 1 ? value[0] : value;\n        }\n      }\n    });\n\n    return result;\n  }\n\n  /** Returns a query object defaultd on columns setup. */\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  private getQueryObj(columns: Column[], defaultFilter = {}) {\n    return transform(columns, (query, column) => this.addColumnQuery(query, column), {\n      __filter: {},\n      __orderby: [],\n      ...defaultFilter\n    });\n  }\n\n  /** Extends given query with a part defaultd on the setup of given column. */\n  private addColumnQuery(query: AssetTableQuery, column: Column) {\n    // when a column is marked as filterable\n    if (column.filterable) {\n      if (column.filterPredicate) {\n        // so we use it as the expected value, * allow to search for it anywhere in the property\n        query.__filter[column.path] = `*${column.filterPredicate}*`;\n      }\n\n      // in the case of custom filtering form, we're storing the query in `externalFilterQuery.query`\n      if (column.externalFilterQuery) {\n        const getFilter = column.filteringConfig.getFilter || identity;\n        const queryObj = getFilter(column.externalFilterQuery);\n\n        if (queryObj.__or) {\n          query.__filter.__and = query.__filter.__and || [];\n          query.__filter.__and.push(queryObj);\n        } else if (queryObj.__and && get(query, '__filter.__and')) {\n          queryObj.__and.map(obj => query.__filter.__and.push(obj));\n        } else {\n          assign(query.__filter, queryObj);\n        }\n      }\n    }\n\n    // when a column is sortable and has a specified sorting order\n    if (column.sortable && column.sortOrder) {\n      // add sorting condition for the configured column `path`\n      query.__orderby.push({\n        [column.path]: column.sortOrder === 'asc' ? 1 : -1\n      });\n    }\n\n    return query;\n  }\n\n  /**\n   * Lookup comparison object from COMPARISON_OPTIONS\n   */\n  private lookupComparison(\n    comparison: ComparisonOption['value'] | ComparisonOption['sign']\n  ): ComparisonOption {\n    const allOptions = Object.values(COMPARISON_OPTIONS).flat();\n    return allOptions.find(o => o.value === comparison || o.sign === comparison) ?? allOptions[1];\n  }\n\n  /**\n   * Convert id + label + type into a c8y_JsonSchema format\n   * Example:\n   *   id: 'c8ySchema!!lastMeasurement'\n   *   label: 'Last measurement'\n   *   type: 'string'\n   * =>\n   * {\n   *   properties: {\n   *     lastMeasurement: {\n   *       label: 'Last measurement',\n   *       type: 'string'\n   *     }\n   *   }\n   * }\n   */\n  private convertIdToJsonSchema(legacyComputedProperty: any): any {\n    const { id, label, type } = legacyComputedProperty;\n    const parts = id.split('!!');\n    const propertyName = parts.length > 1 ? parts[1] : id;\n\n    return {\n      properties: {\n        [propertyName]: {\n          label: label || propertyName,\n          type: type || 'string'\n        }\n      }\n    };\n  }\n}\n","import { CommonModule } from '@angular/common';\nimport {\n  AfterViewInit,\n  ChangeDetectorRef,\n  Component,\n  EventEmitter,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n  ViewChild\n} from '@angular/core';\nimport {\n  CoreModule,\n  CountdownIntervalComponent,\n  DEFAULT_INTERVAL_VALUES,\n  IntervalBasedReload,\n  ManagedObjectRealtimeService,\n  WIDGET_TYPE_VALUES,\n  WidgetGlobalAutoRefreshService\n} from '@c8y/ngx-components';\nimport { AssetSelectorModule } from '@c8y/ngx-components/assets-navigator';\nimport { BehaviorSubject, tap } from 'rxjs';\nimport {\n  AssetTableRefreshOption,\n  AssetTableWidgetConfig,\n  GLOBAL_INTERVAL_OPTION\n} from '../asset-table.model';\nimport { TranslateService } from '@ngx-translate/core';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\n@Component({\n  selector: 'c8y-asset-table-auto-refresh',\n  templateUrl: './asset-table-auto-refresh.component.html',\n  standalone: true,\n  imports: [\n    CommonModule,\n    CoreModule,\n    AssetSelectorModule,\n    TooltipModule,\n    CountdownIntervalComponent\n  ],\n  providers: [ManagedObjectRealtimeService]\n})\nexport class AssetTableAutoRefreshComponent\n  extends IntervalBasedReload\n  implements OnInit, OnDestroy, OnChanges, AfterViewInit\n{\n  @Input() config: AssetTableWidgetConfig;\n  /**\n   * State of this boolean depends on an Application Options \"alarmsRefreshType\" setting.\n   */\n  @Input() isIntervalRefresh: boolean;\n  /**\n   * @inheritdoc\n   */\n  @Input() refreshInterval: number;\n  /**\n   * @inheritdoc\n   */\n  @Input() isLoading: BehaviorSubject<boolean>;\n  /**\n   * Indicates whether the list is currently being scrolled.\n   */\n  @Input() isScrolling: boolean;\n  /**\n   * @inheritdoc\n   */\n  @Input() isRefreshDisabled: boolean;\n  /**\n   * @inheritdoc\n   */\n  @Output() onCountdownEnded = new EventEmitter<void>();\n\n  @ViewChild(CountdownIntervalComponent, { static: false })\n  countdownIntervalComponent: CountdownIntervalComponent;\n  /**\n   * @inheritdoc\n   */\n  protected manuallyDisabledCountdown = false;\n\n  readonly GLOBAL_INTERVAL_OPTION = GLOBAL_INTERVAL_OPTION;\n  readonly REFRESH_INTERVAL_IN_MILLISECONDS = DEFAULT_INTERVAL_VALUES;\n  readonly WIDGET_TYPE_VALUES = WIDGET_TYPE_VALUES;\n\n  refreshOption: AssetTableRefreshOption;\n  isAutoRefreshDisabled = false;\n  isIntervalRefreshToggleOn: boolean;\n  toggleCountdownButtonTooltipText: string;\n  globalAutoRefreshEnabled: boolean;\n\n  protected hideCountdown: boolean;\n\n  constructor(\n    private cdRef: ChangeDetectorRef,\n    private translateService: TranslateService,\n    private widgetGlobalAutoRefreshService: WidgetGlobalAutoRefreshService\n  ) {\n    super();\n  }\n\n  ngOnInit(): void {\n    this.isIntervalRefreshToggleOn =\n      !this.isRefreshDisabled && (this.config.isAutoRefreshEnabled || !!this.refreshInterval);\n    this.updateCountdownButtonTooltipText();\n  }\n\n  ngAfterViewInit() {\n    if (this.isIntervalRefresh && this.refreshInterval) {\n      this.startCountdown();\n    }\n\n    if (this.globalAutoRefreshEnabled) {\n      this.countdownSubscription =\n        this.widgetGlobalAutoRefreshService.countdownActions.countdownEnded$\n          .pipe(tap(() => this.onCountdownEnded.emit()))\n          .subscribe();\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    const { isDisabled, config } = changes;\n    if (config) {\n      this.globalAutoRefreshEnabled = this.config.refreshOption === GLOBAL_INTERVAL_OPTION;\n    }\n    if (isDisabled) {\n      this.isIntervalRefreshToggleOn =\n        !this.isRefreshDisabled && (this.config.isAutoRefreshEnabled || !!this.refreshInterval);\n      this.updateCountdownButtonTooltipText(gettext('Disabled'));\n    }\n\n    if (\n      !this.isIntervalRefresh ||\n      this.manuallyDisabledCountdown ||\n      !this.config.isAutoRefreshEnabled\n    ) {\n      return;\n    }\n\n    this.handleScrolling();\n  }\n\n  ngOnDestroy() {\n    if (this.countdownSubscription) {\n      this.countdownSubscription.unsubscribe();\n    }\n  }\n\n  /**\n   * @inheritdoc\n   */\n  countdownEnded(): void {\n    /**\n     * @inheritdoc\n     */\n    this.autoRefreshList();\n  }\n\n  reload(): void {\n    if (this.isIntervalRefresh) {\n      this.autoRefreshList();\n    } else {\n      this.onCountdownEnded.emit();\n    }\n  }\n\n  /**\n   * Stops the countdown and triggers a refresh action.\n   * This function is responsible for halting the countdown interval component's operation.\n   * After stopping the countdown, it emits an `onCountdownEnded` event.\n   * This event is used to inform external components that the countdown has ended,\n   * typically prompting them to reload or refresh their data.\n   */\n  autoRefreshList(): void {\n    if (this.isIntervalRefreshToggleOn && this.config.isAutoRefreshEnabled) {\n      this.countdownIntervalComponent.stop();\n    }\n    this.onCountdownEnded.emit();\n  }\n\n  /**\n   * Enables and starts the countdown timer.\n   *\n   * This method makes the countdown visible (`hideCountdown` is set to false) and then\n   * starts the countdown process. It ensures the countdown timer is updated immediately\n   * by triggering change detection with `cdRef.detectChanges()` before starting the countdown.\n   * This method encapsulates the logic required to initiate the countdown timer.\n   */\n  enableCountdown(): void {\n    this.hideCountdown = false;\n    // Prevents the countdown from getting stuck on an initial value.\n    this.cdRef.detectChanges();\n    this.startCountdown();\n  }\n\n  protected updateCountdownButtonTooltipText(customText?: string): void {\n    if (customText) {\n      this.toggleCountdownButtonTooltipText = customText;\n      return;\n    }\n    this.toggleCountdownButtonTooltipText = this.isIntervalRefreshToggleOn\n      ? this.translateService.instant(gettext('Disable auto refresh'))\n      : this.translateService.instant(gettext('Enable auto refresh'));\n  }\n}\n","<div class=\"m-l-auto d-flex p-t-4 p-b-4 p-r-4\">\n  <div class=\"m-l-auto d-flex a-i-center\">\n    @if (config.isAutoRefreshEnabled) {\n      <label\n        class=\"m-b-0 m-r-8 text-label-small text-truncate flex-no-shrink\"\n        title=\" {{ 'Auto refresh' | translate }}\"\n      >\n        {{ 'Auto refresh' | translate }}\n      </label>\n    }\n    <div class=\"input-group\">\n      <label\n        class=\"toggle-countdown\"\n        [class.toggle-countdown-disabled]=\"isAutoRefreshDisabled\"\n        [attr.aria-label]=\"toggleCountdownButtonTooltipText\"\n        [tooltip]=\"toggleCountdownButtonTooltipText\"\n        placement=\"bottom\"\n        [adaptivePosition]=\"false\"\n        [container]=\"'body'\"\n        [delay]=\"500\"\n      >\n        <input\n          type=\"checkbox\"\n          data-cy=\"c8y-alarms-widget--interval-toggle-button\"\n          (click)=\"onToggleCountdownButtonState($event, WIDGET_TYPE_VALUES.ASSET_TABLE)\"\n        />\n\n        @if (isIntervalRefreshToggleOn) {\n          <c8y-countdown-interval\n            [countdownInterval]=\"refreshInterval\"\n            (countdownEnded)=\"countdownEnded()\"\n          ></c8y-countdown-interval>\n        } @else {\n          <i c8yIcon=\"pause\"></i>\n        }\n      </label>\n    </div>\n  </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport {\n  Component,\n  EventEmitter,\n  inject,\n  OnDestroy,\n  OnInit,\n  TemplateRef,\n  ViewChild\n} from '@angular/core';\nimport { FormBuilder, FormControl } from '@angular/forms';\nimport { QueriesUtil } from '@c8y/client';\nimport {\n  AlertService,\n  Column,\n  AssetTableExtendedColumn,\n  CoreModule,\n  DataSourceModifier,\n  DEFAULT_INTERVAL_VALUES,\n  globalAutoRefreshLoading,\n  ManagedObjectRealtimeService,\n  ServerSideDataCallback,\n  ServerSideDataResult,\n  WidgetGlobalAutoRefreshService\n} from '@c8y/ngx-components';\nimport { AssetSelectorModule } from '@c8y/ngx-components/assets-navigator';\nimport {\n  ContextDashboardService,\n  WidgetConfigService\n} from '@c8y/ngx-components/context-dashboard';\nimport {\n  BehaviorSubject,\n  distinctUntilChanged,\n  merge,\n  scan,\n  shareReplay,\n  skip,\n  startWith,\n  Subject,\n  takeUntil\n} from 'rxjs';\nimport { AssetTableService } from '../asset-table.service';\nimport {\n  AssetTableRefreshOption,\n  AssetTableWidgetConfig,\n  DEFAULT_INTERVAL_VALUE,\n  GLOBAL_INTERVAL_OPTION\n} from '../asset-table.model';\nimport { AssetTableAutoRefreshComponent } from '../asset-table-auto-refresh/asset-table-auto-refresh.component';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { AssetPropertyType } from '@c8y/ngx-components/asset-properties';\nimport { isEqual } from 'lodash-es';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\n\n@Component({\n  selector: 'c8y-asset-table-widget-config',\n  templateUrl: './asset-table-widget-config.component.html',\n  standalone: true,\n  imports: [\n    CommonModule,\n    CoreModule,\n    AssetSelectorModule,\n    AssetTableAutoRefreshComponent,\n    TooltipModule,\n    PopoverModule\n  ],\n  providers: [ManagedObjectRealtimeService]\n})\nexport class AssetTableWidgetConfigComponent implements OnInit, OnDestroy {\n  @ViewChild('assetTablePreview')\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  set previewMapSet(template: TemplateRef<any>) {\n    if (template) {\n      this.widgetConfigService.setPreview(template);\n      return;\n    }\n    this.widgetConfigService.setPreview(null);\n  }\n\n  readonly GLOBAL_INTERVAL_OPTION = GLOBAL_INTERVAL_OPTION;\n  readonly REFRESH_INTERVAL_IN_MILLISECONDS = DEFAULT_INTERVAL_VALUES;\n\n  title = gettext('Asset Table');\n  columns: AssetTableExtendedColumn[];\n  selectedAssets: AssetPropertyType[] = [];\n  serverSideDataCallback: ServerSideDataCallback;\n\n  refresh: EventEmitter<void> = new EventEmitter<void>();\n  formGroup: ReturnType<AssetTableWidgetConfigComponent['createForm']>;\n  /**\n   * Current isLoading state. Based on it next countdown cycle is being started.\n   */\n  isLoading$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n  refreshOption: AssetTableRefreshOption;\n  config: AssetTableWidgetConfig;\n  includeDescendantsTooltip = gettext(\n    'When enabled, all assets in the hierarchy under the selected asset will be included. When disabled, only the direct child assets will be included.'\n  );\n  private initializedContext = false; // used to track when context was removed on purpose to show all assets.\n  protected queriesUtil: QueriesUtil;\n\n  private destroy$: Subject<void> = new Subject();\n\n  private readonly formBuilder = inject(FormBuilder);\n  private readonly assetTableService = inject(AssetTableService);\n  private readonly widgetGlobalAutoRefresh = inject(WidgetGlobalAutoRefreshService);\n  private readonly alertService = inject(AlertService);\n  private readonly widgetConfigService = inject(WidgetConfigService);\n  private readonly contextDashboardService = inject(ContextDashboardService);\n\n  constructor() {\n    this.columns = this.getColumns();\n    this.queriesUtil = new QueriesUtil();\n    this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n  }\n\n  ngOnInit(): void {\n    this.initializeForm();\n    this.setupGridHeaderFilterDependency();\n\n    const mergedConfig$ = merge(\n      this.widgetConfigService.currentConfig$,\n      this.formGroup.valueChanges\n    ).pipe(\n      startWith(this.formGroup.getRawValue()),\n      scan((acc, value) => ({ ...acc, ...value }), {} as AssetTableWidgetConfig),\n      distinctUntilChanged((a, b) => isEqual(a, b)),\n      shareReplay(1)\n    );\n\n    mergedConfig$.pipe(takeUntil(this.destroy$)).subscribe(config => {\n      if (!config.device && config.settings?.context && !this.initializedContext) {\n        const updatedDevice = { ...config.settings.context };\n        this.initializedContext = true;\n        this.widgetConfigService.updateConfig({\n          device: updatedDevice\n        });\n        config = { ...config, device: updatedDevice };\n      } else if (config.device) {\n        this.initializedContext = true;\n      }\n\n      if (config.showStatusIcon !== this.config?.showStatusIcon) {\n        this.widgetConfigService.updateConfig({\n          showStatusIcon: config.showStatusIcon\n        });\n      }\n      this.config = config;\n      this.columns = this.getColumns(config);\n      this.refreshOption = config?.refreshOption ?? GLOBAL_INTERVAL_OPTION;\n      this.formGroup.patchValue(config, { emitEvent: false });\n\n      if (config.device?.self) {\n        config.isDeviceAssetSelected = 'c8y_IsDevice' in config.device;\n      }\n\n      this.updateFormDisabledState();\n\n      if (config?.widgetInstanceGlobalAutoRefreshContext) {\n        this.handleGlobalRefreshLoading();\n      }\n    });\n\n    this.widgetConfigService.addOnBeforeSave(() => {\n      const migratedConfig = this.assetTableService.migrateToLegacyProperties(this.config);\n      this.widgetConfigService.updateConfig(migratedConfig, true);\n\n      return true;\n    });\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n    if (\n      this.formGroup.controls.widgetInstanceGlobalAutoRefreshContext.value &&\n      this.isLoading$.value\n    ) {\n      this.widgetGlobalAutoRefresh.decrementLoading();\n    }\n  }\n\n  /**\n   * This method loads data when data grid requests it (e.g. on initial load or on column settings change).\n   * It gets the object with current data grid setup and is supposed to return:\n   * full response, list of items, paging object, the number of items in the filtered subset, the number of all items.\n   */\n  async onDataSourceModifier(\n    dataSourceModifier: DataSourceModifier\n  ): Promise<ServerSideDataResult> {\n    const { res, data, paging } = await this.assetTableService.getAssets(\n      this.config,\n      dataSourceModifier.columns,\n      this.formGroup.controls.filterPredicate.value ?? {}\n    );\n\n    const serverSideDataResult: ServerSideDataResult = {\n      res,\n      data,\n      paging,\n      filteredSize: paging.totalElements,\n      size: paging.totalElements\n    };\n\n    return serverSideDataResult;\n  }\n\n  async updateSelectedAssets(): Promise<void> {\n    try {\n      this.isLoading$.next(true);\n      this.refresh.emit();\n    } catch (error) {\n      this.alertService.addServerFailure(error);\n    } finally {\n      this.isLoading$.next(false);\n    }\n  }\n\n  updateRefreshOption() {\n    this.formGroup.controls.refreshOption.setValue(this.refreshOption);\n    const isGlobalInterval = this.refreshOption === GLOBAL_INTERVAL_OPTION;\n    this.formGroup.controls.widgetInstanceGlobalTimeContext.setValue(isGlobalInterval);\n\n    this.updateConfigBasedOnRefreshOption();\n  }\n\n  private getColumns(config?: AssetTableWidgetConfig): Column[] {\n    if (!config) {\n      return [];\n    }\n    const selectedProperties = config.selectedProperties || [];\n    const operationColumns = config.operationColumns || [];\n    return this.assetTableService.getColumns(selectedProperties, operationColumns, config);\n  }\n\n  private handleGlobalRefreshLoading(): void {\n    this.isLoading$\n      .pipe(\n        skip(1),\n        globalAutoRefreshLoading(this.widgetGlobalAutoRefresh),\n        takeUntil(this.destroy$)\n      )\n      .subscribe();\n  }\n\n  private updateConfigBasedOnRefreshOption() {\n    const isInterval = this.refreshOption === 'interval';\n    this.formGroup.controls.isAutoRefreshEnabled.setValue(isInterval);\n\n    isInterval\n      ? this.formGroup.get('refreshInterval').enable()\n      : this.formGroup.get('refreshInterval').disable();\n  }\n\n  private updateFormDisabledState(): void {\n    const selectedProperties = this.formGroup.get('selectedProperties')?.value;\n    const operationColumns = this.formGroup.get('operationColumns')?.value;\n    const disable =\n      (!selectedProperties || selectedProperties.length === 0) &&\n      (!operationColumns || operationColumns.length === 0);\n\n    this.contextDashboardService.formDisabled = disable;\n  }\n\n  private setupGridHeaderFilterDependency(): void {\n    const gridHeaderControl = this.formGroup.get('displayOptions.gridHeader');\n    const filterControl = this.formGroup.get('displayOptions.filter');\n    const configurableColumnsControl = this.formGroup.get(\n      'displayOptions.configurableColumnsEnabled'\n    );\n\n    // Set initial state\n    if (!gridHeaderControl?.value) {\n      filterControl?.disable();\n      configurableColumnsControl?.disable();\n    }\n\n    // Listen to changes\n    gridHeaderControl?.valueChanges.pipe(takeUntil(this.destroy$)).subscribe(isEnabled => {\n      if (isEnabled) {\n        filterControl?.enable();\n        configurableColumnsControl?.enable();\n      } else {\n        filterControl?.disable();\n        configurableColumnsControl?.disable();\n      }\n    });\n  }\n\n  private initializeForm(): void {\n    this.formGroup = this.createForm();\n  }\n\n  private createForm() {\n    return this.formBuilder.group({\n      title: new FormControl('Asset table'),\n      device: new FormControl(undefined),\n      selectedProperties: [],\n      operationColumns: [],\n      isAutoRefreshEnabled: [true],\n      refreshOption: GLOBAL_INTERVAL_OPTION,\n      refreshInterval: new FormControl(DEFAULT_INTERVAL_VALUE),\n      widgetInstanceGlobalAutoRefreshContext: [],\n      widgetInstanceGlobalTimeContext: [],\n      displayOptions: this.formBuilder.group({\n        gridHeader: [true],\n        bordered: [false],\n        striped: [true],\n        filter: [true],\n        hover: [true],\n        showLoadingIndicator: [true],\n        configurableColumnsEnabled: [true]\n      }),\n      filterPredicate: [],\n      showIconAndValue: [true],\n      showAsLink: [false],\n      includeDescendants: [false],\n      showStatusIcon: [true]\n    });\n  }\n}\n","<form [formGroup]=\"formGroup\">\n  <fieldset class=\"c8y-fieldset\">\n    <legend>{{ 'Date' | translate }}</legend>\n    <div class=\"row tight-grid\">\n      <c8y-form-group class=\"m-b-16 form-group-sm\">\n        <div class=\"d-flex gap-8 a-i-center\">\n          <div class=\"c8y-select-wrapper\">\n            <select\n              class=\"form-control\"\n              title=\"{{ 'Refresh options`options for refreshing a view`' | translate }}\"\n              [(ngModel)]=\"refreshOption\"\n              [ngModelOptions]=\"{ standalone: true }\"\n              (change)=\"updateRefreshOption()\"\n            >\n              <option\n                [title]=\"'Refreshing after the given interval' | translate\"\n                value=\"interval\"\n              >\n                {{ 'Use refresh interval' | translate }}\n              </option>\n              <option\n                [title]=\"'Refreshing after the given interval, synchronized globally' | translate\"\n                value=\"global-interval\"\n              >\n                {{ 'Use global refresh interval' | translate }}\n              </option>\n            </select>\n          </div>\n          @if (formGroup?.controls?.refreshOption?.value !== GLOBAL_INTERVAL_OPTION) {\n            <div\n              class=\"c8y-select-wrapper grow flex-no-shrink\"\n              title=\" {{ 'Interval' | translate }}\"\n            >\n              <select\n                class=\"form-control text-12\"\n                [title]=\"'Refresh interval in seconds' | translate\"\n                id=\"refreshInterval\"\n                formControlName=\"refreshInterval\"\n                data-cy=\"c8y-alarm-list-widget-config--interval-selector\"\n              >\n                @for (refreshInterval of REFRESH_INTERVAL_IN_MILLISECONDS; track refreshInterval) {\n                  <option [value]=\"refreshInterval\">\n                    {{ '{{ seconds }}s' | translate: { seconds: refreshInterval / 1000 } }}\n                  </option>\n                }\n              </select>\n            </div>\n          }\n        </div>\n      </c8y-form-group>\n    </div>\n  </fieldset>\n  <fieldset class=\"c8y-fieldset\">\n    <legend>{{ 'Display options' | translate }}</legend>\n    <div formGroupName=\"displayOptions\">\n      <!-- Data options -->\n      <fieldset class=\"c8y-fieldset\">\n        <legend>{{ 'Data' | translate }}</legend>\n        <c8y-form-group\n          class=\"m-b-8 form-group-sm d-flex-md flex-wrap gap-16\"\n          [formGroup]=\"formGroup\"\n        >\n          <!-- hierarchical data -->\n          <label\n            class=\"c8y-checkbox\"\n            [title]=\"'Show assets and all descendants' | translate\"\n          >\n            <input\n              name=\"includeDescendants\"\n              type=\"checkbox\"\n              formControlName=\"includeDescendants\"\n            />\n            <span></span>\n            <span translate>Include descendants</span>\n            <button\n              class=\"btn-help m-l-8\"\n              [attr.aria-label]=\"includeDescendantsTooltip | translate\"\n              [popover]=\"includeDescendantsTooltip | translate\"\n              placement=\"top\"\n              triggers=\"focus\"\n              container=\"body\"\n              type=\"button\"\n              (click)=\"$event.stopPropagation()\"\n            ></button>\n          </label>\n          <!-- Status icon -->\n          <label\n            class=\"c8y-checkbox m-t-0\"\n            [title]=\"'Show status icon column' | translate\"\n          >\n            <input\n              name=\"showStatusIcon\"\n              type=\"checkbox\"\n              formControlName=\"showStatusIcon\"\n            />\n            <span></span>\n            <span translate>Show status icon column</span>\n          </label>\n        </c8y-form-group>\n      </fieldset>\n      <!-- Header options -->\n      <fieldset class=\"c8y-fieldset\">\n        <legend>{{ 'Header' | translate }}</legend>\n        <c8y-form-group class=\"m-b-8 form-group-sm d-flex-md flex-wrap gap-16\">\n          <!-- grid header -->\n          <label\n            class=\"c8y-checkbox\"\n            [title]=\"'Display the data grid header' | translate\"\n          >\n            <input\n              name=\"gridHeader\"\n              type=\"checkbox\"\n              formControlName=\"gridHeader\"\n            />\n            <span></span>\n            <span translate>Table header</span>\n          </label>\n          <!-- show filter label -->\n          <label\n            class=\"c8y-checkbox m-t-0\"\n            [title]=\"'Display applied filters in the header' | translate\"\n          >\n            <input\n              name=\"filter\"\n              type=\"checkbox\"\n              formControlName=\"filter\"\n            />\n            <span></span>\n            <span translate>Active filters</span>\n          </label>\n          <!-- enable configurable columns -->\n          <label\n            class=\"c8y-checkbox m-t-0\"\n            [title]=\"'Display columns configuration button' | translate\"\n          >\n            <input\n              name=\"configurableColumnsEnabled\"\n              type=\"checkbox\"\n              formControlName=\"configurableColumnsEnabled\"\n            />\n            <span></span>\n            <span translate>Configure columns</span>\n          </label>\n        </c8y-form-group>\n      </fieldset>\n\n      <!-- Row options -->\n      <fieldset class=\"c8y-fieldset\">\n        <legend>{{ 'Row' | translate }}</legend>\n        <c8y-form-group class=\"m-b-8 d-flex-md gap-16 flex-wrap form-group-sm\">\n          <!-- zebra stripes -->\n          <label\n            class=\"c8y-checkbox\"\n            [title]=\"'Alternate row background for readability' | translate\"\n          >\n            <input\n              name=\"striped\"\n              type=\"checkbox\"\n              formControlName=\"striped\"\n            />\n            <span></span>\n            <span translate>Striped rows</span>\n          </label>\n          <!-- hover effect -->\n          <label\n            class=\"c8y-checkbox m-t-0\"\n            [title]=\"'Change row background color on hover' | translate\"\n          >\n            <input\n              name=\"hover\"\n              type=\"checkbox\"\n              formControlName=\"hover\"\n            />\n            <span></span>\n            <span translate>Hover highlight</span>\n          </label>\n          <!-- show loading indicator -->\n          <label\n            class=\"c8y-checkbox m-t-0\"\n            [title]=\"'Show a spinner while data loads' | translate\"\n          >\n            <input\n              name=\"showLoadingIndicator\"\n              type=\"checkbox\"\n              formControlName=\"showLoadingIndicator\"\n            />\n            <span></span>\n            <span translate>Loading indicator</span>\n          </label>\n        </c8y-form-group>\n      </fieldset>\n\n      <!-- Cell options -->\n      <fieldset class=\"c8y-fieldset\">\n        <legend>{{ 'Cell' | translate }}</legend>\n        <div class=\"d-flex-md gap-16 flex-wrap m-b-8\">\n          <!-- cell borders (inside displayOptions) -->\n          <c8y-form-group class=\"m-b-0 form-group-sm\">\n            <label\n              class=\"c8y-checkbox\"\n              [title]=\"'Draw borders around table cells' | translate\"\n            >\n              <input\n                name=\"bordered\"\n                type=\"checkbox\"\n                formControlName=\"bordered\"\n              />\n              <span></span>\n              <span translate>Cell borders</span>\n            </label>\n          </c8y-form-group>\n          <!-- Cell content options (outside displayOptions formGroup, at root form level) -->\n          <c8y-form-group\n            class=\"m-b-0 form-group-sm d-flex-md flex-wrap gap-16\"\n            [formGroup]=\"formGroup\"\n          >\n            <!-- show icon and value -->\n            <label\n              class=\"c8y-checkbox\"\n              [title]=\"'When cell rendering is set to icon, show both icon and value' | translate\"\n            >\n              <input\n                name=\"showIconAndValue\"\n                type=\"checkbox\"\n                formControlName=\"showIconAndValue\"\n              />\n              <span></span>\n              <span translate>Icon with value</span>\n            </label>\n            <!-- show as link -->\n            <label\n              class=\"c8y-checkbox m-t-0\"\n              [title]=\"\n                'Render the first column (excluding computed and alarm types) as a link to the asset details.'\n                  | translate\n              \"\n            >\n              <input\n                name=\"showAsLink\"\n                type=\"checkbox\"\n                formControlName=\"showAsLink\"\n              />\n              <span></span>\n              <span translate>First column link</span>\n            </label>\n          </c8y-form-group>\n        </div>\n      </fieldset>\n    </div>\n  </fieldset>\n</form>\n\n<ng-template #assetTablePreview>\n  @if (\n    !formGroup ||\n    columns?.length === 0 ||\n    ((config.selectedProperties?.length === 0 || config.selectedProperties === null) &&\n      (config.operationColumns?.length === 0 || config.operationColumns === null))\n  ) {\n    <c8y-ui-empty-state\n      class=\"d-block m-t-24\"\n      [icon]=\"'search'\"\n      [title]=\"'No data to display' | translate\"\n      [subtitle]=\"'Start by selecting the properties' | translate\"\n    ></c8y-ui-empty-state>\n  } @else {\n    @if (!formGroup.controls.widgetInstanceGlobalTimeContext.value) {\n      <c8y-asset-table-auto-refresh\n        class=\"d-contents\"\n        [isIntervalRefresh]=\"!!formGroup.controls.refreshInterval.value\"\n        [refreshInterval]=\"formGroup.controls.refreshInterval.value\"\n        [config]=\"formGroup.value\"\n        [isRefreshDisabled]=\"false\"\n        [isLoading]=\"isLoading$\"\n        (onCountdownEnded)=\"updateSelectedAssets()\"\n      ></c8y-asset-table-auto-refresh>\n    }\n    <c8y-data-grid\n      class=\"content-fullpage d-flex d-col border-top border-bottom\"\n      [title]=\"title\"\n      [displayOptions]=\"formGroup.controls.displayOptions.value\"\n      [columns]=\"columns\"\n      [serverSideDataCallback]=\"serverSideDataCallback\"\n      [configureColumnsEnabled]=\"formGroup.get('displayOptions.configurableColumnsEnabled')?.value\"\n      [refresh]=\"refresh\"\n    >\n      <c8y-ui-empty-state\n        [icon]=\"'search'\"\n        [title]=\"'No results to display.' | translate\"\n        [subtitle]=\"'Refine your search terms or check your spelling.' | translate\"\n        [horizontal]=\"true\"\n      ></c8y-ui-empty-state>\n    </c8y-data-grid>\n  }\n</ng-template>\n","import { Component, EventEmitter, inject, Input, OnDestroy, OnInit } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport {\n  AlertService,\n  Column,\n  CoreModule,\n  DataSourceModifier,\n  globalAutoRefreshLoading,\n  Pagination,\n  ServerSideDataCallback,\n  ServerSideDataResult,\n  WidgetGlobalAutoRefreshService\n} from '@c8y/ngx-components';\nimport { AssetTableAutoRefreshComponent } from '../asset-table-auto-refresh/asset-table-auto-refresh.component';\nimport { BehaviorSubject, skip, Subject, takeUntil } from 'rxjs';\nimport { AssetTableService } from '../asset-table.service';\nimport { AssetTableWidgetConfig } from '../asset-table.model';\n\n@Component({\n  selector: 'c8y-asset-table-widget-view',\n  templateUrl: './asset-table-widget-view.component.html',\n  standalone: true,\n  imports: [CoreModule, RouterModule, AssetTableAutoRefreshComponent]\n})\nexport class AssetTableWidgetViewComponent implements OnInit, OnDestroy {\n  @Input() config: AssetTableWidgetConfig;\n\n  /**\n   * Current isLoading state. Based on it next countdown cycle is being started.\n   */\n  isLoading$: BehaviorSubject<boolean> = new BehaviorSubject(false);\n  selectedAssets: any[] = [];\n  columns: Column[] = [];\n  refresh: EventEmitter<any> = new EventEmitter<any>();\n  serverSideDataCallback: ServerSideDataCallback;\n  pagination: Pagination = {\n    pageSize: 100,\n    currentPage: 1\n  };\n\n  private destroy$: Subject<void> = new Subject();\n\n  private readonly widgetGlobalAutoRefresh = inject(WidgetGlobalAutoRefreshService);\n  private readonly assetTableService = inject(AssetTableService);\n  private readonly alertService = inject(AlertService);\n\n  constructor() {\n    this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n  }\n\n  async ngOnInit(): Promise<void> {\n    if (this.assetTableService.isMigrationNeeded(this.config)) {\n      this.config = await this.assetTableService.migrateLegacyProperties(this.config);\n    }\n    this.columns = this.assetTableService.getColumns(\n      this.config?.selectedProperties,\n      this.config?.operationColumns,\n      this.config\n    );\n    if (this.config.widgetInstanceGlobalAutoRefreshContext) {\n      this.handleGlobalRefreshLoading();\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n    if (this.config?.widgetInstanceGlobalAutoRefreshContext && this.isLoading$.value) {\n      this.widgetGlobalAutoRefresh.decrementLoading();\n    }\n  }\n\n  /**\n   * This method loads data when data grid requests it (e.g. on initial load or on column settings change).\n   * It gets the object with current data grid setup and is supposed to return:\n   * full response, list of items, paging object, the number of items in the filtered subset, the number of all items.\n   */\n  async onDataSourceModifier(\n    dataSourceModifier: DataSourceModifier\n  ): Promise<ServerSideDataResult> {\n    const { res, data, paging } = await this.assetTableService.getAssets(\n      this.config,\n      dataSourceModifier.columns,\n      this.config.filterPredicate ?? {},\n      dataSourceModifier.pagination\n    );\n\n    const serverSideDataResult: ServerSideDataResult = {\n      res,\n      data,\n      paging,\n      filteredSize: paging.totalElements,\n      size: paging.totalElements\n    };\n\n    return serverSideDataResult;\n  }\n\n  updateSelectedAssets(): void {\n    try {\n      this.isLoading$.next(true);\n      this.refresh.emit();\n    } catch (error) {\n      this.alertService.addServerFailure(error);\n    } finally {\n      this.isLoading$.next(false);\n    }\n  }\n\n  private handleGlobalRefreshLoading(): void {\n    this.isLoading$\n      .pipe(\n        skip(1),\n        globalAutoRefreshLoading(this.widgetGlobalAutoRefresh),\n        takeUntil(this.destroy$)\n      )\n      .subscribe();\n  }\n}\n","@if (!config.widgetInstanceGlobalTimeContext) {\n  <c8y-asset-table-auto-refresh\n    class=\"d-contents\"\n    [isIntervalRefresh]=\"!!config.refreshInterval\"\n    [refreshInterval]=\"config.refreshInterval\"\n    [config]=\"config\"\n    [isRefreshDisabled]=\"false\"\n    [isLoading]=\"isLoading$\"\n    (onCountdownEnded)=\"updateSelectedAssets()\"\n  ></c8y-asset-table-auto-refresh>\n}\n<c8y-data-grid\n  class=\"content-fullpage d-flex d-col border-top border-bottom\"\n  [title]=\"config.title\"\n  [displayOptions]=\"config.displayOptions\"\n  [columns]=\"columns\"\n  [serverSideDataCallback]=\"serverSideDataCallback\"\n  [pagination]=\"pagination\"\n  (onPageSizeChange)=\"pagination = $event.pagination\"\n  [refresh]=\"refresh\"\n>\n  <c8y-ui-empty-state\n    [icon]=\"'search'\"\n    [title]=\"'No results to display.' | translate\"\n    [subtitle]=\"'Refine your search terms or check your spelling.' | translate\"\n    [horizontal]=\"true\"\n  ></c8y-ui-empty-state>\n</c8y-data-grid>\n","import { Component, inject, OnInit } from '@angular/core';\nimport {\n  FormBuilder,\n  FormControl,\n  FormGroup,\n  FormsModule,\n  ReactiveFormsModule,\n  Validators\n} from '@angular/forms';\nimport {\n  CommonModule,\n  CoreModule,\n  DateTimePickerModule,\n  ModalModule,\n  ModalLabels,\n  SelectModule,\n  C8yTranslateModule,\n  SelectableItem\n} from '@c8y/ngx-components';\nimport { IconSelectorModule } from '@c8y/ngx-components/icon-selector';\nimport { COMPARISON_OPTIONS, ComparisonOption } from '../asset-table.model';\nimport { gettext } from '@c8y/ngx-components/gettext';\n\n/** Represents a single icon render condition */\nexport interface IconRenderCondition {\n  dataType: { label: string; value: string };\n  comparison: ComparisonOption;\n  value: string | number | boolean | Date;\n  icon: string;\n  color: string;\n}\n\nexport interface IconRenderTypeForm {\n  dataType: FormControl<{ label: string; value: string }>;\n  comparison: FormControl<ComparisonOption | null>;\n  value: FormControl<string | number | boolean | Date>;\n  icon: FormControl<string>;\n  color: FormControl<string>;\n}\n\n@Component({\n  selector: 'c8y-icon-render-type-modal',\n  templateUrl: './icon-render-type-modal.component.html',\n  standalone: true,\n  imports: [\n    ModalModule,\n    FormsModule,\n    ReactiveFormsModule,\n    SelectModule,\n    IconSelectorModule,\n    DateTimePickerModule,\n    C8yTranslateModule,\n    CommonModule,\n    CoreModule\n  ]\n})\nexport class IconRenderTypeModalComponent implements OnInit {\n  forms: FormGroup<IconRenderTypeForm>[] = [];\n  initialIconConfig: IconRenderCondition[] = [];\n  labels: ModalLabels = { ok: gettext('Save'), cancel: gettext('Cancel') };\n  booleanOptions: SelectableItem[] = [\n    { label: gettext('True'), value: 'true' },\n    { label: gettext('False'), value: 'false' }\n  ];\n  dataTypes = [\n    { label: gettext('Number'), value: 'number' },\n    { label: gettext('Date'), value: 'date' },\n    { label: gettext('String'), value: 'string' },\n    { label: gettext('Boolean'), value: 'boolean' }\n  ];\n  comparisonOptions = COMPARISON_OPTIONS;\n  result: Promise<IconRenderCondition[]> = new Promise((resolve, reject) => {\n    this._save = resolve;\n    this._cancel = reject;\n  });\n  private _save;\n  private _cancel;\n\n  private readonly fb = inject(FormBuilder);\n\n  ngOnInit(): void {\n    if (this.initialIconConfig && this.initialIconConfig.length > 0) {\n      for (const config of this.initialIconConfig) {\n        this.forms.push(this.createForm(config));\n      }\n    } else {\n      this.addCondition();\n    }\n  }\n\n  addCondition() {\n    this.forms.push(this.createForm());\n  }\n\n  removeCondition(idx: number) {\n    this.forms.splice(idx, 1);\n  }\n\n  iconSelectionChange(icon: string, idx: number) {\n    this.forms[idx].get('icon')?.setValue(icon);\n  }\n\n  onDateSelected(date: any, idx: number) {\n    this.forms[idx].get('value')?.setValue(date);\n  }\n\n  isAnyFormInvalid(): boolean {\n    return this.forms.some(f => f.invalid);\n  }\n\n  onClose(_) {\n    if (this.forms.every(f => f.valid)) {\n      this._save(this.forms.map(f => f.value));\n    }\n  }\n\n  onDismiss(_) {\n    this._cancel();\n  }\n\n  private createForm(config?: IconRenderCondition): FormGroup<IconRenderTypeForm> {\n    return this.fb.group({\n      dataType: [config?.dataType || this.dataTypes[0], [Validators.required]],\n      comparison: [config?.comparison || null, [Validators.required]],\n      value: [config?.value ?? '', [Validators.required]],\n      icon: [config?.icon || 'c8y-cockpit', [Validators.required]],\n      color: [config?.color || '#212121', [Validators.required]]\n    });\n  }\n}\n","<c8y-modal\n  title=\"{{ 'Configure icon conditions' | translate }}\"\n  (onClose)=\"onClose($event)\"\n  (onDismiss)=\"onDismiss($event)\"\n  [labels]=\"labels\"\n  [disabled]=\"isAnyFormInvalid()\"\n  [headerClasses]=\"'dialog-header'\"\n>\n  <ng-container c8y-modal-title>\n    <span c8yIcon=\"c8y-circle-star\"></span>\n  </ng-container>\n  <form class=\"p-24 p-t-0\">\n    @for (form of forms; track form; let i = $index) {\n      <fieldset\n        class=\"c8y-fieldset\"\n        [formGroup]=\"form\"\n      >\n        <legend>\n          {{ 'If condition' | translate }}\n          @if (forms.length > 1) {\n            <button\n              class=\"btn-dot btn-dot--danger\"\n              title=\"{{ 'Remove condition' | translate }}\"\n              type=\"button\"\n              (click)=\"removeCondition(i)\"\n            >\n              <i c8yIcon=\"minus-circle\"></i>\n            </button>\n          }\n        </legend>\n        <!-- Data type selection -->\n        <div class=\"row tight-grid\">\n          <div class=\"col-md-4 col-12\">\n            <label\n              for=\"dataType-{{ i }}\"\n              translate\n            >\n              Data type\n            </label>\n            <c8y-select\n              aria-label=\"{{ 'Data type select' | translate }}\"\n              id=\"dataType-{{ i }}\"\n              [items]=\"dataTypes\"\n              [placeholder]=\"'Select data type…' | translate\"\n              formControlName=\"dataType\"\n            ></c8y-select>\n          </div>\n\n          <!-- Comparison dropdown -->\n          <div class=\"col-md-4 col-12\">\n            <label\n              for=\"comparison-{{ i }}\"\n              translate\n            >\n              Comparison\n            </label>\n            <c8y-select\n              aria-label=\"{{ 'Comparison select' | translate }}\"\n              id=\"comparison-{{ i }}\"\n              [items]=\"comparisonOptions[form.get('dataType')?.value?.value] || []\"\n              formControlName=\"comparison\"\n              [placeholder]=\"'Select comparison type…' | translate\"\n              labelProp=\"label\"\n              valueProp=\"value\"\n            ></c8y-select>\n          </div>\n          <!-- Value input based on type -->\n          <div class=\"col-md-4 col-12\">\n            <label\n              for=\"value-{{ i }}\"\n              translate\n            >\n              Value\n            </label>\n            @switch (form.get('dataType')?.value?.value) {\n              @case ('number') {\n                <input\n                  class=\"form-control\"\n                  id=\"value-{{ i }}\"\n                  type=\"number\"\n                  formControlName=\"value\"\n                />\n              }\n              @case ('date') {\n                <c8y-date-time-picker\n                  aria-label=\"{{ 'Date and time picker' | translate }}\"\n                  placeholder=\"{{ 'Select date…' | translate }}\"\n                  formControlName=\"value\"\n                  size=\"sm\"\n                  (onDateSelected)=\"onDateSelected($event, i)\"\n                ></c8y-date-time-picker>\n              }\n              @case ('string') {\n                <input\n                  class=\"form-control\"\n                  id=\"value-{{ i }}\"\n                  type=\"text\"\n                  formControlName=\"value\"\n                />\n              }\n              @case ('boolean') {\n                <c8y-select\n                  aria-label=\"{{ 'Boolean select' | translate }}\"\n                  [items]=\"booleanOptions\"\n                  [placeholder]=\"'Select value…' | translate\"\n                  formControlName=\"value\"\n                  labelProp=\"label\"\n                  valueProp=\"value\"\n                ></c8y-select>\n              }\n            }\n          </div>\n        </div>\n        <div class=\"d-flex gap-16 m-t-8 m-b-8\">\n          <!-- Icon field -->\n          <div class=\"d-flex a-i-center\">\n            <label\n              class=\"m-b-0 m-r-4\"\n              for=\"icon-{{ i }}\"\n              translate\n            >\n              Icon\n            </label>\n            <c8y-icon-selector-wrapper\n              [selectedIcon]=\"form.get('icon')?.value || 'c8y-cockpit'\"\n              [iconSize]=\"24\"\n              (onSelect)=\"iconSelectionChange($event, i)\"\n            ></c8y-icon-selector-wrapper>\n          </div>\n\n          <!-- Color field -->\n          <div class=\"d-flex a-i-center m-l-8\">\n            <label\n              class=\"m-b-0 m-r-4 text-nowrap\"\n              for=\"color-{{ i }}\"\n              translate\n            >\n              Icon color\n            </label>\n            <input\n              class=\"form-control\"\n              style=\"width: 100%; min-width: 40px\"\n              id=\"color-{{ i }}\"\n              type=\"color\"\n              formControlName=\"color\"\n            />\n          </div>\n        </div>\n      </fieldset>\n    }\n    <button\n      class=\"btn btn-default m-t-16\"\n      title=\"{{ 'Add condition' | translate }}\"\n      type=\"button\"\n      (click)=\"addCondition()\"\n    >\n      <i c8yIcon=\"plus-circle\"></i>\n      {{ 'Add condition' | translate }}\n    </button>\n  </form>\n</c8y-modal>\n","import { Component, DestroyRef, inject, OnInit } from '@angular/core';\nimport {\n  FormBuilder,\n  FormControl,\n  FormGroup,\n  FormsModule,\n  ReactiveFormsModule,\n  Validators\n} from '@angular/forms';\nimport {\n  CommonModule,\n  CoreModule,\n  ModalModule,\n  ModalLabels,\n  C8yTranslateModule\n} from '@c8y/ngx-components';\nimport { ColumnConfigExtended } from '../asset-table.model';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DeviceShellService, DeviceShellTemplate } from '@c8y/ngx-components/device-shell';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\ninterface OperationRenderForm {\n  buttonLabel: FormControl<string>;\n  operation: FormControl<string | null>;\n  command: FormControl<string>;\n}\n\ninterface OperationRenderFormValue {\n  buttonLabel: string;\n  operation: string | null;\n  command: string;\n}\n\ninterface PredefinedOperation {\n  name: string;\n  command: Record<string, unknown>;\n}\n\n@Component({\n  selector: 'c8y-operation-render-type-modal',\n  templateUrl: './operation-render-type-modal.component.html',\n  standalone: true,\n  imports: [\n    ModalModule,\n    FormsModule,\n    ReactiveFormsModule,\n    C8yTranslateModule,\n    CommonModule,\n    CoreModule\n  ],\n  providers: [DeviceShellService]\n})\nexport class OperationRenderTypeModalComponent implements OnInit {\n  showButtonLabelOnly = false;\n  initialConfig: ColumnConfigExtended;\n  deviceTypes: string[] = [];\n  templates: DeviceShellTemplate[] = [];\n  predefinedOperations: PredefinedOperation[] = [\n    {\n      name: gettext('Restart device'),\n      command: { description: gettext('Restart device'), c8y_Restart: {} }\n    },\n    {\n      name: gettext('Change relay status to OPEN'),\n      command: {\n        description: gettext('Change relay status to OPEN.'),\n        c8y_Relay: { relayState: 'OPEN' }\n      }\n    },\n    {\n      name: gettext('Change relay status to CLOSED'),\n      command: {\n        description: gettext('Change relay status to CLOSED.'),\n        c8y_Relay: { relayState: 'CLOSED' }\n      }\n    }\n  ];\n\n  labels: ModalLabels = { ok: gettext('Save'), cancel: gettext('Cancel') };\n  form!: FormGroup<OperationRenderForm>;\n\n  result: Promise<OperationRenderFormValue> = new Promise((resolve, reject) => {\n    this._save = resolve;\n    this._cancel = reject;\n  });\n\n  get modalTitle(): string {\n    if (this.showButtonLabelOnly) {\n      return this.translate.instant(gettext('Maintenance mode'));\n    }\n    const buttonLabel = this.form?.get('buttonLabel')?.value;\n    return buttonLabel\n      ? this.translate.instant(gettext('Edit operation'))\n      : this.translate.instant(gettext('Create operation'));\n  }\n\n  private _save!: (value: OperationRenderFormValue) => void;\n  private _cancel!: () => void;\n\n  private readonly fb = inject(FormBuilder);\n  private readonly translate = inject(TranslateService);\n  private readonly deviceShellService = inject(DeviceShellService);\n  private readonly destroyRef = inject(DestroyRef);\n\n  async ngOnInit(): Promise<void> {\n    const defaultCommand = JSON.stringify(\n      { description: 'Command description', c8y_Command: { text: '<command>' } },\n      null,\n      2\n    );\n\n    this.form = this.fb.group<OperationRenderForm>({\n      buttonLabel: new FormControl(this.initialConfig?.buttonLabel ?? '', {\n        validators: [Validators.required]\n      }),\n      operation: new FormControl<string | null>(this.initialConfig?.operationType ?? null),\n      command: new FormControl(this.initialConfig?.command ?? defaultCommand, {\n        validators: [Validators.required]\n      })\n    });\n\n    if (this.deviceTypes?.length) {\n      const loadedTemplates = await this.deviceShellService.getCommandTemplatesForDeviceType(\n        this.deviceTypes\n      );\n      this.templates = loadedTemplates.map(t => ({\n        name: t.name,\n        text: t.text,\n        category: t.category\n      }));\n    }\n\n    this.form\n      .get('operation')\n      ?.valueChanges.pipe(takeUntilDestroyed(this.destroyRef))\n      .subscribe(selectedName => {\n        const predefined = this.predefinedOperations.find(p => p.name === selectedName);\n        if (predefined) {\n          this.form.get('command')?.setValue(JSON.stringify(predefined.command, null, 2));\n          return;\n        }\n\n        const template = this.templates.find(t => t.name === selectedName);\n        if (template) {\n          const cmd = JSON.stringify(\n            { description: template.name, c8y_Command: { text: template.text } },\n            null,\n            2\n          );\n          this.form.get('command')?.setValue(cmd);\n        }\n      });\n  }\n\n  onClose(_: unknown) {\n    if (this.form.valid) {\n      this._save(this.form.getRawValue());\n    }\n  }\n\n  onDismiss(_: unknown) {\n    this._cancel();\n  }\n}\n","<c8y-modal\n  [title]=\"modalTitle\"\n  (onClose)=\"onClose($event)\"\n  (onDismiss)=\"onDismiss($event)\"\n  [labels]=\"labels\"\n  [disabled]=\"form?.invalid\"\n  [headerClasses]=\"'dialog-header'\"\n>\n  <ng-container c8y-modal-title>\n    <span [c8yIcon]=\"'cog'\"></span>\n  </ng-container>\n  <form\n    class=\"p-24\"\n    [formGroup]=\"form\"\n  >\n    <c8y-form-group>\n      <label\n        for=\"buttonLabel\"\n        translate\n      >\n        Button label\n      </label>\n      <input\n        class=\"form-control\"\n        id=\"buttonLabel\"\n        placeholder=\"{{ 'e.g. Execute operation' | translate }}\"\n        type=\"text\"\n        formControlName=\"buttonLabel\"\n      />\n      <c8y-messages></c8y-messages>\n    </c8y-form-group>\n\n    @if (!showButtonLabelOnly) {\n      <div class=\"form-group\">\n        <label\n          for=\"operation\"\n          translate\n        >\n          Operation\n        </label>\n        <div class=\"c8y-select-wrapper\">\n          <select\n            class=\"form-control\"\n            id=\"operation\"\n            formControlName=\"operation\"\n          >\n            <optgroup label=\"{{ 'Predefined' | translate }}\">\n              @for (op of predefinedOperations; track op.name) {\n                <option [ngValue]=\"op.name\">{{ op.name | translate }}</option>\n              }\n            </optgroup>\n            @if (templates.length) {\n              <optgroup label=\"{{ 'Device templates' | translate }}\">\n                @for (op of templates; track op.name) {\n                  <option [ngValue]=\"op.name\">{{ op.name | translate }}</option>\n                }\n              </optgroup>\n            }\n          </select>\n        </div>\n      </div>\n      <div class=\"form-group\">\n        <label\n          for=\"command\"\n          translate\n        >\n          Command\n        </label>\n        <textarea\n          class=\"form-control no-resize inner-scroll\"\n          style=\"max-height: 300px\"\n          id=\"command\"\n          c8y-textarea-autoresize\n          formControlName=\"command\"\n          maxlength=\"900\"\n        ></textarea>\n      </div>\n    }\n  </form>\n</c8y-modal>\n","import { CdkDrag, CdkDragDrop, CdkDropList, moveItemInArray } from '@angular/cdk/drag-drop';\nimport { Component, inject, OnDestroy, OnInit } from '@angular/core';\nimport { FormGroup, FormsModule } from '@angular/forms';\nimport {\n  C8yTranslatePipe,\n  DropdownFocusTrapDirective,\n  HumanizePipe,\n  IconDirective,\n  EmptyStateComponent,\n  ListGroupModule,\n  AssetTableExtendedColumn,\n  BottomDrawerService\n} from '@c8y/ngx-components';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { WidgetConfigService } from '@c8y/ngx-components/context-dashboard';\nimport { BsDropdownDirective, BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { AssetTableService } from '../asset-table.service';\nimport { FormlyModule } from '@ngx-formly/core';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { IconRenderTypeModalComponent } from '../icon-render-type-modal/icon-render-type-modal.component';\nimport { Subject, takeUntil } from 'rxjs';\nimport { OperationRenderTypeModalComponent } from '../operation-render-type-modal/operation-render-type-modal.component';\nimport { NgClass } from '@angular/common';\nimport {\n  AssetPropertySelectorDrawerComponent,\n  AssetPropertyType\n} from '@c8y/ngx-components/asset-properties';\nimport {\n  AssetColumnType,\n  AssetTableWidgetConfig,\n  ColumnConfigExtended\n} from '../asset-table.model';\nimport { IManagedObject, InventoryService } from '@c8y/client';\n\n@Component({\n  selector: 'c8y-asset-table-column-settings',\n  templateUrl: './asset-table-column-settings.component.html',\n  host: {\n    class: 'bg-level-1'\n  },\n  imports: [\n    FormsModule,\n    C8yTranslatePipe,\n    TooltipModule,\n    HumanizePipe,\n    BsDropdownModule,\n    IconDirective,\n    DropdownFocusTrapDirective,\n    CdkDropList,\n    CdkDrag,\n    FormlyModule,\n    EmptyStateComponent,\n    ListGroupModule,\n    NgClass\n  ],\n  providers: [BsDropdownDirective]\n})\nexport class AssetTableGridSettingsComponent implements OnInit, OnDestroy {\n  contextAsset: IManagedObject;\n  columns: AssetTableExtendedColumn[] = [];\n  selectedProperties: AssetPropertyType[] = [];\n  extraProperties: AssetPropertyType[] = [];\n  operationColumns: ColumnConfigExtended[] = [];\n  text = '';\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  existingColumnFilter: { [key: string]: any } = {};\n  hasMaintenanceColumn = false;\n  customHeaderNames: Record<string, string> = {};\n  customLabel = gettext('(custom`column`)');\n\n  private readonly widgetConfigService = inject(WidgetConfigService);\n  private readonly assetTableService = inject(AssetTableService);\n  private readonly bottomDrawerService = inject(BottomDrawerService);\n  private readonly inventoryService = inject(InventoryService);\n  private readonly modalService = inject(BsModalService);\n  private readonly destroy$ = new Subject<void>();\n\n  ngOnInit(): void {\n    this.widgetConfigService.currentConfig$\n      .pipe(takeUntil(this.destroy$))\n      .subscribe(async config => {\n        this.selectedProperties = config?.selectedProperties || [];\n        this.extraProperties = this.selectedProperties.filter(prop => prop?.computed);\n        this.operationColumns = config?.operationColumns || [];\n        this.existingColumnFilter = config?.filterPredicate || {};\n        this.customHeaderNames = config?.customHeaderNames || {};\n        this.columns = this.getColumns(config);\n        if (config.device && Object.keys(config.device).length > 0) {\n          this.contextAsset = (await this.inventoryService.detail(config.device)).data;\n        }\n\n        this.applyCustomHeaderNames();\n\n        this.columns.forEach(column => {\n          column.header = this.customHeaderNames[column.name] || column.header;\n          if (column.operationType === 'maintenance') {\n            this.hasMaintenanceColumn = true;\n          }\n          if (column.filteringConfig) {\n            column.filteringConfig.formGroup = new FormGroup({});\n            column.filteringConfig.model = this.existingColumnFilter[column.name] || {};\n          }\n        });\n      });\n  }\n\n  ngOnDestroy(): void {\n    this.destroy$.next();\n    this.destroy$.complete();\n  }\n\n  async applyColumnType(type: AssetColumnType, column: AssetTableExtendedColumn): Promise<void> {\n    if (type === 'icon') {\n      const currentIconConfig = this.selectedProperties.find(\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        (prop: any) => (prop.instanceId || prop.name) === column.name\n      )?.iconConfig;\n      const modal = this.modalService.show(IconRenderTypeModalComponent, {\n        class: 'modal-md',\n        ariaDescribedby: 'modal-body',\n        ariaLabelledBy: 'modal-title',\n        ignoreBackdropClick: true,\n        initialState: {\n          initialIconConfig: currentIconConfig || []\n        }\n      }).content;\n\n      try {\n        const result = await modal.result;\n        this.selectedProperties = this.selectedProperties.map(prop =>\n          (prop.instanceId || prop.name) === column.name || prop.title === column.name\n            ? { ...prop, iconConfig: result, columnType: 'icon' }\n            : prop\n        );\n      } catch (ex) {\n        return;\n      }\n    } else {\n      this.selectedProperties = this.selectedProperties.map(prop =>\n        (prop.instanceId || prop.name) === column.name ? { ...prop, columnType: type } : prop\n      );\n    }\n    this.widgetConfigService.updateConfig({ selectedProperties: [...this.selectedProperties] });\n  }\n\n  onColumnDrop(event: CdkDragDrop<AssetTableExtendedColumn[]>): void {\n    moveItemInArray(this.columns, event.previousIndex, event.currentIndex);\n\n    const newOrder = this.columns.map((column: AssetTableExtendedColumn) => ({\n      __origin: column.__origin,\n      __id: column.__id || column.name\n    }));\n\n    this.widgetConfigService.updateConfig({ columnOrder: newOrder });\n  }\n\n  toggleColumnVisibility(column: AssetTableExtendedColumn): void {\n    if (column.isOperation) {\n      this.operationColumns = this.operationColumns.map(op =>\n        op.buttonLabel === column.name ? { ...op, visible: column.visible } : op\n      );\n      this.widgetConfigService.updateConfig({ operationColumns: [...this.operationColumns] });\n    } else {\n      this.selectedProperties = this.selectedProperties.map(prop =>\n        (prop.instanceId || prop.name) === column.name ? { ...prop, visible: column.visible } : prop\n      );\n      this.widgetConfigService.updateConfig({ selectedProperties: [...this.selectedProperties] });\n    }\n  }\n\n  applyFilter(column: AssetTableExtendedColumn, dropdown: BsDropdownDirective): void {\n    const formGroup = column.filteringConfig?.formGroup;\n\n    this.existingColumnFilter[column.name] = formGroup?.value;\n\n    column.filteringConfig.model = formGroup?.value;\n\n    // Update the model so Formly renders it next time\n    // Update config and local copy\n    this.widgetConfigService.updateConfig({ filterPredicate: this.existingColumnFilter });\n    dropdown.hide();\n  }\n\n  resetFilter(column: AssetTableExtendedColumn, dropdown: BsDropdownDirective): void {\n    delete this.existingColumnFilter[column.name];\n\n    column.filteringConfig.formGroup.reset();\n\n    this.widgetConfigService.updateConfig({ filterPredicate: this.existingColumnFilter });\n\n    dropdown.hide();\n  }\n\n  isColumnFiltered(column: AssetTableExtendedColumn): boolean {\n    const value = this.existingColumnFilter?.[column.name];\n    if (!value) return false;\n\n    // Check if the filter has a meaningful value (non-empty)\n    return Object.values(value).some(v => v !== null && v !== '' && v !== false);\n  }\n\n  updateColumnNames(column: AssetTableExtendedColumn): void {\n    this.customHeaderNames = { ...this.customHeaderNames, [column.name]: column.header };\n\n    this.applyCustomHeaderNames();\n\n    this.widgetConfigService.updateConfig({\n      selectedProperties: this.selectedProperties,\n      operationColumns: this.operationColumns,\n      customHeaderNames: this.customHeaderNames\n    });\n  }\n\n  changeSortOrder(column: AssetTableExtendedColumn): void {\n    const currentOrder = column.sortOrder;\n    let nextOrder: 'asc' | 'desc' | '' = '';\n\n    if (!currentOrder) {\n      nextOrder = 'asc';\n    } else if (currentOrder === 'asc') {\n      nextOrder = 'desc';\n    } else if (currentOrder === 'desc') {\n      nextOrder = '';\n    }\n\n    column.sortOrder = nextOrder || null;\n    this.selectedProperties = this.selectedProperties.map(prop => {\n      if ((prop.instanceId || prop.name) === column.name) {\n        if (nextOrder) {\n          prop.sortOrder = nextOrder;\n        } else {\n          delete prop.sortOrder;\n        }\n      }\n      return prop;\n    });\n\n    const columnSortOrders: Record<string, 'asc' | 'desc'> = {};\n    this.columns.forEach(c => {\n      if (c.sortOrder) {\n        columnSortOrders[c.name] = c.sortOrder;\n      }\n    });\n\n    this.widgetConfigService.updateConfig({\n      selectedProperties: this.selectedProperties,\n      columnSortOrders\n    });\n  }\n\n  async onCreateOperation(): Promise<void> {\n    const modal = await this.operationModal(false);\n    const result = (await modal.result) as ColumnConfigExtended;\n    result.operationType = 'operation';\n    result.header = gettext('Create operation');\n    this.operationColumns.push(result);\n    this.widgetConfigService.updateConfig({ operationColumns: this.operationColumns });\n  }\n\n  async onToggleMaintenanceMode(): Promise<void> {\n    const modal = await this.operationModal(true);\n    const result = (await modal.result) as ColumnConfigExtended;\n    result.operationType = 'maintenance';\n    result.header = gettext('Toggle maintenance mode');\n    this.operationColumns.push(result);\n    this.widgetConfigService.updateConfig({ operationColumns: this.operationColumns });\n  }\n\n  async editOperationColumn(column: AssetTableExtendedColumn): Promise<void> {\n    const currentOpConfig = this.operationColumns.find(op => op.buttonLabel === column.name);\n    const modal = await this.operationModal(\n      currentOpConfig.operationType === 'maintenance',\n      currentOpConfig\n    );\n    const result = await modal.result;\n    this.operationColumns = this.operationColumns.map(op =>\n      op.buttonLabel === column.name ? result : op\n    );\n    this.widgetConfigService.updateConfig({ operationColumns: this.operationColumns });\n  }\n\n  deleteColumn(column: AssetTableExtendedColumn): void {\n    this.operationColumns = this.operationColumns.filter(\n      opCol => opCol.buttonLabel !== column.name\n    );\n\n    if (column.operationType === 'maintenance') {\n      this.hasMaintenanceColumn = false;\n    }\n    this.widgetConfigService.updateConfig({ operationColumns: this.operationColumns });\n  }\n\n  trackByColumnName(_index: number, column: AssetTableExtendedColumn): string {\n    return `${column.name}-${_index}`;\n  }\n\n  async selectAssetAndProperty() {\n    const drawer = this.bottomDrawerService.openDrawer(AssetPropertySelectorDrawerComponent, {\n      disableClickOutside: true,\n      initialState: {\n        allowChangingContext: true,\n        hideSelection: false,\n        contextAsset: this.contextAsset,\n        config: {\n          selectMode: 'plus',\n          expansionMode: 'collapsedByDefault',\n          showValue: true,\n          showKey: true,\n          selectedProperties: this.selectedProperties.map(\n            ({ columnLabel: _columnLabel, ...prop }) => prop\n          ),\n          allowAddingCustomProperties: true\n        }\n      }\n    });\n\n    try {\n      const properties = await drawer.instance.result;\n      const uniqueProperties = properties.filter(\n        (prop, index, self) =>\n          index ===\n          self.findIndex(\n            p => p.name === prop.name && (!p.instanceId || p.instanceId === prop.instanceId)\n          )\n      );\n      this.selectProperties(uniqueProperties);\n    } catch (ex) {\n      // cancel clicked\n    }\n  }\n\n  selectProperties(selectedProperties: AssetPropertyType[]) {\n    // if the selected properties name matches and the existing one has iconConfig, retain it\n    const updatedProperties = selectedProperties.map(prop => {\n      const existingProp = this.selectedProperties.find(p => p.name === prop.name);\n      if (existingProp?.iconConfig || existingProp?.columnType || existingProp?.columnLabel) {\n        return {\n          ...prop,\n          iconConfig: existingProp.iconConfig,\n          columnType: existingProp.columnType,\n          columnLabel: existingProp.columnLabel\n        };\n      }\n      return prop;\n    });\n\n    this.widgetConfigService.updateConfig({ selectedProperties: updatedProperties });\n  }\n\n  private applyCustomHeaderNames(): void {\n    // Update selected properties and operation columns based on custom header names\n    this.selectedProperties = this.selectedProperties.map(prop => {\n      const nameKey = prop.instanceId || prop.name;\n      const newLabel = this.customHeaderNames[nameKey];\n      if (newLabel) {\n        prop.columnLabel = newLabel;\n      }\n      return prop;\n    });\n\n    this.operationColumns = this.operationColumns.map(opCol => {\n      const newHeader = this.customHeaderNames[opCol.buttonLabel];\n      if (newHeader) {\n        opCol.header = newHeader;\n      }\n      return opCol;\n    });\n  }\n\n  private async operationModal(\n    showButtonLabelOnly: boolean,\n    operationConfig?: ColumnConfigExtended\n  ): Promise<OperationRenderTypeModalComponent> {\n    // we have to filter unique device types from the child assets\n    const deviceTypes = await this.inventoryService\n      .childAssetsList(this.contextAsset.id)\n      .then(assets => Array.from(new Set(assets.data.map(asset => asset.type).filter(Boolean))));\n\n    return this.modalService.show(OperationRenderTypeModalComponent, {\n      class: 'modal-sm',\n      ariaDescribedby: 'modal-body',\n      ariaLabelledBy: 'modal-title',\n      ignoreBackdropClick: true,\n      initialState: {\n        initialConfig: operationConfig || {},\n        showButtonLabelOnly,\n        deviceTypes: [this.contextAsset?.type, ...deviceTypes]\n      }\n    }).content;\n  }\n\n  private getColumns(config?: AssetTableWidgetConfig): AssetTableExtendedColumn[] {\n    return this.assetTableService.getColumns(\n      this.selectedProperties,\n      this.operationColumns,\n      config\n    );\n  }\n}\n","<fieldset class=\"c8y-fieldset bg-level-1 overflow-hidden p-0\">\n  <legend class=\"m-l-16\">{{ 'Properties column settings (drag to reorder)' | translate }}</legend>\n  <c8y-list-group\n    class=\"inner-scroll bg-inherit d-block no-border-last separator-top\"\n    style=\"max-height: 300px\"\n    role=\"list\"\n    cdkDropList\n    (cdkDropListDropped)=\"onColumnDrop($event)\"\n  >\n    @for (column of columns; track trackByColumnName($index, column)) {\n      @if (!column.positionFixed) {\n        <c8y-li\n          role=\"listitem\"\n          cdkDrag\n          cdkDragLockAxis=\"y\"\n          [ngClass]=\"{ 'empty-actions': !column.isOperation }\"\n        >\n          <c8y-li-drag-handle\n            title=\"{{ 'Drag to reorder' | translate }}\"\n            [attr.aria-label]=\"'Drag to reorder' | translate\"\n            cdkDragHandle\n          >\n            <i\n              c8yIcon=\"drag-reorder\"\n              style=\"font-size: 0.7em\"\n            ></i>\n          </c8y-li-drag-handle>\n          @if (column.__origin !== 'status') {\n            <c8y-li-checkbox\n              class=\"a-s-stretch\"\n              title=\"{{ (column.header | translate) || column.name }} {{\n                column.custom ? (customLabel | translate) : ''\n              }}\"\n              [attr.aria-label]=\"'Show/hide column' | translate\"\n              [(ngModel)]=\"column.visible\"\n              (ngModelChange)=\"toggleColumnVisibility(column)\"\n              c8yProductExperience\n              [attr.data-cy]=\"'data-grid--custom-column-header-' + column.header\"\n            ></c8y-li-checkbox>\n          } @else {\n            <c8y-li-checkbox class=\"a-s-stretch no-pointer invisible\"></c8y-li-checkbox>\n          }\n          <div class=\"content-flex-32 p-t-4 p-b-4\">\n            <div class=\"col-6\">\n              @if (column.__origin !== 'status') {\n                <label class=\"editable\">\n                  <input\n                    class=\"form-control input-sm\"\n                    [attr.aria-label]=\"'Column header' | translate\"\n                    placeholder=\"{{ 'Column header' | translate }}\"\n                    type=\"text\"\n                    autocomplete=\"off\"\n                    required\n                    [(ngModel)]=\"column.header\"\n                    (keydown.enter)=\"updateColumnNames(column); $event.target.blur()\"\n                    (blur)=\"updateColumnNames(column)\"\n                  />\n                </label>\n              } @else {\n                <p class=\"text-12 p-t-4 p-b-4\">{{ column.header | translate }}</p>\n              }\n            </div>\n            <div class=\"col-6\">\n              <div class=\"d-flex a-i-center gap-8 p-t-4 p-b-4\">\n                <!-- Filters button -->\n                @if (column.filteringConfig) {\n                  <div class=\"d-flex a-i-center gap-4 flex-no-shrink\">\n                    <div\n                      class=\"dropdown d-flex\"\n                      container=\"body\"\n                      dropdown\n                      [insideClick]=\"true\"\n                      c8yDropdownFocusTrap\n                      #gridHeaderDropdown=\"bs-dropdown\"\n                    >\n                      <button\n                        class=\"dropdown-toggle btn btn-icon btn-default btn-xs c8y-dropdown\"\n                        [attr.aria-label]=\"'Filter' | translate\"\n                        tooltip=\"{{ 'Filter' | translate }}\"\n                        placement=\"top\"\n                        container=\"body\"\n                        [attr.aria-haspopup]=\"true\"\n                        [attr.aria-expanded]=\"gridHeaderDropdown.isOpen\"\n                        type=\"button\"\n                        [delay]=\"500\"\n                        [ngClass]=\"{ active: isColumnFiltered(column) }\"\n                        dropdownToggle\n                      >\n                        <i c8yIcon=\"filter\"></i>\n                      </button>\n                      <div\n                        class=\"dropdown-menu\"\n                        (click)=\"$event.stopPropagation()\"\n                        *dropdownMenu\n                      >\n                        <formly-form\n                          class=\"p-16 d-block\"\n                          style=\"min-width: 250px\"\n                          [form]=\"column.filteringConfig.formGroup\"\n                          [fields]=\"column.filteringConfig.fields\"\n                          [model]=\"column.filteringConfig.model\"\n                        ></formly-form>\n                        <div class=\"p-16 fit-w d-flex separator-top\">\n                          <button\n                            class=\"btn btn-default btn-sm m-r-8 grow\"\n                            title=\"{{ 'Reset' | translate }}\"\n                            (click)=\"resetFilter(column, gridHeaderDropdown)\"\n                            translate\n                          >\n                            Reset\n                          </button>\n                          <button\n                            class=\"btn btn-primary btn-sm grow\"\n                            title=\"{{ 'Apply' | translate }}\"\n                            (click)=\"applyFilter(column, gridHeaderDropdown)\"\n                            translate\n                          >\n                            Apply\n                          </button>\n                        </div>\n                      </div>\n                    </div>\n                  </div>\n                }\n                <!-- Sort button -->\n                <div class=\"d-flex a-i-center gap-4 flex-no-shrink\">\n                  <button\n                    class=\"btn btn-icon btn-default btn-xs\"\n                    [attr.aria-label]=\"'Sort order' | translate\"\n                    tooltip=\"{{ 'Sort order' | translate }}\"\n                    placement=\"top\"\n                    type=\"button\"\n                    [delay]=\"500\"\n                    (click)=\"changeSortOrder(column)\"\n                  >\n                    @if (column.sortOrder === 'asc') {\n                      <i c8yIcon=\"long-arrow-up\"></i>\n                    } @else if (column.sortOrder === 'desc') {\n                      <i c8yIcon=\"long-arrow-down\"></i>\n                    } @else {\n                      <i\n                        c8yIcon=\"exchange\"\n                        style=\"transform: rotate(90deg)\"\n                      ></i>\n                    }\n                  </button>\n                </div>\n                <!-- Column type dropdown -->\n                @if (!column.isOperation && column.__origin !== 'status') {\n                  <div\n                    class=\"d-flex a-i-center gap-4 flex-no-shrink\"\n                    [ngClass]=\"{ 'no-pointer invisible': column.__origin === 'status' }\"\n                  >\n                    <div\n                      class=\"dropdown d-flex\"\n                      container=\"body\"\n                      dropdown\n                      c8yDropdownFocusTrap\n                      #columnTypeDropdown=\"bs-dropdown\"\n                    >\n                      <button\n                        class=\"btn btn-default btn-xs dropdown-toggle c8y-dropdown\"\n                        [attr.aria-label]=\"'Select render type' | translate\"\n                        tooltip=\"{{ 'Render type' | translate }}\"\n                        placement=\"top\"\n                        container=\"body\"\n                        [attr.aria-haspopup]=\"true\"\n                        [attr.aria-expanded]=\"columnTypeDropdown.isOpen\"\n                        type=\"button\"\n                        [delay]=\"500\"\n                        dropdownToggle\n                      >\n                        {{ column.type | translate | humanize }}\n                        <i c8yIcon=\"caret-down\"></i>\n                      </button>\n                      <div\n                        class=\"dropdown-menu\"\n                        *dropdownMenu\n                      >\n                        <c8y-list-group role=\"list\">\n                          @if (column.type === 'computed' || column.computedConfig) {\n                            <c8y-li\n                              tabindex=\"0\"\n                              role=\"listitem\"\n                              (keydown.enter)=\"\n                                applyColumnType('computed', column); $event.preventDefault()\n                              \"\n                              (keydown.space)=\"\n                                applyColumnType('computed', column); $event.preventDefault()\n                              \"\n                              (click)=\"applyColumnType('computed', column)\"\n                              [active]=\"column.type === 'computed'\"\n                            >\n                              {{ 'Computed' | translate }}\n                            </c8y-li>\n                            <c8y-li\n                              tabindex=\"0\"\n                              role=\"listitem\"\n                              (click)=\"applyColumnType('icon', column)\"\n                              (keydown.enter)=\"\n                                applyColumnType('icon', column); $event.preventDefault()\n                              \"\n                              (keydown.space)=\"\n                                applyColumnType('icon', column); $event.preventDefault()\n                              \"\n                              [active]=\"column.type === 'icon'\"\n                            >\n                              {{ 'Icon' | translate }}\n                            </c8y-li>\n                          } @else {\n                            <c8y-li\n                              tabindex=\"0\"\n                              role=\"listitem\"\n                              (click)=\"applyColumnType('default', column)\"\n                              (keydown.enter)=\"\n                                applyColumnType('default', column); $event.preventDefault()\n                              \"\n                              (keydown.space)=\"\n                                applyColumnType('default', column); $event.preventDefault()\n                              \"\n                              [active]=\"column.type === 'default'\"\n                            >\n                              {{ 'Default' | translate }}\n                            </c8y-li>\n                            <c8y-li\n                              tabindex=\"0\"\n                              role=\"listitem\"\n                              (click)=\"applyColumnType('date', column)\"\n                              (keydown.enter)=\"\n                                applyColumnType('date', column); $event.preventDefault()\n                              \"\n                              (keydown.space)=\"\n                                applyColumnType('date', column); $event.preventDefault()\n                              \"\n                              [active]=\"column.type === 'date'\"\n                            >\n                              {{ 'Date' | translate }}\n                            </c8y-li>\n                            <c8y-li\n                              tabindex=\"0\"\n                              role=\"listitem\"\n                              (click)=\"applyColumnType('icon', column)\"\n                              [active]=\"column.type === 'icon'\"\n                              (keydown.enter)=\"\n                                applyColumnType('icon', column); $event.preventDefault()\n                              \"\n                              (keydown.space)=\"\n                                applyColumnType('icon', column); $event.preventDefault()\n                              \"\n                            >\n                              {{ 'Icon' | translate }}\n                            </c8y-li>\n                          }\n                        </c8y-list-group>\n                      </div>\n                    </div>\n                  </div>\n                }\n              </div>\n            </div>\n          </div>\n          @if (column.isOperation) {\n            <ng-container>\n              @if (true) {\n                <c8y-li-action\n                  icon=\"edit1\"\n                  [attr.aria-label]=\"'Edit' | translate\"\n                  label=\"Edit\"\n                  (click)=\"editOperationColumn(column)\"\n                ></c8y-li-action>\n              }\n              @if (true) {\n                <c8y-li-action\n                  icon=\"delete\"\n                  [attr.aria-label]=\"'Delete' | translate\"\n                  label=\"Delete\"\n                  (click)=\"deleteColumn(column)\"\n                ></c8y-li-action>\n              }\n            </ng-container>\n          }\n        </c8y-li>\n      }\n    }\n    @if (columns.length === 0) {\n      <c8y-ui-empty-state\n        [icon]=\"'list'\"\n        [title]=\"'No properties selected.' | translate\"\n        [subtitle]=\"'Select from the list which columns to display.' | translate\"\n        [horizontal]=\"true\"\n      ></c8y-ui-empty-state>\n    }\n  </c8y-list-group>\n  <div class=\"m-b-16 p-t-16 p-l-24 p-r-16 fit-w separator-top\">\n    <button\n      class=\"btn btn-default btn-sm m-r-8\"\n      type=\"button\"\n      (click)=\"selectAssetAndProperty()\"\n    >\n      {{ 'Select properties' | translate }}\n    </button>\n    <div\n      class=\"dropdown\"\n      container=\"body\"\n      dropdown\n      c8yDropdownFocusTrap\n      #customActionsDropdown=\"bs-dropdown\"\n    >\n      <button\n        class=\"btn btn-default btn-sm dropdown-toggle c8y-dropdown\"\n        [title]=\"'Add action' | translate\"\n        [attr.aria-haspopup]=\"true\"\n        [attr.aria-expanded]=\"customActionsDropdown.isOpen\"\n        type=\"button\"\n        dropdownToggle\n      >\n        <i c8yIcon=\"cog\"></i>\n        <span>{{ 'Add action' | translate }}</span>\n        <span class=\"caret\"></span>\n      </button>\n      <ul\n        class=\"dropdown-menu\"\n        *dropdownMenu\n      >\n        <li>\n          <button\n            class=\"dropdown-item\"\n            type=\"button\"\n            (click)=\"onCreateOperation()\"\n          >\n            {{ 'Create operation' | translate }}\n          </button>\n        </li>\n        <li>\n          <button\n            class=\"dropdown-item\"\n            type=\"button\"\n            (click)=\"onToggleMaintenanceMode()\"\n            [disabled]=\"hasMaintenanceColumn\"\n          >\n            {{ 'Toggle maintenance mode' | translate }}\n          </button>\n        </li>\n      </ul>\n    </div>\n  </div>\n</fieldset>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i3","i1","CommonModule","i5"],"mappings":"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"}