@c8y/ngx-components 1023.62.2 → 1023.63.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/device-shell/index.d.ts +18 -3
- package/device-shell/index.d.ts.map +1 -1
- package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs +2 -2
- package/fesm2022/c8y-ngx-components-data-grid-columns-asset-type.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-data-grid-columns.mjs +2 -2
- package/fesm2022/c8y-ngx-components-data-grid-columns.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-shell.mjs +61 -3
- package/fesm2022/c8y-ngx-components-device-shell.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-asset-table.mjs +1 -1
- package/fesm2022/c8y-ngx-components-widgets-definitions-asset-table.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-widgets-implementations-asset-table.mjs +192 -100
- package/fesm2022/c8y-ngx-components-widgets-implementations-asset-table.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +3 -4
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/index.d.ts +1 -0
- package/index.d.ts.map +1 -1
- package/locales/locales.pot +21 -6
- package/package.json +1 -1
- package/widgets/implementations/asset-table/index.d.ts +12 -18
- package/widgets/implementations/asset-table/index.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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/asset-table-properties-selector/asset-table-properties-selector.component.ts","../../widgets/implementations/asset-table/asset-table-properties-selector/asset-table-properties-selector.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 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 (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 { StatusDeviceGridColumn } from '@c8y/ngx-components/device-grid';\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 StatusDeviceGridColumn() as AssetTableExtendedColumn;\n statusCol.__origin = 'status';\n statusCol.__id = '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 migrateLegacyProperties(config: AssetTableWidgetConfig): AssetTableWidgetConfig {\n if (!config?.options?.properties) {\n return config;\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 column.__origin = 'selectedProperties';\n column.__id = prop.name || prop.title;\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.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.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.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.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.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';\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 ],\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 refresh: EventEmitter<any> = new EventEmitter<any>();\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 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) {\n config.device = { ...config.settings.context };\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: [true],\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 </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 asset table' | translate\"\n [subtitle]=\"'Add property' | 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 ngOnInit(): void {\n if (this.assetTableService.isMigrationNeeded(this.config)) {\n this.config = 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, 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';\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\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})\nexport class OperationRenderTypeModalComponent implements OnInit {\n showButtonLabelOnly = false;\n initialConfig: ColumnConfigExtended;\n\n labels: ModalLabels = { ok: gettext('Save'), cancel: gettext('Cancel') };\n form!: FormGroup<OperationRenderForm>;\n operationList = [\n { label: gettext('Restart device'), value: 'restart' },\n { label: gettext('Firmware update'), value: 'firmwareUpdate' },\n { label: gettext('Send command'), value: 'sendCommand' }\n ];\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\n ngOnInit(): void {\n const defaultCommand = JSON.stringify(\n {\n description: 'Command description',\n c8y_Command: {\n text: '<command>'\n }\n },\n null,\n 2\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\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 @for (op of operationList; track op) {\n <option [ngValue]=\"op.value\">\n {{ op.label | translate }}\n </option>\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} 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 { AssetPropertyType } from '@c8y/ngx-components/asset-properties';\nimport {\n AssetColumnType,\n AssetTableWidgetConfig,\n ColumnConfigExtended\n} from '../asset-table.model';\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 columns: AssetTableExtendedColumn[] = [];\n selectedProperties: 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 modalService = inject(BsModalService);\n private readonly destroy$ = new Subject<void>();\n\n ngOnInit(): void {\n this.widgetConfigService.currentConfig$.pipe(takeUntil(this.destroy$)).subscribe(config => {\n this.selectedProperties = config?.selectedProperties || [];\n this.operationColumns = config?.operationColumns || [];\n this.existingColumnFilter = config?.filterPredicate || {};\n this.customHeaderNames = config?.customHeaderNames || {};\n this.columns = this.getColumns(config);\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.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.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.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.name\n }));\n\n this.widgetConfigService.updateConfig({ columnOrder: newOrder });\n }\n\n toggleColumnVisibility(column: AssetTableExtendedColumn): void {\n this.selectedProperties = this.selectedProperties.map(prop =>\n prop.name === column.name ? { ...prop, visible: column.visible } : prop\n );\n this.widgetConfigService.updateConfig({ selectedProperties: [...this.selectedProperties] });\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.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 = 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 = 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 = 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 private applyCustomHeaderNames(): void {\n // Update selected properties and operation columns based on custom header names\n this.selectedProperties = this.selectedProperties.map(prop => {\n const newLabel = this.customHeaderNames[prop.name];\n if (newLabel) {\n prop.label = 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 operationModal(\n showButtonLabelOnly: boolean,\n operationConfig?: ColumnConfigExtended\n ): OperationRenderTypeModalComponent {\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 }\n }).content;\n }\n private getColumns(config?: AssetTableWidgetConfig): AssetTableExtendedColumn[] {\n return this.assetTableService.getColumns(\n this.selectedProperties,\n this.operationColumns,\n config\n );\n }\n}\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 >\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 <div\n class=\"dropdown\"\n container=\"body\"\n dropdown\n [insideClick]=\"true\"\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","import { Component, inject, OnInit } from '@angular/core';\nimport {\n AssetPropertyListComponent,\n AssetPropertyType\n} from '@c8y/ngx-components/asset-properties';\nimport { WidgetConfigService } from '@c8y/ngx-components/context-dashboard';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { AssetTableGridSettingsComponent } from '../asset-table-column-settings/asset-table-column-settings.component';\nimport { C8yTranslatePipe } from '@c8y/ngx-components';\nimport { IManagedObject } from 'packages/client/lib';\nimport { InventoryService } from '@c8y/client';\n\n@Component({\n selector: 'c8y-asset-table-properties-selector',\n templateUrl: './asset-table-properties-selector.component.html',\n host: {\n class: 'bg-level-1'\n },\n standalone: true,\n imports: [\n AssetPropertyListComponent,\n PopoverModule,\n TooltipModule,\n AssetTableGridSettingsComponent,\n C8yTranslatePipe\n ]\n})\nexport class AssetTablePropertiesSelectorComponent implements OnInit {\n asset: IManagedObject;\n widgetConfigService = inject(WidgetConfigService);\n selectedProperties: AssetPropertyType[] = [];\n extraProperties: AssetPropertyType[] = [];\n\n private readonly inventoryService = inject(InventoryService);\n async ngOnInit() {\n this.asset = (\n await this.inventoryService.detail(this.widgetConfigService.currentConfig.device?.id)\n ).data;\n this.selectedProperties = this.widgetConfigService.currentConfig?.selectedProperties || [];\n this.extraProperties = this.selectedProperties.filter(prop => prop?.computed);\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) {\n return {\n ...prop,\n iconConfig: existingProp.iconConfig,\n columnType: existingProp.columnType\n };\n }\n return prop;\n });\n\n this.widgetConfigService.updateConfig({ selectedProperties: updatedProperties });\n }\n}\n","<fieldset class=\"c8y-fieldset bg-level-1 p-0 overflow-hidden m-t-0\">\n <legend class=\"m-l-16\">{{ 'Select properties' | translate }}</legend>\n <c8y-asset-property-list\n class=\"inner-scroll bg-inherit d-block\"\n style=\"max-height: 300px\"\n [asset]=\"asset\"\n [config]=\"{\n selectMode: 'multi',\n expansionMode: 'expandedByDefault',\n allowAddingCustomProperties: true,\n showValue: false,\n showKey: false,\n selectedProperties: selectedProperties\n }\"\n [extraProperties]=\"extraProperties\"\n (selectedProperties)=\"selectProperties($event)\"\n ></c8y-asset-property-list>\n</fieldset>\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-asset-table-column-settings></c8y-asset-table-column-settings>\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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"}
|
|
1
|
+
{"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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"}
|