@c8y/ngx-components 1018.0.219 → 1018.0.224
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/assets-navigator/asset-node.service.d.ts +5 -2
- package/esm2020/assets-navigator/asset-node.mjs +7 -2
- package/esm2020/assets-navigator/asset-node.service.mjs +14 -5
- package/esm2020/device-grid/columns/registration-date.device-grid-column.mjs +4 -10
- package/esm2020/ecosystem/application-plugins/application-plugins.component.mjs +34 -13
- package/esm2020/repository/shared/repository.service.mjs +4 -4
- package/esm2020/services/services-device-tab/columns/last-updated-date.device-grid-column.mjs +4 -10
- package/fesm2015/c8y-ngx-components-assets-navigator.mjs +24 -12
- package/fesm2015/c8y-ngx-components-assets-navigator.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-device-grid.mjs +3 -9
- package/fesm2015/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-ecosystem-application-plugins.mjs +25 -12
- package/fesm2015/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-ecosystem.mjs +25 -12
- package/fesm2015/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-repository-shared.mjs +3 -3
- package/fesm2015/c8y-ngx-components-repository-shared.mjs.map +1 -1
- package/fesm2015/c8y-ngx-components-services.mjs +3 -9
- package/fesm2015/c8y-ngx-components-services.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-assets-navigator.mjs +24 -12
- package/fesm2020/c8y-ngx-components-assets-navigator.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-device-grid.mjs +3 -9
- package/fesm2020/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-ecosystem-application-plugins.mjs +32 -12
- package/fesm2020/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-ecosystem.mjs +32 -12
- package/fesm2020/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-repository-shared.mjs +3 -3
- package/fesm2020/c8y-ngx-components-repository-shared.mjs.map +1 -1
- package/fesm2020/c8y-ngx-components-services.mjs +3 -9
- package/fesm2020/c8y-ngx-components-services.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -76,19 +76,13 @@ class LastUpdatedDateGridColumn extends BaseColumn {
|
|
|
76
76
|
if (dates.after) {
|
|
77
77
|
const after = this.formatDate(dates.after);
|
|
78
78
|
filter.__and.push({
|
|
79
|
-
|
|
80
|
-
[this.path]: { __gt: after },
|
|
81
|
-
[`${this.path}.date`]: { __gt: after }
|
|
82
|
-
}
|
|
79
|
+
'lastUpdated.date': { __gt: after }
|
|
83
80
|
});
|
|
84
81
|
}
|
|
85
82
|
if (dates.before) {
|
|
86
83
|
const before = this.formatDate(dates.before);
|
|
87
84
|
filter.__and.push({
|
|
88
|
-
|
|
89
|
-
[this.path]: { __lt: before },
|
|
90
|
-
[`${this.path}.date`]: { __lt: before }
|
|
91
|
-
}
|
|
85
|
+
'lastUpdated.date': { __lt: before }
|
|
92
86
|
});
|
|
93
87
|
}
|
|
94
88
|
}
|
|
@@ -97,7 +91,7 @@ class LastUpdatedDateGridColumn extends BaseColumn {
|
|
|
97
91
|
};
|
|
98
92
|
this.sortable = true;
|
|
99
93
|
this.sortingConfig = {
|
|
100
|
-
pathSortingConfigs: [{ path:
|
|
94
|
+
pathSortingConfigs: [{ path: 'lastUpdated.date' }]
|
|
101
95
|
};
|
|
102
96
|
}
|
|
103
97
|
formatDate(dateToFormat) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-services.mjs","sources":["../../services/services-device-tab/columns/last-updated-date.cell-renderer.component.ts","../../services/services-device-tab/columns/last-updated-date.device-grid-column.ts","../../services/services-device-tab/columns/name.cell-renderer.component.ts","../../services/services-device-tab/columns/name.grid-column.ts","../../services/services-device-tab/columns/service-type.grid-column.ts","../../services/status-options/status-options.model.ts","../../services/status-options/status-options.service.ts","../../services/services-device-tab/columns/status.cell-renderer.component.ts","../../services/services-device-tab/columns/status.cell-renderer.component.html","../../services/services-device-tab/columns/status.grid-column.ts","../../services/services-device-tab/services-device-tab.component.ts","../../services/services-device-tab/services-device-tab.component.html","../../services/services-device-tab/services-device-tab.guard.ts","../../services/services-device-tab/services.breadcrumb-factory.ts","../../services/services-device-tab/services-device-tab.module.ts","../../services/services.module.ts","../../services/c8y-ngx-components-services.ts"],"sourcesContent":["import { Component } from '@angular/core';\nimport { CellRendererContext } from '@c8y/ngx-components';\n\n@Component({\n template: `{{ context.value | c8yDate }}`\n})\nexport class LastUpdatedDateCellRendererComponent {\n constructor(public context: CellRendererContext) {}\n}\n","import { FormGroup } from '@angular/forms';\nimport { BaseColumn, ColumnConfig, gettext } from '@c8y/ngx-components';\nimport { LastUpdatedDateCellRendererComponent } from './last-updated-date.cell-renderer.component';\n\nexport class LastUpdatedDateGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n\n this.path = 'lastUpdated';\n this.name = 'lastUpdatedDate';\n this.header = gettext('Last updated');\n this.cellRendererComponent = LastUpdatedDateCellRendererComponent;\n\n this.filterable = true;\n this.filteringConfig = {\n fields: [\n {\n type: 'object',\n key: 'lastUpdated',\n templateOptions: {\n label: gettext('Show services updated`between dates`')\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 }\n ],\n formGroup: new FormGroup({}),\n getFilter: model => {\n const filter: any = {};\n const dates = model && model.lastUpdated;\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 __or: {\n [this.path]: { __gt: after },\n [`${this.path}.date`]: { __gt: after }\n }\n });\n }\n if (dates.before) {\n const before = this.formatDate(dates.before);\n filter.__and.push({\n __or: {\n [this.path]: { __lt: before },\n [`${this.path}.date`]: { __lt: before }\n }\n });\n }\n }\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: `${this.path}.date` }, { path: this.path }]\n };\n }\n\n protected formatDate(dateToFormat: string): string {\n return new Date(dateToFormat).toISOString();\n }\n}\n","import { Component } from '@angular/core';\nimport { CellRendererContext } from '@c8y/ngx-components';\n\n@Component({\n template: `\n <a [routerLink]=\"['/service', context.item.id]\" [title]=\"context.item.name\" class=\"interact\">\n {{ context.item.name }}\n </a>\n `\n})\nexport class NameCellRendererComponent {\n constructor(public context: CellRendererContext) {}\n}\n","import {\n BaseColumn,\n ColumnConfig,\n getBasicInputArrayFormFieldConfig,\n gettext\n} from '@c8y/ngx-components';\nimport { NameCellRendererComponent } from './name.cell-renderer.component';\n\nexport class ServiceNameGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'name';\n this.path = 'name';\n this.header = gettext('Name');\n this.cellRendererComponent = NameCellRendererComponent;\n\n this.filterable = true;\n this.filteringConfig = {\n fields: getBasicInputArrayFormFieldConfig({\n key: 'names',\n label: gettext('Filter services by name'),\n addText: gettext('Add next`name`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: gettext('daemon`SERVICE_NAME`')\n }),\n getFilter(model: any): any {\n const filter: any = {};\n if (model.names.length) {\n filter.name = { __in: model.names };\n }\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: this.path }]\n };\n }\n}\n","import {\n BaseColumn,\n ColumnConfig,\n getBasicInputArrayFormFieldConfig,\n gettext\n} from '@c8y/ngx-components';\n\nexport class ServiceTypeGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'serviceType';\n this.path = 'serviceType';\n this.header = gettext('Type');\n\n this.filterable = true;\n\n this.filteringConfig = {\n fields: getBasicInputArrayFormFieldConfig({\n key: 'serviceTypes',\n label: gettext('Filter services by type'),\n addText: gettext('Add next`type`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: 'systemd'\n }),\n getFilter(model: any): any {\n const filter: any = {};\n if (model.serviceTypes.length) {\n filter.serviceType = { __in: model.serviceTypes };\n }\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: this.path }]\n };\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { gettext, hookGeneric, GenericHookType, HookOptions } from '@c8y/ngx-components';\n\n/**\n * Extension hook allowing to register custom service statuses and configure their visual presentation.\n * @deprecated Consider using the `hookServiceStatus` function instead.\n */\nexport const HOOK_SERVICE_STATUS = new InjectionToken<StatusOption | StatusOption[]>(\n 'HOOK_SERVICE_STATUS'\n);\n\n/**\n * Extension hook allowing to register custom service statuses and configure their visual presentation.\n *\n * You can either provide a single `StatusOption` as parameter:\n * ```typescript\n * hookServiceStatus(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n * hookServiceStatus([...])\n * ```\n *\n * Or you provide an Service that implements `ExtensionFactory<StatusOption>`\n * ```typescript\n * export class MyServiceStatusFactory implements ExtensionFactory<StatusOption> {...}\n * ...\n * hookServiceStatus(MyServiceStatusFactory)\n * ```\n * A typed alternative to `HOOK_SERVICE_STATUS`.\n * @param status The `StatusOption`'s or `ExtensionFactory` to be provided.\n * @returns An `Provider` to be provided in your module.\n */\nexport function hookServiceStatus(\n status: GenericHookType<StatusOption>,\n options?: Partial<HookOptions>\n) {\n return hookGeneric<StatusOption>(status, HOOK_SERVICE_STATUS, options);\n}\n\n/**\n * Defines the visual presentation of a service status option.\n */\nexport interface StatusOption {\n /**\n * Key used for this status in the c8y_Service object.\n */\n key: string;\n /**\n * Human readable name of the status used to be translated.\n */\n label: string;\n /**\n * An icon to use to display the status.\n */\n icon: string;\n /**\n * CSS class(es) used to e.g. accent the status (contextual color, etc.)\n */\n class?: string;\n}\n\n/**\n * Standard status options supported by the platform.\n */\nexport const SERVICE_STATUS_OPTIONS: StatusOption[] = [\n {\n key: 'up',\n label: gettext('Up'),\n icon: 'check-circle',\n class: 'text-success'\n },\n {\n key: 'down',\n label: gettext('Down'),\n icon: 'exclamation-circle',\n class: 'text-danger'\n },\n {\n key: 'unknown',\n label: gettext('Unknown'),\n icon: 'inactive-state'\n }\n];\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { flatten } from 'lodash-es';\nimport { HOOK_SERVICE_STATUS, SERVICE_STATUS_OPTIONS, StatusOption } from './status-options.model';\n\n/**\n * The service for system wide registered service status options.\n * It provides the standard service statuses plus all custom status options\n * registered with the <code>HOOK_SERVICE_STATUS</code> extension hook.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class StatusOptionsService {\n get options(): StatusOption[] {\n return this._options;\n }\n\n private _options: StatusOption[];\n\n constructor(\n @Optional() @Inject(HOOK_SERVICE_STATUS) options: Array<StatusOption | StatusOption[]>\n ) {\n this._options = [...SERVICE_STATUS_OPTIONS, ...flatten(options)];\n }\n}\n","import { Component } from '@angular/core';\nimport { CellRendererContext } from '@c8y/ngx-components';\nimport { StatusOptionsService } from '../../status-options';\n\n@Component({\n templateUrl: 'status.cell-renderer.component.html'\n})\nexport class StatusCellRendererComponent {\n constructor(\n public context: CellRendererContext,\n public statusOptionsService: StatusOptionsService\n ) {}\n}\n","<span [ngSwitch]=\"context.item.status\">\n <ng-container *ngFor=\"let option of statusOptionsService.options\">\n <i\n *ngSwitchCase=\"option.key\"\n [c8yIcon]=\"option.icon\"\n class=\"{{ option.class }}\"\n [tooltip]=\"option.label | translate\"\n container=\"body\"\n placement=\"top\"\n ></i>\n </ng-container>\n <i\n *ngSwitchDefault\n c8yIcon=\"job\"\n class=\"text-primary\"\n [tooltip]=\"context.item.status\"\n container=\"body\"\n placement=\"top\"\n ></i>\n</span>\n","import {\n BaseColumn,\n ColumnConfig,\n ColumnDataType,\n getBasicInputArrayFormFieldConfig,\n gettext\n} from '@c8y/ngx-components';\nimport { entries } from 'lodash-es';\nimport { StatusOptionsService } from '../../status-options';\nimport { StatusCellRendererComponent } from './status.cell-renderer.component';\n\nexport class StatusGridColumn extends BaseColumn {\n constructor(statusOptionsService: StatusOptionsService, initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'status';\n this.path = 'status';\n this.header = gettext('Status');\n this.dataType = ColumnDataType.Icon;\n this.cellRendererComponent = StatusCellRendererComponent;\n this.filterable = true;\n this.resizable = false;\n\n this.filteringConfig = {\n fields: [\n {\n key: 'statusOptions',\n type: 'object',\n templateOptions: {\n label: gettext('Show devices with status')\n },\n fieldGroup: [\n ...statusOptionsService.options.map(option => ({\n key: option.key,\n type: 'switch',\n templateOptions: {\n label: option.label,\n optionDataCy: option.key\n }\n }))\n ]\n },\n ...getBasicInputArrayFormFieldConfig({\n key: 'custom',\n label: gettext('or filter by custom status'),\n addText: gettext('Add next`custom status`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: gettext('restarting`SERVICE_STATUS`'),\n optional: true\n })\n ],\n getFilter(model) {\n const filter: any = {};\n filter.status = {\n __in: [\n ...entries(model?.statusOptions || {})\n .filter(([_, value]) => !!value)\n .map(([key, _]) => key),\n ...model.custom.filter(c => !!c)\n ]\n };\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: this.path }]\n };\n }\n}\n","import { Component, EventEmitter } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { IManagedObject, InventoryService, IResultList, QueriesUtil } from '@c8y/client';\nimport {\n Column,\n DataGridService,\n DataSourceModifier,\n ServerSideDataResult\n} from '@c8y/ngx-components';\nimport { StatusOptionsService } from '../status-options';\nimport {\n LastUpdatedDateGridColumn,\n ServiceNameGridColumn,\n ServiceTypeGridColumn,\n StatusGridColumn\n} from './columns';\n\nconst SERVICE_FRAGMENT = 'c8y_Service';\n\n@Component({\n selector: 'c8y-services-device-tab',\n templateUrl: 'services-device-tab.component.html'\n})\nexport class ServicesDeviceTabComponent {\n deviceId: string | number = this.route.snapshot.parent.data.contextData.id;\n\n sizeRequest: Promise<number>;\n sizeRequestDone = false;\n\n refresh$: EventEmitter<void> = new EventEmitter();\n pagination = {\n pageSize: 50,\n currentPage: 1\n };\n\n columns: Column[] = [\n new StatusGridColumn(this.statusOptionsService),\n new ServiceNameGridColumn(),\n new ServiceTypeGridColumn(),\n new LastUpdatedDateGridColumn()\n ];\n\n serverSideDataCallback: any;\n\n private queriesUtil: QueriesUtil = new QueriesUtil();\n\n constructor(\n private route: ActivatedRoute,\n private inventoryService: InventoryService,\n private gridService: DataGridService,\n private statusOptionsService: StatusOptionsService\n ) {\n this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n this.sizeRequest = this.inventoryService\n .childAdditionsList(this.deviceId, {\n query: `type eq ${SERVICE_FRAGMENT}`,\n withTotalPages: true,\n pageSize: 1\n })\n .then(response => {\n this.sizeRequestDone = true;\n return response?.paging?.totalPages;\n });\n }\n\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const query = this.queriesUtil.buildQuery(\n this.queriesUtil.addAndFilter(this.gridService.getQueryObj(dataSourceModifier.columns), {\n type: SERVICE_FRAGMENT\n })\n );\n\n const dataRequest: Promise<IResultList<IManagedObject>> =\n this.inventoryService.childAdditionsList(this.deviceId, {\n query,\n withTotalPages: true,\n pageSize: dataSourceModifier.pagination.pageSize,\n currentPage: dataSourceModifier.pagination.currentPage\n });\n\n const filtererdSizeRequest: Promise<number> = this.inventoryService\n .childAdditionsList(this.deviceId, {\n query,\n withTotalPages: true,\n pageSize: 1\n })\n .then(response => response?.paging?.totalPages);\n\n const [dataResponse, size, filteredSize] = await Promise.all([\n dataRequest,\n this.sizeRequest,\n filtererdSizeRequest\n ]);\n\n const { res, data, paging } = dataResponse;\n\n const serverSideDataResult: ServerSideDataResult = {\n res,\n data,\n paging,\n filteredSize,\n size\n };\n\n return serverSideDataResult;\n }\n\n trackByName(_index, column: Column): string {\n return column.name;\n }\n}\n","<div class=\"content-fullpage\">\n <c8y-data-grid\n [title]=\"'Services' | translate\"\n [refresh]=\"refresh$\"\n [actionControls]=\"[]\"\n [pagination]=\"pagination\"\n [columns]=\"columns\"\n [infiniteScroll]=\"'auto'\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n >\n <div class=\"c8y-empty-state\">\n <ng-container *ngIf=\"!sizeRequestDone\">\n <c8y-loading></c8y-loading>\n </ng-container>\n <ng-container *ngIf=\"sizeRequestDone\">\n <ng-container *ngIf=\"(sizeRequest | async) === 0; else noResults\">\n <div class=\"text-center\">\n <h1 class=\"c8y-icon-duocolor\" c8yIcon=\"c8y-tools\"></h1>\n <h3 translate>No services to display.</h3>\n </div>\n </ng-container>\n <ng-template #noResults>\n <h1 c8yIcon=\"search\"></h1>\n <div>\n <p>\n <strong>{{ 'No results to display.' | translate }}</strong>\n </p>\n <small>{{ 'Refine your search terms or check your spelling.' | translate }}</small>\n </div>\n </ng-template>\n </ng-container>\n </div>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n </c8y-data-grid>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate } from '@angular/router';\nimport { InventoryService } from '@c8y/client';\nimport { get } from 'lodash-es';\n\nconst SERVICE_FRAGMENT = 'c8y_Service';\n\n@Injectable()\nexport class ServicesDeviceTabGuard implements CanActivate {\n constructor(private inventoryService: InventoryService) {}\n\n canActivate(route: ActivatedRouteSnapshot): Promise<boolean> {\n const id = get(route, 'params.id') || get(route, 'parent.params.id');\n return this.inventoryService\n .childAdditionsList({ id }, { query: `type eq ${SERVICE_FRAGMENT}`, pageSize: 1 })\n .then(result => !!result?.data?.length);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { InventoryService, ISource } from '@c8y/client';\nimport {\n Breadcrumb,\n BreadcrumbFactory,\n BreadcrumbItem,\n gettext,\n ViewContext\n} from '@c8y/ngx-components';\n\n@Injectable()\nexport class ServicesBreadcrumbFactory implements BreadcrumbFactory {\n private contextData;\n\n constructor(private inventoryService: InventoryService) {}\n\n async get(route: ActivatedRoute) {\n const { context, contextData } = route.snapshot.data;\n const { routeConfig } = route.snapshot;\n\n this.contextData = contextData || this.contextData;\n\n if (\n (context === ViewContext.Service || (routeConfig as any)?.context === ViewContext.Service) &&\n !!this.contextData\n ) {\n const serviceMO = (\n await this.inventoryService.detail(this.contextData, { withParents: true })\n )?.data;\n const breadcrumb: Breadcrumb = { items: [] };\n const breadcrumbItems: BreadcrumbItem[] = [];\n const device: ISource = serviceMO?.additionParents?.references[0]?.managedObject;\n\n if (device) {\n breadcrumbItems.push({\n label: device.name,\n path: `/device/${device.id}`\n });\n breadcrumbItems.push({\n label: gettext('Services'),\n path: `/device/${device.id}/services`\n });\n breadcrumbItems.push({\n label: serviceMO.name\n } as BreadcrumbItem);\n }\n\n breadcrumb.items = breadcrumbItems;\n return breadcrumb;\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { CoreModule, gettext, hookBreadcrumb, hookRoute, ViewContext } from '@c8y/ngx-components';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport {\n LastUpdatedDateCellRendererComponent,\n NameCellRendererComponent,\n StatusCellRendererComponent\n} from './columns';\nimport { ServicesDeviceTabComponent } from './services-device-tab.component';\nimport { ServicesDeviceTabGuard } from './services-device-tab.guard';\nimport { ServicesBreadcrumbFactory } from './services.breadcrumb-factory';\n\n@NgModule({\n imports: [CoreModule, RouterModule, TooltipModule],\n declarations: [\n ServicesDeviceTabComponent,\n LastUpdatedDateCellRendererComponent,\n NameCellRendererComponent,\n StatusCellRendererComponent\n ],\n providers: [\n ServicesDeviceTabGuard,\n ServicesBreadcrumbFactory,\n hookRoute({\n context: ViewContext.Device,\n path: 'services',\n component: ServicesDeviceTabComponent,\n label: gettext('Services'),\n icon: 'statistics',\n priority: 500,\n canActivate: [ServicesDeviceTabGuard]\n }),\n hookBreadcrumb(ServicesBreadcrumbFactory)\n ]\n})\nexport class ServicesDeviceTabModule {}\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@c8y/ngx-components';\nimport { ServicesDeviceTabModule } from './services-device-tab';\n\n@NgModule({\n imports: [CoreModule, ServicesDeviceTabModule]\n})\nexport class ServicesModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i2.StatusOptionsService","SERVICE_FRAGMENT","i1","i3","i4.StatusOptionsService","i5"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-services.mjs","sources":["../../services/services-device-tab/columns/last-updated-date.cell-renderer.component.ts","../../services/services-device-tab/columns/last-updated-date.device-grid-column.ts","../../services/services-device-tab/columns/name.cell-renderer.component.ts","../../services/services-device-tab/columns/name.grid-column.ts","../../services/services-device-tab/columns/service-type.grid-column.ts","../../services/status-options/status-options.model.ts","../../services/status-options/status-options.service.ts","../../services/services-device-tab/columns/status.cell-renderer.component.ts","../../services/services-device-tab/columns/status.cell-renderer.component.html","../../services/services-device-tab/columns/status.grid-column.ts","../../services/services-device-tab/services-device-tab.component.ts","../../services/services-device-tab/services-device-tab.component.html","../../services/services-device-tab/services-device-tab.guard.ts","../../services/services-device-tab/services.breadcrumb-factory.ts","../../services/services-device-tab/services-device-tab.module.ts","../../services/services.module.ts","../../services/c8y-ngx-components-services.ts"],"sourcesContent":["import { Component } from '@angular/core';\nimport { CellRendererContext } from '@c8y/ngx-components';\n\n@Component({\n template: `{{ context.value | c8yDate }}`\n})\nexport class LastUpdatedDateCellRendererComponent {\n constructor(public context: CellRendererContext) {}\n}\n","import { FormGroup } from '@angular/forms';\nimport { BaseColumn, ColumnConfig, gettext } from '@c8y/ngx-components';\nimport { LastUpdatedDateCellRendererComponent } from './last-updated-date.cell-renderer.component';\n\nexport class LastUpdatedDateGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n\n this.path = 'lastUpdated';\n this.name = 'lastUpdatedDate';\n this.header = gettext('Last updated');\n this.cellRendererComponent = LastUpdatedDateCellRendererComponent;\n\n this.filterable = true;\n this.filteringConfig = {\n fields: [\n {\n type: 'object',\n key: 'lastUpdated',\n templateOptions: {\n label: gettext('Show services updated`between dates`')\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 }\n ],\n formGroup: new FormGroup({}),\n getFilter: model => {\n const filter: any = {};\n const dates = model && model.lastUpdated;\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 'lastUpdated.date': { __gt: after }\n });\n }\n if (dates.before) {\n const before = this.formatDate(dates.before);\n filter.__and.push({\n 'lastUpdated.date': { __lt: before }\n });\n }\n }\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: 'lastUpdated.date' }]\n };\n }\n\n protected formatDate(dateToFormat: string): string {\n return new Date(dateToFormat).toISOString();\n }\n}\n","import { Component } from '@angular/core';\nimport { CellRendererContext } from '@c8y/ngx-components';\n\n@Component({\n template: `\n <a [routerLink]=\"['/service', context.item.id]\" [title]=\"context.item.name\" class=\"interact\">\n {{ context.item.name }}\n </a>\n `\n})\nexport class NameCellRendererComponent {\n constructor(public context: CellRendererContext) {}\n}\n","import {\n BaseColumn,\n ColumnConfig,\n getBasicInputArrayFormFieldConfig,\n gettext\n} from '@c8y/ngx-components';\nimport { NameCellRendererComponent } from './name.cell-renderer.component';\n\nexport class ServiceNameGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'name';\n this.path = 'name';\n this.header = gettext('Name');\n this.cellRendererComponent = NameCellRendererComponent;\n\n this.filterable = true;\n this.filteringConfig = {\n fields: getBasicInputArrayFormFieldConfig({\n key: 'names',\n label: gettext('Filter services by name'),\n addText: gettext('Add next`name`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: gettext('daemon`SERVICE_NAME`')\n }),\n getFilter(model: any): any {\n const filter: any = {};\n if (model.names.length) {\n filter.name = { __in: model.names };\n }\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: this.path }]\n };\n }\n}\n","import {\n BaseColumn,\n ColumnConfig,\n getBasicInputArrayFormFieldConfig,\n gettext\n} from '@c8y/ngx-components';\n\nexport class ServiceTypeGridColumn extends BaseColumn {\n constructor(initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'serviceType';\n this.path = 'serviceType';\n this.header = gettext('Type');\n\n this.filterable = true;\n\n this.filteringConfig = {\n fields: getBasicInputArrayFormFieldConfig({\n key: 'serviceTypes',\n label: gettext('Filter services by type'),\n addText: gettext('Add next`type`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: 'systemd'\n }),\n getFilter(model: any): any {\n const filter: any = {};\n if (model.serviceTypes.length) {\n filter.serviceType = { __in: model.serviceTypes };\n }\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: this.path }]\n };\n }\n}\n","import { InjectionToken } from '@angular/core';\nimport { gettext, hookGeneric, GenericHookType, HookOptions } from '@c8y/ngx-components';\n\n/**\n * Extension hook allowing to register custom service statuses and configure their visual presentation.\n * @deprecated Consider using the `hookServiceStatus` function instead.\n */\nexport const HOOK_SERVICE_STATUS = new InjectionToken<StatusOption | StatusOption[]>(\n 'HOOK_SERVICE_STATUS'\n);\n\n/**\n * Extension hook allowing to register custom service statuses and configure their visual presentation.\n *\n * You can either provide a single `StatusOption` as parameter:\n * ```typescript\n * hookServiceStatus(...)\n * ```\n *\n * Or an array to directly register multiple:\n * ```typescript\n * hookServiceStatus([...])\n * ```\n *\n * Or you provide an Service that implements `ExtensionFactory<StatusOption>`\n * ```typescript\n * export class MyServiceStatusFactory implements ExtensionFactory<StatusOption> {...}\n * ...\n * hookServiceStatus(MyServiceStatusFactory)\n * ```\n * A typed alternative to `HOOK_SERVICE_STATUS`.\n * @param status The `StatusOption`'s or `ExtensionFactory` to be provided.\n * @returns An `Provider` to be provided in your module.\n */\nexport function hookServiceStatus(\n status: GenericHookType<StatusOption>,\n options?: Partial<HookOptions>\n) {\n return hookGeneric<StatusOption>(status, HOOK_SERVICE_STATUS, options);\n}\n\n/**\n * Defines the visual presentation of a service status option.\n */\nexport interface StatusOption {\n /**\n * Key used for this status in the c8y_Service object.\n */\n key: string;\n /**\n * Human readable name of the status used to be translated.\n */\n label: string;\n /**\n * An icon to use to display the status.\n */\n icon: string;\n /**\n * CSS class(es) used to e.g. accent the status (contextual color, etc.)\n */\n class?: string;\n}\n\n/**\n * Standard status options supported by the platform.\n */\nexport const SERVICE_STATUS_OPTIONS: StatusOption[] = [\n {\n key: 'up',\n label: gettext('Up'),\n icon: 'check-circle',\n class: 'text-success'\n },\n {\n key: 'down',\n label: gettext('Down'),\n icon: 'exclamation-circle',\n class: 'text-danger'\n },\n {\n key: 'unknown',\n label: gettext('Unknown'),\n icon: 'inactive-state'\n }\n];\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { flatten } from 'lodash-es';\nimport { HOOK_SERVICE_STATUS, SERVICE_STATUS_OPTIONS, StatusOption } from './status-options.model';\n\n/**\n * The service for system wide registered service status options.\n * It provides the standard service statuses plus all custom status options\n * registered with the <code>HOOK_SERVICE_STATUS</code> extension hook.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class StatusOptionsService {\n get options(): StatusOption[] {\n return this._options;\n }\n\n private _options: StatusOption[];\n\n constructor(\n @Optional() @Inject(HOOK_SERVICE_STATUS) options: Array<StatusOption | StatusOption[]>\n ) {\n this._options = [...SERVICE_STATUS_OPTIONS, ...flatten(options)];\n }\n}\n","import { Component } from '@angular/core';\nimport { CellRendererContext } from '@c8y/ngx-components';\nimport { StatusOptionsService } from '../../status-options';\n\n@Component({\n templateUrl: 'status.cell-renderer.component.html'\n})\nexport class StatusCellRendererComponent {\n constructor(\n public context: CellRendererContext,\n public statusOptionsService: StatusOptionsService\n ) {}\n}\n","<span [ngSwitch]=\"context.item.status\">\n <ng-container *ngFor=\"let option of statusOptionsService.options\">\n <i\n *ngSwitchCase=\"option.key\"\n [c8yIcon]=\"option.icon\"\n class=\"{{ option.class }}\"\n [tooltip]=\"option.label | translate\"\n container=\"body\"\n placement=\"top\"\n ></i>\n </ng-container>\n <i\n *ngSwitchDefault\n c8yIcon=\"job\"\n class=\"text-primary\"\n [tooltip]=\"context.item.status\"\n container=\"body\"\n placement=\"top\"\n ></i>\n</span>\n","import {\n BaseColumn,\n ColumnConfig,\n ColumnDataType,\n getBasicInputArrayFormFieldConfig,\n gettext\n} from '@c8y/ngx-components';\nimport { entries } from 'lodash-es';\nimport { StatusOptionsService } from '../../status-options';\nimport { StatusCellRendererComponent } from './status.cell-renderer.component';\n\nexport class StatusGridColumn extends BaseColumn {\n constructor(statusOptionsService: StatusOptionsService, initialColumnConfig?: ColumnConfig) {\n super(initialColumnConfig);\n this.name = 'status';\n this.path = 'status';\n this.header = gettext('Status');\n this.dataType = ColumnDataType.Icon;\n this.cellRendererComponent = StatusCellRendererComponent;\n this.filterable = true;\n this.resizable = false;\n\n this.filteringConfig = {\n fields: [\n {\n key: 'statusOptions',\n type: 'object',\n templateOptions: {\n label: gettext('Show devices with status')\n },\n fieldGroup: [\n ...statusOptionsService.options.map(option => ({\n key: option.key,\n type: 'switch',\n templateOptions: {\n label: option.label,\n optionDataCy: option.key\n }\n }))\n ]\n },\n ...getBasicInputArrayFormFieldConfig({\n key: 'custom',\n label: gettext('or filter by custom status'),\n addText: gettext('Add next`custom status`'),\n tooltip: gettext('Use * as a wildcard character'),\n placeholder: gettext('restarting`SERVICE_STATUS`'),\n optional: true\n })\n ],\n getFilter(model) {\n const filter: any = {};\n filter.status = {\n __in: [\n ...entries(model?.statusOptions || {})\n .filter(([_, value]) => !!value)\n .map(([key, _]) => key),\n ...model.custom.filter(c => !!c)\n ]\n };\n return filter;\n }\n };\n\n this.sortable = true;\n this.sortingConfig = {\n pathSortingConfigs: [{ path: this.path }]\n };\n }\n}\n","import { Component, EventEmitter } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { IManagedObject, InventoryService, IResultList, QueriesUtil } from '@c8y/client';\nimport {\n Column,\n DataGridService,\n DataSourceModifier,\n ServerSideDataResult\n} from '@c8y/ngx-components';\nimport { StatusOptionsService } from '../status-options';\nimport {\n LastUpdatedDateGridColumn,\n ServiceNameGridColumn,\n ServiceTypeGridColumn,\n StatusGridColumn\n} from './columns';\n\nconst SERVICE_FRAGMENT = 'c8y_Service';\n\n@Component({\n selector: 'c8y-services-device-tab',\n templateUrl: 'services-device-tab.component.html'\n})\nexport class ServicesDeviceTabComponent {\n deviceId: string | number = this.route.snapshot.parent.data.contextData.id;\n\n sizeRequest: Promise<number>;\n sizeRequestDone = false;\n\n refresh$: EventEmitter<void> = new EventEmitter();\n pagination = {\n pageSize: 50,\n currentPage: 1\n };\n\n columns: Column[] = [\n new StatusGridColumn(this.statusOptionsService),\n new ServiceNameGridColumn(),\n new ServiceTypeGridColumn(),\n new LastUpdatedDateGridColumn()\n ];\n\n serverSideDataCallback: any;\n\n private queriesUtil: QueriesUtil = new QueriesUtil();\n\n constructor(\n private route: ActivatedRoute,\n private inventoryService: InventoryService,\n private gridService: DataGridService,\n private statusOptionsService: StatusOptionsService\n ) {\n this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n this.sizeRequest = this.inventoryService\n .childAdditionsList(this.deviceId, {\n query: `type eq ${SERVICE_FRAGMENT}`,\n withTotalPages: true,\n pageSize: 1\n })\n .then(response => {\n this.sizeRequestDone = true;\n return response?.paging?.totalPages;\n });\n }\n\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const query = this.queriesUtil.buildQuery(\n this.queriesUtil.addAndFilter(this.gridService.getQueryObj(dataSourceModifier.columns), {\n type: SERVICE_FRAGMENT\n })\n );\n\n const dataRequest: Promise<IResultList<IManagedObject>> =\n this.inventoryService.childAdditionsList(this.deviceId, {\n query,\n withTotalPages: true,\n pageSize: dataSourceModifier.pagination.pageSize,\n currentPage: dataSourceModifier.pagination.currentPage\n });\n\n const filtererdSizeRequest: Promise<number> = this.inventoryService\n .childAdditionsList(this.deviceId, {\n query,\n withTotalPages: true,\n pageSize: 1\n })\n .then(response => response?.paging?.totalPages);\n\n const [dataResponse, size, filteredSize] = await Promise.all([\n dataRequest,\n this.sizeRequest,\n filtererdSizeRequest\n ]);\n\n const { res, data, paging } = dataResponse;\n\n const serverSideDataResult: ServerSideDataResult = {\n res,\n data,\n paging,\n filteredSize,\n size\n };\n\n return serverSideDataResult;\n }\n\n trackByName(_index, column: Column): string {\n return column.name;\n }\n}\n","<div class=\"content-fullpage\">\n <c8y-data-grid\n [title]=\"'Services' | translate\"\n [refresh]=\"refresh$\"\n [actionControls]=\"[]\"\n [pagination]=\"pagination\"\n [columns]=\"columns\"\n [infiniteScroll]=\"'auto'\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n >\n <div class=\"c8y-empty-state\">\n <ng-container *ngIf=\"!sizeRequestDone\">\n <c8y-loading></c8y-loading>\n </ng-container>\n <ng-container *ngIf=\"sizeRequestDone\">\n <ng-container *ngIf=\"(sizeRequest | async) === 0; else noResults\">\n <div class=\"text-center\">\n <h1 class=\"c8y-icon-duocolor\" c8yIcon=\"c8y-tools\"></h1>\n <h3 translate>No services to display.</h3>\n </div>\n </ng-container>\n <ng-template #noResults>\n <h1 c8yIcon=\"search\"></h1>\n <div>\n <p>\n <strong>{{ 'No results to display.' | translate }}</strong>\n </p>\n <small>{{ 'Refine your search terms or check your spelling.' | translate }}</small>\n </div>\n </ng-template>\n </ng-container>\n </div>\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n </c8y-data-grid>\n</div>\n","import { Injectable } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivate } from '@angular/router';\nimport { InventoryService } from '@c8y/client';\nimport { get } from 'lodash-es';\n\nconst SERVICE_FRAGMENT = 'c8y_Service';\n\n@Injectable()\nexport class ServicesDeviceTabGuard implements CanActivate {\n constructor(private inventoryService: InventoryService) {}\n\n canActivate(route: ActivatedRouteSnapshot): Promise<boolean> {\n const id = get(route, 'params.id') || get(route, 'parent.params.id');\n return this.inventoryService\n .childAdditionsList({ id }, { query: `type eq ${SERVICE_FRAGMENT}`, pageSize: 1 })\n .then(result => !!result?.data?.length);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { InventoryService, ISource } from '@c8y/client';\nimport {\n Breadcrumb,\n BreadcrumbFactory,\n BreadcrumbItem,\n gettext,\n ViewContext\n} from '@c8y/ngx-components';\n\n@Injectable()\nexport class ServicesBreadcrumbFactory implements BreadcrumbFactory {\n private contextData;\n\n constructor(private inventoryService: InventoryService) {}\n\n async get(route: ActivatedRoute) {\n const { context, contextData } = route.snapshot.data;\n const { routeConfig } = route.snapshot;\n\n this.contextData = contextData || this.contextData;\n\n if (\n (context === ViewContext.Service || (routeConfig as any)?.context === ViewContext.Service) &&\n !!this.contextData\n ) {\n const serviceMO = (\n await this.inventoryService.detail(this.contextData, { withParents: true })\n )?.data;\n const breadcrumb: Breadcrumb = { items: [] };\n const breadcrumbItems: BreadcrumbItem[] = [];\n const device: ISource = serviceMO?.additionParents?.references[0]?.managedObject;\n\n if (device) {\n breadcrumbItems.push({\n label: device.name,\n path: `/device/${device.id}`\n });\n breadcrumbItems.push({\n label: gettext('Services'),\n path: `/device/${device.id}/services`\n });\n breadcrumbItems.push({\n label: serviceMO.name\n } as BreadcrumbItem);\n }\n\n breadcrumb.items = breadcrumbItems;\n return breadcrumb;\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { CoreModule, gettext, hookBreadcrumb, hookRoute, ViewContext } from '@c8y/ngx-components';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport {\n LastUpdatedDateCellRendererComponent,\n NameCellRendererComponent,\n StatusCellRendererComponent\n} from './columns';\nimport { ServicesDeviceTabComponent } from './services-device-tab.component';\nimport { ServicesDeviceTabGuard } from './services-device-tab.guard';\nimport { ServicesBreadcrumbFactory } from './services.breadcrumb-factory';\n\n@NgModule({\n imports: [CoreModule, RouterModule, TooltipModule],\n declarations: [\n ServicesDeviceTabComponent,\n LastUpdatedDateCellRendererComponent,\n NameCellRendererComponent,\n StatusCellRendererComponent\n ],\n providers: [\n ServicesDeviceTabGuard,\n ServicesBreadcrumbFactory,\n hookRoute({\n context: ViewContext.Device,\n path: 'services',\n component: ServicesDeviceTabComponent,\n label: gettext('Services'),\n icon: 'statistics',\n priority: 500,\n canActivate: [ServicesDeviceTabGuard]\n }),\n hookBreadcrumb(ServicesBreadcrumbFactory)\n ]\n})\nexport class ServicesDeviceTabModule {}\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@c8y/ngx-components';\nimport { ServicesDeviceTabModule } from './services-device-tab';\n\n@NgModule({\n imports: [CoreModule, ServicesDeviceTabModule]\n})\nexport class ServicesModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i2.StatusOptionsService","SERVICE_FRAGMENT","i1","i3","i4.StatusOptionsService","i5"],"mappings":"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"}
|
|
@@ -8,12 +8,12 @@ import * as i1 from '@c8y/client';
|
|
|
8
8
|
import { QueriesUtil } from '@c8y/client';
|
|
9
9
|
import * as i2 from '@c8y/ngx-components/api';
|
|
10
10
|
import { filter, mergeMap, takeUntil, tap } from 'rxjs/operators';
|
|
11
|
-
import * as i5
|
|
11
|
+
import * as i5 from '@ngx-translate/core';
|
|
12
|
+
import * as i5$2 from 'ngx-bootstrap/collapse';
|
|
12
13
|
import { CollapseModule } from 'ngx-bootstrap/collapse';
|
|
13
14
|
import { BsDropdownModule } from 'ngx-bootstrap/dropdown';
|
|
14
|
-
import * as i1$1 from '@ngx-translate/core';
|
|
15
15
|
import { isArray, isNumber, isString, isObject } from 'lodash';
|
|
16
|
-
import * as i5 from '@angular/common';
|
|
16
|
+
import * as i5$1 from '@angular/common';
|
|
17
17
|
import * as i6 from '@angular/forms';
|
|
18
18
|
import { NG_VALUE_ACCESSOR, NG_VALIDATORS, FormsModule } from '@angular/forms';
|
|
19
19
|
|
|
@@ -127,7 +127,12 @@ class AssetNode extends NavigatorNode {
|
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
129
|
setLabel() {
|
|
130
|
-
|
|
130
|
+
if (this.config.label || this.root) {
|
|
131
|
+
this.label = this.config.label || gettext('Groups');
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
this.label = this.service.label(this.mo);
|
|
135
|
+
}
|
|
131
136
|
}
|
|
132
137
|
click(options = {}) {
|
|
133
138
|
if (this.isDeviceOrProbablyChildDevice && !this.showChildDevices) {
|
|
@@ -435,7 +440,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
435
440
|
}], ctorParameters: function () { return [{ type: i3.GroupService }]; } });
|
|
436
441
|
|
|
437
442
|
class AssetNodeService {
|
|
438
|
-
constructor(inventory, apiService, modal, alert, breadcrumbService, user, appState, optionsService, moduleConfig, deviceGroupService) {
|
|
443
|
+
constructor(inventory, apiService, modal, alert, breadcrumbService, user, appState, optionsService, moduleConfig, deviceGroupService, translateService) {
|
|
439
444
|
this.inventory = inventory;
|
|
440
445
|
this.apiService = apiService;
|
|
441
446
|
this.modal = modal;
|
|
@@ -446,6 +451,7 @@ class AssetNodeService {
|
|
|
446
451
|
this.optionsService = optionsService;
|
|
447
452
|
this.moduleConfig = moduleConfig;
|
|
448
453
|
this.deviceGroupService = deviceGroupService;
|
|
454
|
+
this.translateService = translateService;
|
|
449
455
|
this.firstUrl = true;
|
|
450
456
|
this.PAGE_SIZE = 20;
|
|
451
457
|
this.moduleConfig = {
|
|
@@ -454,6 +460,12 @@ class AssetNodeService {
|
|
|
454
460
|
};
|
|
455
461
|
this.queriesUtil = new QueriesUtil();
|
|
456
462
|
}
|
|
463
|
+
label(mo) {
|
|
464
|
+
return (mo.name ||
|
|
465
|
+
(this.isDevice(mo) &&
|
|
466
|
+
this.translateService.instant(gettext('Device {{id}}'), { id: mo.id })) ||
|
|
467
|
+
'--');
|
|
468
|
+
}
|
|
457
469
|
icon(mo, open) {
|
|
458
470
|
return this.deviceGroupService.icon(mo, open);
|
|
459
471
|
}
|
|
@@ -693,7 +705,7 @@ class AssetNodeService {
|
|
|
693
705
|
return combinedQuery;
|
|
694
706
|
}
|
|
695
707
|
}
|
|
696
|
-
AssetNodeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AssetNodeService, deps: [{ token: i1.InventoryService }, { token: i2.ApiService }, { token: i3.ModalService }, { token: i3.AlertService }, { token: i3.BreadcrumbService }, { token: i1.UserService }, { token: i3.AppStateService }, { token: i3.OptionsService }, { token: ASSET_NAVIGATOR_CONFIG, optional: true }, { token: DeviceGroupService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
708
|
+
AssetNodeService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AssetNodeService, deps: [{ token: i1.InventoryService }, { token: i2.ApiService }, { token: i3.ModalService }, { token: i3.AlertService }, { token: i3.BreadcrumbService }, { token: i1.UserService }, { token: i3.AppStateService }, { token: i3.OptionsService }, { token: ASSET_NAVIGATOR_CONFIG, optional: true }, { token: DeviceGroupService }, { token: i5.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
697
709
|
AssetNodeService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AssetNodeService, providedIn: 'root' });
|
|
698
710
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AssetNodeService, decorators: [{
|
|
699
711
|
type: Injectable,
|
|
@@ -705,7 +717,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
|
|
|
705
717
|
}, {
|
|
706
718
|
type: Inject,
|
|
707
719
|
args: [ASSET_NAVIGATOR_CONFIG]
|
|
708
|
-
}] }, { type: DeviceGroupService }]; } });
|
|
720
|
+
}] }, { type: DeviceGroupService }, { type: i5.TranslateService }]; } });
|
|
709
721
|
|
|
710
722
|
class AssetNodeFactory {
|
|
711
723
|
constructor(service, moduleConfig) {
|
|
@@ -1049,12 +1061,12 @@ class AssetSelectorNodeComponent {
|
|
|
1049
1061
|
this.cd.markForCheck();
|
|
1050
1062
|
}
|
|
1051
1063
|
}
|
|
1052
|
-
AssetSelectorNodeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AssetSelectorNodeComponent, deps: [{ token:
|
|
1053
|
-
AssetSelectorNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: AssetSelectorNodeComponent, selector: "c8y-asset-selector-node", inputs: { node: "node", rootNode: "rootNode", preselected: "preselected", showPath: "showPath", multi: "multi", view: "view", index: "index", active: "active", selectedItems: "selectedItems", handleNextMillerViewColumn: "handleNextMillerViewColumn" }, outputs: { isLoadingState: "isLoadingState", onSelect: "onSelect", onDeselect: "onDeselect" }, ngImport: i0, template: "<!-- Hierarchy tree -->\n<div\n *ngIf=\"view === 'tree'\"\n class=\"c8y-asset-selector__item\"\n [attr.role]=\"view === 'tree' ? 'tree' : 'list'\"\n [ngClass]=\"{\n 'c8y-asset-selector__item--more': node?.icon === 'plus',\n 'c8y-asset-selector__item--start': level === 0\n }\"\n [ngStyle]=\"{\n 'margin-left': level > 1 ? 16 + 'px' : '0'\n }\"\n>\n <div\n *ngIf=\"node && !node.root && !node.hidden\"\n class=\"c8y-asset-selector__node\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n [ngClass]=\"{ 'c8y-asset-selector__node--open': node?.open }\"\n title=\"{{ breadcrumb | translate }}\"\n >\n <div class=\"d-flex a-i-center p-t-4 p-b-4 m-r-8\" *ngIf=\"node.toString() !== 'LoadMoreNode'\">\n <label [ngClass]=\"{ 'c8y-checkbox': multi, 'c8y-radio': !multi }\">\n <input\n id=\"nodeLabel\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isSelected()\"\n [disabled]=\"!node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span for=\"nodeLabel\" class=\"sr-only\" translate>Node label</span>\n </label>\n </div>\n\n <!-- group button -->\n <button\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n class=\"c8y-asset-selector__btn text-truncate\"\n (click)=\"click()\"\n [attr.aria-expanded]=\"!node.open\"\n >\n <i\n [c8yIcon]=\"node.icon\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n [title]=\"'Smart group' | translate\"\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n ></i>\n <i\n [c8yIcon]=\"node.icon\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n [title]=\"'Group' | translate\"\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.label | translate }}\n <!-- use just for search results to display the path -->\n <p *ngIf=\"showPath\" class=\"text-truncate\">\n <small class=\"text-muted\" title=\"{{ breadcrumb }}\">\n <em>{{ breadcrumb }}</em>\n </small>\n </p>\n <!-- up to here -->\n </span>\n </button>\n <!-- not a group button -->\n <button\n *ngIf=\"!node.isGroup() && !node.hasChildDevices()\"\n class=\"flex-grow\"\n [ngClass]=\"{\n 'btn btn-default btn-sm m-b-8 d-flex j-c-center': node.icon === 'plus',\n 'c8y-asset-selector__btn text-truncate': node.icon != 'plus'\n }\"\n (click)=\"selected(node)\"\n type=\"button\"\n title=\"{{ breadcrumb }}\"\n >\n <i\n [c8yIcon]=\"node.icon\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n [title]=\"'Smart group' | translate\"\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n ></i>\n <i\n [c8yIcon]=\"node.icon\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n [title]=\"'Group' | translate\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16 ': node.icon != 'plus' }\"\n class=\"c8y-icon m-r-4\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.label | translate }}\n <!-- use just for search results to display the path -->\n <p *ngIf=\"showPath\" class=\"text-truncate text-muted small\">\n <em>{{ breadcrumb }}</em>\n </p>\n <!-- up to here -->\n </span>\n </button>\n <!-- expand button (only for groups) -->\n <div *ngIf=\"node.isGroup() || node.hasChildDevices()\">\n <button\n [title]=\"expandTitle\"\n class=\"collapse-btn btn\"\n (click)=\"click()\"\n [attr.aria-expanded]=\"node.open\"\n >\n <i c8yIcon=\"angle-down\"></i>\n </button>\n </div>\n </div>\n <div\n *ngIf=\"node.countChildren()\"\n class=\"collapse\"\n [collapse]=\"!node.open\"\n [isAnimated]=\"true\"\n [attr.role]=\"'group'\"\n >\n <c8y-asset-selector-node\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [preselected]=\"preselected || []\"\n [multi]=\"multi\"\n [active]=\"active\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n\n<!-- Miller columns -->\n<div *ngIf=\"view === 'miller'\">\n <div\n *ngIf=\"node && !node.root && !node.hidden && node !== rootNode\"\n class=\"miller-column__item bg-inherit\"\n [ngClass]=\"{\n active: isActive(),\n 'miller-column__item--more': node.toString() === 'LoadMoreNode'\n }\"\n title=\"{{ breadcrumb | translate }}\"\n >\n <div\n class=\"m-l-4 m-r-4 miller-column__item__checkbox\"\n *ngIf=\"node.toString() !== 'LoadMoreNode'\"\n >\n <label [ngClass]=\"{ 'c8y-radio': !multi, 'c8y-checkbox': multi }\">\n <input\n id=\"nodeLabel2\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isGroupSelected()\"\n [disabled]=\"!node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span for=\"nodeLabel2\" class=\"sr-only\" translate>Node label</span>\n </label>\n </div>\n\n <button\n [ngClass]=\"{\n 'btn btn-default btn-sm d-flex flex-grow j-c-center m-l-16 m-r-16 m-b-8':\n node.toString() === 'LoadMoreNode',\n 'miller-column__item__btn': node.toString() !== 'LoadMoreNode',\n 'btn-pending': node.loading && node.toString() === 'LoadMoreNode'\n }\"\n title=\"{{ breadcrumb | translate }}\"\n (click)=\"millerViewClick(node)\"\n type=\"button\"\n >\n <i\n [c8yIcon]=\"node.icon\"\n class=\"c8y-icon m-r-4\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16': node.toString() !== 'LoadMoreNode' }\"\n ></i>\n <div class=\"text-left text-truncate\">\n <p title=\"{{ node.label | translate }}\" class=\"text-truncate\">\n {{ node.label | translate }}\n </p>\n <!-- use just for search results to display the path -->\n <small *ngIf=\"showPath\" class=\"text-muted text-truncate\" title=\"{{ breadcrumb }}\">\n <em>{{ breadcrumb }}</em>\n </small>\n <!-- up to here -->\n </div>\n <span *ngIf=\"node.isGroup() || node.hasChildDevices()\" class=\"p-l-4 m-l-auto\">\n <i c8yIcon=\"angle-right\"></i>\n </span>\n </button>\n </div>\n\n <div *ngIf=\"node\" [ngClass]=\"{ hidden: node !== rootNode }\" role=\"list\">\n <c8y-asset-selector-node\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [rootNode]=\"rootNode\"\n [preselected]=\"preselected || []\"\n [multi]=\"multi\"\n [view]=\"view\"\n [index]=\"index\"\n [selectedItems]=\"selectedItems\"\n [active]=\"active\"\n [handleNextMillerViewColumn]=\"handleNextMillerViewColumn\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n role=\"listitem\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5$
|
|
1064
|
+
AssetSelectorNodeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AssetSelectorNodeComponent, deps: [{ token: i5.TranslateService }, { token: i0.ChangeDetectorRef }, { token: AssetSelectorService }], target: i0.ɵɵFactoryTarget.Component });
|
|
1065
|
+
AssetSelectorNodeComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.6", type: AssetSelectorNodeComponent, selector: "c8y-asset-selector-node", inputs: { node: "node", rootNode: "rootNode", preselected: "preselected", showPath: "showPath", multi: "multi", view: "view", index: "index", active: "active", selectedItems: "selectedItems", handleNextMillerViewColumn: "handleNextMillerViewColumn" }, outputs: { isLoadingState: "isLoadingState", onSelect: "onSelect", onDeselect: "onDeselect" }, ngImport: i0, template: "<!-- Hierarchy tree -->\n<div\n *ngIf=\"view === 'tree'\"\n class=\"c8y-asset-selector__item\"\n [attr.role]=\"view === 'tree' ? 'tree' : 'list'\"\n [ngClass]=\"{\n 'c8y-asset-selector__item--more': node?.icon === 'plus',\n 'c8y-asset-selector__item--start': level === 0\n }\"\n [ngStyle]=\"{\n 'margin-left': level > 1 ? 16 + 'px' : '0'\n }\"\n>\n <div\n *ngIf=\"node && !node.root && !node.hidden\"\n class=\"c8y-asset-selector__node\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n [ngClass]=\"{ 'c8y-asset-selector__node--open': node?.open }\"\n title=\"{{ breadcrumb | translate }}\"\n >\n <div class=\"d-flex a-i-center p-t-4 p-b-4 m-r-8\" *ngIf=\"node.toString() !== 'LoadMoreNode'\">\n <label [ngClass]=\"{ 'c8y-checkbox': multi, 'c8y-radio': !multi }\">\n <input\n id=\"nodeLabel\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isSelected()\"\n [disabled]=\"!node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span for=\"nodeLabel\" class=\"sr-only\" translate>Node label</span>\n </label>\n </div>\n\n <!-- group button -->\n <button\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n class=\"c8y-asset-selector__btn text-truncate\"\n (click)=\"click()\"\n [attr.aria-expanded]=\"!node.open\"\n >\n <i\n [c8yIcon]=\"node.icon\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n [title]=\"'Smart group' | translate\"\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n ></i>\n <i\n [c8yIcon]=\"node.icon\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n [title]=\"'Group' | translate\"\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.label | translate }}\n <!-- use just for search results to display the path -->\n <p *ngIf=\"showPath\" class=\"text-truncate\">\n <small class=\"text-muted\" title=\"{{ breadcrumb }}\">\n <em>{{ breadcrumb }}</em>\n </small>\n </p>\n <!-- up to here -->\n </span>\n </button>\n <!-- not a group button -->\n <button\n *ngIf=\"!node.isGroup() && !node.hasChildDevices()\"\n class=\"flex-grow\"\n [ngClass]=\"{\n 'btn btn-default btn-sm m-b-8 d-flex j-c-center': node.icon === 'plus',\n 'c8y-asset-selector__btn text-truncate': node.icon != 'plus'\n }\"\n (click)=\"selected(node)\"\n type=\"button\"\n title=\"{{ breadcrumb }}\"\n >\n <i\n [c8yIcon]=\"node.icon\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n [title]=\"'Smart group' | translate\"\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n ></i>\n <i\n [c8yIcon]=\"node.icon\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n [title]=\"'Group' | translate\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16 ': node.icon != 'plus' }\"\n class=\"c8y-icon m-r-4\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.label | translate }}\n <!-- use just for search results to display the path -->\n <p *ngIf=\"showPath\" class=\"text-truncate text-muted small\">\n <em>{{ breadcrumb }}</em>\n </p>\n <!-- up to here -->\n </span>\n </button>\n <!-- expand button (only for groups) -->\n <div *ngIf=\"node.isGroup() || node.hasChildDevices()\">\n <button\n [title]=\"expandTitle\"\n class=\"collapse-btn btn\"\n (click)=\"click()\"\n [attr.aria-expanded]=\"node.open\"\n >\n <i c8yIcon=\"angle-down\"></i>\n </button>\n </div>\n </div>\n <div\n *ngIf=\"node.countChildren()\"\n class=\"collapse\"\n [collapse]=\"!node.open\"\n [isAnimated]=\"true\"\n [attr.role]=\"'group'\"\n >\n <c8y-asset-selector-node\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [preselected]=\"preselected || []\"\n [multi]=\"multi\"\n [active]=\"active\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n\n<!-- Miller columns -->\n<div *ngIf=\"view === 'miller'\">\n <div\n *ngIf=\"node && !node.root && !node.hidden && node !== rootNode\"\n class=\"miller-column__item bg-inherit\"\n [ngClass]=\"{\n active: isActive(),\n 'miller-column__item--more': node.toString() === 'LoadMoreNode'\n }\"\n title=\"{{ breadcrumb | translate }}\"\n >\n <div\n class=\"m-l-4 m-r-4 miller-column__item__checkbox\"\n *ngIf=\"node.toString() !== 'LoadMoreNode'\"\n >\n <label [ngClass]=\"{ 'c8y-radio': !multi, 'c8y-checkbox': multi }\">\n <input\n id=\"nodeLabel2\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isGroupSelected()\"\n [disabled]=\"!node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span for=\"nodeLabel2\" class=\"sr-only\" translate>Node label</span>\n </label>\n </div>\n\n <button\n [ngClass]=\"{\n 'btn btn-default btn-sm d-flex flex-grow j-c-center m-l-16 m-r-16 m-b-8':\n node.toString() === 'LoadMoreNode',\n 'miller-column__item__btn': node.toString() !== 'LoadMoreNode',\n 'btn-pending': node.loading && node.toString() === 'LoadMoreNode'\n }\"\n title=\"{{ breadcrumb | translate }}\"\n (click)=\"millerViewClick(node)\"\n type=\"button\"\n >\n <i\n [c8yIcon]=\"node.icon\"\n class=\"c8y-icon m-r-4\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16': node.toString() !== 'LoadMoreNode' }\"\n ></i>\n <div class=\"text-left text-truncate\">\n <p title=\"{{ node.label | translate }}\" class=\"text-truncate\">\n {{ node.label | translate }}\n </p>\n <!-- use just for search results to display the path -->\n <small *ngIf=\"showPath\" class=\"text-muted text-truncate\" title=\"{{ breadcrumb }}\">\n <em>{{ breadcrumb }}</em>\n </small>\n <!-- up to here -->\n </div>\n <span *ngIf=\"node.isGroup() || node.hasChildDevices()\" class=\"p-l-4 m-l-auto\">\n <i c8yIcon=\"angle-right\"></i>\n </span>\n </button>\n </div>\n\n <div *ngIf=\"node\" [ngClass]=\"{ hidden: node !== rootNode }\" role=\"list\">\n <c8y-asset-selector-node\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [rootNode]=\"rootNode\"\n [preselected]=\"preselected || []\"\n [multi]=\"multi\"\n [view]=\"view\"\n [index]=\"index\"\n [selectedItems]=\"selectedItems\"\n [active]=\"active\"\n [handleNextMillerViewColumn]=\"handleNextMillerViewColumn\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n role=\"listitem\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i3.C8yTranslateDirective, selector: "[translate],[ngx-translate]" }, { kind: "directive", type: i5$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i5$2.CollapseDirective, selector: "[collapse]", inputs: ["display", "isAnimated", "collapse"], outputs: ["collapsed", "collapses", "expanded", "expands"], exportAs: ["bs-collapse"] }, { kind: "component", type: AssetSelectorNodeComponent, selector: "c8y-asset-selector-node", inputs: ["node", "rootNode", "preselected", "showPath", "multi", "view", "index", "active", "selectedItems", "handleNextMillerViewColumn"], outputs: ["isLoadingState", "onSelect", "onDeselect"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] });
|
|
1054
1066
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AssetSelectorNodeComponent, decorators: [{
|
|
1055
1067
|
type: Component,
|
|
1056
1068
|
args: [{ selector: 'c8y-asset-selector-node', template: "<!-- Hierarchy tree -->\n<div\n *ngIf=\"view === 'tree'\"\n class=\"c8y-asset-selector__item\"\n [attr.role]=\"view === 'tree' ? 'tree' : 'list'\"\n [ngClass]=\"{\n 'c8y-asset-selector__item--more': node?.icon === 'plus',\n 'c8y-asset-selector__item--start': level === 0\n }\"\n [ngStyle]=\"{\n 'margin-left': level > 1 ? 16 + 'px' : '0'\n }\"\n>\n <div\n *ngIf=\"node && !node.root && !node.hidden\"\n class=\"c8y-asset-selector__node\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n [ngClass]=\"{ 'c8y-asset-selector__node--open': node?.open }\"\n title=\"{{ breadcrumb | translate }}\"\n >\n <div class=\"d-flex a-i-center p-t-4 p-b-4 m-r-8\" *ngIf=\"node.toString() !== 'LoadMoreNode'\">\n <label [ngClass]=\"{ 'c8y-checkbox': multi, 'c8y-radio': !multi }\">\n <input\n id=\"nodeLabel\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isSelected()\"\n [disabled]=\"!node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span for=\"nodeLabel\" class=\"sr-only\" translate>Node label</span>\n </label>\n </div>\n\n <!-- group button -->\n <button\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n class=\"c8y-asset-selector__btn text-truncate\"\n (click)=\"click()\"\n [attr.aria-expanded]=\"!node.open\"\n >\n <i\n [c8yIcon]=\"node.icon\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n [title]=\"'Smart group' | translate\"\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n ></i>\n <i\n [c8yIcon]=\"node.icon\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n [title]=\"'Group' | translate\"\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.label | translate }}\n <!-- use just for search results to display the path -->\n <p *ngIf=\"showPath\" class=\"text-truncate\">\n <small class=\"text-muted\" title=\"{{ breadcrumb }}\">\n <em>{{ breadcrumb }}</em>\n </small>\n </p>\n <!-- up to here -->\n </span>\n </button>\n <!-- not a group button -->\n <button\n *ngIf=\"!node.isGroup() && !node.hasChildDevices()\"\n class=\"flex-grow\"\n [ngClass]=\"{\n 'btn btn-default btn-sm m-b-8 d-flex j-c-center': node.icon === 'plus',\n 'c8y-asset-selector__btn text-truncate': node.icon != 'plus'\n }\"\n (click)=\"selected(node)\"\n type=\"button\"\n title=\"{{ breadcrumb }}\"\n >\n <i\n [c8yIcon]=\"node.icon\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n [title]=\"'Smart group' | translate\"\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n ></i>\n <i\n [c8yIcon]=\"node.icon\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n [title]=\"'Group' | translate\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16 ': node.icon != 'plus' }\"\n class=\"c8y-icon m-r-4\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.label | translate }}\n <!-- use just for search results to display the path -->\n <p *ngIf=\"showPath\" class=\"text-truncate text-muted small\">\n <em>{{ breadcrumb }}</em>\n </p>\n <!-- up to here -->\n </span>\n </button>\n <!-- expand button (only for groups) -->\n <div *ngIf=\"node.isGroup() || node.hasChildDevices()\">\n <button\n [title]=\"expandTitle\"\n class=\"collapse-btn btn\"\n (click)=\"click()\"\n [attr.aria-expanded]=\"node.open\"\n >\n <i c8yIcon=\"angle-down\"></i>\n </button>\n </div>\n </div>\n <div\n *ngIf=\"node.countChildren()\"\n class=\"collapse\"\n [collapse]=\"!node.open\"\n [isAnimated]=\"true\"\n [attr.role]=\"'group'\"\n >\n <c8y-asset-selector-node\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [preselected]=\"preselected || []\"\n [multi]=\"multi\"\n [active]=\"active\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n\n<!-- Miller columns -->\n<div *ngIf=\"view === 'miller'\">\n <div\n *ngIf=\"node && !node.root && !node.hidden && node !== rootNode\"\n class=\"miller-column__item bg-inherit\"\n [ngClass]=\"{\n active: isActive(),\n 'miller-column__item--more': node.toString() === 'LoadMoreNode'\n }\"\n title=\"{{ breadcrumb | translate }}\"\n >\n <div\n class=\"m-l-4 m-r-4 miller-column__item__checkbox\"\n *ngIf=\"node.toString() !== 'LoadMoreNode'\"\n >\n <label [ngClass]=\"{ 'c8y-radio': !multi, 'c8y-checkbox': multi }\">\n <input\n id=\"nodeLabel2\"\n [type]=\"multi ? 'checkbox' : 'radio'\"\n (change)=\"selected(node)\"\n [checked]=\"isGroupSelected()\"\n [disabled]=\"!node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span for=\"nodeLabel2\" class=\"sr-only\" translate>Node label</span>\n </label>\n </div>\n\n <button\n [ngClass]=\"{\n 'btn btn-default btn-sm d-flex flex-grow j-c-center m-l-16 m-r-16 m-b-8':\n node.toString() === 'LoadMoreNode',\n 'miller-column__item__btn': node.toString() !== 'LoadMoreNode',\n 'btn-pending': node.loading && node.toString() === 'LoadMoreNode'\n }\"\n title=\"{{ breadcrumb | translate }}\"\n (click)=\"millerViewClick(node)\"\n type=\"button\"\n >\n <i\n [c8yIcon]=\"node.icon\"\n class=\"c8y-icon m-r-4\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16': node.toString() !== 'LoadMoreNode' }\"\n ></i>\n <div class=\"text-left text-truncate\">\n <p title=\"{{ node.label | translate }}\" class=\"text-truncate\">\n {{ node.label | translate }}\n </p>\n <!-- use just for search results to display the path -->\n <small *ngIf=\"showPath\" class=\"text-muted text-truncate\" title=\"{{ breadcrumb }}\">\n <em>{{ breadcrumb }}</em>\n </small>\n <!-- up to here -->\n </div>\n <span *ngIf=\"node.isGroup() || node.hasChildDevices()\" class=\"p-l-4 m-l-auto\">\n <i c8yIcon=\"angle-right\"></i>\n </span>\n </button>\n </div>\n\n <div *ngIf=\"node\" [ngClass]=\"{ hidden: node !== rootNode }\" role=\"list\">\n <c8y-asset-selector-node\n *ngFor=\"let childNode of node.children\"\n [node]=\"childNode\"\n [rootNode]=\"rootNode\"\n [preselected]=\"preselected || []\"\n [multi]=\"multi\"\n [view]=\"view\"\n [index]=\"index\"\n [selectedItems]=\"selectedItems\"\n [active]=\"active\"\n [handleNextMillerViewColumn]=\"handleNextMillerViewColumn\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n role=\"listitem\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n" }]
|
|
1057
|
-
}], ctorParameters: function () { return [{ type:
|
|
1069
|
+
}], ctorParameters: function () { return [{ type: i5.TranslateService }, { type: i0.ChangeDetectorRef }, { type: AssetSelectorService }]; }, propDecorators: { node: [{
|
|
1058
1070
|
type: Input
|
|
1059
1071
|
}], rootNode: [{
|
|
1060
1072
|
type: Input
|
|
@@ -1540,7 +1552,7 @@ AssetSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
|
|
|
1540
1552
|
useExisting: forwardRef(() => AssetSelectorComponent),
|
|
1541
1553
|
multi: true
|
|
1542
1554
|
}
|
|
1543
|
-
], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"bg-inherit p-t-8 p-b-8 separator-bottom\"\n [ngClass]=\"{ 'p-l-16 p-absolute p-r-16': config.view === 'miller', 'sticky-top': config.multi }\"\n [ngStyle]=\"{ 'z-index': config.singleColumn && config.search ? '30' : '20' }\"\n *ngIf=\"!selectedDevice && index === 0 && (config.search || config.singleColumn)\"\n>\n <p class=\"text-medium\" [ngClass]=\"{ 'm-b-4': config.search && root }\">\n {{ config.label | translate }}\n </p>\n <c8y-search-input\n *ngIf=\"config.search && root\"\n (onClick)=\"onSearchResultClick($event)\"\n (reset)=\"onSearchResultReset($event)\"\n [mode]=\"'select'\"\n [container]=\"container\"\n [groupsOnly]=\"config.groupsOnly\"\n ></c8y-search-input>\n <div *ngIf=\"config.multi\" class=\"p-t-4\">\n <span class=\"label label-info chip\" *ngFor=\"let selectedItem of selected\">\n <button\n class=\"btn btn-xs btn-clean text-10 m-r-4\"\n type=\"button\"\n title=\"{{ selectedItem.name }}\"\n (click)=\"deselect(selectedItem)\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n {{ selectedItem.name }}\n </span>\n </div>\n</div>\n\n<div *ngIf=\"selectedDevice\" class=\"p-r-16\">\n <div class=\"d-flex p-b-4\">\n <p *ngIf=\"selectedDevice; else multiAssets\" class=\"text-medium p-t-8 m-r-8\">\n {{ 'Selected asset' | translate }}\n </p>\n <ng-template #multiAssets>\n <p class=\"text-medium m-r-8\">{{ 'Selected assets' | translate }}</p>\n </ng-template>\n <button\n class=\"btn btn-default btn-xs a-s-center m-t-4 m-l-auto\"\n type=\"button\"\n title=\"{{ 'Change' | translate }}\"\n (click)=\"clearSelectedDevices()\"\n >\n {{ 'Change' | translate }}\n </button>\n </div>\n <div class=\"d-flex\">\n <i [c8yIcon]=\"'check-circle'\" class=\"text-success p-l-0 p-r-8\"></i>\n <i\n c8yIcon=\"{{ selectedDevice.type === 'c8y_DeviceGroup' ? 'c8y-group' : 'exchange' }}\"\n class=\"m-r-4 icon-20\"\n ></i>\n <span>{{ selectedDevice.name }}</span>\n </div>\n</div>\n\n<!-- miller columns header -->\n<div\n *ngIf=\"\n config.view === 'miller' &&\n ((config.showFilter && !rootNode.root) || config.columnHeaders || config.singleColumn) &&\n !selectedDevice\n \"\n class=\"miller-column__header sticky-top bg-inherit separator-bottom\"\n [ngClass]=\"{ 'm-t-72 p-t-8': config.search, 'm-t-32': !config.search && config.singleColumn }\"\n [ngStyle]=\"{ top: config.search && !config.singleColumn ? '72px' : '0' }\"\n>\n <p\n class=\"text-12 text-muted text-truncate m-b-4\"\n *ngIf=\"config.singleColumn && index !== 0\"\n title=\"{{ rootNode.breadcrumb || rootNode.label | translate }}\"\n >\n <i c8yIcon=\"home\" class=\"m-r-4\"></i>\n {{ rootNode.breadcrumb || rootNode.label | translate }}\n </p>\n <div *ngIf=\"config.columnHeaders || config.singleColumn\" class=\"d-flex a-i-center\">\n <button\n class=\"btn btn-default btn-xs m-r-8 p-t-0 p-b-0 p-l-4 p-r-4 l-h-1\"\n type=\"button\"\n title=\"{{ 'Back' | translate }}\"\n *ngIf=\"config.singleColumn && !rootNode.root && index !== 0\"\n (click)=\"back()\"\n >\n <i c8yIcon=\"angle-left\"></i>\n </button>\n <label\n *ngIf=\"!rootNode.root && index === 0 && (config.groupsSelectable || !rootNode.isGroup())\"\n class=\"c8y-radio checkbox-inline m-r-8\"\n >\n <input\n type=\"radio\"\n (change)=\"select(rootNode.mo)\"\n [checked]=\"isGroupSelected()\"\n title=\"{{ 'Select group' | translate }}\"\n />\n <span></span>\n </label>\n\n <i\n *ngIf=\"config.columnHeaders && (config.singleColumn || (!rootNode.root && index === 0))\"\n c8yIcon=\"c8y-group-open\"\n class=\"icon-20 c8y-icon-duocolor m-r-4\"\n ></i>\n <p\n class=\"text-truncate\"\n title=\"{{ rootNode.label | translate }}\"\n *ngIf=\"config.columnHeaders\"\n [ngClass]=\"{\n 'text-label-small': !config.singleColumn,\n 'text-medium': config.singleColumn\n }\"\n >\n {{ rootNode.label | translate }}\n </p>\n </div>\n\n <div *ngIf=\"!rootNode.root && config.showFilter\" [ngClass]=\"{ 'p-t-4': config.columnHeaders }\">\n <div class=\"input-group input-group-sm input-group-search\">\n <input\n [(ngModel)]=\"filterText\"\n placeholder=\"{{ 'Filter this column\u2026' | translate }}\"\n class=\"form-control\"\n (keyup.enter)=\"applyFilter('*' + filterText + '*')\"\n />\n <span class=\"input-group-btn\">\n <button\n title=\"{{ 'Apply filter' | translate }}\"\n type=\"button\"\n class=\"btn btn-dot p-r-8 p-l-4\"\n (click)=\"applyFilter('*' + filterText + '*')\"\n >\n <i c8yIcon=\"filter\"></i>\n </button>\n <button\n title=\" {{ 'Clear filters' | translate }}\"\n type=\"button\"\n class=\"btn btn-dot p-r-8 p-l-4\"\n (click)=\"clearFilters()\"\n *ngIf=\"filterText.length\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n </span>\n </div>\n </div>\n</div>\n\n<c8y-asset-selector-node\n *ngIf=\"rootNode && !selectedDevice\"\n [node]=\"rootNode\"\n [rootNode]=\"rootNode\"\n [preselected]=\"selected\"\n [multi]=\"config.multi\"\n [view]=\"config.view\"\n [index]=\"index\"\n [selectedItems]=\"selectedItems\"\n [active]=\"active\"\n [handleNextMillerViewColumn]=\"handleNextMillerViewColumn.bind(this)\"\n (isLoadingState)=\"onLoading($event)\"\n (onSelect)=\"onSelect($event)\"\n (onDeselect)=\"onDeselect($event)\"\n class=\"d-block bg-inherit p-relative\"\n [ngClass]=\"{ 'collapse show': !rootNode.root && !rootNode.hidden && config.view !== 'miller' }\"\n style=\"z-index: 9\"\n></c8y-asset-selector-node>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.SearchInputComponent, selector: "c8y-search-input", inputs: ["mode", "enableCustomTemplatePlaceholder", "customPlaceholder", "externalTerm", "customDataQuery", "container", "groupsOnly"], outputs: ["filter", "search", "reset", "onClick"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: AssetSelectorNodeComponent, selector: "c8y-asset-selector-node", inputs: ["node", "rootNode", "preselected", "showPath", "multi", "view", "index", "active", "selectedItems", "handleNextMillerViewColumn"], outputs: ["isLoadingState", "onSelect", "onDeselect"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] });
|
|
1555
|
+
], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"bg-inherit p-t-8 p-b-8 separator-bottom\"\n [ngClass]=\"{ 'p-l-16 p-absolute p-r-16': config.view === 'miller', 'sticky-top': config.multi }\"\n [ngStyle]=\"{ 'z-index': config.singleColumn && config.search ? '30' : '20' }\"\n *ngIf=\"!selectedDevice && index === 0 && (config.search || config.singleColumn)\"\n>\n <p class=\"text-medium\" [ngClass]=\"{ 'm-b-4': config.search && root }\">\n {{ config.label | translate }}\n </p>\n <c8y-search-input\n *ngIf=\"config.search && root\"\n (onClick)=\"onSearchResultClick($event)\"\n (reset)=\"onSearchResultReset($event)\"\n [mode]=\"'select'\"\n [container]=\"container\"\n [groupsOnly]=\"config.groupsOnly\"\n ></c8y-search-input>\n <div *ngIf=\"config.multi\" class=\"p-t-4\">\n <span class=\"label label-info chip\" *ngFor=\"let selectedItem of selected\">\n <button\n class=\"btn btn-xs btn-clean text-10 m-r-4\"\n type=\"button\"\n title=\"{{ selectedItem.name }}\"\n (click)=\"deselect(selectedItem)\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n {{ selectedItem.name }}\n </span>\n </div>\n</div>\n\n<div *ngIf=\"selectedDevice\" class=\"p-r-16\">\n <div class=\"d-flex p-b-4\">\n <p *ngIf=\"selectedDevice; else multiAssets\" class=\"text-medium p-t-8 m-r-8\">\n {{ 'Selected asset' | translate }}\n </p>\n <ng-template #multiAssets>\n <p class=\"text-medium m-r-8\">{{ 'Selected assets' | translate }}</p>\n </ng-template>\n <button\n class=\"btn btn-default btn-xs a-s-center m-t-4 m-l-auto\"\n type=\"button\"\n title=\"{{ 'Change' | translate }}\"\n (click)=\"clearSelectedDevices()\"\n >\n {{ 'Change' | translate }}\n </button>\n </div>\n <div class=\"d-flex\">\n <i [c8yIcon]=\"'check-circle'\" class=\"text-success p-l-0 p-r-8\"></i>\n <i\n c8yIcon=\"{{ selectedDevice.type === 'c8y_DeviceGroup' ? 'c8y-group' : 'exchange' }}\"\n class=\"m-r-4 icon-20\"\n ></i>\n <span>{{ selectedDevice.name }}</span>\n </div>\n</div>\n\n<!-- miller columns header -->\n<div\n *ngIf=\"\n config.view === 'miller' &&\n ((config.showFilter && !rootNode.root) || config.columnHeaders || config.singleColumn) &&\n !selectedDevice\n \"\n class=\"miller-column__header sticky-top bg-inherit separator-bottom\"\n [ngClass]=\"{ 'm-t-72 p-t-8': config.search, 'm-t-32': !config.search && config.singleColumn }\"\n [ngStyle]=\"{ top: config.search && !config.singleColumn ? '72px' : '0' }\"\n>\n <p\n class=\"text-12 text-muted text-truncate m-b-4\"\n *ngIf=\"config.singleColumn && index !== 0\"\n title=\"{{ rootNode.breadcrumb || rootNode.label | translate }}\"\n >\n <i c8yIcon=\"home\" class=\"m-r-4\"></i>\n {{ rootNode.breadcrumb || rootNode.label | translate }}\n </p>\n <div *ngIf=\"config.columnHeaders || config.singleColumn\" class=\"d-flex a-i-center\">\n <button\n class=\"btn btn-default btn-xs m-r-8 p-t-0 p-b-0 p-l-4 p-r-4 l-h-1\"\n type=\"button\"\n title=\"{{ 'Back' | translate }}\"\n *ngIf=\"config.singleColumn && !rootNode.root && index !== 0\"\n (click)=\"back()\"\n >\n <i c8yIcon=\"angle-left\"></i>\n </button>\n <label\n *ngIf=\"!rootNode.root && index === 0 && (config.groupsSelectable || !rootNode.isGroup())\"\n class=\"c8y-radio checkbox-inline m-r-8\"\n >\n <input\n type=\"radio\"\n (change)=\"select(rootNode.mo)\"\n [checked]=\"isGroupSelected()\"\n title=\"{{ 'Select group' | translate }}\"\n />\n <span></span>\n </label>\n\n <i\n *ngIf=\"config.columnHeaders && (config.singleColumn || (!rootNode.root && index === 0))\"\n c8yIcon=\"c8y-group-open\"\n class=\"icon-20 c8y-icon-duocolor m-r-4\"\n ></i>\n <p\n class=\"text-truncate\"\n title=\"{{ rootNode.label | translate }}\"\n *ngIf=\"config.columnHeaders\"\n [ngClass]=\"{\n 'text-label-small': !config.singleColumn,\n 'text-medium': config.singleColumn\n }\"\n >\n {{ rootNode.label | translate }}\n </p>\n </div>\n\n <div *ngIf=\"!rootNode.root && config.showFilter\" [ngClass]=\"{ 'p-t-4': config.columnHeaders }\">\n <div class=\"input-group input-group-sm input-group-search\">\n <input\n [(ngModel)]=\"filterText\"\n placeholder=\"{{ 'Filter this column\u2026' | translate }}\"\n class=\"form-control\"\n (keyup.enter)=\"applyFilter('*' + filterText + '*')\"\n />\n <span class=\"input-group-btn\">\n <button\n title=\"{{ 'Apply filter' | translate }}\"\n type=\"button\"\n class=\"btn btn-dot p-r-8 p-l-4\"\n (click)=\"applyFilter('*' + filterText + '*')\"\n >\n <i c8yIcon=\"filter\"></i>\n </button>\n <button\n title=\" {{ 'Clear filters' | translate }}\"\n type=\"button\"\n class=\"btn btn-dot p-r-8 p-l-4\"\n (click)=\"clearFilters()\"\n *ngIf=\"filterText.length\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n </span>\n </div>\n </div>\n</div>\n\n<c8y-asset-selector-node\n *ngIf=\"rootNode && !selectedDevice\"\n [node]=\"rootNode\"\n [rootNode]=\"rootNode\"\n [preselected]=\"selected\"\n [multi]=\"config.multi\"\n [view]=\"config.view\"\n [index]=\"index\"\n [selectedItems]=\"selectedItems\"\n [active]=\"active\"\n [handleNextMillerViewColumn]=\"handleNextMillerViewColumn.bind(this)\"\n (isLoadingState)=\"onLoading($event)\"\n (onSelect)=\"onSelect($event)\"\n (onDeselect)=\"onDeselect($event)\"\n class=\"d-block bg-inherit p-relative\"\n [ngClass]=\"{ 'collapse show': !rootNode.root && !rootNode.hidden && config.view !== 'miller' }\"\n style=\"z-index: 9\"\n></c8y-asset-selector-node>\n", dependencies: [{ kind: "directive", type: i3.IconDirective, selector: "[c8yIcon]", inputs: ["c8yIcon"] }, { kind: "directive", type: i5$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5$1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.SearchInputComponent, selector: "c8y-search-input", inputs: ["mode", "enableCustomTemplatePlaceholder", "customPlaceholder", "externalTerm", "customDataQuery", "container", "groupsOnly"], outputs: ["filter", "search", "reset", "onClick"] }, { kind: "directive", type: i6.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i6.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i6.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: AssetSelectorNodeComponent, selector: "c8y-asset-selector-node", inputs: ["node", "rootNode", "preselected", "showPath", "multi", "view", "index", "active", "selectedItems", "handleNextMillerViewColumn"], outputs: ["isLoadingState", "onSelect", "onDeselect"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] });
|
|
1544
1556
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: AssetSelectorComponent, decorators: [{
|
|
1545
1557
|
type: Component,
|
|
1546
1558
|
args: [{ selector: 'c8y-asset-selector', providers: [
|
|
@@ -1713,7 +1725,7 @@ MillerViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ve
|
|
|
1713
1725
|
useExisting: forwardRef(() => MillerViewComponent),
|
|
1714
1726
|
multi: true
|
|
1715
1727
|
}
|
|
1716
|
-
], viewQueries: [{ propertyName: "millerViewWrapper", first: true, predicate: ["millerViewWrapper"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\n #millerViewWrapper\n class=\"miller-view-wrapper\"\n [ngClass]=\"{ 'single-column': config.singleColumn }\"\n>\n <div *ngFor=\"let column of columns; index as i\" class=\"miller-column bg-inherit\">\n <c8y-asset-selector\n [config]=\"config\"\n [index]=\"i\"\n [active]=\"columns[i + 1]\"\n [rootNode]=\"column\"\n [selectedItems]=\"selected || []\"\n [selectedDevice]=\"selectedDevice\"\n (onSelected)=\"onSelectionChange($event)\"\n (onClearSelected)=\"onClearSelected.emit()\"\n (onRowSelected)=\"addNewColumn($event)\"\n (onLoad)=\"onLoad($event)\"\n [container]=\"container\"\n class=\"bg-inherit\"\n >\n </c8y-asset-selector>\n\n <div class=\"p-relative p-b-64\" *ngIf=\"isLoading && columnIndex === i && !selectedDevice\">\n <c8y-loading></c8y-loading>\n </div>\n\n <div *ngIf=\"!column.children.length && !isLoading\" class=\"p-l-8 p-r-8\">\n <c8y-ui-empty-state\n *ngIf=\"!filterText; else noSearchResults\"\n [icon]=\"'folder-open'\"\n [title]=\"'No results to display.' | translate\"\n [subtitle]=\"'The selected asset has no children.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <ng-template #noSearchResults>\n <c8y-ui-empty-state\n [icon]=\"'folder-open'\"\n [title]=\"'No results to display for the current filter.' | translate\"\n [subtitle]=\"'There are no assets matching the filter.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </ng-template>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.LoadingComponent, selector: "c8y-loading" }, { kind: "component", type: AssetSelectorComponent, selector: "c8y-asset-selector", inputs: ["config", "active", "index", "asset", "selectedDevice", "selected", "rootNode", "selectedItems", "container"], outputs: ["onSelected", "onClearSelected", "onRowSelected", "onLoad"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] });
|
|
1728
|
+
], viewQueries: [{ propertyName: "millerViewWrapper", first: true, predicate: ["millerViewWrapper"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\n #millerViewWrapper\n class=\"miller-view-wrapper\"\n [ngClass]=\"{ 'single-column': config.singleColumn }\"\n>\n <div *ngFor=\"let column of columns; index as i\" class=\"miller-column bg-inherit\">\n <c8y-asset-selector\n [config]=\"config\"\n [index]=\"i\"\n [active]=\"columns[i + 1]\"\n [rootNode]=\"column\"\n [selectedItems]=\"selected || []\"\n [selectedDevice]=\"selectedDevice\"\n (onSelected)=\"onSelectionChange($event)\"\n (onClearSelected)=\"onClearSelected.emit()\"\n (onRowSelected)=\"addNewColumn($event)\"\n (onLoad)=\"onLoad($event)\"\n [container]=\"container\"\n class=\"bg-inherit\"\n >\n </c8y-asset-selector>\n\n <div class=\"p-relative p-b-64\" *ngIf=\"isLoading && columnIndex === i && !selectedDevice\">\n <c8y-loading></c8y-loading>\n </div>\n\n <div *ngIf=\"!column.children.length && !isLoading\" class=\"p-l-8 p-r-8\">\n <c8y-ui-empty-state\n *ngIf=\"!filterText; else noSearchResults\"\n [icon]=\"'folder-open'\"\n [title]=\"'No results to display.' | translate\"\n [subtitle]=\"'The selected asset has no children.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n <ng-template #noSearchResults>\n <c8y-ui-empty-state\n [icon]=\"'folder-open'\"\n [title]=\"'No results to display for the current filter.' | translate\"\n [subtitle]=\"'There are no assets matching the filter.' | translate\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n </ng-template>\n </div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: i3.EmptyStateComponent, selector: "c8y-ui-empty-state", inputs: ["icon", "title", "subtitle", "horizontal"] }, { kind: "directive", type: i5$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.LoadingComponent, selector: "c8y-loading" }, { kind: "component", type: AssetSelectorComponent, selector: "c8y-asset-selector", inputs: ["config", "active", "index", "asset", "selectedDevice", "selected", "rootNode", "selectedItems", "container"], outputs: ["onSelected", "onClearSelected", "onRowSelected", "onLoad"] }, { kind: "pipe", type: i3.C8yTranslatePipe, name: "translate" }] });
|
|
1717
1729
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImport: i0, type: MillerViewComponent, decorators: [{
|
|
1718
1730
|
type: Component,
|
|
1719
1731
|
args: [{ selector: 'c8y-asset-selector-miller', providers: [
|