@c8y/ngx-components 1022.26.1 → 1022.28.2
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/core/search/inventory-search.service.d.ts +4 -3
- package/core/search/inventory-search.service.d.ts.map +1 -1
- package/core/search/search-input.component.d.ts +5 -2
- package/core/search/search-input.component.d.ts.map +1 -1
- package/core/search/search.model.d.ts +4 -0
- package/core/search/search.model.d.ts.map +1 -1
- package/core/search/search.service.d.ts +2 -1
- package/core/search/search.service.d.ts.map +1 -1
- package/core/select/typeahead.component.d.ts +2 -1
- package/core/select/typeahead.component.d.ts.map +1 -1
- package/device-grid/device-grid.component.d.ts.map +1 -1
- package/device-grid/device-grid.service.d.ts +4 -3
- package/device-grid/device-grid.service.d.ts.map +1 -1
- package/echart/charts.component.d.ts.map +1 -1
- package/ecosystem/application-plugins/application-plugins.component.d.ts +3 -0
- package/ecosystem/application-plugins/application-plugins.component.d.ts.map +1 -1
- package/fesm2022/c8y-ngx-components-alarms.mjs +2 -2
- package/fesm2022/c8y-ngx-components-alarms.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs +2 -2
- package/fesm2022/c8y-ngx-components-assets-navigator.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-grid.mjs +21 -13
- package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-profile.mjs +1 -1
- package/fesm2022/c8y-ngx-components-device-profile.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-echart.mjs +22 -70
- package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs +41 -21
- package/fesm2022/c8y-ngx-components-ecosystem-application-plugins.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs +1 -1
- package/fesm2022/c8y-ngx-components-ecosystem.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-map.mjs +84 -26
- package/fesm2022/c8y-ngx-components-map.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-device-profile.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs +1 -1
- package/fesm2022/c8y-ngx-components-operations-stepper-bulk-type-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs +2 -2
- package/fesm2022/c8y-ngx-components-protocol-lpwan.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs +1 -1
- package/fesm2022/c8y-ngx-components-repository-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs +2 -2
- package/fesm2022/c8y-ngx-components-repository-firmware.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-shared.mjs +2 -2
- package/fesm2022/c8y-ngx-components-repository-shared.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-repository-software.mjs +1 -1
- package/fesm2022/c8y-ngx-components-repository-software.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-search.mjs +328 -210
- package/fesm2022/c8y-ngx-components-search.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sub-assets.mjs +36 -16
- package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +7390 -7345
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/locales/de.po +27 -0
- package/locales/es.po +27 -0
- package/locales/fr.po +27 -0
- package/locales/ja_JP.po +27 -0
- package/locales/ko.po +27 -0
- package/locales/locales.pot +25 -3
- package/locales/nl.po +27 -0
- package/locales/pl.po +27 -0
- package/locales/pt_BR.po +27 -0
- package/locales/zh_CN.po +27 -0
- package/locales/zh_TW.po +27 -0
- package/map/map.service.d.ts +13 -10
- package/map/map.service.d.ts.map +1 -1
- package/package.json +1 -1
- package/search/columns/asset-type-search-grid-column.d.ts.map +1 -1
- package/search/search-action.component.d.ts +12 -8
- package/search/search-action.component.d.ts.map +1 -1
- package/search/search-custom-filters.component.d.ts +18 -4
- package/search/search-custom-filters.component.d.ts.map +1 -1
- package/search/search-grid.component.d.ts +14 -14
- package/search/search-grid.component.d.ts.map +1 -1
- package/search/search-results.component.d.ts +3 -1
- package/search/search-results.component.d.ts.map +1 -1
- package/search/search.module.d.ts.map +1 -1
- package/search/search.service.d.ts +14 -6
- package/search/search.service.d.ts.map +1 -1
- package/sub-assets/sub-assets.service.d.ts +9 -5
- package/sub-assets/sub-assets.service.d.ts.map +1 -1
- package/echart/services/custom-measurements.service.d.ts +0 -12
- package/echart/services/custom-measurements.service.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"c8y-ngx-components-assets-navigator.mjs","sources":["../../assets-navigator/action.enum.ts","../../assets-navigator/load-more-node.ts","../../assets-navigator/asset-node.ts","../../assets-navigator/dynamic-group-node.ts","../../assets-navigator/asset-node-config.model.ts","../../assets-navigator/group.service.ts","../../assets-navigator/asset-node.service.ts","../../assets-navigator/asset-node.factory.ts","../../assets-navigator/asset-selector/group-node.ts","../../assets-navigator/asset-selector/group-node.service.ts","../../assets-navigator/asset-selector/asset-selector.service.ts","../../assets-navigator/asset-selector/asset-selector-node.component.ts","../../assets-navigator/asset-selector/asset-selector-node.component.html","../../assets-navigator/asset-selector/asset-selector-base.ts","../../assets-navigator/asset-selector/asset-selector.model.ts","../../assets-navigator/asset-selector/unassigned-devices-node.ts","../../assets-navigator/asset-selector/asset-selector.component.ts","../../assets-navigator/asset-selector/asset-selector.component.html","../../assets-navigator/asset-selector/miller-view.component.ts","../../assets-navigator/asset-selector/miller-view.component.html","../../assets-navigator/asset-selector/asset-selector.module.ts","../../assets-navigator/assets-navigator.module.ts","../../assets-navigator/c8y-ngx-components-assets-navigator.ts"],"sourcesContent":["export enum AssetsNavigatorAction {\n FETCH,\n NEXT,\n REFRESH,\n LOADING_DONE\n}\n","import { NavigatorNode, gettext } from '@c8y/ngx-components';\n\nexport class LoadMoreNode extends NavigatorNode {\n static NAME = 'LoadMoreNode';\n label = gettext('Load more');\n icon = 'plus';\n droppable = true;\n\n constructor() {\n super();\n this.priority = -Infinity;\n }\n\n toString() {\n return LoadMoreNode.NAME;\n }\n\n isGroup() {\n return false;\n }\n}\n","import { IIdentified, Paging } from '@c8y/client';\nimport {\n ClickOptions,\n DeviceStatusComponent,\n gettext,\n GroupFragment,\n NavigatorNode,\n NavigatorNodeData\n} from '@c8y/ngx-components';\nimport { debounce } from 'lodash-es';\nimport { BehaviorSubject, Subject, Subscription } from 'rxjs';\nimport { AssetsNavigatorAction } from './action.enum';\nimport { AssetNodeMo, AssetNodeService } from './asset-node.service';\nimport { LoadMoreNode } from './load-more-node';\n\nexport class AssetNode extends NavigatorNode {\n static NAME = 'AssetNode';\n root: boolean;\n mo: any;\n hideDevices = false;\n filterQuery$ = new BehaviorSubject<string>('');\n showChildDevices = false;\n\n /**\n * Asset node children (subentries).\n */\n children: AssetNode[] = [];\n\n get hasChildren() {\n return this.root || this.service.isGroup(this.mo);\n }\n\n get isDevice() {\n return !!this.mo.c8y_IsDevice;\n }\n\n get isDeviceOrProbablyChildDevice() {\n return this.isDevice || this.isNeitherDeviceOrGroup;\n }\n\n get isNeitherDeviceOrGroup() {\n return (\n !this.service.isGroup(this.mo) &&\n !this.service.isDynamicGroup(this.mo) &&\n !this.isDevice &&\n !this.root\n );\n }\n\n events: Subject<AssetsNavigatorAction>;\n nodesFetched: Subject<void> = new Subject();\n protected paging: Paging<AssetNodeMo>;\n protected loadMoreNode: LoadMoreNode;\n private onUpdateSubscription: Subscription;\n\n constructor(\n protected service: AssetNodeService,\n protected config: NavigatorNodeData = {}\n ) {\n super(config);\n\n this.root = this.root || false;\n this.hideDevices = config.hideDevices ?? this.hideDevices;\n this.mo = this.mo || {};\n this.path = this.getPath();\n this.draggable = !this.service?.moduleConfig?.disableDragAndDrop && !this.root;\n this.droppable =\n !this.service?.moduleConfig?.disableDragAndDrop && !this.isDeviceOrProbablyChildDevice;\n this.routerLinkExact = this.root;\n this.updateIcon(false);\n this.onUpdateSubscription = this.service\n .onUpdate(this)\n .subscribe(({ data, method }) => this.refresh(data, method));\n this.setLabel();\n this.iconComponent = this.isDeviceOrProbablyChildDevice ? DeviceStatusComponent : undefined;\n }\n\n getPath() {\n if (this.config.path) {\n return this.config.path;\n }\n\n return this.root\n ? 'group'\n : this.isDeviceOrProbablyChildDevice\n ? `device/${this.mo.id}`\n : `group/${this.mo.id}`;\n }\n\n refresh(mo: any = {}, method = 'GET') {\n if (mo?.id === this.mo.id) {\n this.mo = mo;\n this.setLabel();\n } else if (method === 'DELETE') {\n this.parents.forEach((node: AssetNode) => node.refresh());\n return;\n }\n if (this.events) {\n this.events.next(AssetsNavigatorAction.REFRESH);\n }\n }\n\n setLabel() {\n if (this.config.label || this.root) {\n this.label = this.config.label || gettext('Groups');\n this.translateLabel = true;\n } else {\n this.label = this.service.label(this.mo);\n this.translateLabel = false;\n }\n }\n\n click(options: ClickOptions = {}) {\n if (this.isDeviceOrProbablyChildDevice && !this.showChildDevices) {\n this.service.preferBreadcrumb(this.parents);\n return;\n }\n this.hookEvents();\n this.updateIcon(options.open);\n if (options.open) {\n this.events.next(AssetsNavigatorAction.FETCH);\n }\n }\n\n sort() {\n this.children.sort((a, b) => {\n if (a.priority > b.priority) {\n return -1;\n } else if (a.priority < b.priority) {\n return 1;\n } else {\n return 0;\n }\n });\n }\n\n addManagedObject(mo) {\n const { childAdditions } = this.mo;\n if (!this.isChildAddition(childAdditions, mo)) {\n this.add(this.service.createChildNode(mo, { hideDevices: this.hideDevices }));\n }\n }\n\n isChildAddition(childAdditions, mo) {\n return (\n childAdditions && childAdditions.references.some(({ managedObject: { id } }) => id === mo.id)\n );\n }\n\n destroy() {\n this.onUpdateSubscription.unsubscribe();\n }\n\n get canDrop() {\n const nodeToMove = this.service.draggedData;\n if (nodeToMove) {\n const shouldGetChildOfItsOwn = !!nodeToMove.find(child => child === this);\n const isAlreadyChild = (this.children as AssetNode[]).some(\n child => child.mo && child.mo.id === nodeToMove.mo.id\n );\n const preventMove = this === nodeToMove || shouldGetChildOfItsOwn || isAlreadyChild;\n return this.droppable && !preventMove && this.service.canDropNode(this.root);\n }\n return this.droppable;\n }\n\n dragStart($event) {\n super.dragStart($event);\n this.service.draggedData = this;\n this.service.rootNode.droppable = !this.isDeviceOrProbablyChildDevice;\n }\n\n dragEnd($event) {\n super.dragEnd($event);\n }\n\n async drop($event) {\n const nodeToMove = this.service.draggedData;\n\n // TODO remove when asset type node can be used on the root level.\n if (this.root && this.isAsset(nodeToMove)) {\n this.service.alert.info(gettext('Asset type node cannot become root node.'));\n this.draggedHover = false;\n this.service.draggedData = undefined;\n return;\n }\n\n super.drop($event);\n if (this.canDrop) {\n await this.moveNode(nodeToMove);\n } else {\n this.draggedHover = false;\n this.service.draggedData = undefined;\n }\n }\n\n hookEvents() {\n if (!this.events) {\n this.events = new Subject();\n this.events.subscribe(evt => {\n if (!this.loading) {\n this.handleEvent(evt);\n }\n });\n }\n }\n\n toString() {\n return AssetNode.NAME;\n }\n\n /**\n * Checks if the current node has child devices.\n */\n hasChildDevices() {\n return this.mo && this.mo.c8y_IsDevice && this.mo.childDevices.references.length > 0;\n }\n\n protected fetch() {\n return this.root\n ? this.service.getRootNodes()\n : this.service.getGroupItems(\n this.mo.id,\n this.hideDevices\n ? {\n query: `$filter=(has(${GroupFragment.groupFragmentType}))$orderby=name`\n }\n : {}\n );\n }\n\n protected async updateIcon(open) {\n this.icon = await this.service.icon(\n // if it's root we are going to pass a fake mo to get the same icon as groups\n this.root ? { c8y_IsDeviceGroup: {} } : this.mo,\n open\n );\n }\n\n protected countChildren() {\n return this.children.length;\n }\n\n protected async handleEvent(evt: AssetsNavigatorAction) {\n if (!this.countChildren() && evt === AssetsNavigatorAction.FETCH) {\n this.loading = true;\n this.addNodes(await this.fetch());\n this.loading = false;\n } else if (evt === AssetsNavigatorAction.NEXT) {\n this.loadMoreNode.loading = true;\n this.addNodes(await this.paging.next());\n this.loadMoreNode.loading = false;\n } else if (evt === AssetsNavigatorAction.REFRESH) {\n this.loading = false;\n this.paging = undefined;\n this.loadMoreNode = undefined;\n this.empty();\n this.events.next(AssetsNavigatorAction.FETCH);\n }\n }\n\n protected addNodes(res) {\n if (res.paging) {\n const { currentPage, nextPage, pageSize } = (this.paging = res.paging);\n if (currentPage === 1) {\n this.empty();\n }\n const itemsCount = res.data.length;\n const moreItemsAvailable = !!nextPage && itemsCount === pageSize;\n this.toggleLoadMore(moreItemsAvailable);\n }\n (res.data || res).map(mo => {\n return this.addManagedObject(mo);\n });\n this.events.next(AssetsNavigatorAction.LOADING_DONE);\n this.nodesFetched.next();\n }\n\n protected toggleLoadMore(show: boolean) {\n if (!this.loadMoreNode && show) {\n this.loadMoreNode = new LoadMoreNode();\n this.add(this.loadMoreNode);\n this.loadMoreNode.click = debounce(() => this.events.next(AssetsNavigatorAction.NEXT), 300, {\n leading: true,\n trailing: false\n });\n }\n\n if (this.loadMoreNode) {\n this.loadMoreNode.hidden = !show;\n }\n }\n\n private async moveNode(nodeToMove: AssetNode) {\n try {\n const isCopy = await this.showDropConfirm(nodeToMove);\n await this.verifyNodeAccess(nodeToMove);\n await this.addMovedNode(nodeToMove);\n if (!isCopy) {\n await this.removeMovedNode(nodeToMove);\n }\n this.expand();\n } catch (ex) {\n if (ex) {\n this.service.alert.addServerFailure(ex);\n }\n } finally {\n this.draggedHover = false;\n this.service.draggedData = undefined;\n }\n }\n\n private async showDropConfirm(nodeToMove: AssetNode) {\n this.confirm.title = gettext('Move');\n this.confirm.message = gettext('Do you want to move the group?');\n const buttons: any = [\n {\n label: gettext('Cancel'),\n action: () => Promise.reject()\n },\n {\n label: gettext('Move'),\n status: 'default',\n action: () => Promise.resolve(false)\n }\n ];\n if (nodeToMove.isDeviceOrProbablyChildDevice) {\n this.confirm.title = gettext('Move or add');\n this.confirm.message = gettext('Do you want to move or add the device?');\n buttons.push({\n label: gettext('Add'),\n status: 'primary',\n action: () => Promise.resolve(true)\n });\n }\n return this.confirm.show(buttons);\n }\n\n private async verifyNodeAccess(nodeToMove: AssetNode) {\n return this.service.inventory.update({ id: nodeToMove.mo.id });\n }\n\n private async addMovedNode(nodeToMove: AssetNode) {\n let mo: IIdentified;\n\n if (this.root && !this.isAsset(nodeToMove)) {\n mo = (\n await this.service.inventory.update({\n id: nodeToMove.mo.id,\n type: GroupFragment.groupType\n })\n ).data;\n\n this.addManagedObject(mo);\n return;\n }\n\n mo = (await this.service.inventory.childAssetsAdd(nodeToMove.mo, this.mo)).data;\n this.addManagedObject(mo);\n }\n\n private isAsset(nodeToMove: AssetNode) {\n // TODO use isAsset check when https://github.com/Cumulocity-IoT/cumulocity-ui/pull/690 is merged.\n // Do not override asset type!\n return nodeToMove.mo?.c8y_IsAsset;\n }\n\n private async removeMovedNode(nodeToMove: AssetNode) {\n for (const parent of nodeToMove.parents as AssetNode[]) {\n if (parent.mo && parent.mo.type === GroupFragment.dynamicGroupType) {\n break; // smart groups don't need to be changed\n }\n\n if (parent.root && !this.isAsset(nodeToMove)) {\n await this.service.inventory.update({\n id: nodeToMove.mo.id,\n type: GroupFragment.subGroupType\n });\n }\n\n if (!parent.root) {\n await this.service.inventory.childAssetsRemove(nodeToMove.mo, parent.mo);\n }\n parent.remove(nodeToMove);\n }\n }\n}\n","import { AssetNode } from './asset-node';\nimport { AssetNodeService } from './asset-node.service';\n\nexport class DynamicGroupNode extends AssetNode {\n constructor(protected service: AssetNodeService, config = {}) {\n super(service, config);\n this.draggable = false;\n this.droppable = false;\n }\n\n get hasChildren() {\n return true;\n }\n\n get query() {\n return this.mo.c8y_DeviceQueryString;\n }\n\n protected fetch(): any {\n return this.service.getDynamicGroupItems(this.query);\n }\n}\n","import { InjectionToken } from '@angular/core';\r\nimport { NavigatorNode } from '@c8y/ngx-components';\r\nimport { AssetNode } from './asset-node';\r\nexport const ASSET_NAVIGATOR_CONFIG = new InjectionToken<AssetNavigatorConfig>('AssetNodeConfig');\r\n\r\n/**\r\n * Configuration object of the AssetsNavigatorModule.\r\n */\r\nexport interface AssetNavigatorConfig {\r\n /**\r\n * Allows to enable smart groups in the module.\r\n * Default value: false.\r\n */\r\n smartGroups?: boolean;\r\n /**\r\n * Expands the root navigator node when the navigator is initialized.\r\n * Default value: false\r\n */\r\n openOnStart?: boolean;\r\n /**\r\n * Allows to change the position of the root group in the navigator.\r\n * The higher the value, the higher the position in navigation.\r\n * Default value: 2000.\r\n */\r\n rootNodePriority?: number;\r\n /**\r\n * Allows to drag and drop items in the asset navigator.\r\n * Default value: true.\r\n */\r\n disableDragAndDrop?: boolean;\r\n /**\r\n * Allows to override properies of the root group or hide it.\r\n * Setup examples:\r\n * - `rootNavigatorNode: true` - shows the default navigator node (default),\r\n * - `rootNavigatorNode: false` - hides the navigator node,\r\n * - `rootNavigatorNode: { label: 'New name', ... }` - overrides default navigator node,\r\n * - `rootNavigatorNode: new NavigatorNode({ label: 'New name', ... })` - overrides default navigator node,\r\n */\r\n rootNavigatorNode?: boolean | Partial<NavigatorNode | AssetNode>;\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { GroupService as MigratedDeviceGroupService } from '@c8y/ngx-components';\n\n@Injectable({\n providedIn: 'root'\n})\n\n/**\n * @deprecated\n * Original service was moved to core/common.\n * This service is deprecated and serves as a proxy to maintain backward compatibility.\n */\nexport class DeviceGroupService {\n constructor(private migratedDeviceGroupService: MigratedDeviceGroupService) {}\n\n icon(mo: IManagedObject, open = false): Promise<string> {\n return this.migratedDeviceGroupService.getIcon(mo, open);\n }\n\n isGroup(mo: IManagedObject): boolean {\n return this.migratedDeviceGroupService.isGroup(mo);\n }\n\n isDynamicGroup(mo: IManagedObject): boolean {\n return this.migratedDeviceGroupService.isDynamicGroup(mo);\n }\n\n isDataBroker(mo: IManagedObject): boolean {\n return this.migratedDeviceGroupService.isDataBroker(mo);\n }\n\n isDataBrokerActive(mo: IManagedObject) {\n return this.migratedDeviceGroupService.isDataBrokerActive(mo);\n }\n\n isAsset(mo: IManagedObject) {\n return this.migratedDeviceGroupService.isAsset(mo);\n }\n\n isAnyGroup(mo: IManagedObject) {\n return this.migratedDeviceGroupService.isAnyGroup(mo);\n }\n\n isDevice(mo: IManagedObject) {\n return this.migratedDeviceGroupService.isDevice(mo);\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, ActivationEnd, Router } from '@angular/router';\nimport { IManagedObject, IResult, InventoryService, QueriesUtil, UserService } from '@c8y/client';\nimport {\n AlertService,\n AppStateService,\n BreadcrumbService,\n GroupFragment,\n ModalService,\n NavigatorNode,\n NavigatorNodeData,\n OptionsService,\n ViewContext,\n Permissions,\n gettext\n} from '@c8y/ngx-components';\nimport { ApiService } from '@c8y/ngx-components/api';\nimport { empty } from 'rxjs';\nimport { filter, first, mergeMap } from 'rxjs/operators';\nimport { AssetsNavigatorAction } from './action.enum';\nimport { AssetNode } from './asset-node';\nimport { ASSET_NAVIGATOR_CONFIG, AssetNavigatorConfig } from './asset-node-config.model';\nimport { DynamicGroupNode } from './dynamic-group-node';\nimport { DeviceGroupService } from './group.service';\nimport { TranslateService } from '@ngx-translate/core';\n\nexport interface AssetNodeMo {\n id: string;\n type: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AssetNodeService {\n rootNode: AssetNode;\n firstUrl = true;\n draggedData: AssetNode;\n queriesUtil: QueriesUtil;\n protected PAGE_SIZE = 20;\n\n inventory = inject(InventoryService);\n apiService = inject(ApiService);\n modal = inject(ModalService);\n alert = inject(AlertService);\n translateService = inject(TranslateService);\n\n protected breadcrumbService = inject(BreadcrumbService);\n protected user = inject(UserService);\n protected appState = inject(AppStateService);\n protected optionsService = inject(OptionsService);\n moduleConfig: AssetNavigatorConfig;\n protected deviceGroupService = inject(DeviceGroupService);\n protected router = inject(Router);\n\n constructor() {\n this.moduleConfig = {\n rootNodePriority: 2000,\n ...(inject(ASSET_NAVIGATOR_CONFIG, { optional: true }) || {})\n };\n this.queriesUtil = new QueriesUtil();\n\n this.router.events\n .pipe(\n filter(\n (event: ActivationEnd) =>\n event instanceof ActivationEnd && event.snapshot.data?.contextData\n ),\n first()\n )\n .subscribe(({ snapshot }) => {\n this.expandNodesOnStart(snapshot);\n });\n }\n\n /**\n * Expands the navigator nodes on first navigation.\n * @param snapshot The current navigation snapshot.\n */\n async expandNodesOnStart(snapshot: ActivatedRouteSnapshot): Promise<void> {\n if (!this.rootNode) {\n return;\n }\n if (\n snapshot.data?.context === ViewContext.Group ||\n snapshot.data?.context === ViewContext.Device\n ) {\n const { data } = await this.inventory.detail(snapshot.data.contextData, {\n withParents: true\n });\n\n const allManagedObjectParentIds = [\n ...data.assetParents.references.map(({ managedObject }) => {\n return managedObject.id;\n }),\n data.id\n ];\n this.expandAll(this.rootNode, allManagedObjectParentIds);\n return;\n }\n\n if (this.moduleConfig.openOnStart) {\n this.expandAll(this.rootNode, []);\n }\n }\n\n /**\n * Expands all the given ids recursively. Stops if it does not find any.\n * @param node The node where the expanding should be started\n * @param ids The ids that should be expanded.\n */\n expandAll(node: AssetNode, ids: string[]) {\n node.open = true;\n node.click({ open: true });\n if (node.events) {\n node.events\n .pipe(\n filter(action => action === AssetsNavigatorAction.LOADING_DONE),\n first()\n )\n .subscribe(() => {\n const nodeToExpand = node.children.find(\n childNode => childNode.mo?.id && ids.includes(childNode.mo.id)\n );\n if (nodeToExpand) {\n this.expandAll(\n nodeToExpand,\n ids.filter(id => id !== nodeToExpand.mo.id)\n );\n }\n });\n }\n }\n\n label(mo: IManagedObject): string {\n return (\n mo.name ||\n (this.isDevice(mo) &&\n this.translateService.instant(gettext('Device {{id}}'), { id: mo.id })) ||\n '--'\n );\n }\n\n icon(mo: IManagedObject, open?: boolean): Promise<string> {\n return this.deviceGroupService.icon(mo, open);\n }\n\n isGroup(mo: IManagedObject) {\n return this.deviceGroupService.isGroup(mo);\n }\n\n isDynamicGroup(mo: IManagedObject) {\n return this.deviceGroupService.isDynamicGroup(mo);\n }\n\n isDataBroker(mo: IManagedObject) {\n return this.deviceGroupService.isDataBroker(mo);\n }\n\n isDataBrokerActive(mo: IManagedObject) {\n return this.deviceGroupService.isDataBrokerActive(mo);\n }\n\n isAsset(mo: IManagedObject) {\n return this.deviceGroupService.isAsset(mo);\n }\n\n isAnyGroup(mo: IManagedObject) {\n return this.deviceGroupService.isAnyGroup(mo);\n }\n\n isDevice(mo: IManagedObject) {\n return this.deviceGroupService.isDevice(mo);\n }\n\n createRootNode(config: NavigatorNodeData = {}) {\n this.rootNode = this.createAssetNode({\n root: true,\n ...config,\n priority: this.moduleConfig.rootNodePriority,\n featureId: 'groups'\n });\n return this.rootNode;\n }\n\n createDynamicGroupNode(config) {\n return new DynamicGroupNode(this, config);\n }\n\n createAssetNode(config: Partial<AssetNode>) {\n return new AssetNode(this, config);\n }\n\n createChildNode(managedObject, config: Partial<AssetNode>) {\n const { type } = managedObject;\n config.mo = managedObject;\n if (type === GroupFragment.dynamicGroupType) {\n return this.createDynamicGroupNode(config);\n }\n return this.createAssetNode(config);\n }\n\n getRootNodes(customFilter?: any): Promise<any> {\n const defaultFilter = {\n pageSize: this.PAGE_SIZE,\n withChildren: false,\n onlyRoots: !this.optionsService.disableOnlyRootsQuery,\n query: this.queriesUtil.buildQuery(this.navRootQueryFilter())\n };\n const groupFilter = { ...defaultFilter, ...customFilter };\n\n // due to BE performance limitations we do not allow filtering and sorting for a user without inventory roles\n if (\n this.appState?.currentUser?.value &&\n !this.user.hasAnyRole(this.appState.currentUser.value, [\n Permissions.ROLE_INVENTORY_READ,\n Permissions.ROLE_MANAGED_OBJECT_READ\n ])\n ) {\n delete groupFilter.query;\n Object.assign(groupFilter, {\n fragmentType: GroupFragment.groupFragmentType,\n onlyRoots: true\n });\n }\n return this.inventory.list(this.createFilter(groupFilter));\n }\n\n getAllInventories(customFilter?: any): Promise<any> {\n const defaultFilter = {\n pageSize: this.PAGE_SIZE,\n withChildren: false\n };\n const groupFilter = { ...defaultFilter, ...customFilter };\n return this.inventory.list(this.createFilter(groupFilter));\n }\n\n getGroupItems(moId: string, extraFilter: object = {}, withChildren = false, filterQuery = '') {\n const queryFilter = {\n withChildren,\n pageSize: this.PAGE_SIZE,\n query: this.groupQueryFilter(moId, filterQuery)\n };\n return this.inventory.childAssetsList(moId, { ...queryFilter, ...extraFilter });\n }\n\n getUnassignedDevices(withChildren = false, filterQuery = '') {\n const queryFilter: any = {\n fragmentType: 'c8y_IsDevice',\n onlyRoots: true,\n withChildren,\n pageSize: this.PAGE_SIZE,\n q: this.getUnassignedDevicesQueryStr(filterQuery)\n };\n return this.inventory.list(this.createFilter(queryFilter));\n }\n\n getDynamicGroupItems(groupQuery: string, filterObj: any = {}) {\n const { query, ...queryParams } = filterObj;\n const orderByQuery = query;\n const queryFilter = {\n q: this.buildCombinedQuery(groupQuery, orderByQuery),\n ...queryParams\n };\n return this.inventory.list(this.createFilter(queryFilter));\n }\n\n getDeviceChildren(\n moId: string,\n extraFilter: object = {},\n filterQuery = '',\n withChildren = false\n ) {\n const queryFilter = {\n withChildren,\n pageSize: this.PAGE_SIZE,\n query: this.groupQueryFilter(moId, filterQuery)\n };\n return this.inventory.childDevicesList(moId, { ...queryFilter, ...extraFilter });\n }\n\n getUnassignedDevicesQueryStr(filterQuery): string {\n const hasGroupId = filterQuery.includes('bygroupid');\n // Fetch all unassigned devices.\n const defaultQueryStr = '$orderby=name';\n\n // filterQuery is a custom query to fetch unassigned devices filtered by name.\n return hasGroupId || !filterQuery ? defaultQueryStr : filterQuery;\n }\n\n groupQueryFilter(moId: string, filterQuery?: string) {\n if (!filterQuery) {\n return `$filter=(bygroupid(${moId}))$orderby=name`;\n }\n return filterQuery;\n }\n\n navRootQueryFilter() {\n const navRootFilter = this.rootQueryFilter();\n navRootFilter.__orderby = [{ name: 1 }];\n return navRootFilter;\n }\n\n rootQueryFilter() {\n const { moduleConfig } = this;\n const rootFilter = this.optionsService.disableOnlyRootsQuery\n ? {\n __filter: {\n type: GroupFragment.groupType\n },\n __orderby: []\n }\n : {\n __filter: {\n __has: GroupFragment.groupFragmentType\n },\n __orderby: []\n };\n if (moduleConfig.smartGroups) {\n const queryFilter = {\n __filter: {\n __and: [\n {\n type: GroupFragment.dynamicGroupType\n },\n {\n __has: GroupFragment.dynamicGroupFragment\n },\n { __not: { __has: `${GroupFragment.dynamicGroupFragment}.invisible` } }\n ]\n }\n };\n this.queriesUtil.addOrFilter(rootFilter, queryFilter);\n }\n return rootFilter;\n }\n\n onUpdate({ mo, root }) {\n if (mo.id) {\n return this.apiService\n .hookResponse(\n ({ url, method }) =>\n ['PUT', 'DELETE', 'POST'].includes(method) &&\n RegExp(`inventory/managedObjects/${mo.id}`).test(url)\n )\n .pipe(\n filter(() => !this.draggedData),\n this.apiService.excludePermissionCall(),\n mergeMap(this.apiService.resolveData<IManagedObject>),\n filter(response => !response?.data?.c8y_Dashboard)\n );\n } else if (root) {\n return this.apiService\n .hookResponse(\n ({ url, method }) => RegExp('inventory/managedObjects/?$').test(url) && method === 'POST'\n )\n .pipe(\n mergeMap(this.apiService.resolveData<IManagedObject>),\n filter(response => this.isNewManagedObjectRoot(response))\n );\n } else {\n return empty();\n }\n }\n\n isNewManagedObjectRoot(response: Partial<IResult<IManagedObject>> = {}) {\n const { data } = response;\n let isRootAsset = false;\n\n if (typeof data === 'object') {\n isRootAsset = !!data[GroupFragment.groupFragmentType];\n if (!isRootAsset && this.moduleConfig.smartGroups) {\n isRootAsset = !!data[GroupFragment.dynamicGroupFragment];\n }\n }\n return isRootAsset;\n }\n\n /**\n * Check if it is possible to drop a node after dragging.\n * @param dropOnRoot Is the drop performed on the root node\n */\n canDropNode(dropOnRoot: boolean): boolean {\n return (\n !dropOnRoot ||\n this.user.hasAnyRole(this.appState.currentUser.value, [\n Permissions.ROLE_INVENTORY_ADMIN,\n Permissions.ROLE_MANAGED_OBJECT_ADMIN\n ])\n );\n }\n\n /**\n * There could be multiple breadcrumbs for devices,\n * so we set a preferred one on click on a device.\n * @param parents The parent nodes of the device to select the prefered one.\n */\n preferBreadcrumb(parents: NavigatorNode[]) {\n if (parents.length === 1) {\n this.breadcrumbService.selectPreferredByPath(parents[0].path);\n }\n }\n\n protected createFilter(extraParams: any = {}) {\n const params = {\n currentPage: 1,\n withTotalPages: true,\n pageSize: 10\n };\n return { ...params, ...extraParams };\n }\n\n private buildCombinedQuery(queryA, queryB) {\n let combinedQuery;\n if (queryA && queryB) {\n const filterQuery = this.queriesUtil.buildQuery([\n {\n __useFilterQueryString: queryA\n },\n {\n __useFilterQueryString: queryB\n }\n ]);\n const orberByQuery = this.queriesUtil.extractAndMergeOrderBys([queryA, queryB]);\n combinedQuery = `${filterQuery} ${orberByQuery}`;\n } else {\n combinedQuery = queryA || queryB || '';\n }\n return combinedQuery;\n }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { get as getProp } from 'lodash-es';\nimport { AssetNode } from './asset-node';\nimport { AssetNavigatorConfig, ASSET_NAVIGATOR_CONFIG } from './asset-node-config.model';\nimport { AssetNodeService } from './asset-node.service';\n\n@Injectable()\nexport class AssetNodeFactory {\n constructor(\n private service: AssetNodeService,\n @Optional() @Inject(ASSET_NAVIGATOR_CONFIG) public moduleConfig: AssetNavigatorConfig\n ) {}\n\n get(): AssetNode {\n const rootNavigatorNode = getProp(this.moduleConfig, 'rootNavigatorNode') ?? true;\n let { rootNode } = this.service;\n\n if (rootNavigatorNode === false) {\n return;\n }\n\n if (!rootNode) {\n rootNode = this.service.createRootNode(rootNavigatorNode === true ? {} : rootNavigatorNode);\n }\n return rootNode;\n }\n}\n","import { GroupFragment } from '@c8y/ngx-components';\nimport { GroupNodeService } from './group-node.service';\nimport { AssetNode } from '../asset-node';\nimport { GroupNodeConfig } from './asset-selector.model';\n\nexport class GroupNode extends AssetNode {\n static NAME = 'GroupNode';\n\n /**\n * Set this true, if only groups should be shown.\n */\n groupsOnly = false;\n\n /**\n * Set this true, if it groups are also selectable.\n */\n groupsSelectable = false;\n /**\n * Devices with children can be selected to show their child devices.\n */\n showChildDevices = false;\n\n /**\n * Group node children (subentries).\n */\n children: GroupNode[] = [];\n\n /**\n * Creates a new node which shows only groups.\n *\n * @param service The service to use.\n * @param config The default configuration of the node.\n * @param groupsOnly Set this true, if only groups should be shown.\n * @param selectable Set this true, if it is selectable.\n */\n\n constructor(protected service: GroupNodeService, config: GroupNodeConfig = {}) {\n super(service, config);\n this.groupsOnly = config.groupsOnly || false;\n this.groupsSelectable = config.groupsSelectable || false;\n this.showChildDevices = config.showChildDevices || false;\n }\n\n /**\n * Adds the MO as a child node.\n * @param mo ManagedObject\n */\n addManagedObject(mo) {\n const { childAdditions } = this.mo;\n if (!this.isChildAddition(childAdditions, mo)) {\n this.add(\n this.service.createChildNode({\n mo,\n groupsOnly: this.groupsOnly,\n groupsSelectable: this.groupsSelectable,\n showChildDevices: this.showChildDevices\n })\n );\n }\n }\n\n /**\n * Counts the number of children for the current node (with the exception of the UnassignedDevicesNode).\n */\n countChildren(): number {\n return this.children.filter(value => value.toString() !== 'UnassignedDevicesNode').length;\n }\n\n /**\n * Removes all child nodes except the UnassignedDevicesNode.\n */\n empty() {\n this.children = this.children.filter(value => value.toString() === 'UnassignedDevicesNode');\n }\n\n fetch() {\n const isRoot = this.root;\n const isDevice = this.mo.c8y_IsDevice;\n return isRoot\n ? this.service.getRootNodes()\n : isDevice\n ? this.service.getDeviceChildren(\n this.mo.id,\n {},\n this.filterQuery$.value,\n this.showChildDevices\n )\n : this.service.getGroupItems(\n this.mo.id,\n this.groupsOnly\n ? {\n query: `$filter=(has(${GroupFragment.groupFragmentType}))`\n }\n : {},\n this.showChildDevices,\n this.filterQuery$.value\n );\n }\n\n toString() {\n return GroupNode.NAME;\n }\n\n isGroup() {\n return this.mo && this.service.isGroup(this.mo);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AssetNodeService } from '../asset-node.service';\nimport { GroupNodeConfig } from './asset-selector.model';\nimport { GroupNode } from './group-node';\n\n@Injectable({ providedIn: 'root' })\nexport class GroupNodeService extends AssetNodeService {\n protected PAGE_SIZE = 5;\n\n createGroupNode(config: GroupNodeConfig) {\n return new GroupNode(this, config);\n }\n\n createChildNode(config: GroupNodeConfig): GroupNode {\n return this.createGroupNode(config);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { IIdentified, IManagedObject } from '@c8y/client';\nimport { AssetNodeService } from '../asset-node.service';\nimport { isArray, isNumber, isObject, isString } from 'lodash';\nimport { GroupNode } from './group-node';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AssetSelectorService extends AssetNodeService {\n /**\n * Function which will check if the node is selectable.\n */\n private isNodeSelectableFn: boolean | ((node: GroupNode) => boolean) = true;\n\n /**\n * Sets the function that will decide if the node is selectable.\n * @param fn A boolean or a function that will decide if the node is selectable.\n */\n setIsNodeSelectable(fn: boolean | ((node: GroupNode) => boolean)): void {\n this.isNodeSelectableFn = fn;\n }\n\n /**\n * Checks if the node is selectable.\n * @param node The node to check.\n */\n isNodeSelectable(node: GroupNode): boolean {\n if (typeof this.isNodeSelectableFn === 'boolean') {\n return this.isNodeSelectableFn;\n } else if (typeof this.isNodeSelectableFn === 'function') {\n return this.isNodeSelectableFn(node);\n }\n return true;\n }\n /**\n * Simplifies the object model based on the selected mode.\n * @param obj The selected asset.\n * @param mode The mode which will decide what type of model will be returned.\n */\n normalizeValue(\n obj: Partial<IManagedObject>,\n modelMode: 'simple' | 'full'\n ): Partial<IManagedObject> | IIdentified {\n return this.simplifyModel(this.normalizeModelValue(obj), modelMode);\n }\n\n simplifyModel(\n model: Partial<IManagedObject> | IIdentified[],\n mode: 'simple' | 'full'\n ): Partial<IManagedObject> | IIdentified {\n const mapModel = model => {\n const { id, name, c8y_DeviceQueryString } = model as IIdentified;\n return { id, name, ...(c8y_DeviceQueryString ? { c8y_DeviceQueryString } : {}) };\n };\n\n if (mode === 'full') {\n return model;\n }\n if (!isArray(model)) {\n return mapModel(model);\n }\n return model.map(mapModel);\n }\n\n /**\n * Returns the index of the currently selected item.\n * @param selected All selected items\n * @param selectedMo The new selected item-\n * @returns An index, or -1 if not found.\n */\n getIndexOfSelected(\n selected: Array<Partial<IIdentified>> | Partial<IIdentified>,\n selectedMo: IIdentified\n ) {\n return selected.findIndex(mo => mo.id === selectedMo.id);\n }\n\n private normalizeModelValue(value: any): IIdentified[] {\n if (isNumber(value) || isString(value)) {\n return [{ id: value }];\n }\n if (isArray(value)) {\n return value;\n }\n if (isObject(value)) {\n return [value];\n }\n return [];\n }\n}\n","import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { IIdentified, IManagedObject } from '@c8y/client';\nimport {\n gettext,\n IconDirective,\n C8yTranslateDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { AssetsNavigatorAction } from '../action.enum';\nimport { AssetSelectorService } from './asset-selector.service';\nimport { GroupNode } from './group-node';\nimport { NgIf, NgStyle, NgClass, NgFor } from '@angular/common';\nimport { CollapseDirective } from 'ngx-bootstrap/collapse';\n\n@Component({\n selector: 'c8y-asset-selector-node',\n templateUrl: './asset-selector-node.component.html',\n imports: [\n NgIf,\n NgStyle,\n NgClass,\n IconDirective,\n C8yTranslateDirective,\n CollapseDirective,\n NgFor,\n C8yTranslatePipe\n ]\n})\nexport class AssetSelectorNodeComponent implements OnInit {\n /**\n * The current node.\n */\n @Input() node: GroupNode;\n /**\n * Root node. Node found at the top of the hierarchy.\n */\n @Input() rootNode: GroupNode;\n /**\n * All preselected items.\n */\n @Input() preselected: IIdentified | IIdentified[] = [];\n /**\n * Should the path be shown.\n */\n @Input() showPath = false;\n /**\n * Can the user select multiple assets.\n */\n @Input() multi = false;\n /**\n * The current path to the node.\n */\n @Input() view: 'tree' | 'miller' = 'tree';\n /**\n * Used only for miller-view, displays the column level for the current node.\n * E.g if the index is one, this will be second column.\n */\n @Input() index;\n /**\n * Sets the active node.\n */\n @Input() active: GroupNode;\n /**\n * A function that should verify the need to add a column when a node is clicked.\n */\n @Input() handleNextMillerViewColumn: (node: GroupNode, index: number) => boolean;\n\n @Input() disabled = false;\n /**\n * Event, which indicates whether the loading of the node has completed.\n */\n @Output() isLoadingState: EventEmitter<boolean> = new EventEmitter();\n /**\n * Event that emits when a node is selected.\n */\n @Output() onSelect: EventEmitter<IManagedObject> = new EventEmitter();\n /**\n * Event that emits when a node is deselected.\n */\n @Output() onDeselect: EventEmitter<{ deselectMode: 'single' | 'all'; mo: IManagedObject }> =\n new EventEmitter();\n\n breadcrumb: string;\n /**\n * @ignore\n */\n level = 0;\n /**\n * @ignore\n */\n unsubscribe$ = new Subject<void>();\n isNodeSelectable = true;\n\n /** sets the `btn-pending` class in the load more button */\n isLoading = false;\n /**\n * @ignore\n */\n get expandTitle() {\n return !this.node.open ? gettext('Expand') : gettext('Collapse');\n }\n\n /**\n * @ignore only di\n */\n constructor(\n private translateService: TranslateService,\n private cd: ChangeDetectorRef,\n public assetSelectorService: AssetSelectorService\n ) {}\n\n /**\n * @ignore\n */\n async ngOnInit() {\n this.isNodeSelectable = this.assetSelectorService.isNodeSelectable(this.node);\n this.breadcrumb = this.node.label;\n this.setupBreadcrumbsAndLevel(this.node);\n\n if (this.node instanceof GroupNode) {\n this.node.hookEvents();\n }\n\n // open on startup\n if (this.node.root) {\n this.click();\n }\n\n // used for loading and to trigger change detection when the node is no longer loading.\n if (this.node.events) {\n this.node.events\n .pipe(\n takeUntil(this.unsubscribe$),\n filter((a: AssetsNavigatorAction) => a === AssetsNavigatorAction.LOADING_DONE)\n )\n .subscribe(() => {\n this.isLoadingState.emit(false);\n this.cd.markForCheck();\n });\n }\n }\n\n /**\n * Opens a node.\n */\n click() {\n this.node.open = !this.node.open;\n this.node.click({ open: this.node.open });\n }\n\n setupBreadcrumbsAndLevel(node: GroupNode) {\n if (node.parents && node.parents.length) {\n const parent = node.parents[0] as GroupNode;\n this.breadcrumb =\n this.translateService.instant(parent.label) +\n ' > ' +\n this.translateService.instant(this.breadcrumb);\n this.level++;\n\n this.setupBreadcrumbsAndLevel(parent);\n }\n }\n\n /**\n * Selects the node and emits a change on the parent component.\n * @param node The node to select.\n */\n selected(node: GroupNode) {\n if (node.mo) {\n this.updateSelection(node.mo);\n return;\n }\n this.click();\n }\n\n /**\n * Handles clicks on a item in Miller View.\n * @param node The node that was clicked.\n */\n millerViewClick(node: GroupNode) {\n node.breadcrumb = this.breadcrumb;\n\n if (!this.handleNextMillerViewColumn) {\n return;\n }\n const shouldHandleDefault = this.handleNextMillerViewColumn(node, this.index);\n if (shouldHandleDefault) {\n this.selected(node);\n }\n }\n\n /**\n * @ignore\n */\n ngOnDestroy(): void {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n isSelected() {\n if (!this.node.mo) {\n return false;\n }\n return this.assetSelectorService.getIndexOfSelected(this.preselected, this.node.mo) > -1;\n }\n\n isActive() {\n if (this.active && this.node.mo) {\n return this.active.mo?.id === this.node.mo.id;\n }\n return false;\n }\n\n private updateSelection(selectedMo: IManagedObject) {\n if (!this.multi) {\n this.onDeselect.emit({ deselectMode: 'all', mo: selectedMo });\n return;\n }\n if (this.isSelected()) {\n this.onDeselect.emit({ deselectMode: 'single', mo: selectedMo });\n return;\n }\n this.onSelect.emit(selectedMo);\n this.cd.markForCheck();\n }\n}\n","<!-- Hierarchy tree -->\n<div\n class=\"c8y-asset-selector__item\"\n [ngStyle]=\"{\n 'margin-left': level > 1 ? 16 + 'px' : '0'\n }\"\n *ngIf=\"view === 'tree'\"\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>\n <div\n class=\"c8y-asset-selector__node\"\n title=\"{{ breadcrumb | translate }}\"\n *ngIf=\"node && !node.root && !node.hidden\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n [ngClass]=\"{ 'c8y-asset-selector__node--open': node?.open }\"\n >\n <!-- expand button -->\n <div class=\"c8y-asset-selector__node__btn-spacer\">\n <button\n class=\"collapse-btn btn-dot\"\n [title]=\"expandTitle | translate\"\n [attr.aria-expanded]=\"node.open\"\n (click)=\"click()\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n >\n <i c8yIcon=\"angle-right\"></i>\n </button>\n </div>\n <div\n class=\"d-flex a-i-center p-t-4 p-b-4\"\n *ngIf=\"node.toString() !== 'LoadMoreNode' && isNodeSelectable\"\n >\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]=\"disabled || !node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span\n class=\"sr-only\"\n for=\"nodeLabel\"\n translate\n >\n Node label\n </span>\n </label>\n </div>\n\n <!-- group button -->\n <button\n class=\"c8y-asset-selector__btn text-truncate\"\n [attr.aria-expanded]=\"!node.open\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n (click)=\"click()\"\n >\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Smart group' | translate\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n ></i>\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Group' | translate\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n <!-- use just for search results to display the path -->\n <p\n class=\"text-truncate\"\n *ngIf=\"showPath\"\n >\n <small\n class=\"text-muted\"\n title=\"{{ breadcrumb }}\"\n >\n <em>{{ breadcrumb }}</em>\n </small>\n </p>\n <!-- up to here -->\n </span>\n </button>\n <!-- not a group button -->\n <button\n class=\"flex-grow\"\n title=\"{{ breadcrumb }}\"\n type=\"button\"\n *ngIf=\"!node.isGroup() && !node.hasChildDevices()\"\n [ngClass]=\"{\n 'btn btn-default btn-sm m-b-8 m-r-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 >\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Smart group' | translate\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n ></i>\n <i\n class=\"c8y-icon m-r-4\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Group' | translate\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16 ': node.icon != 'plus' }\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n <!-- use just for search results to display the path -->\n <p\n class=\"text-truncate text-muted small\"\n *ngIf=\"showPath\"\n >\n <em>{{ breadcrumb }}</em>\n </p>\n <!-- up to here -->\n </span>\n </button>\n </div>\n <div\n class=\"collapse\"\n *ngIf=\"node.countChildren()\"\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 [disabled]=\"disabled\"\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 class=\"miller-column__item bg-inherit\"\n title=\"{{ breadcrumb | translate }}\"\n *ngIf=\"node && !node.root && !node.hidden && node !== rootNode\"\n [ngClass]=\"{\n active: isActive(),\n 'miller-column__item--more': node.toString() === 'LoadMoreNode'\n }\"\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]=\"isSelected()\"\n [disabled]=\"disabled || !node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span\n class=\"sr-only\"\n for=\"nodeLabel2\"\n translate\n >\n Node label\n </span>\n </label>\n </div>\n\n <button\n title=\"{{ breadcrumb | translate }}\"\n type=\"button\"\n [ngClass]=\"{\n 'btn btn-default btn-sm d-flex flex-grow j-c-center m-l-16 m-r-16 m-b-4 m-t-4':\n node.toString() === 'LoadMoreNode',\n 'miller-column__item__btn': node.toString() !== 'LoadMoreNode',\n 'btn-pending': node.loading && node.toString() === 'LoadMoreNode'\n }\"\n (click)=\"millerViewClick(node)\"\n >\n <i\n class=\"c8y-icon m-r-4\"\n [c8yIcon]=\"node.icon\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16': node.toString() !== 'LoadMoreNode' }\"\n ></i>\n <div class=\"text-left text-truncate\">\n <p\n class=\"text-truncate\"\n title=\"{{ node.translateLabel ? (node.label | translate) : node.label }}\"\n >\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n </p>\n <!-- use just for search results to display the path -->\n <small\n class=\"text-muted text-truncate\"\n title=\"{{ breadcrumb }}\"\n *ngIf=\"showPath\"\n >\n <em>{{ breadcrumb }}</em>\n </small>\n <!-- up to here -->\n </div>\n <span\n class=\"p-l-4 m-l-auto\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n >\n <i c8yIcon=\"angle-right\"></i>\n </span>\n </button>\n </div>\n\n <div\n role=\"list\"\n *ngIf=\"node\"\n [ngClass]=\"{ hidden: node !== rootNode }\"\n >\n <c8y-asset-selector-node\n role=\"listitem\"\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 [active]=\"active\"\n [disabled]=\"disabled\"\n [handleNextMillerViewColumn]=\"handleNextMillerViewColumn\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n","import { EventEmitter } from '@angular/core';\nimport { IIdentified, IManagedObject, InventoryService } from '@c8y/client';\nimport { GroupNodeService } from './group-node.service';\nimport { AssetSelectorService } from './asset-selector.service';\nimport { AssetSelectionChangeEvent, AssetSelectorOptions } from './asset-selector.model';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nexport class AssetSelectorBase {\n /**\n * Config object containing all options for the asset selector.\n */\n config: AssetSelectorOptions = {};\n /**\n * An array of predefined nodes.\n */\n selected: Array<Partial<IManagedObject>> | IIdentified[] | IIdentified;\n /**\n * The loading state of the current node.\n */\n isLoading = false;\n /**\n * Emit the selected asset or assets.\n */\n onSelected = new EventEmitter<AssetSelectionChangeEvent>();\n /**\n * Emits if the currently selected asset is cleared.\n */\n onClearSelected = new EventEmitter<void>();\n\n private onChange: (mo: IIdentified[] | IIdentified) => void;\n private onTouched: () => void;\n\n constructor(\n protected groupNodeService: GroupNodeService,\n protected inventory: InventoryService,\n protected assetSelectorService: AssetSelectorService\n ) {}\n\n /**\n * @ignore\n */\n validate(control: AbstractControl): ValidationErrors {\n if (this.config.required && (!control.value || control.value.length === 0)) {\n return { required: true };\n }\n return null;\n }\n\n /**\n * @ignore\n */\n writeValue(obj: any): void {\n this.selected = this.assetSelectorService.normalizeValue(obj, this.config.modelMode);\n }\n\n /**\n * @ignore\n */\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n /**\n * @ignore\n */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * @ignore\n */\n doBlur() {\n if (this.onTouched) {\n this.onTouched();\n }\n }\n\n /**\n * Deselects all expect the given one.\n * @param selectedMo The selected asset (optional, if empty -> just deselect all).\n */\n deselectAll(selectedMo?: IManagedObject) {\n this.selected = [];\n if (selectedMo) {\n this.selected = [this.assetSelectorService.simplifyModel(selectedMo, this.config.modelMode)];\n }\n this.emitChange(this.selected, selectedMo, !!selectedMo);\n this.doBlur();\n }\n\n /**\n * Adds an managed object to the selected array and emits the change.\n * @param selectedMo The selected asset.\n */\n select(selectedMo: IManagedObject) {\n if (!this.config.multi) {\n this.selected = [];\n }\n const index = this.getIndexOfSelected(this.selected, selectedMo);\n if (index === -1) {\n this.selected.push(\n this.assetSelectorService.simplifyModel(selectedMo, this.config.modelMode)\n );\n }\n this.emitChange(this.selected, selectedMo, true);\n this.doBlur();\n }\n\n /**\n * Removes a managed object from the selected array and emits the change.\n * @param selectedMo The selected asset.\n */\n deselect(selectedMo: IManagedObject) {\n const index = this.getIndexOfSelected(this.selected, selectedMo);\n if (index > -1) {\n this.selected.splice(index, 1);\n }\n this.emitChange(this.selected, selectedMo, false);\n this.doBlur();\n }\n\n /**\n * Returns the index of the currently selected item.\n * @param selected All selected items\n * @param selectedMo The new selected item-\n * @returns An index, or -1 if not found.\n */\n getIndexOfSelected(\n selected: Array<Partial<IIdentified>> | Partial<IIdentified>,\n selectedMo: IIdentified\n ) {\n return selected.findIndex(mo => mo.id === selectedMo.id);\n }\n\n emitChange(selected: IIdentified | IIdentified[], item: IManagedObject, isSelected: boolean) {\n const changes = this.config.multi ? selected : selected[0];\n if (this.onChange) {\n this.onChange(changes);\n }\n this.onSelected.emit({ items: changes, change: { item, isSelected } });\n }\n\n createDefaultRootNode() {\n return this.groupNodeService.createGroupNode({\n root: true,\n groupsSelectable: this.config.groupsSelectable,\n groupsOnly: this.config.groupsOnly,\n showChildDevices: this.config.showChildDevices\n });\n }\n async createManagedObjectRootNode(asset: IIdentified) {\n if ((asset as IIdentified).id) {\n return this.groupNodeService.createGroupNode({\n mo: asset as IManagedObject,\n groupsSelectable: this.config.groupsSelectable,\n groupsOnly: this.config.groupsOnly,\n showChildDevices: this.config.showChildDevices\n });\n }\n const { data: mo } = await this.inventory.detail(asset);\n return this.groupNodeService.createGroupNode({\n mo,\n groupsSelectable: this.config.groupsSelectable,\n groupsOnly: this.config.groupsOnly,\n showChildDevices: this.config.showChildDevices\n });\n }\n}\n","import { IManagedObject } from '@c8y/client';\nimport { IIdentified } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components';\n\nexport interface AssetSelectionChangeEvent {\n items: IIdentified | IIdentified[];\n change: { item: IManagedObject; isSelected: boolean };\n}\n\nexport interface GroupNodeConfig {\n root?: boolean;\n mo?: IManagedObject;\n groupsOnly?: boolean;\n groupsSelectable?: boolean;\n showChildDevices?: boolean;\n}\n\nexport const CONFIG_OPTIONS_DEFAULT: AssetSelectorOptions = {\n label: gettext('Asset selection'),\n multi: false,\n showFilter: false,\n columnHeaders: false,\n singleColumn: false,\n modelMode: 'simple',\n groupsOnly: false,\n groupsSelectable: false,\n search: false,\n showUnassignedDevices: false,\n view: 'tree',\n showChildDevices: false,\n showSelected: true\n};\n\nexport interface AssetSelectorOptions {\n /**\n * Already selected devices.\n */\n selectedDevices?: IIdentified | IIdentified[];\n /**\n * Defines a label to be shown to the user.\n */\n label?: string;\n /**\n * Can the user select multiple assets.\n */\n multi?: boolean;\n /**\n * displays a filter input on every column when using the miller view.\n */\n showFilter?: boolean;\n /**\n * displays a column header on every column when using the miller view.\n */\n columnHeaders?: boolean;\n /**\n * Displays only the select column.\n */\n singleColumn?: boolean;\n /**\n * Set to true to mark it as required on a form.\n */\n required?: boolean;\n /**\n * In simple model-mode the result will only contain the IDs and name of the selected\n * assets. In full mode, everything is contained.\n */\n modelMode?: 'simple' | 'full';\n /**\n * Set this to true, if the selector should only show groups.\n */\n groupsOnly?;\n /**\n * Set this true, if groups should be selectable.\n */\n groupsSelectable?;\n /**\n * Enable to display global search in the asset-selector (only possible whithout device context).\n */\n search?: boolean;\n /**\n * Displays all unassigned devices in a custom root group.\n */\n showUnassignedDevices?: boolean;\n /**\n * Set the view of the asset selector with tree view as default.\n */\n view?: 'tree' | 'miller';\n /**\n * Used only for miller-view, displays the column level for the current node.\n * E.g if the index is one, this will be second column.\n */\n index?: number;\n /**\n * Used only for single column, the array contains all selected columns.\n */\n selectedColumns?: IIdentified[] | IIdentified;\n /**\n * Devices with children can be selected to show their child devices.\n */\n showChildDevices?: boolean;\n /**\n * Allows to show chips at the top with the currently selected asset for multi select.\n * For single select it shows the currently selected asset.\n */\n showSelected?: boolean;\n /**\n * Prevents automatic asset selection on component initialization.\n */\n preventInitialSelect?: boolean;\n}\n","import { ClickOptions, gettext } from '@c8y/ngx-components';\nimport { AssetsNavigatorAction } from '../action.enum';\nimport { GroupNodeConfig } from './asset-selector.model';\nimport { GroupNode } from './group-node';\nimport { GroupNodeService } from './group-node.service';\n\nexport class UnassignedDevicesNode extends GroupNode {\n static NAME = 'UnassignedDevicesNode';\n label = gettext('Unassigned devices');\n icon = 'delete-folder';\n groupsSelectable = false;\n groupsOnly = false;\n showChildDevices = false;\n mo = {};\n\n constructor(\n protected service: GroupNodeService,\n config: GroupNodeConfig = {}\n ) {\n super(service, config);\n this.priority = Infinity;\n this.showChildDevices = config.showChildDevices || false;\n }\n\n click(options: ClickOptions = {}) {\n this.hookEvents();\n if (options.open) {\n this.events.next(AssetsNavigatorAction.FETCH);\n }\n }\n\n addManagedObject(mo) {\n this.add(this.service.createChildNode({ mo, showChildDevices: this.showChildDevices }));\n }\n\n fetch() {\n return this.service.getUnassignedDevices(this.showChildDevices, this.filterQuery$.value);\n }\n\n isGroup() {\n return true;\n }\n\n toString() {\n return UnassignedDevicesNode.NAME;\n }\n\n setLabel() {\n // do nothing, as this item has a hardcoded label.\n // This is only to overwrite the default inherited method.\n this.label = this.label;\n }\n\n async updateIcon() {\n // do nothing, as this item has a hardcoded label.\n // This is only to overwrite the default inherited method.\n this.icon = this.icon;\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n forwardRef\n} from '@angular/core';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\nimport { IIdentified, IManagedObject, InventoryService } from '@c8y/client';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { takeUntil, tap } from 'rxjs/operators';\nimport { AssetSelectorBase } from './asset-selector-base';\nimport {\n AssetSelectionChangeEvent,\n AssetSelectorOptions,\n CONFIG_OPTIONS_DEFAULT\n} from './asset-selector.model';\nimport { AssetSelectorService } from './asset-selector.service';\nimport { GroupNode } from './group-node';\nimport { GroupNodeService } from './group-node.service';\nimport { UnassignedDevicesNode } from './unassigned-devices-node';\nimport {\n gettext,\n SearchInputComponent,\n IconDirective,\n C8yTranslatePipe,\n GetGroupIconPipe\n} from '@c8y/ngx-components';\nimport { NgIf, NgStyle, NgClass, NgFor, AsyncPipe } from '@angular/common';\nimport { AssetSelectorNodeComponent } from './asset-selector-node.component';\n\n/**\n * Displays a hierarchical tree selector for assets.\n */\n@Component({\n selector: 'c8y-asset-selector',\n templateUrl: './asset-selector.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => AssetSelectorComponent)\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => AssetSelectorComponent),\n multi: true\n },\n AssetSelectorService\n ],\n imports: [\n NgIf,\n NgStyle,\n NgClass,\n SearchInputComponent,\n NgFor,\n IconDirective,\n FormsModule,\n AssetSelectorNodeComponent,\n C8yTranslatePipe,\n AsyncPipe,\n GetGroupIconPipe\n ]\n})\nexport class AssetSelectorComponent extends AssetSelectorBase implements OnInit {\n /**\n * Config object containing all options for the asset selector.\n */\n @Input() config: AssetSelectorOptions = {};\n /**\n * Defines the node, which should be displayed as active.\n */\n @Input() active: GroupNode;\n /**\n * Used only for miller-view, displays the column level for the current node.\n * E.g if the index is one, this will be second column.\n */\n @Input() index = 0;\n /**\n * The asset to use as root.\n */\n @Input() asset: IIdentified = undefined;\n /**\n * The selected device.\n */\n @Input() selectedDevice: IManagedObject = undefined;\n /**\n * An array of predefined nodes.\n */\n @Input() selected: Array<Partial<IManagedObject>> | IIdentified[] | IIdentified = [];\n /**\n * The node to use as root. You can either set this, or the asset to start from.\n */\n @Input() rootNode: GroupNode;\n /**\n * All currently selected assets.\n */\n @Input() selectedItems: IIdentified[] | IIdentified = [];\n @Input() container: '' | 'body' = 'body';\n @Input() isNodeSelectable: boolean | ((node: IIdentified) => boolean) = true;\n @Input() disabled = false;\n /**\n * Emits if one item was selected (all currently selected nodes).\n */\n @Output() onSelected = new EventEmitter<AssetSelectionChangeEvent>();\n /**\n * Emits if the currently selected asset is cleared.\n */\n @Output() onClearSelected = new EventEmitter<void>();\n /**\n * Used only for miller view. Emit the selected node and use it as a 'rootNode' for the new column.\n */\n @Output() onRowSelected = new EventEmitter<any>();\n /**\n * Emits the current loading state of the node.\n */\n @Output() onLoad = new EventEmitter<any>();\n /**\n * The current filter applied.\n */\n filterText = '';\n /**\n * Displays the global search at all times if the miller view is used\n * on root group level.\n */\n root = false;\n /**\n * @ignore\n */\n unsubscribe$ = new Subject<void>();\n /**\n * Returns the current header hight in pixel.\n */\n getHeaderHeight$ = new BehaviorSubject(0);\n readonly ASSET_CONST = gettext('Asset {{ assetId }}');\n\n @ViewChild('header')\n private header: ElementRef;\n\n /**\n * @ignore only DI\n */\n constructor(\n protected groupNodeService: GroupNodeService,\n protected inventory: InventoryService,\n protected assetSelectorService: AssetSelectorService,\n protected cd: ChangeDetectorRef\n ) {\n super(groupNodeService, inventory, assetSelectorService);\n }\n\n /**\n * Checks when a node was selected, if a new column needs to be added.\n * @param node The node that was clicked.\n * @param index The current index of this node.\n * @returns True if the click was handled and a new column was added.\n */\n handleNextMillerViewColumn(node: GroupNode, index: number) {\n const nodeCopy = Object.create(node);\n const isSameAsRoot = this.rootNode === node;\n const isUnassignedDevicesNode = node.toString() === UnassignedDevicesNode.NAME;\n const isNewColumnNeeded =\n !isSameAsRoot && (node.isGroup() || isUnassignedDevicesNode || node.hasChildDevices());\n\n if (isNewColumnNeeded) {\n this.onRowSelected.emit({ nodeCopy, index });\n return false;\n }\n return true;\n }\n\n /**\n * @ignore\n */\n async ngOnInit() {\n this.assetSelectorService.setIsNodeSelectable(this.isNodeSelectable);\n if (this.index === 0) {\n this.config = { ...CONFIG_OPTIONS_DEFAULT, ...this.config };\n }\n const shouldResetNameFilter =\n this.rootNode && this.rootNode.mo && this.config.view === 'miller';\n if (shouldResetNameFilter) {\n await this.applyFilter('');\n }\n\n const isOnlyAssetNodeDefined = this.asset;\n if (isOnlyAssetNodeDefined) {\n this.rootNode = await this.createManagedObjectRootNode(this.asset);\n }\n\n const isAnyNodeDefined =\n !this.rootNode && (!this.asset || Object.keys(this.asset).length === 0);\n if (isAnyNodeDefined) {\n this.rootNode = this.createDefaultRootNode();\n }\n\n if (\n this.config.showUnassignedDevices &&\n (!this.asset || Object.keys(this.asset).length === 0) &&\n this.rootNode.root\n ) {\n this.rootNode.add(\n new UnassignedDevicesNode(this.groupNodeService, {\n showChildDevices: this.config.showChildDevices\n })\n );\n }\n this.root = this.rootNode.root;\n }\n\n async ngOnChanges(changes: SimpleChanges) {\n if (changes.isNodeSelectable) {\n this.assetSelectorService.setIsNodeSelectable(this.isNodeSelectable);\n }\n if (\n changes.asset &&\n changes.asset.currentValue &&\n Object.keys(changes.asset.currentValue).length !== 0\n ) {\n this.rootNode = await this.createManagedObjectRootNode(changes.asset.currentValue);\n }\n }\n\n /**\n * @ignore\n */\n ngAfterViewInit(): void {\n this.updateHeaderHeight();\n }\n\n /**\n * Changes the current root to one level back.\n */\n back() {\n const index = this.index - 1;\n const nodeCopy = Object.create(this.rootNode.parents[0]);\n this.onRowSelected.emit({ nodeCopy, index });\n }\n\n /**\n * Clears the current filter.\n */\n clearFilters() {\n this.filterText = '';\n this.applyFilter('');\n }\n\n /**\n * Clears the currently selected device.\n */\n clearSelectedDevices() {\n this.selectedDevice = undefined;\n this.applyFilter('');\n this.onClearSelected.emit();\n }\n\n isGroupSelected() {\n if (this.selected.some(selectedNode => selectedNode.id === this.rootNode.mo?.id)) {\n return true;\n }\n return false;\n }\n\n /**\n * @param nameFilter The name filter to apply.\n * @param moId The managed object ID to filter by.\n * @param showUnassignedDevices If true, it will show unassigned devices.\n * @return The filter query to apply.\n * @description\n * This method builds a filter query based on the provided name filter and managed object ID.\n */\n groupNameFilter(nameFilter: string, moId, showUnassignedDevices?: boolean) {\n if (nameFilter) {\n const filterByName = showUnassignedDevices\n ? {\n __filter: {\n name: nameFilter\n },\n __orderby: [{ name: 1 }]\n }\n : {\n __filter: {\n name: nameFilter,\n __bygroupid: moId\n }\n };\n return this.assetSelectorService.queriesUtil.buildQuery(filterByName);\n }\n const defaultFilter = {\n __filter: {\n __bygroupid: moId\n },\n __orderby: [{ name: 1 }]\n };\n return this.assetSelectorService.queriesUtil.buildQuery(defaultFilter);\n }\n\n /**\n * Applies a filter.\n * @param filter The filter to apply.\n */\n async applyFilter(filter: string) {\n this.rootNode.filterQuery$.next(\n this.groupNameFilter(\n filter,\n this.rootNode.mo.id,\n this.isUnassignedDevicesNode() ? true : false\n )\n );\n this.rootNode.refresh();\n this.onLoad.emit({\n loading: true,\n filterText: this.filterText,\n index: this.index,\n selectedDevice: this.selectedDevice\n });\n this.cd.detectChanges();\n }\n\n /**\n * Check if the UnassignedDevice node is the rootNode.\n */\n isUnassignedDevicesNode() {\n return this.rootNode.toString() === UnassignedDevicesNode.NAME;\n }\n\n /**\n * Called when the user resets the search result.\n */\n onSearchResultReset(selectedItem) {\n if (selectedItem) {\n this.rootNode = this.createDefaultRootNode();\n if (this.config.showUnassignedDevices) {\n this.rootNode.add(\n new UnassignedDevicesNode(this.groupNodeService, {\n showChildDevices: this.config.showChildDevices\n })\n );\n }\n if (this.config.view === 'miller') {\n this.onRowSelected.emit({ root: true });\n }\n\n this.rootNode.click({ open: true });\n this.rootNode.nodesFetched\n .pipe(\n tap(() => this.cd.detectChanges()),\n takeUntil(this.unsubscribe$)\n )\n .subscribe();\n\n if (this.config.view === 'tree') {\n this.rootNode.open = true;\n }\n }\n }\n\n /**\n * Called if the user clicks on a search result.\n */\n async onSearchResultClick(mo: IManagedObject) {\n const canSelectNode = this.config.groupsSelectable || !this.groupNodeService.isGroup(mo);\n if (this.config.view === 'miller') {\n this.rootNode = await this.createManagedObjectRootNode(mo);\n this.rootNode.click({ open: true });\n const nodeCopy = Object.create(this.rootNode);\n this.onRowSelected.emit({\n nodeCopy,\n index: 0,\n selectedDevices: this.selectedDevice,\n root: true\n });\n }\n if (!this.config.multi) {\n this.deselectAll();\n }\n if (canSelectNode) {\n this.select(mo);\n }\n }\n\n onLoading(isLoading: boolean) {\n this.onLoad.emit({ loading: isLoading, filterText: this.filterText });\n this.cd.markForCheck();\n }\n\n onSelect(mo: IManagedObject) {\n this.select(mo);\n }\n\n onDeselect(config: { deselectMode: 'single' | 'all'; mo: IManagedObject }) {\n switch (config?.deselectMode) {\n case 'single':\n this.deselect(config.mo);\n this.cd.markForCheck();\n break;\n case 'all':\n this.deselectAll(config.mo);\n break;\n }\n }\n\n private updateHeaderHeight() {\n // An observer is used to detect if the header is visible or not.\n // If the header is not visible, the height is 0 and the observer is\n // used to detect when it becomes visible, to recalculate the height.\n const observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n this.updateHeaderHeight();\n observer.unobserve(entry.target);\n }\n });\n });\n\n requestAnimationFrame(() => {\n if (this.header?.nativeElement) {\n const { clientHeight } = this.header.nativeElement;\n if (clientHeight === 0 && this.isElementOrParentHidden(this.header.nativeElement)) {\n observer.observe(this.header.nativeElement);\n return;\n }\n this.getHeaderHeight$.next(clientHeight);\n } else {\n this.getHeaderHeight$.next(0);\n }\n });\n }\n\n private isElementOrParentHidden(element: HTMLElement): boolean {\n while (element) {\n const style = window.getComputedStyle(element);\n if (style.display === 'none' || style.visibility === 'hidden') {\n return true;\n }\n element = element.parentElement;\n }\n return false;\n }\n}\n","<div\n class=\"bg-inherit p-t-8 p-b-8 separator-bottom p-r-16 p-l-16 sticky-top\"\n [ngStyle]=\"{ 'z-index': config.singleColumn && config.search ? '30' : '20' }\"\n #header\n [ngClass]=\"{\n 'p-absolute miller-column__selection d-flex flex-wrap a-i-center': config.view === 'miller',\n 'miller-column__search': config.search,\n 'miller-column__multi': config.multi\n }\"\n *ngIf=\"\n !selectedDevice &&\n index === 0 &&\n (config.search || config.multi || config.label?.length || config.showSelected)\n \"\n>\n <p\n class=\"text-medium flex-no-shrink a-s-center\"\n [ngClass]=\"{\n 'm-b-4': config.search && root && config.singleColumn,\n 'm-r-8': !config.singleColumn && !config.search,\n 'fit-w': config.singleColumn\n }\"\n *ngIf=\"config.label?.length\"\n >\n {{ config.label | translate }}\n </p>\n <c8y-search-input\n [ngStyle]=\"{ 'min-width': !config.singleColumn && config.label.length ? '50%' : 'inherit' }\"\n *ngIf=\"config.search && root\"\n (onClick)=\"onSearchResultClick($event)\"\n (reset)=\"onSearchResultReset($event)\"\n [mode]=\"'select'\"\n [container]=\"container\"\n [groupsOnly]=\"config.groupsOnly\"\n [ngClass]=\"{\n 'm-l-auto': !config.singleColumn && config.label.length,\n 'fit-w': config.singleColumn || !config.label.length\n }\"\n ></c8y-search-input>\n <div\n class=\"bg-inherit d-flex gap-4 fit-w\"\n *ngIf=\"config.showSelected\"\n [ngClass]=\"{ 'm-t-4': config.search }\"\n >\n <span class=\"text-label-small m-r-4 a-s-center l-h-1\">{{ 'Selected' | translate }}</span>\n <div class=\"flex-grow inner-scroll d-flex gap-4 a-i-center\">\n <ng-container *ngIf=\"!selected.length\">\n <em class=\"text-12 text-muted d-flex a-i-center fit-h-20\">{{ 'None' | translate }}</em>\n </ng-container>\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let selectedItem of selected\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ selectedItem.name }}\"\n [disabled]=\"disabled\"\n type=\"button\"\n (click)=\"config.multi ? deselect(selectedItem) : deselectAll()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n {{ selectedItem.name || (ASSET_CONST | translate: { assetId: selectedItem.id }) }}\n </span>\n </div>\n </div>\n</div>\n\n<div\n class=\"p-r-16\"\n *ngIf=\"selectedDevice\"\n>\n <div class=\"d-flex p-b-4\">\n <p\n class=\"text-medium p-t-8 m-r-8\"\n *ngIf=\"selectedDevice; else multiAssets\"\n >\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 title=\"{{ 'Change' | translate }}\"\n type=\"button\"\n (click)=\"$event.stopPropagation(); clearSelectedDevices()\"\n >\n {{ 'Change' | translate }}\n </button>\n </div>\n <div class=\"d-flex\">\n <i\n class=\"text-success p-l-0 p-r-8\"\n [c8yIcon]=\"'check-circle'\"\n ></i>\n <i\n class=\"m-r-4 icon-20\"\n [c8yIcon]=\"selectedDevice | getGroupIcon | async\"\n ></i>\n <span>{{ selectedDevice.name }}</span>\n </div>\n</div>\n\n<!-- miller columns header -->\n<div\n class=\"miller-column__header sticky-top bg-inherit separator-bottom\"\n *ngIf=\"\n config.view === 'miller' &&\n ((config.showFilter && !rootNode.root) || config.columnHeaders) &&\n !selectedDevice\n \"\n [ngClass]=\"{ 'p-t-8': config.search }\"\n>\n <div class=\"d-flex\" *ngIf=\"config.singleColumn && index !== 0\">\n <i\n class=\"m-r-4\"\n c8yIcon=\"home\"\n ></i>\n <p\n class=\"text-12 text-muted text-truncate text-rtl m-b-4\"\n title=\"{{ rootNode.breadcrumb || rootNode.label | translate }}\"\n >\n {{ rootNode.breadcrumb || rootNode.label | translate }}\n </p>\n </div>\n <div\n class=\"d-flex a-i-center\"\n *ngIf=\"config.columnHeaders || config.singleColumn\"\n >\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 title=\"{{ 'Back' | translate }}\"\n type=\"button\"\n *ngIf=\"config.singleColumn && !rootNode.root && index !== 0\"\n (click)=\"$event.stopPropagation(); back()\"\n >\n <i c8yIcon=\"angle-left\"></i>\n </button>\n <label\n class=\"c8y-radio checkbox-inline m-r-8\"\n *ngIf=\"!rootNode.root && index === 0 && (config.groupsSelectable || !rootNode.isGroup())\"\n >\n <input\n title=\"{{ 'Select group' | translate }}\"\n type=\"radio\"\n (change)=\"select(rootNode.mo)\"\n [checked]=\"isGroupSelected()\"\n />\n <span></span>\n </label>\n\n <i\n class=\"icon-20 c8y-icon-duocolor m-r-4\"\n [c8yIcon]=\"this.rootNode.mo | getGroupIcon: true : this.rootNode.icon | async\"\n *ngIf=\"config.columnHeaders && (config.singleColumn || (!rootNode.root && index === 0))\"\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\n *ngIf=\"!rootNode.root && config.showFilter\"\n [ngClass]=\"{ 'p-t-4': config.columnHeaders }\"\n >\n <div class=\"input-group input-group-sm input-group-search\">\n <input\n class=\"form-control\"\n placeholder=\"{{ 'Filter this column…' | translate }}\"\n [(ngModel)]=\"filterText\"\n (keyup.enter)=\"applyFilter('*' + filterText + '*')\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot p-r-8 p-l-4\"\n title=\"{{ 'Apply filter' | translate }}\"\n type=\"button\"\n (click)=\"applyFilter('*' + filterText + '*')\"\n >\n <i c8yIcon=\"filter\"></i>\n </button>\n <button\n class=\"btn btn-dot p-r-8 p-l-4\"\n title=\" {{ 'Clear filters' | translate }}\"\n type=\"button\"\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 class=\"d-block bg-inherit p-relative\"\n style=\"z-index: 9\"\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 [active]=\"active\"\n [disabled]=\"disabled\"\n [handleNextMillerViewColumn]=\"handleNextMillerViewColumn.bind(this)\"\n (isLoadingState)=\"onLoading($event)\"\n (onSelect)=\"onSelect($event)\"\n (onDeselect)=\"onDeselect($event)\"\n [ngClass]=\"{ 'collapse show': !rootNode.root && !rootNode.hidden && config.view !== 'miller' }\"\n></c8y-asset-selector-node>\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n ViewChildren,\n forwardRef\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { IIdentified, IManagedObject, InventoryService } from '@c8y/client';\nimport { of } from 'rxjs';\nimport { first, startWith, map, switchMap } from 'rxjs/operators';\nimport { AssetSelectorBase } from './asset-selector-base';\nimport { AssetSelectorComponent } from './asset-selector.component';\nimport { AssetSelectionChangeEvent, AssetSelectorOptions } from './asset-selector.model';\nimport { AssetSelectorService } from './asset-selector.service';\nimport { GroupNode } from './group-node';\nimport { GroupNodeService } from './group-node.service';\nimport {\n gettext,\n LoadingComponent,\n EmptyStateComponent,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { NgStyle, NgClass, NgFor, NgIf, AsyncPipe } from '@angular/common';\n\n@Component({\n selector: 'c8y-asset-selector-miller',\n templateUrl: './miller-view.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MillerViewComponent),\n multi: true\n }\n ],\n imports: [\n NgStyle,\n NgClass,\n NgFor,\n AssetSelectorComponent,\n NgIf,\n LoadingComponent,\n EmptyStateComponent,\n C8yTranslatePipe,\n AsyncPipe\n ]\n})\nexport class MillerViewComponent extends AssetSelectorBase implements OnInit {\n /**\n * Config object containing all options for the asset selector.\n */\n @Input() config: AssetSelectorOptions = {};\n /**\n * The asset to use as root.\n */\n @Input() asset: IIdentified = undefined;\n /**\n * The selected devices.\n */\n @Input() selectedDevice: IManagedObject = undefined;\n /**\n * The node to use as root. You can either set this, or the asset to start from.\n */\n @Input() rootNode: GroupNode;\n /**\n * Emits if the selection changes\n */\n @Output() onSelected = new EventEmitter<AssetSelectionChangeEvent>();\n /**\n * Emits if the currently selected asset is cleared.\n */\n @Output() onClearSelected = new EventEmitter<void>();\n /**\n * @ignore\n */\n @ViewChild('millerViewWrapper') millerViewWrapper: ElementRef;\n /**\n * The column array will contain all currently selected nodes\n * which will form the miller view columns (only one per level).\n */\n columns = [];\n /**\n * The current filter applied. Used for the empty state text in the view.\n */\n filterText = '';\n /**\n * Index of the column used to check where to show the loading state.\n */\n columnIndex: number;\n @Input() container: '' | 'body' = 'body';\n\n configOptionsDefault: AssetSelectorOptions = {\n view: 'miller',\n singleColumn: false,\n label: gettext('Asset selection')\n };\n\n /**\n * The height of the first asset selector header.\n */\n assetSelectorHeaderHeight$ = of('0px');\n\n @ViewChildren(AssetSelectorComponent)\n private assetSelectors: QueryList<AssetSelectorComponent>;\n\n constructor(\n protected groupNodeService: GroupNodeService,\n protected inventory: InventoryService,\n protected assetSelectorService: AssetSelectorService,\n protected cd: ChangeDetectorRef\n ) {\n super(groupNodeService, inventory, assetSelectorService);\n }\n\n /**\n * @ignore\n */\n async ngOnInit() {\n this.config = { ...this.configOptionsDefault, ...this.config };\n\n const isAnyNodeDefined =\n !this.rootNode && (!this.asset || Object.keys(this.asset).length === 0);\n if (isAnyNodeDefined) {\n this.rootNode = this.createDefaultRootNode();\n }\n\n const isOnlyAssetNodeDefined = this.asset && Object.keys(this.asset).length !== 0;\n if (isOnlyAssetNodeDefined) {\n this.rootNode = await this.createManagedObjectRootNode(this.asset);\n this.rootNode.click();\n if (!this.config.preventInitialSelect) {\n const selected = this.selectedDevice || this.asset;\n this.selected = [selected];\n this.emitChange(this.selected, selected as IManagedObject, true);\n }\n }\n\n this.columns.push(this.rootNode);\n }\n\n /**\n * @ignore\n */\n async ngOnChanges(changes: SimpleChanges) {\n if (changes.asset && changes.asset.currentValue && !this.asset) {\n this.columns = [];\n this.columns.push(await this.createManagedObjectRootNode(changes.asset.currentValue));\n }\n\n if (changes.selectedDevice && changes.selectedDevice.currentValue) {\n this.selected = [this.selectedDevice];\n this.emitChange(this.selected, this.selectedDevice as IManagedObject, true);\n }\n }\n\n /**\n * @ignore\n */\n ngAfterViewInit(): void {\n requestAnimationFrame(() => {\n this.assetSelectorHeaderHeight$ = this.assetSelectors.changes.pipe(\n startWith(this.assetSelectors.toArray()),\n first(),\n switchMap(assetSelector =>\n assetSelector[0] ? assetSelector[0].getHeaderHeight$ : of('0')\n ),\n map(height => height + 'px')\n );\n });\n }\n\n /**\n * Create a new column with the selected node as root.\n */\n addNewColumn(node): void {\n const level = node.index;\n this.selectedDevice = node.selectedDevices || undefined;\n if (node.root) {\n window.requestAnimationFrame(() => (this.millerViewWrapper.nativeElement.scrollLeft = 0));\n this.columns.length = 1;\n }\n\n const isLevelLowerThanColumnNumber = level < this.columns.length - 1;\n let goBack = false;\n if (isLevelLowerThanColumnNumber) {\n this.columns.length = level + 1;\n goBack = true;\n }\n if (!node.root && !(this.config.singleColumn && goBack)) {\n this.columns.push(node.nodeCopy);\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const col = this;\n window.requestAnimationFrame(() => (col.millerViewWrapper.nativeElement.scrollLeft = 50000));\n /* triggered twice with a small delay as a workaround for dealing with Safari's bug:\n \"Safari doesn’t update the scrollTop / scrollLeft properties of an element its any of its\n ancestors has overflow set to hidden.\"\n This was reported on customer portal with the ticket SI-488573\n */\n setTimeout(function () {\n window.requestAnimationFrame(\n () => (col.millerViewWrapper.nativeElement.scrollLeft = 55000)\n );\n }, 700);\n }\n }\n\n /**\n * Change the loading state of the asset selector.\n */\n onLoad(event) {\n this.isLoading = event.loading;\n this.filterText = event.filterText;\n this.columnIndex = event.index;\n this.selectedDevice = event.selectedDevice;\n this.cd.detectChanges();\n }\n\n /**\n * Add the selected node to the selected array.\n */\n onSelectionChange(event: AssetSelectionChangeEvent): void {\n if (!this.config.multi) {\n this.deselectAll(event.change.item);\n return;\n }\n if (event.change.isSelected) {\n this.select(event.change.item);\n return;\n }\n this.deselect(event.change.item);\n }\n}\n","<div\n class=\"miller-view-wrapper {{ config.label }}\"\n [ngStyle]=\"{\n 'padding-top': selectedDevice ? '0px' : (assetSelectorHeaderHeight$ | async)\n }\"\n #millerViewWrapper\n [ngClass]=\"{\n 'single-column': config.singleColumn,\n }\"\n>\n <div\n class=\"miller-column bg-inherit\"\n *ngFor=\"let column of columns; index as i\"\n >\n <c8y-asset-selector\n class=\"bg-inherit\"\n #assetSelector\n [config]=\"config\"\n [index]=\"i\"\n [active]=\"columns[i + 1]\"\n [rootNode]=\"column\"\n [selected]=\"selected || []\"\n [selectedDevice]=\"selectedDevice\"\n (onSelected)=\"onSelectionChange($event)\"\n (onClearSelected)=\"onClearSelected.emit()\"\n (onRowSelected)=\"addNewColumn($event)\"\n (onLoad)=\"onLoad($event)\"\n [container]=\"container\"\n ></c8y-asset-selector>\n <div\n class=\"p-relative p-b-64\"\n *ngIf=\"isLoading && columnIndex === i && !selectedDevice\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <div\n class=\"p-l-8 p-r-8\"\n *ngIf=\"!column.children.length && !isLoading\"\n >\n <c8y-ui-empty-state\n [icon]=\"'folder-open'\"\n [title]=\"'No results to display.' | translate\"\n [subtitle]=\"'The selected asset has no children.' | translate\"\n *ngIf=\"!filterText; else noSearchResults\"\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","import { NgModule } from '@angular/core';\nimport { CoreModule, CommonModule, CoreSearchModule } from '@c8y/ngx-components';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { GroupNodeService } from './group-node.service';\n\nimport { AssetSelectorNodeComponent } from './asset-selector-node.component';\nimport { AssetSelectorComponent } from './asset-selector.component';\nimport { FormsModule } from '@angular/forms';\nimport { MillerViewComponent } from './miller-view.component';\nimport { AssetSelectorService } from './asset-selector.service';\n\n@NgModule({\n imports: [\n CoreModule,\n CommonModule,\n CollapseModule,\n BsDropdownModule,\n CoreSearchModule,\n FormsModule,\n AssetSelectorNodeComponent,\n AssetSelectorComponent,\n MillerViewComponent\n ],\n exports: [AssetSelectorNodeComponent, AssetSelectorComponent, MillerViewComponent],\n providers: [GroupNodeService, AssetSelectorService]\n})\nexport class AssetSelectorModule {}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { DeviceStatusModule, hookNavigator, ModalModule, ModalService } from '@c8y/ngx-components';\nimport { AssetNavigatorConfig, ASSET_NAVIGATOR_CONFIG } from './asset-node-config.model';\nimport { AssetNodeFactory } from './asset-node.factory';\nimport { AssetNodeService } from './asset-node.service';\nimport { AssetSelectorModule } from './asset-selector/asset-selector.module';\n\n@NgModule({\n declarations: [],\n imports: [ModalModule, AssetSelectorModule, DeviceStatusModule],\n providers: [ModalService, AssetNodeService, hookNavigator(AssetNodeFactory)]\n})\nexport class AssetsNavigatorModule {\n static config(config: AssetNavigatorConfig = {}): ModuleWithProviders<AssetsNavigatorModule> {\n return {\n ngModule: AssetsNavigatorModule,\n providers: [\n {\n provide: ASSET_NAVIGATOR_CONFIG,\n useValue: config\n }\n ]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["getProp","i1","i2.AssetSelectorService","i1.GroupNodeService","i3.AssetSelectorService"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"c8y-ngx-components-assets-navigator.mjs","sources":["../../assets-navigator/action.enum.ts","../../assets-navigator/load-more-node.ts","../../assets-navigator/asset-node.ts","../../assets-navigator/dynamic-group-node.ts","../../assets-navigator/asset-node-config.model.ts","../../assets-navigator/group.service.ts","../../assets-navigator/asset-node.service.ts","../../assets-navigator/asset-node.factory.ts","../../assets-navigator/asset-selector/group-node.ts","../../assets-navigator/asset-selector/group-node.service.ts","../../assets-navigator/asset-selector/asset-selector.service.ts","../../assets-navigator/asset-selector/asset-selector-node.component.ts","../../assets-navigator/asset-selector/asset-selector-node.component.html","../../assets-navigator/asset-selector/asset-selector-base.ts","../../assets-navigator/asset-selector/asset-selector.model.ts","../../assets-navigator/asset-selector/unassigned-devices-node.ts","../../assets-navigator/asset-selector/asset-selector.component.ts","../../assets-navigator/asset-selector/asset-selector.component.html","../../assets-navigator/asset-selector/miller-view.component.ts","../../assets-navigator/asset-selector/miller-view.component.html","../../assets-navigator/asset-selector/asset-selector.module.ts","../../assets-navigator/assets-navigator.module.ts","../../assets-navigator/c8y-ngx-components-assets-navigator.ts"],"sourcesContent":["export enum AssetsNavigatorAction {\n FETCH,\n NEXT,\n REFRESH,\n LOADING_DONE\n}\n","import { NavigatorNode, gettext } from '@c8y/ngx-components';\n\nexport class LoadMoreNode extends NavigatorNode {\n static NAME = 'LoadMoreNode';\n label = gettext('Load more');\n icon = 'plus';\n droppable = true;\n\n constructor() {\n super();\n this.priority = -Infinity;\n }\n\n toString() {\n return LoadMoreNode.NAME;\n }\n\n isGroup() {\n return false;\n }\n}\n","import { IIdentified, Paging } from '@c8y/client';\nimport {\n ClickOptions,\n DeviceStatusComponent,\n gettext,\n GroupFragment,\n NavigatorNode,\n NavigatorNodeData\n} from '@c8y/ngx-components';\nimport { debounce } from 'lodash-es';\nimport { BehaviorSubject, Subject, Subscription } from 'rxjs';\nimport { AssetsNavigatorAction } from './action.enum';\nimport { AssetNodeMo, AssetNodeService } from './asset-node.service';\nimport { LoadMoreNode } from './load-more-node';\n\nexport class AssetNode extends NavigatorNode {\n static NAME = 'AssetNode';\n root: boolean;\n mo: any;\n hideDevices = false;\n filterQuery$ = new BehaviorSubject<string>('');\n showChildDevices = false;\n\n /**\n * Asset node children (subentries).\n */\n children: AssetNode[] = [];\n\n get hasChildren() {\n return this.root || this.service.isGroup(this.mo);\n }\n\n get isDevice() {\n return !!this.mo.c8y_IsDevice;\n }\n\n get isDeviceOrProbablyChildDevice() {\n return this.isDevice || this.isNeitherDeviceOrGroup;\n }\n\n get isNeitherDeviceOrGroup() {\n return (\n !this.service.isGroup(this.mo) &&\n !this.service.isDynamicGroup(this.mo) &&\n !this.isDevice &&\n !this.root\n );\n }\n\n events: Subject<AssetsNavigatorAction>;\n nodesFetched: Subject<void> = new Subject();\n protected paging: Paging<AssetNodeMo>;\n protected loadMoreNode: LoadMoreNode;\n private onUpdateSubscription: Subscription;\n\n constructor(\n protected service: AssetNodeService,\n protected config: NavigatorNodeData = {}\n ) {\n super(config);\n\n this.root = this.root || false;\n this.hideDevices = config.hideDevices ?? this.hideDevices;\n this.mo = this.mo || {};\n this.path = this.getPath();\n this.draggable = !this.service?.moduleConfig?.disableDragAndDrop && !this.root;\n this.droppable =\n !this.service?.moduleConfig?.disableDragAndDrop && !this.isDeviceOrProbablyChildDevice;\n this.routerLinkExact = this.root;\n this.updateIcon(false);\n this.onUpdateSubscription = this.service\n .onUpdate(this)\n .subscribe(({ data, method }) => this.refresh(data, method));\n this.setLabel();\n this.iconComponent = this.isDeviceOrProbablyChildDevice ? DeviceStatusComponent : undefined;\n }\n\n getPath() {\n if (this.config.path) {\n return this.config.path;\n }\n\n return this.root\n ? 'group'\n : this.isDeviceOrProbablyChildDevice\n ? `device/${this.mo.id}`\n : `group/${this.mo.id}`;\n }\n\n refresh(mo: any = {}, method = 'GET') {\n if (mo?.id === this.mo.id) {\n this.mo = mo;\n this.setLabel();\n } else if (method === 'DELETE') {\n this.parents.forEach((node: AssetNode) => node.refresh());\n return;\n }\n if (this.events) {\n this.events.next(AssetsNavigatorAction.REFRESH);\n }\n }\n\n setLabel() {\n if (this.config.label || this.root) {\n this.label = this.config.label || gettext('Groups');\n this.translateLabel = true;\n } else {\n this.label = this.service.label(this.mo);\n this.translateLabel = false;\n }\n }\n\n click(options: ClickOptions = {}) {\n if (this.isDeviceOrProbablyChildDevice && !this.showChildDevices) {\n this.service.preferBreadcrumb(this.parents);\n return;\n }\n this.hookEvents();\n this.updateIcon(options.open);\n if (options.open) {\n this.events.next(AssetsNavigatorAction.FETCH);\n }\n }\n\n sort() {\n this.children.sort((a, b) => {\n if (a.priority > b.priority) {\n return -1;\n } else if (a.priority < b.priority) {\n return 1;\n } else {\n return 0;\n }\n });\n }\n\n addManagedObject(mo) {\n const { childAdditions } = this.mo;\n if (!this.isChildAddition(childAdditions, mo)) {\n this.add(this.service.createChildNode(mo, { hideDevices: this.hideDevices }));\n }\n }\n\n isChildAddition(childAdditions, mo) {\n return (\n childAdditions && childAdditions.references.some(({ managedObject: { id } }) => id === mo.id)\n );\n }\n\n destroy() {\n this.onUpdateSubscription.unsubscribe();\n }\n\n get canDrop() {\n const nodeToMove = this.service.draggedData;\n if (nodeToMove) {\n const shouldGetChildOfItsOwn = !!nodeToMove.find(child => child === this);\n const isAlreadyChild = (this.children as AssetNode[]).some(\n child => child.mo && child.mo.id === nodeToMove.mo.id\n );\n const preventMove = this === nodeToMove || shouldGetChildOfItsOwn || isAlreadyChild;\n return this.droppable && !preventMove && this.service.canDropNode(this.root);\n }\n return this.droppable;\n }\n\n dragStart($event) {\n super.dragStart($event);\n this.service.draggedData = this;\n this.service.rootNode.droppable = !this.isDeviceOrProbablyChildDevice;\n }\n\n dragEnd($event) {\n super.dragEnd($event);\n }\n\n async drop($event) {\n const nodeToMove = this.service.draggedData;\n\n // TODO remove when asset type node can be used on the root level.\n if (this.root && this.isAsset(nodeToMove)) {\n this.service.alert.info(gettext('Asset type node cannot become root node.'));\n this.draggedHover = false;\n this.service.draggedData = undefined;\n return;\n }\n\n super.drop($event);\n if (this.canDrop) {\n await this.moveNode(nodeToMove);\n } else {\n this.draggedHover = false;\n this.service.draggedData = undefined;\n }\n }\n\n hookEvents() {\n if (!this.events) {\n this.events = new Subject();\n this.events.subscribe(evt => {\n if (!this.loading) {\n this.handleEvent(evt);\n }\n });\n }\n }\n\n toString() {\n return AssetNode.NAME;\n }\n\n /**\n * Checks if the current node has child devices.\n */\n hasChildDevices() {\n return this.mo && this.mo.c8y_IsDevice && this.mo.childDevices.references.length > 0;\n }\n\n protected fetch() {\n return this.root\n ? this.service.getRootNodes()\n : this.service.getGroupItems(\n this.mo.id,\n this.hideDevices\n ? {\n query: `$filter=(has(${GroupFragment.groupFragmentType}))$orderby=name`\n }\n : {}\n );\n }\n\n protected async updateIcon(open) {\n this.icon = await this.service.icon(\n // if it's root we are going to pass a fake mo to get the same icon as groups\n this.root ? { c8y_IsDeviceGroup: {} } : this.mo,\n open\n );\n }\n\n protected countChildren() {\n return this.children.length;\n }\n\n protected async handleEvent(evt: AssetsNavigatorAction) {\n if (!this.countChildren() && evt === AssetsNavigatorAction.FETCH) {\n this.loading = true;\n this.addNodes(await this.fetch());\n this.loading = false;\n } else if (evt === AssetsNavigatorAction.NEXT) {\n this.loadMoreNode.loading = true;\n this.addNodes(await this.paging.next());\n this.loadMoreNode.loading = false;\n } else if (evt === AssetsNavigatorAction.REFRESH) {\n this.loading = false;\n this.paging = undefined;\n this.loadMoreNode = undefined;\n this.empty();\n this.events.next(AssetsNavigatorAction.FETCH);\n }\n }\n\n protected addNodes(res) {\n if (res.paging) {\n const { currentPage, nextPage, pageSize } = (this.paging = res.paging);\n if (currentPage === 1) {\n this.empty();\n }\n const itemsCount = res.data.length;\n const moreItemsAvailable = !!nextPage && itemsCount === pageSize;\n this.toggleLoadMore(moreItemsAvailable);\n }\n (res.data || res).map(mo => {\n return this.addManagedObject(mo);\n });\n this.events.next(AssetsNavigatorAction.LOADING_DONE);\n this.nodesFetched.next();\n }\n\n protected toggleLoadMore(show: boolean) {\n if (!this.loadMoreNode && show) {\n this.loadMoreNode = new LoadMoreNode();\n this.add(this.loadMoreNode);\n this.loadMoreNode.click = debounce(() => this.events.next(AssetsNavigatorAction.NEXT), 300, {\n leading: true,\n trailing: false\n });\n }\n\n if (this.loadMoreNode) {\n this.loadMoreNode.hidden = !show;\n }\n }\n\n private async moveNode(nodeToMove: AssetNode) {\n try {\n const isCopy = await this.showDropConfirm(nodeToMove);\n await this.verifyNodeAccess(nodeToMove);\n await this.addMovedNode(nodeToMove);\n if (!isCopy) {\n await this.removeMovedNode(nodeToMove);\n }\n this.expand();\n } catch (ex) {\n if (ex) {\n this.service.alert.addServerFailure(ex);\n }\n } finally {\n this.draggedHover = false;\n this.service.draggedData = undefined;\n }\n }\n\n private async showDropConfirm(nodeToMove: AssetNode) {\n this.confirm.title = gettext('Move');\n this.confirm.message = gettext('Do you want to move the group?');\n const buttons: any = [\n {\n label: gettext('Cancel'),\n action: () => Promise.reject()\n },\n {\n label: gettext('Move'),\n status: 'default',\n action: () => Promise.resolve(false)\n }\n ];\n if (nodeToMove.isDeviceOrProbablyChildDevice) {\n this.confirm.title = gettext('Move or add');\n this.confirm.message = gettext('Do you want to move or add the device?');\n buttons.push({\n label: gettext('Add'),\n status: 'primary',\n action: () => Promise.resolve(true)\n });\n }\n return this.confirm.show(buttons);\n }\n\n private async verifyNodeAccess(nodeToMove: AssetNode) {\n return this.service.inventory.update({ id: nodeToMove.mo.id });\n }\n\n private async addMovedNode(nodeToMove: AssetNode) {\n let mo: IIdentified;\n\n if (this.root && !this.isAsset(nodeToMove)) {\n mo = (\n await this.service.inventory.update({\n id: nodeToMove.mo.id,\n type: GroupFragment.groupType\n })\n ).data;\n\n this.addManagedObject(mo);\n return;\n }\n\n mo = (await this.service.inventory.childAssetsAdd(nodeToMove.mo, this.mo)).data;\n this.addManagedObject(mo);\n }\n\n private isAsset(nodeToMove: AssetNode) {\n // TODO use isAsset check when https://github.com/Cumulocity-IoT/cumulocity-ui/pull/690 is merged.\n // Do not override asset type!\n return nodeToMove.mo?.c8y_IsAsset;\n }\n\n private async removeMovedNode(nodeToMove: AssetNode) {\n for (const parent of nodeToMove.parents as AssetNode[]) {\n if (parent.mo && parent.mo.type === GroupFragment.dynamicGroupType) {\n break; // smart groups don't need to be changed\n }\n\n if (parent.root && !this.isAsset(nodeToMove)) {\n await this.service.inventory.update({\n id: nodeToMove.mo.id,\n type: GroupFragment.subGroupType\n });\n }\n\n if (!parent.root) {\n await this.service.inventory.childAssetsRemove(nodeToMove.mo, parent.mo);\n }\n parent.remove(nodeToMove);\n }\n }\n}\n","import { AssetNode } from './asset-node';\nimport { AssetNodeService } from './asset-node.service';\n\nexport class DynamicGroupNode extends AssetNode {\n constructor(protected service: AssetNodeService, config = {}) {\n super(service, config);\n this.draggable = false;\n this.droppable = false;\n }\n\n get hasChildren() {\n return true;\n }\n\n get query() {\n return this.mo.c8y_DeviceQueryString;\n }\n\n protected fetch(): any {\n return this.service.getDynamicGroupItems(this.query);\n }\n}\n","import { InjectionToken } from '@angular/core';\r\nimport { NavigatorNode } from '@c8y/ngx-components';\r\nimport { AssetNode } from './asset-node';\r\nexport const ASSET_NAVIGATOR_CONFIG = new InjectionToken<AssetNavigatorConfig>('AssetNodeConfig');\r\n\r\n/**\r\n * Configuration object of the AssetsNavigatorModule.\r\n */\r\nexport interface AssetNavigatorConfig {\r\n /**\r\n * Allows to enable smart groups in the module.\r\n * Default value: false.\r\n */\r\n smartGroups?: boolean;\r\n /**\r\n * Expands the root navigator node when the navigator is initialized.\r\n * Default value: false\r\n */\r\n openOnStart?: boolean;\r\n /**\r\n * Allows to change the position of the root group in the navigator.\r\n * The higher the value, the higher the position in navigation.\r\n * Default value: 2000.\r\n */\r\n rootNodePriority?: number;\r\n /**\r\n * Allows to drag and drop items in the asset navigator.\r\n * Default value: true.\r\n */\r\n disableDragAndDrop?: boolean;\r\n /**\r\n * Allows to override properies of the root group or hide it.\r\n * Setup examples:\r\n * - `rootNavigatorNode: true` - shows the default navigator node (default),\r\n * - `rootNavigatorNode: false` - hides the navigator node,\r\n * - `rootNavigatorNode: { label: 'New name', ... }` - overrides default navigator node,\r\n * - `rootNavigatorNode: new NavigatorNode({ label: 'New name', ... })` - overrides default navigator node,\r\n */\r\n rootNavigatorNode?: boolean | Partial<NavigatorNode | AssetNode>;\r\n}\r\n","import { Injectable } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport { GroupService as MigratedDeviceGroupService } from '@c8y/ngx-components';\n\n@Injectable({\n providedIn: 'root'\n})\n\n/**\n * @deprecated\n * Original service was moved to core/common.\n * This service is deprecated and serves as a proxy to maintain backward compatibility.\n */\nexport class DeviceGroupService {\n constructor(private migratedDeviceGroupService: MigratedDeviceGroupService) {}\n\n icon(mo: IManagedObject, open = false): Promise<string> {\n return this.migratedDeviceGroupService.getIcon(mo, open);\n }\n\n isGroup(mo: IManagedObject): boolean {\n return this.migratedDeviceGroupService.isGroup(mo);\n }\n\n isDynamicGroup(mo: IManagedObject): boolean {\n return this.migratedDeviceGroupService.isDynamicGroup(mo);\n }\n\n isDataBroker(mo: IManagedObject): boolean {\n return this.migratedDeviceGroupService.isDataBroker(mo);\n }\n\n isDataBrokerActive(mo: IManagedObject) {\n return this.migratedDeviceGroupService.isDataBrokerActive(mo);\n }\n\n isAsset(mo: IManagedObject) {\n return this.migratedDeviceGroupService.isAsset(mo);\n }\n\n isAnyGroup(mo: IManagedObject) {\n return this.migratedDeviceGroupService.isAnyGroup(mo);\n }\n\n isDevice(mo: IManagedObject) {\n return this.migratedDeviceGroupService.isDevice(mo);\n }\n}\n","import { Injectable, inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, ActivationEnd, Router } from '@angular/router';\nimport { IManagedObject, IResult, InventoryService, QueriesUtil, UserService } from '@c8y/client';\nimport {\n AlertService,\n AppStateService,\n BreadcrumbService,\n GroupFragment,\n ModalService,\n NavigatorNode,\n NavigatorNodeData,\n OptionsService,\n ViewContext,\n Permissions,\n gettext\n} from '@c8y/ngx-components';\nimport { ApiService } from '@c8y/ngx-components/api';\nimport { empty } from 'rxjs';\nimport { filter, first, mergeMap } from 'rxjs/operators';\nimport { AssetsNavigatorAction } from './action.enum';\nimport { AssetNode } from './asset-node';\nimport { ASSET_NAVIGATOR_CONFIG, AssetNavigatorConfig } from './asset-node-config.model';\nimport { DynamicGroupNode } from './dynamic-group-node';\nimport { DeviceGroupService } from './group.service';\nimport { TranslateService } from '@ngx-translate/core';\n\nexport interface AssetNodeMo {\n id: string;\n type: string;\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AssetNodeService {\n rootNode: AssetNode;\n firstUrl = true;\n draggedData: AssetNode;\n queriesUtil: QueriesUtil;\n protected PAGE_SIZE = 20;\n\n inventory = inject(InventoryService);\n apiService = inject(ApiService);\n modal = inject(ModalService);\n alert = inject(AlertService);\n translateService = inject(TranslateService);\n\n protected breadcrumbService = inject(BreadcrumbService);\n protected user = inject(UserService);\n protected appState = inject(AppStateService);\n protected optionsService = inject(OptionsService);\n moduleConfig: AssetNavigatorConfig;\n protected deviceGroupService = inject(DeviceGroupService);\n protected router = inject(Router);\n\n constructor() {\n this.moduleConfig = {\n rootNodePriority: 2000,\n ...(inject(ASSET_NAVIGATOR_CONFIG, { optional: true }) || {})\n };\n this.queriesUtil = new QueriesUtil();\n\n this.router.events\n .pipe(\n filter(\n (event: ActivationEnd) =>\n event instanceof ActivationEnd && event.snapshot.data?.contextData\n ),\n first()\n )\n .subscribe(({ snapshot }) => {\n this.expandNodesOnStart(snapshot);\n });\n }\n\n /**\n * Expands the navigator nodes on first navigation.\n * @param snapshot The current navigation snapshot.\n */\n async expandNodesOnStart(snapshot: ActivatedRouteSnapshot): Promise<void> {\n if (!this.rootNode) {\n return;\n }\n if (\n snapshot.data?.context === ViewContext.Group ||\n snapshot.data?.context === ViewContext.Device\n ) {\n const { data } = await this.inventory.detail(snapshot.data.contextData, {\n withParents: true\n });\n\n const allManagedObjectParentIds = [\n ...data.assetParents.references.map(({ managedObject }) => {\n return managedObject.id;\n }),\n data.id\n ];\n this.expandAll(this.rootNode, allManagedObjectParentIds);\n return;\n }\n\n if (this.moduleConfig.openOnStart) {\n this.expandAll(this.rootNode, []);\n }\n }\n\n /**\n * Expands all the given ids recursively. Stops if it does not find any.\n * @param node The node where the expanding should be started\n * @param ids The ids that should be expanded.\n */\n expandAll(node: AssetNode, ids: string[]) {\n node.open = true;\n node.click({ open: true });\n if (node.events) {\n node.events\n .pipe(\n filter(action => action === AssetsNavigatorAction.LOADING_DONE),\n first()\n )\n .subscribe(() => {\n const nodeToExpand = node.children.find(\n childNode => childNode.mo?.id && ids.includes(childNode.mo.id)\n );\n if (nodeToExpand) {\n this.expandAll(\n nodeToExpand,\n ids.filter(id => id !== nodeToExpand.mo.id)\n );\n }\n });\n }\n }\n\n label(mo: IManagedObject): string {\n return (\n mo.name ||\n (this.isDevice(mo) &&\n this.translateService.instant(gettext('Device {{id}}'), { id: mo.id })) ||\n '--'\n );\n }\n\n icon(mo: IManagedObject, open?: boolean): Promise<string> {\n return this.deviceGroupService.icon(mo, open);\n }\n\n isGroup(mo: IManagedObject) {\n return this.deviceGroupService.isGroup(mo);\n }\n\n isDynamicGroup(mo: IManagedObject) {\n return this.deviceGroupService.isDynamicGroup(mo);\n }\n\n isDataBroker(mo: IManagedObject) {\n return this.deviceGroupService.isDataBroker(mo);\n }\n\n isDataBrokerActive(mo: IManagedObject) {\n return this.deviceGroupService.isDataBrokerActive(mo);\n }\n\n isAsset(mo: IManagedObject) {\n return this.deviceGroupService.isAsset(mo);\n }\n\n isAnyGroup(mo: IManagedObject) {\n return this.deviceGroupService.isAnyGroup(mo);\n }\n\n isDevice(mo: IManagedObject) {\n return this.deviceGroupService.isDevice(mo);\n }\n\n createRootNode(config: NavigatorNodeData = {}) {\n this.rootNode = this.createAssetNode({\n root: true,\n ...config,\n priority: this.moduleConfig.rootNodePriority,\n featureId: 'groups'\n });\n return this.rootNode;\n }\n\n createDynamicGroupNode(config) {\n return new DynamicGroupNode(this, config);\n }\n\n createAssetNode(config: Partial<AssetNode>) {\n return new AssetNode(this, config);\n }\n\n createChildNode(managedObject, config: Partial<AssetNode>) {\n const { type } = managedObject;\n config.mo = managedObject;\n if (type === GroupFragment.dynamicGroupType) {\n return this.createDynamicGroupNode(config);\n }\n return this.createAssetNode(config);\n }\n\n getRootNodes(customFilter?: any): Promise<any> {\n const defaultFilter = {\n pageSize: this.PAGE_SIZE,\n withChildren: false,\n onlyRoots: !this.optionsService.disableOnlyRootsQuery,\n query: this.queriesUtil.buildQuery(this.navRootQueryFilter())\n };\n const groupFilter = { ...defaultFilter, ...customFilter };\n\n // due to BE performance limitations we do not allow filtering and sorting for a user without inventory roles\n if (\n this.appState?.currentUser?.value &&\n !this.user.hasAnyRole(this.appState.currentUser.value, [\n Permissions.ROLE_INVENTORY_READ,\n Permissions.ROLE_MANAGED_OBJECT_READ\n ])\n ) {\n delete groupFilter.query;\n Object.assign(groupFilter, {\n fragmentType: GroupFragment.groupFragmentType,\n onlyRoots: true\n });\n }\n return this.inventory.list(this.createFilter(groupFilter));\n }\n\n getAllInventories(customFilter?: any): Promise<any> {\n const defaultFilter = {\n pageSize: this.PAGE_SIZE,\n withChildren: false\n };\n const groupFilter = { ...defaultFilter, ...customFilter };\n return this.inventory.list(this.createFilter(groupFilter));\n }\n\n getGroupItems(moId: string, extraFilter: object = {}, withChildren = false, filterQuery = '') {\n const queryFilter = {\n withChildren,\n pageSize: this.PAGE_SIZE,\n query: this.groupQueryFilter(moId, filterQuery)\n };\n return this.inventory.childAssetsList(moId, { ...queryFilter, ...extraFilter });\n }\n\n getUnassignedDevices(withChildren = false, filterQuery = '') {\n const queryFilter: any = {\n fragmentType: 'c8y_IsDevice',\n onlyRoots: true,\n withChildren,\n pageSize: this.PAGE_SIZE,\n q: this.getUnassignedDevicesQueryStr(filterQuery)\n };\n return this.inventory.list(this.createFilter(queryFilter));\n }\n\n getDynamicGroupItems(groupQuery: string, filterObj: any = {}) {\n const { query, ...queryParams } = filterObj;\n const orderByQuery = query;\n const queryFilter = {\n q: this.buildCombinedQuery(groupQuery, orderByQuery),\n ...queryParams\n };\n return this.inventory.list(this.createFilter(queryFilter));\n }\n\n getDeviceChildren(\n moId: string,\n extraFilter: object = {},\n filterQuery = '',\n withChildren = false\n ) {\n const queryFilter = {\n withChildren,\n pageSize: this.PAGE_SIZE,\n query: this.groupQueryFilter(moId, filterQuery)\n };\n return this.inventory.childDevicesList(moId, { ...queryFilter, ...extraFilter });\n }\n\n getUnassignedDevicesQueryStr(filterQuery): string {\n const hasGroupId = filterQuery.includes('bygroupid');\n // Fetch all unassigned devices.\n const defaultQueryStr = '$orderby=name';\n\n // filterQuery is a custom query to fetch unassigned devices filtered by name.\n return hasGroupId || !filterQuery ? defaultQueryStr : filterQuery;\n }\n\n groupQueryFilter(moId: string, filterQuery?: string) {\n if (!filterQuery) {\n return `$filter=(bygroupid(${moId}))$orderby=name`;\n }\n return filterQuery;\n }\n\n navRootQueryFilter() {\n const navRootFilter = this.rootQueryFilter();\n navRootFilter.__orderby = [{ name: 1 }];\n return navRootFilter;\n }\n\n rootQueryFilter() {\n const { moduleConfig } = this;\n const rootFilter = this.optionsService.disableOnlyRootsQuery\n ? {\n __filter: {\n type: GroupFragment.groupType\n },\n __orderby: []\n }\n : {\n __filter: {\n __has: GroupFragment.groupFragmentType\n },\n __orderby: []\n };\n if (moduleConfig.smartGroups) {\n const queryFilter = {\n __filter: {\n __and: [\n {\n type: GroupFragment.dynamicGroupType\n },\n {\n __has: GroupFragment.dynamicGroupFragment\n },\n { __not: { __has: `${GroupFragment.dynamicGroupFragment}.invisible` } }\n ]\n }\n };\n this.queriesUtil.addOrFilter(rootFilter, queryFilter);\n }\n return rootFilter;\n }\n\n onUpdate({ mo, root }) {\n if (mo.id) {\n return this.apiService\n .hookResponse(\n ({ url, method }) =>\n ['PUT', 'DELETE', 'POST'].includes(method) &&\n RegExp(`inventory/managedObjects/${mo.id}`).test(url)\n )\n .pipe(\n filter(() => !this.draggedData),\n this.apiService.excludePermissionCall(),\n mergeMap(this.apiService.resolveData<IManagedObject>),\n filter(response => !response?.data?.c8y_Dashboard)\n );\n } else if (root) {\n return this.apiService\n .hookResponse(\n ({ url, method }) => RegExp('inventory/managedObjects/?$').test(url) && method === 'POST'\n )\n .pipe(\n mergeMap(this.apiService.resolveData<IManagedObject>),\n filter(response => this.isNewManagedObjectRoot(response))\n );\n } else {\n return empty();\n }\n }\n\n isNewManagedObjectRoot(response: Partial<IResult<IManagedObject>> = {}) {\n const { data } = response;\n let isRootAsset = false;\n\n if (typeof data === 'object') {\n isRootAsset = !!data[GroupFragment.groupFragmentType];\n if (!isRootAsset && this.moduleConfig.smartGroups) {\n isRootAsset = !!data[GroupFragment.dynamicGroupFragment];\n }\n }\n return isRootAsset;\n }\n\n /**\n * Check if it is possible to drop a node after dragging.\n * @param dropOnRoot Is the drop performed on the root node\n */\n canDropNode(dropOnRoot: boolean): boolean {\n return (\n !dropOnRoot ||\n this.user.hasAnyRole(this.appState.currentUser.value, [\n Permissions.ROLE_INVENTORY_ADMIN,\n Permissions.ROLE_MANAGED_OBJECT_ADMIN\n ])\n );\n }\n\n /**\n * There could be multiple breadcrumbs for devices,\n * so we set a preferred one on click on a device.\n * @param parents The parent nodes of the device to select the prefered one.\n */\n preferBreadcrumb(parents: NavigatorNode[]) {\n if (parents.length === 1) {\n this.breadcrumbService.selectPreferredByPath(parents[0].path);\n }\n }\n\n protected createFilter(extraParams: any = {}) {\n const params = {\n currentPage: 1,\n withTotalPages: true,\n pageSize: 10\n };\n return { ...params, ...extraParams };\n }\n\n private buildCombinedQuery(queryA, queryB) {\n let combinedQuery;\n if (queryA && queryB) {\n const filterQuery = this.queriesUtil.buildQuery([\n {\n __useFilterQueryString: queryA\n },\n {\n __useFilterQueryString: queryB\n }\n ]);\n const orberByQuery = this.queriesUtil.extractAndMergeOrderBys([queryA, queryB]);\n combinedQuery = `${filterQuery} ${orberByQuery}`;\n } else {\n combinedQuery = queryA || queryB || '';\n }\n return combinedQuery;\n }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { get as getProp } from 'lodash-es';\nimport { AssetNode } from './asset-node';\nimport { AssetNavigatorConfig, ASSET_NAVIGATOR_CONFIG } from './asset-node-config.model';\nimport { AssetNodeService } from './asset-node.service';\n\n@Injectable()\nexport class AssetNodeFactory {\n constructor(\n private service: AssetNodeService,\n @Optional() @Inject(ASSET_NAVIGATOR_CONFIG) public moduleConfig: AssetNavigatorConfig\n ) {}\n\n get(): AssetNode {\n const rootNavigatorNode = getProp(this.moduleConfig, 'rootNavigatorNode') ?? true;\n let { rootNode } = this.service;\n\n if (rootNavigatorNode === false) {\n return;\n }\n\n if (!rootNode) {\n rootNode = this.service.createRootNode(rootNavigatorNode === true ? {} : rootNavigatorNode);\n }\n return rootNode;\n }\n}\n","import { GroupFragment } from '@c8y/ngx-components';\nimport { GroupNodeService } from './group-node.service';\nimport { AssetNode } from '../asset-node';\nimport { GroupNodeConfig } from './asset-selector.model';\n\nexport class GroupNode extends AssetNode {\n static NAME = 'GroupNode';\n\n /**\n * Set this true, if only groups should be shown.\n */\n groupsOnly = false;\n\n /**\n * Set this true, if it groups are also selectable.\n */\n groupsSelectable = false;\n /**\n * Devices with children can be selected to show their child devices.\n */\n showChildDevices = false;\n\n /**\n * Group node children (subentries).\n */\n children: GroupNode[] = [];\n\n /**\n * Creates a new node which shows only groups.\n *\n * @param service The service to use.\n * @param config The default configuration of the node.\n * @param groupsOnly Set this true, if only groups should be shown.\n * @param selectable Set this true, if it is selectable.\n */\n\n constructor(protected service: GroupNodeService, config: GroupNodeConfig = {}) {\n super(service, config);\n this.groupsOnly = config.groupsOnly || false;\n this.groupsSelectable = config.groupsSelectable || false;\n this.showChildDevices = config.showChildDevices || false;\n }\n\n /**\n * Adds the MO as a child node.\n * @param mo ManagedObject\n */\n addManagedObject(mo) {\n const { childAdditions } = this.mo;\n if (!this.isChildAddition(childAdditions, mo)) {\n this.add(\n this.service.createChildNode({\n mo,\n groupsOnly: this.groupsOnly,\n groupsSelectable: this.groupsSelectable,\n showChildDevices: this.showChildDevices\n })\n );\n }\n }\n\n /**\n * Counts the number of children for the current node (with the exception of the UnassignedDevicesNode).\n */\n countChildren(): number {\n return this.children.filter(value => value.toString() !== 'UnassignedDevicesNode').length;\n }\n\n /**\n * Removes all child nodes except the UnassignedDevicesNode.\n */\n empty() {\n this.children = this.children.filter(value => value.toString() === 'UnassignedDevicesNode');\n }\n\n fetch() {\n const isRoot = this.root;\n const isDevice = this.mo.c8y_IsDevice;\n return isRoot\n ? this.service.getRootNodes()\n : isDevice\n ? this.service.getDeviceChildren(\n this.mo.id,\n {},\n this.filterQuery$.value,\n this.showChildDevices\n )\n : this.service.getGroupItems(\n this.mo.id,\n this.groupsOnly\n ? {\n query: `$filter=(has(${GroupFragment.groupFragmentType}))`\n }\n : {},\n this.showChildDevices,\n this.filterQuery$.value\n );\n }\n\n toString() {\n return GroupNode.NAME;\n }\n\n isGroup() {\n return this.mo && this.service.isGroup(this.mo);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { AssetNodeService } from '../asset-node.service';\nimport { GroupNodeConfig } from './asset-selector.model';\nimport { GroupNode } from './group-node';\n\n@Injectable({ providedIn: 'root' })\nexport class GroupNodeService extends AssetNodeService {\n protected PAGE_SIZE = 5;\n\n createGroupNode(config: GroupNodeConfig) {\n return new GroupNode(this, config);\n }\n\n createChildNode(config: GroupNodeConfig): GroupNode {\n return this.createGroupNode(config);\n }\n}\n","import { Injectable } from '@angular/core';\nimport { IIdentified, IManagedObject } from '@c8y/client';\nimport { AssetNodeService } from '../asset-node.service';\nimport { isArray, isNumber, isObject, isString } from 'lodash';\nimport { GroupNode } from './group-node';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AssetSelectorService extends AssetNodeService {\n /**\n * Function which will check if the node is selectable.\n */\n private isNodeSelectableFn: boolean | ((node: GroupNode) => boolean) = true;\n\n /**\n * Sets the function that will decide if the node is selectable.\n * @param fn A boolean or a function that will decide if the node is selectable.\n */\n setIsNodeSelectable(fn: boolean | ((node: GroupNode) => boolean)): void {\n this.isNodeSelectableFn = fn;\n }\n\n /**\n * Checks if the node is selectable.\n * @param node The node to check.\n */\n isNodeSelectable(node: GroupNode): boolean {\n if (typeof this.isNodeSelectableFn === 'boolean') {\n return this.isNodeSelectableFn;\n } else if (typeof this.isNodeSelectableFn === 'function') {\n return this.isNodeSelectableFn(node);\n }\n return true;\n }\n /**\n * Simplifies the object model based on the selected mode.\n * @param obj The selected asset.\n * @param mode The mode which will decide what type of model will be returned.\n */\n normalizeValue(\n obj: Partial<IManagedObject>,\n modelMode: 'simple' | 'full'\n ): Partial<IManagedObject> | IIdentified {\n return this.simplifyModel(this.normalizeModelValue(obj), modelMode);\n }\n\n simplifyModel(\n model: Partial<IManagedObject> | IIdentified[],\n mode: 'simple' | 'full'\n ): Partial<IManagedObject> | IIdentified {\n const mapModel = model => {\n const { id, name, c8y_DeviceQueryString } = model as IIdentified;\n return { id, name, ...(c8y_DeviceQueryString ? { c8y_DeviceQueryString } : {}) };\n };\n\n if (mode === 'full') {\n return model;\n }\n if (!isArray(model)) {\n return mapModel(model);\n }\n return model.map(mapModel);\n }\n\n /**\n * Returns the index of the currently selected item.\n * @param selected All selected items\n * @param selectedMo The new selected item-\n * @returns An index, or -1 if not found.\n */\n getIndexOfSelected(\n selected: Array<Partial<IIdentified>> | Partial<IIdentified>,\n selectedMo: IIdentified\n ) {\n return selected.findIndex(mo => mo.id === selectedMo.id);\n }\n\n private normalizeModelValue(value: any): IIdentified[] {\n if (isNumber(value) || isString(value)) {\n return [{ id: value }];\n }\n if (isArray(value)) {\n return value;\n }\n if (isObject(value)) {\n return [value];\n }\n return [];\n }\n}\n","import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { IIdentified, IManagedObject } from '@c8y/client';\nimport {\n gettext,\n IconDirective,\n C8yTranslateDirective,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { AssetsNavigatorAction } from '../action.enum';\nimport { AssetSelectorService } from './asset-selector.service';\nimport { GroupNode } from './group-node';\nimport { NgIf, NgStyle, NgClass, NgFor } from '@angular/common';\nimport { CollapseDirective } from 'ngx-bootstrap/collapse';\n\n@Component({\n selector: 'c8y-asset-selector-node',\n templateUrl: './asset-selector-node.component.html',\n imports: [\n NgIf,\n NgStyle,\n NgClass,\n IconDirective,\n C8yTranslateDirective,\n CollapseDirective,\n NgFor,\n C8yTranslatePipe\n ]\n})\nexport class AssetSelectorNodeComponent implements OnInit {\n /**\n * The current node.\n */\n @Input() node: GroupNode;\n /**\n * Root node. Node found at the top of the hierarchy.\n */\n @Input() rootNode: GroupNode;\n /**\n * All preselected items.\n */\n @Input() preselected: IIdentified | IIdentified[] = [];\n /**\n * Should the path be shown.\n */\n @Input() showPath = false;\n /**\n * Can the user select multiple assets.\n */\n @Input() multi = false;\n /**\n * The current path to the node.\n */\n @Input() view: 'tree' | 'miller' = 'tree';\n /**\n * Used only for miller-view, displays the column level for the current node.\n * E.g if the index is one, this will be second column.\n */\n @Input() index;\n /**\n * Sets the active node.\n */\n @Input() active: GroupNode;\n /**\n * A function that should verify the need to add a column when a node is clicked.\n */\n @Input() handleNextMillerViewColumn: (node: GroupNode, index: number) => boolean;\n\n @Input() disabled = false;\n /**\n * Event, which indicates whether the loading of the node has completed.\n */\n @Output() isLoadingState: EventEmitter<boolean> = new EventEmitter();\n /**\n * Event that emits when a node is selected.\n */\n @Output() onSelect: EventEmitter<IManagedObject> = new EventEmitter();\n /**\n * Event that emits when a node is deselected.\n */\n @Output() onDeselect: EventEmitter<{ deselectMode: 'single' | 'all'; mo: IManagedObject }> =\n new EventEmitter();\n\n breadcrumb: string;\n /**\n * @ignore\n */\n level = 0;\n /**\n * @ignore\n */\n unsubscribe$ = new Subject<void>();\n isNodeSelectable = true;\n\n /** sets the `btn-pending` class in the load more button */\n isLoading = false;\n /**\n * @ignore\n */\n get expandTitle() {\n return !this.node.open ? gettext('Expand') : gettext('Collapse');\n }\n\n /**\n * @ignore only di\n */\n constructor(\n private translateService: TranslateService,\n private cd: ChangeDetectorRef,\n public assetSelectorService: AssetSelectorService\n ) {}\n\n /**\n * @ignore\n */\n async ngOnInit() {\n this.isNodeSelectable = this.assetSelectorService.isNodeSelectable(this.node);\n this.breadcrumb = this.node.label;\n this.setupBreadcrumbsAndLevel(this.node);\n\n if (this.node instanceof GroupNode) {\n this.node.hookEvents();\n }\n\n // open on startup\n if (this.node.root) {\n this.click();\n }\n\n // used for loading and to trigger change detection when the node is no longer loading.\n if (this.node.events) {\n this.node.events\n .pipe(\n takeUntil(this.unsubscribe$),\n filter((a: AssetsNavigatorAction) => a === AssetsNavigatorAction.LOADING_DONE)\n )\n .subscribe(() => {\n this.isLoadingState.emit(false);\n this.cd.markForCheck();\n });\n }\n }\n\n /**\n * Opens a node.\n */\n click() {\n this.node.open = !this.node.open;\n this.node.click({ open: this.node.open });\n }\n\n setupBreadcrumbsAndLevel(node: GroupNode) {\n if (node.parents && node.parents.length) {\n const parent = node.parents[0] as GroupNode;\n this.breadcrumb =\n this.translateService.instant(parent.label) +\n ' > ' +\n this.translateService.instant(this.breadcrumb);\n this.level++;\n\n this.setupBreadcrumbsAndLevel(parent);\n }\n }\n\n /**\n * Selects the node and emits a change on the parent component.\n * @param node The node to select.\n */\n selected(node: GroupNode) {\n if (node.mo) {\n this.updateSelection(node.mo);\n return;\n }\n this.click();\n }\n\n /**\n * Handles clicks on a item in Miller View.\n * @param node The node that was clicked.\n */\n millerViewClick(node: GroupNode) {\n node.breadcrumb = this.breadcrumb;\n\n if (!this.handleNextMillerViewColumn) {\n return;\n }\n const shouldHandleDefault = this.handleNextMillerViewColumn(node, this.index);\n if (shouldHandleDefault) {\n this.selected(node);\n }\n }\n\n /**\n * @ignore\n */\n ngOnDestroy(): void {\n this.unsubscribe$.next();\n this.unsubscribe$.complete();\n }\n\n isSelected() {\n if (!this.node.mo) {\n return false;\n }\n return this.assetSelectorService.getIndexOfSelected(this.preselected, this.node.mo) > -1;\n }\n\n isActive() {\n if (this.active && this.node.mo) {\n return this.active.mo?.id === this.node.mo.id;\n }\n return false;\n }\n\n private updateSelection(selectedMo: IManagedObject) {\n if (!this.multi) {\n this.onDeselect.emit({ deselectMode: 'all', mo: selectedMo });\n return;\n }\n if (this.isSelected()) {\n this.onDeselect.emit({ deselectMode: 'single', mo: selectedMo });\n return;\n }\n this.onSelect.emit(selectedMo);\n this.cd.markForCheck();\n }\n}\n","<!-- Hierarchy tree -->\n<div\n class=\"c8y-asset-selector__item\"\n [ngStyle]=\"{\n 'margin-left': level > 1 ? 16 + 'px' : '0'\n }\"\n *ngIf=\"view === 'tree'\"\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>\n <div\n class=\"c8y-asset-selector__node\"\n title=\"{{ breadcrumb | translate }}\"\n *ngIf=\"node && !node.root && !node.hidden\"\n [attr.role]=\"view === 'tree' ? 'treeitem' : 'listitem'\"\n [ngClass]=\"{ 'c8y-asset-selector__node--open': node?.open }\"\n >\n <!-- expand button -->\n <div class=\"c8y-asset-selector__node__btn-spacer\">\n <button\n class=\"collapse-btn btn-dot\"\n [title]=\"expandTitle | translate\"\n [attr.aria-expanded]=\"node.open\"\n (click)=\"click()\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n >\n <i c8yIcon=\"angle-right\"></i>\n </button>\n </div>\n <div\n class=\"d-flex a-i-center p-t-4 p-b-4\"\n *ngIf=\"node.toString() !== 'LoadMoreNode' && isNodeSelectable\"\n >\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]=\"disabled || !node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span\n class=\"sr-only\"\n for=\"nodeLabel\"\n translate\n >\n Node label\n </span>\n </label>\n </div>\n\n <!-- group button -->\n <button\n class=\"c8y-asset-selector__btn text-truncate\"\n [attr.aria-expanded]=\"!node.open\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n (click)=\"click()\"\n >\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Smart group' | translate\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n ></i>\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Group' | translate\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n <!-- use just for search results to display the path -->\n <p\n class=\"text-truncate\"\n *ngIf=\"showPath\"\n >\n <small\n class=\"text-muted\"\n title=\"{{ breadcrumb }}\"\n >\n <em>{{ breadcrumb }}</em>\n </small>\n </p>\n <!-- up to here -->\n </span>\n </button>\n <!-- not a group button -->\n <button\n class=\"flex-grow\"\n title=\"{{ breadcrumb }}\"\n type=\"button\"\n *ngIf=\"!node.isGroup() && !node.hasChildDevices()\"\n [ngClass]=\"{\n 'btn btn-default btn-sm m-b-8 m-r-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 >\n <i\n class=\"c8y-icon c8y-icon-duocolor m-r-4 text-16\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Smart group' | translate\"\n *ngIf=\"node.icon === 'c8y-group-smart'\"\n ></i>\n <i\n class=\"c8y-icon m-r-4\"\n [c8yIcon]=\"node.icon\"\n [title]=\"'Group' | translate\"\n *ngIf=\"node.icon !== 'c8y-group-smart'\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16 ': node.icon != 'plus' }\"\n ></i>\n <span title=\"{{ breadcrumb }}\">\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n <!-- use just for search results to display the path -->\n <p\n class=\"text-truncate text-muted small\"\n *ngIf=\"showPath\"\n >\n <em>{{ breadcrumb }}</em>\n </p>\n <!-- up to here -->\n </span>\n </button>\n </div>\n <div\n class=\"collapse\"\n *ngIf=\"node.countChildren()\"\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 [disabled]=\"disabled\"\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 class=\"miller-column__item bg-inherit\"\n title=\"{{ breadcrumb | translate }}\"\n *ngIf=\"node && !node.root && !node.hidden && node !== rootNode\"\n [ngClass]=\"{\n active: isActive(),\n 'miller-column__item--more': node.toString() === 'LoadMoreNode'\n }\"\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]=\"isSelected()\"\n [disabled]=\"disabled || !node.groupsSelectable && node.isGroup()\"\n />\n <span></span>\n <span\n class=\"sr-only\"\n for=\"nodeLabel2\"\n translate\n >\n Node label\n </span>\n </label>\n </div>\n\n <button\n title=\"{{ breadcrumb | translate }}\"\n type=\"button\"\n [ngClass]=\"{\n 'btn btn-default btn-sm d-flex flex-grow j-c-center m-l-16 m-r-16 m-b-4 m-t-4':\n node.toString() === 'LoadMoreNode',\n 'miller-column__item__btn': node.toString() !== 'LoadMoreNode',\n 'btn-pending': node.loading && node.toString() === 'LoadMoreNode'\n }\"\n (click)=\"millerViewClick(node)\"\n >\n <i\n class=\"c8y-icon m-r-4\"\n [c8yIcon]=\"node.icon\"\n [ngClass]=\"{ 'c8y-icon-duocolor text-16': node.toString() !== 'LoadMoreNode' }\"\n ></i>\n <div class=\"text-left text-truncate\">\n <p\n class=\"text-truncate\"\n title=\"{{ node.translateLabel ? (node.label | translate) : node.label }}\"\n >\n {{ node.translateLabel ? (node.label | translate) : node.label }}\n </p>\n <!-- use just for search results to display the path -->\n <small\n class=\"text-muted text-truncate\"\n title=\"{{ breadcrumb }}\"\n *ngIf=\"showPath\"\n >\n <em>{{ breadcrumb }}</em>\n </small>\n <!-- up to here -->\n </div>\n <span\n class=\"p-l-4 m-l-auto\"\n *ngIf=\"node.isGroup() || node.hasChildDevices()\"\n >\n <i c8yIcon=\"angle-right\"></i>\n </span>\n </button>\n </div>\n\n <div\n role=\"list\"\n *ngIf=\"node\"\n [ngClass]=\"{ hidden: node !== rootNode }\"\n >\n <c8y-asset-selector-node\n role=\"listitem\"\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 [active]=\"active\"\n [disabled]=\"disabled\"\n [handleNextMillerViewColumn]=\"handleNextMillerViewColumn\"\n (onSelect)=\"onSelect.emit($event)\"\n (onDeselect)=\"onDeselect.emit($event)\"\n ></c8y-asset-selector-node>\n </div>\n</div>\n","import { EventEmitter } from '@angular/core';\nimport { IIdentified, IManagedObject, InventoryService } from '@c8y/client';\nimport { GroupNodeService } from './group-node.service';\nimport { AssetSelectorService } from './asset-selector.service';\nimport { AssetSelectionChangeEvent, AssetSelectorOptions } from './asset-selector.model';\nimport { AbstractControl, ValidationErrors } from '@angular/forms';\n\nexport class AssetSelectorBase {\n /**\n * Config object containing all options for the asset selector.\n */\n config: AssetSelectorOptions = {};\n /**\n * An array of predefined nodes.\n */\n selected: Array<Partial<IManagedObject>> | IIdentified[] | IIdentified;\n /**\n * The loading state of the current node.\n */\n isLoading = false;\n /**\n * Emit the selected asset or assets.\n */\n onSelected = new EventEmitter<AssetSelectionChangeEvent>();\n /**\n * Emits if the currently selected asset is cleared.\n */\n onClearSelected = new EventEmitter<void>();\n\n private onChange: (mo: IIdentified[] | IIdentified) => void;\n private onTouched: () => void;\n\n constructor(\n protected groupNodeService: GroupNodeService,\n protected inventory: InventoryService,\n protected assetSelectorService: AssetSelectorService\n ) {}\n\n /**\n * @ignore\n */\n validate(control: AbstractControl): ValidationErrors {\n if (this.config.required && (!control.value || control.value.length === 0)) {\n return { required: true };\n }\n return null;\n }\n\n /**\n * @ignore\n */\n writeValue(obj: any): void {\n this.selected = this.assetSelectorService.normalizeValue(obj, this.config.modelMode);\n }\n\n /**\n * @ignore\n */\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n /**\n * @ignore\n */\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n /**\n * @ignore\n */\n doBlur() {\n if (this.onTouched) {\n this.onTouched();\n }\n }\n\n /**\n * Deselects all expect the given one.\n * @param selectedMo The selected asset (optional, if empty -> just deselect all).\n */\n deselectAll(selectedMo?: IManagedObject) {\n this.selected = [];\n if (selectedMo) {\n this.selected = [this.assetSelectorService.simplifyModel(selectedMo, this.config.modelMode)];\n }\n this.emitChange(this.selected, selectedMo, !!selectedMo);\n this.doBlur();\n }\n\n /**\n * Adds an managed object to the selected array and emits the change.\n * @param selectedMo The selected asset.\n */\n select(selectedMo: IManagedObject) {\n if (!this.config.multi) {\n this.selected = [];\n }\n const index = this.getIndexOfSelected(this.selected, selectedMo);\n if (index === -1) {\n this.selected.push(\n this.assetSelectorService.simplifyModel(selectedMo, this.config.modelMode)\n );\n }\n this.emitChange(this.selected, selectedMo, true);\n this.doBlur();\n }\n\n /**\n * Removes a managed object from the selected array and emits the change.\n * @param selectedMo The selected asset.\n */\n deselect(selectedMo: IManagedObject) {\n const index = this.getIndexOfSelected(this.selected, selectedMo);\n if (index > -1) {\n this.selected.splice(index, 1);\n }\n this.emitChange(this.selected, selectedMo, false);\n this.doBlur();\n }\n\n /**\n * Returns the index of the currently selected item.\n * @param selected All selected items\n * @param selectedMo The new selected item-\n * @returns An index, or -1 if not found.\n */\n getIndexOfSelected(\n selected: Array<Partial<IIdentified>> | Partial<IIdentified>,\n selectedMo: IIdentified\n ) {\n return selected.findIndex(mo => mo.id === selectedMo.id);\n }\n\n emitChange(selected: IIdentified | IIdentified[], item: IManagedObject, isSelected: boolean) {\n const changes = this.config.multi ? selected : selected[0];\n if (this.onChange) {\n this.onChange(changes);\n }\n this.onSelected.emit({ items: changes, change: { item, isSelected } });\n }\n\n createDefaultRootNode() {\n return this.groupNodeService.createGroupNode({\n root: true,\n groupsSelectable: this.config.groupsSelectable,\n groupsOnly: this.config.groupsOnly,\n showChildDevices: this.config.showChildDevices\n });\n }\n async createManagedObjectRootNode(asset: IIdentified) {\n if ((asset as IIdentified).id) {\n return this.groupNodeService.createGroupNode({\n mo: asset as IManagedObject,\n groupsSelectable: this.config.groupsSelectable,\n groupsOnly: this.config.groupsOnly,\n showChildDevices: this.config.showChildDevices\n });\n }\n const { data: mo } = await this.inventory.detail(asset);\n return this.groupNodeService.createGroupNode({\n mo,\n groupsSelectable: this.config.groupsSelectable,\n groupsOnly: this.config.groupsOnly,\n showChildDevices: this.config.showChildDevices\n });\n }\n}\n","import { IManagedObject } from '@c8y/client';\nimport { IIdentified } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components';\n\nexport interface AssetSelectionChangeEvent {\n items: IIdentified | IIdentified[];\n change: { item: IManagedObject; isSelected: boolean };\n}\n\nexport interface GroupNodeConfig {\n root?: boolean;\n mo?: IManagedObject;\n groupsOnly?: boolean;\n groupsSelectable?: boolean;\n showChildDevices?: boolean;\n}\n\nexport const CONFIG_OPTIONS_DEFAULT: AssetSelectorOptions = {\n label: gettext('Asset selection'),\n multi: false,\n showFilter: false,\n columnHeaders: false,\n singleColumn: false,\n modelMode: 'simple',\n groupsOnly: false,\n groupsSelectable: false,\n search: false,\n showUnassignedDevices: false,\n view: 'tree',\n showChildDevices: false,\n showSelected: true\n};\n\nexport interface AssetSelectorOptions {\n /**\n * Already selected devices.\n */\n selectedDevices?: IIdentified | IIdentified[];\n /**\n * Defines a label to be shown to the user.\n */\n label?: string;\n /**\n * Can the user select multiple assets.\n */\n multi?: boolean;\n /**\n * displays a filter input on every column when using the miller view.\n */\n showFilter?: boolean;\n /**\n * displays a column header on every column when using the miller view.\n */\n columnHeaders?: boolean;\n /**\n * Displays only the select column.\n */\n singleColumn?: boolean;\n /**\n * Set to true to mark it as required on a form.\n */\n required?: boolean;\n /**\n * In simple model-mode the result will only contain the IDs and name of the selected\n * assets. In full mode, everything is contained.\n */\n modelMode?: 'simple' | 'full';\n /**\n * Set this to true, if the selector should only show groups.\n */\n groupsOnly?;\n /**\n * Set this true, if groups should be selectable.\n */\n groupsSelectable?;\n /**\n * Enable to display global search in the asset-selector (only possible whithout device context).\n */\n search?: boolean;\n /**\n * Displays all unassigned devices in a custom root group.\n */\n showUnassignedDevices?: boolean;\n /**\n * Set the view of the asset selector with tree view as default.\n */\n view?: 'tree' | 'miller';\n /**\n * Used only for miller-view, displays the column level for the current node.\n * E.g if the index is one, this will be second column.\n */\n index?: number;\n /**\n * Used only for single column, the array contains all selected columns.\n */\n selectedColumns?: IIdentified[] | IIdentified;\n /**\n * Devices with children can be selected to show their child devices.\n */\n showChildDevices?: boolean;\n /**\n * Allows to show chips at the top with the currently selected asset for multi select.\n * For single select it shows the currently selected asset.\n */\n showSelected?: boolean;\n /**\n * Prevents automatic asset selection on component initialization.\n */\n preventInitialSelect?: boolean;\n}\n","import { ClickOptions, gettext } from '@c8y/ngx-components';\nimport { AssetsNavigatorAction } from '../action.enum';\nimport { GroupNodeConfig } from './asset-selector.model';\nimport { GroupNode } from './group-node';\nimport { GroupNodeService } from './group-node.service';\n\nexport class UnassignedDevicesNode extends GroupNode {\n static NAME = 'UnassignedDevicesNode';\n label = gettext('Unassigned devices');\n icon = 'delete-folder';\n groupsSelectable = false;\n groupsOnly = false;\n showChildDevices = false;\n mo = {};\n\n constructor(\n protected service: GroupNodeService,\n config: GroupNodeConfig = {}\n ) {\n super(service, config);\n this.priority = Infinity;\n this.showChildDevices = config.showChildDevices || false;\n }\n\n click(options: ClickOptions = {}) {\n this.hookEvents();\n if (options.open) {\n this.events.next(AssetsNavigatorAction.FETCH);\n }\n }\n\n addManagedObject(mo) {\n this.add(this.service.createChildNode({ mo, showChildDevices: this.showChildDevices }));\n }\n\n fetch() {\n return this.service.getUnassignedDevices(this.showChildDevices, this.filterQuery$.value);\n }\n\n isGroup() {\n return true;\n }\n\n toString() {\n return UnassignedDevicesNode.NAME;\n }\n\n setLabel() {\n // do nothing, as this item has a hardcoded label.\n // This is only to overwrite the default inherited method.\n this.label = this.label;\n }\n\n async updateIcon() {\n // do nothing, as this item has a hardcoded label.\n // This is only to overwrite the default inherited method.\n this.icon = this.icon;\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n SimpleChanges,\n ViewChild,\n forwardRef\n} from '@angular/core';\nimport { NG_VALIDATORS, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\nimport { IIdentified, IManagedObject, InventoryService } from '@c8y/client';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { takeUntil, tap } from 'rxjs/operators';\nimport { AssetSelectorBase } from './asset-selector-base';\nimport {\n AssetSelectionChangeEvent,\n AssetSelectorOptions,\n CONFIG_OPTIONS_DEFAULT\n} from './asset-selector.model';\nimport { AssetSelectorService } from './asset-selector.service';\nimport { GroupNode } from './group-node';\nimport { GroupNodeService } from './group-node.service';\nimport { UnassignedDevicesNode } from './unassigned-devices-node';\nimport {\n gettext,\n SearchInputComponent,\n IconDirective,\n C8yTranslatePipe,\n GetGroupIconPipe\n} from '@c8y/ngx-components';\nimport { NgIf, NgStyle, NgClass, NgFor, AsyncPipe } from '@angular/common';\nimport { AssetSelectorNodeComponent } from './asset-selector-node.component';\n\n/**\n * Displays a hierarchical tree selector for assets.\n */\n@Component({\n selector: 'c8y-asset-selector',\n templateUrl: './asset-selector.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n multi: true,\n useExisting: forwardRef(() => AssetSelectorComponent)\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => AssetSelectorComponent),\n multi: true\n },\n AssetSelectorService\n ],\n imports: [\n NgIf,\n NgStyle,\n NgClass,\n SearchInputComponent,\n NgFor,\n IconDirective,\n FormsModule,\n AssetSelectorNodeComponent,\n C8yTranslatePipe,\n AsyncPipe,\n GetGroupIconPipe\n ]\n})\nexport class AssetSelectorComponent extends AssetSelectorBase implements OnInit {\n /**\n * Config object containing all options for the asset selector.\n */\n @Input() config: AssetSelectorOptions = {};\n /**\n * Defines the node, which should be displayed as active.\n */\n @Input() active: GroupNode;\n /**\n * Used only for miller-view, displays the column level for the current node.\n * E.g if the index is one, this will be second column.\n */\n @Input() index = 0;\n /**\n * The asset to use as root.\n */\n @Input() asset: IIdentified = undefined;\n /**\n * The selected device.\n */\n @Input() selectedDevice: IManagedObject = undefined;\n /**\n * An array of predefined nodes.\n */\n @Input() selected: Array<Partial<IManagedObject>> | IIdentified[] | IIdentified = [];\n /**\n * The node to use as root. You can either set this, or the asset to start from.\n */\n @Input() rootNode: GroupNode;\n /**\n * All currently selected assets.\n */\n @Input() selectedItems: IIdentified[] | IIdentified = [];\n @Input() container: '' | 'body' = 'body';\n @Input() isNodeSelectable: boolean | ((node: IIdentified) => boolean) = true;\n @Input() disabled = false;\n /**\n * Emits if one item was selected (all currently selected nodes).\n */\n @Output() onSelected = new EventEmitter<AssetSelectionChangeEvent>();\n /**\n * Emits if the currently selected asset is cleared.\n */\n @Output() onClearSelected = new EventEmitter<void>();\n /**\n * Used only for miller view. Emit the selected node and use it as a 'rootNode' for the new column.\n */\n @Output() onRowSelected = new EventEmitter<any>();\n /**\n * Emits the current loading state of the node.\n */\n @Output() onLoad = new EventEmitter<any>();\n /**\n * The current filter applied.\n */\n filterText = '';\n /**\n * Displays the global search at all times if the miller view is used\n * on root group level.\n */\n root = false;\n /**\n * @ignore\n */\n unsubscribe$ = new Subject<void>();\n /**\n * Returns the current header hight in pixel.\n */\n getHeaderHeight$ = new BehaviorSubject(0);\n readonly ASSET_CONST = gettext('Asset {{ assetId }}');\n\n @ViewChild('header')\n private header: ElementRef;\n\n /**\n * @ignore only DI\n */\n constructor(\n protected groupNodeService: GroupNodeService,\n protected inventory: InventoryService,\n protected assetSelectorService: AssetSelectorService,\n protected cd: ChangeDetectorRef\n ) {\n super(groupNodeService, inventory, assetSelectorService);\n }\n\n /**\n * Checks when a node was selected, if a new column needs to be added.\n * @param node The node that was clicked.\n * @param index The current index of this node.\n * @returns True if the click was handled and a new column was added.\n */\n handleNextMillerViewColumn(node: GroupNode, index: number) {\n const nodeCopy = Object.create(node);\n const isSameAsRoot = this.rootNode === node;\n const isUnassignedDevicesNode = node.toString() === UnassignedDevicesNode.NAME;\n const isNewColumnNeeded =\n !isSameAsRoot && (node.isGroup() || isUnassignedDevicesNode || node.hasChildDevices());\n\n if (isNewColumnNeeded) {\n this.onRowSelected.emit({ nodeCopy, index });\n return false;\n }\n return true;\n }\n\n /**\n * @ignore\n */\n async ngOnInit() {\n this.assetSelectorService.setIsNodeSelectable(this.isNodeSelectable);\n if (this.index === 0) {\n this.config = { ...CONFIG_OPTIONS_DEFAULT, ...this.config };\n }\n const shouldResetNameFilter =\n this.rootNode && this.rootNode.mo && this.config.view === 'miller';\n if (shouldResetNameFilter) {\n await this.applyFilter('');\n }\n\n const isOnlyAssetNodeDefined = this.asset;\n if (isOnlyAssetNodeDefined) {\n this.rootNode = await this.createManagedObjectRootNode(this.asset);\n }\n\n const isAnyNodeDefined =\n !this.rootNode && (!this.asset || Object.keys(this.asset).length === 0);\n if (isAnyNodeDefined) {\n this.rootNode = this.createDefaultRootNode();\n }\n\n if (\n this.config.showUnassignedDevices &&\n (!this.asset || Object.keys(this.asset).length === 0) &&\n this.rootNode.root\n ) {\n this.rootNode.add(\n new UnassignedDevicesNode(this.groupNodeService, {\n showChildDevices: this.config.showChildDevices\n })\n );\n }\n this.root = this.rootNode.root;\n }\n\n async ngOnChanges(changes: SimpleChanges) {\n if (changes.isNodeSelectable) {\n this.assetSelectorService.setIsNodeSelectable(this.isNodeSelectable);\n }\n if (\n changes.asset &&\n changes.asset.currentValue &&\n Object.keys(changes.asset.currentValue).length !== 0\n ) {\n this.rootNode = await this.createManagedObjectRootNode(changes.asset.currentValue);\n }\n }\n\n /**\n * @ignore\n */\n ngAfterViewInit(): void {\n this.updateHeaderHeight();\n }\n\n /**\n * Changes the current root to one level back.\n */\n back() {\n const index = this.index - 1;\n const nodeCopy = Object.create(this.rootNode.parents[0]);\n this.onRowSelected.emit({ nodeCopy, index });\n }\n\n /**\n * Clears the current filter.\n */\n clearFilters() {\n this.filterText = '';\n this.applyFilter('');\n }\n\n /**\n * Clears the currently selected device.\n */\n clearSelectedDevices() {\n this.selectedDevice = undefined;\n this.applyFilter('');\n this.onClearSelected.emit();\n }\n\n isGroupSelected() {\n if (this.selected.some(selectedNode => selectedNode.id === this.rootNode.mo?.id)) {\n return true;\n }\n return false;\n }\n\n /**\n * @param nameFilter The name filter to apply.\n * @param moId The managed object ID to filter by.\n * @param showUnassignedDevices If true, it will show unassigned devices.\n * @return The filter query to apply.\n * @description\n * This method builds a filter query based on the provided name filter and managed object ID.\n */\n groupNameFilter(nameFilter: string, moId, showUnassignedDevices?: boolean) {\n if (nameFilter) {\n const filterByName = showUnassignedDevices\n ? {\n __filter: {\n name: nameFilter\n },\n __orderby: [{ name: 1 }]\n }\n : {\n __filter: {\n name: nameFilter,\n __bygroupid: moId\n }\n };\n return this.assetSelectorService.queriesUtil.buildQuery(filterByName);\n }\n const defaultFilter = {\n __filter: {\n __bygroupid: moId\n },\n __orderby: [{ name: 1 }]\n };\n return this.assetSelectorService.queriesUtil.buildQuery(defaultFilter);\n }\n\n /**\n * Applies a filter.\n * @param filter The filter to apply.\n */\n async applyFilter(filter: string) {\n this.rootNode.filterQuery$.next(\n this.groupNameFilter(\n filter,\n this.rootNode.mo.id,\n this.isUnassignedDevicesNode() ? true : false\n )\n );\n this.rootNode.refresh();\n this.onLoad.emit({\n loading: true,\n filterText: this.filterText,\n index: this.index,\n selectedDevice: this.selectedDevice\n });\n this.cd.detectChanges();\n }\n\n /**\n * Check if the UnassignedDevice node is the rootNode.\n */\n isUnassignedDevicesNode() {\n return this.rootNode.toString() === UnassignedDevicesNode.NAME;\n }\n\n /**\n * Called when the user resets the search result.\n */\n onSearchResultReset(selectedItem) {\n if (selectedItem) {\n this.rootNode = this.createDefaultRootNode();\n if (this.config.showUnassignedDevices) {\n this.rootNode.add(\n new UnassignedDevicesNode(this.groupNodeService, {\n showChildDevices: this.config.showChildDevices\n })\n );\n }\n if (this.config.view === 'miller') {\n this.onRowSelected.emit({ root: true });\n }\n\n this.rootNode.click({ open: true });\n this.rootNode.nodesFetched\n .pipe(\n tap(() => this.cd.detectChanges()),\n takeUntil(this.unsubscribe$)\n )\n .subscribe();\n\n if (this.config.view === 'tree') {\n this.rootNode.open = true;\n }\n }\n }\n\n /**\n * Called if the user clicks on a search result.\n */\n async onSearchResultClick(mo: IManagedObject) {\n const canSelectNode = this.config.groupsSelectable || !this.groupNodeService.isGroup(mo);\n if (this.config.view === 'miller') {\n this.rootNode = await this.createManagedObjectRootNode(mo);\n this.rootNode.click({ open: true });\n const nodeCopy = Object.create(this.rootNode);\n this.onRowSelected.emit({\n nodeCopy,\n index: 0,\n selectedDevices: this.selectedDevice,\n root: true\n });\n }\n if (!this.config.multi) {\n this.deselectAll();\n }\n if (canSelectNode) {\n this.select(mo);\n }\n }\n\n onLoading(isLoading: boolean) {\n this.onLoad.emit({ loading: isLoading, filterText: this.filterText });\n this.cd.markForCheck();\n }\n\n onSelect(mo: IManagedObject) {\n this.select(mo);\n }\n\n onDeselect(config: { deselectMode: 'single' | 'all'; mo: IManagedObject }) {\n switch (config?.deselectMode) {\n case 'single':\n this.deselect(config.mo);\n this.cd.markForCheck();\n break;\n case 'all':\n this.deselectAll(config.mo);\n break;\n }\n }\n\n private updateHeaderHeight() {\n // An observer is used to detect if the header is visible or not.\n // If the header is not visible, the height is 0 and the observer is\n // used to detect when it becomes visible, to recalculate the height.\n const observer = new IntersectionObserver(entries => {\n entries.forEach(entry => {\n if (entry.isIntersecting) {\n this.updateHeaderHeight();\n observer.unobserve(entry.target);\n }\n });\n });\n\n requestAnimationFrame(() => {\n if (this.header?.nativeElement) {\n const { clientHeight } = this.header.nativeElement;\n if (clientHeight === 0 && this.isElementOrParentHidden(this.header.nativeElement)) {\n observer.observe(this.header.nativeElement);\n return;\n }\n this.getHeaderHeight$.next(clientHeight);\n } else {\n this.getHeaderHeight$.next(0);\n }\n });\n }\n\n private isElementOrParentHidden(element: HTMLElement): boolean {\n while (element) {\n const style = window.getComputedStyle(element);\n if (style.display === 'none' || style.visibility === 'hidden') {\n return true;\n }\n element = element.parentElement;\n }\n return false;\n }\n}\n","<div\n class=\"bg-inherit p-t-8 p-b-8 separator-bottom p-r-16 p-l-16 sticky-top\"\n [ngStyle]=\"{ 'z-index': config.singleColumn && config.search ? '30' : '20' }\"\n #header\n [ngClass]=\"{\n 'p-absolute miller-column__selection d-flex flex-wrap a-i-center': config.view === 'miller',\n 'miller-column__search': config.search,\n 'miller-column__multi': config.multi\n }\"\n *ngIf=\"\n !selectedDevice &&\n index === 0 &&\n (config.search || config.multi || config.label?.length || config.showSelected)\n \"\n>\n <p\n class=\"text-medium flex-no-shrink a-s-center\"\n [ngClass]=\"{\n 'm-b-4': config.search && root && config.singleColumn,\n 'm-r-8': !config.singleColumn && !config.search,\n 'fit-w': config.singleColumn\n }\"\n *ngIf=\"config.label?.length\"\n >\n {{ config.label | translate }}\n </p>\n <c8y-search-input\n [ngStyle]=\"{ 'min-width': !config.singleColumn && config.label.length ? '50%' : 'inherit' }\"\n *ngIf=\"config.search && root\"\n (onClick)=\"onSearchResultClick($event)\"\n (reset)=\"onSearchResultReset($event)\"\n [mode]=\"'select'\"\n [container]=\"container\"\n class=\"input-group-sm\"\n [groupsOnly]=\"config.groupsOnly\"\n [ngClass]=\"{\n 'm-l-auto': !config.singleColumn && config.label.length,\n 'fit-w': config.singleColumn || !config.label.length\n }\"\n ></c8y-search-input>\n <div\n class=\"bg-inherit d-flex gap-4 fit-w\"\n *ngIf=\"config.showSelected\"\n [ngClass]=\"{ 'm-t-4': config.search }\"\n >\n <span class=\"text-label-small m-r-4 a-s-center l-h-1\">{{ 'Selected' | translate }}</span>\n <div class=\"flex-grow inner-scroll d-flex gap-4 a-i-center\">\n <ng-container *ngIf=\"!selected.length\">\n <em class=\"text-12 text-muted d-flex a-i-center fit-h-20\">{{ 'None' | translate }}</em>\n </ng-container>\n <span\n class=\"tag tag--info chip\"\n *ngFor=\"let selectedItem of selected\"\n >\n <button\n class=\"btn btn-xs btn-clean text-10\"\n title=\"{{ selectedItem.name }}\"\n [disabled]=\"disabled\"\n type=\"button\"\n (click)=\"config.multi ? deselect(selectedItem) : deselectAll()\"\n >\n <i c8yIcon=\"times\"></i>\n </button>\n {{ selectedItem.name || (ASSET_CONST | translate: { assetId: selectedItem.id }) }}\n </span>\n </div>\n </div>\n</div>\n\n<div\n class=\"p-r-16\"\n *ngIf=\"selectedDevice\"\n>\n <div class=\"d-flex p-b-4\">\n <p\n class=\"text-medium p-t-8 m-r-8\"\n *ngIf=\"selectedDevice; else multiAssets\"\n >\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 title=\"{{ 'Change' | translate }}\"\n type=\"button\"\n (click)=\"$event.stopPropagation(); clearSelectedDevices()\"\n >\n {{ 'Change' | translate }}\n </button>\n </div>\n <div class=\"d-flex\">\n <i\n class=\"text-success p-l-0 p-r-8\"\n [c8yIcon]=\"'check-circle'\"\n ></i>\n <i\n class=\"m-r-4 icon-20\"\n [c8yIcon]=\"selectedDevice | getGroupIcon | async\"\n ></i>\n <span>{{ selectedDevice.name }}</span>\n </div>\n</div>\n\n<!-- miller columns header -->\n<div\n class=\"miller-column__header sticky-top bg-inherit separator-bottom\"\n *ngIf=\"\n config.view === 'miller' &&\n ((config.showFilter && !rootNode.root) || config.columnHeaders) &&\n !selectedDevice\n \"\n [ngClass]=\"{ 'p-t-8': config.search }\"\n>\n <div class=\"d-flex\" *ngIf=\"config.singleColumn && index !== 0\">\n <i\n class=\"m-r-4\"\n c8yIcon=\"home\"\n ></i>\n <p\n class=\"text-12 text-muted text-truncate text-rtl m-b-4\"\n title=\"{{ rootNode.breadcrumb || rootNode.label | translate }}\"\n >\n {{ rootNode.breadcrumb || rootNode.label | translate }}\n </p>\n </div>\n <div\n class=\"d-flex a-i-center\"\n *ngIf=\"config.columnHeaders || config.singleColumn\"\n >\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 title=\"{{ 'Back' | translate }}\"\n type=\"button\"\n *ngIf=\"config.singleColumn && !rootNode.root && index !== 0\"\n (click)=\"$event.stopPropagation(); back()\"\n >\n <i c8yIcon=\"angle-left\"></i>\n </button>\n <label\n class=\"c8y-radio checkbox-inline m-r-8\"\n *ngIf=\"!rootNode.root && index === 0 && (config.groupsSelectable || !rootNode.isGroup())\"\n >\n <input\n title=\"{{ 'Select group' | translate }}\"\n type=\"radio\"\n (change)=\"select(rootNode.mo)\"\n [checked]=\"isGroupSelected()\"\n />\n <span></span>\n </label>\n\n <i\n class=\"icon-20 c8y-icon-duocolor m-r-4\"\n [c8yIcon]=\"this.rootNode.mo | getGroupIcon: true : this.rootNode.icon | async\"\n *ngIf=\"config.columnHeaders && (config.singleColumn || (!rootNode.root && index === 0))\"\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\n *ngIf=\"!rootNode.root && config.showFilter\"\n [ngClass]=\"{ 'p-t-4': config.columnHeaders }\"\n >\n <div class=\"input-group input-group-sm input-group-search\">\n <input\n class=\"form-control text-truncate\"\n placeholder=\"{{ 'Filter this column…' | translate }}\"\n [(ngModel)]=\"filterText\"\n (keyup.enter)=\"applyFilter('*' + filterText + '*')\"\n />\n <span class=\"input-group-btn\">\n <button\n class=\"btn btn-dot p-r-8 p-l-4\"\n title=\"{{ 'Apply filter' | translate }}\"\n type=\"button\"\n (click)=\"applyFilter('*' + filterText + '*')\"\n >\n <i c8yIcon=\"filter\"></i>\n </button>\n <button\n class=\"btn btn-dot p-r-8 p-l-4\"\n title=\" {{ 'Clear filters' | translate }}\"\n type=\"button\"\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 class=\"d-block bg-inherit p-relative\"\n style=\"z-index: 9\"\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 [active]=\"active\"\n [disabled]=\"disabled\"\n [handleNextMillerViewColumn]=\"handleNextMillerViewColumn.bind(this)\"\n (isLoadingState)=\"onLoading($event)\"\n (onSelect)=\"onSelect($event)\"\n (onDeselect)=\"onDeselect($event)\"\n [ngClass]=\"{ 'collapse show': !rootNode.root && !rootNode.hidden && config.view !== 'miller' }\"\n></c8y-asset-selector-node>\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n ViewChildren,\n forwardRef\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { IIdentified, IManagedObject, InventoryService } from '@c8y/client';\nimport { of } from 'rxjs';\nimport { first, startWith, map, switchMap } from 'rxjs/operators';\nimport { AssetSelectorBase } from './asset-selector-base';\nimport { AssetSelectorComponent } from './asset-selector.component';\nimport { AssetSelectionChangeEvent, AssetSelectorOptions } from './asset-selector.model';\nimport { AssetSelectorService } from './asset-selector.service';\nimport { GroupNode } from './group-node';\nimport { GroupNodeService } from './group-node.service';\nimport {\n gettext,\n LoadingComponent,\n EmptyStateComponent,\n C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { NgStyle, NgClass, NgFor, NgIf, AsyncPipe } from '@angular/common';\n\n@Component({\n selector: 'c8y-asset-selector-miller',\n templateUrl: './miller-view.component.html',\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MillerViewComponent),\n multi: true\n }\n ],\n imports: [\n NgStyle,\n NgClass,\n NgFor,\n AssetSelectorComponent,\n NgIf,\n LoadingComponent,\n EmptyStateComponent,\n C8yTranslatePipe,\n AsyncPipe\n ]\n})\nexport class MillerViewComponent extends AssetSelectorBase implements OnInit {\n /**\n * Config object containing all options for the asset selector.\n */\n @Input() config: AssetSelectorOptions = {};\n /**\n * The asset to use as root.\n */\n @Input() asset: IIdentified = undefined;\n /**\n * The selected devices.\n */\n @Input() selectedDevice: IManagedObject = undefined;\n /**\n * The node to use as root. You can either set this, or the asset to start from.\n */\n @Input() rootNode: GroupNode;\n /**\n * Emits if the selection changes\n */\n @Output() onSelected = new EventEmitter<AssetSelectionChangeEvent>();\n /**\n * Emits if the currently selected asset is cleared.\n */\n @Output() onClearSelected = new EventEmitter<void>();\n /**\n * @ignore\n */\n @ViewChild('millerViewWrapper') millerViewWrapper: ElementRef;\n /**\n * The column array will contain all currently selected nodes\n * which will form the miller view columns (only one per level).\n */\n columns = [];\n /**\n * The current filter applied. Used for the empty state text in the view.\n */\n filterText = '';\n /**\n * Index of the column used to check where to show the loading state.\n */\n columnIndex: number;\n @Input() container: '' | 'body' = 'body';\n\n configOptionsDefault: AssetSelectorOptions = {\n view: 'miller',\n singleColumn: false,\n label: gettext('Asset selection')\n };\n\n /**\n * The height of the first asset selector header.\n */\n assetSelectorHeaderHeight$ = of('0px');\n\n @ViewChildren(AssetSelectorComponent)\n private assetSelectors: QueryList<AssetSelectorComponent>;\n\n constructor(\n protected groupNodeService: GroupNodeService,\n protected inventory: InventoryService,\n protected assetSelectorService: AssetSelectorService,\n protected cd: ChangeDetectorRef\n ) {\n super(groupNodeService, inventory, assetSelectorService);\n }\n\n /**\n * @ignore\n */\n async ngOnInit() {\n this.config = { ...this.configOptionsDefault, ...this.config };\n\n const isAnyNodeDefined =\n !this.rootNode && (!this.asset || Object.keys(this.asset).length === 0);\n if (isAnyNodeDefined) {\n this.rootNode = this.createDefaultRootNode();\n }\n\n const isOnlyAssetNodeDefined = this.asset && Object.keys(this.asset).length !== 0;\n if (isOnlyAssetNodeDefined) {\n this.rootNode = await this.createManagedObjectRootNode(this.asset);\n this.rootNode.click();\n if (!this.config.preventInitialSelect) {\n const selected = this.selectedDevice || this.asset;\n this.selected = [selected];\n this.emitChange(this.selected, selected as IManagedObject, true);\n }\n }\n\n this.columns.push(this.rootNode);\n }\n\n /**\n * @ignore\n */\n async ngOnChanges(changes: SimpleChanges) {\n if (changes.asset && changes.asset.currentValue && !this.asset) {\n this.columns = [];\n this.columns.push(await this.createManagedObjectRootNode(changes.asset.currentValue));\n }\n\n if (changes.selectedDevice && changes.selectedDevice.currentValue) {\n this.selected = [this.selectedDevice];\n this.emitChange(this.selected, this.selectedDevice as IManagedObject, true);\n }\n }\n\n /**\n * @ignore\n */\n ngAfterViewInit(): void {\n requestAnimationFrame(() => {\n this.assetSelectorHeaderHeight$ = this.assetSelectors.changes.pipe(\n startWith(this.assetSelectors.toArray()),\n first(),\n switchMap(assetSelector =>\n assetSelector[0] ? assetSelector[0].getHeaderHeight$ : of('0')\n ),\n map(height => height + 'px')\n );\n });\n }\n\n /**\n * Create a new column with the selected node as root.\n */\n addNewColumn(node): void {\n const level = node.index;\n this.selectedDevice = node.selectedDevices || undefined;\n if (node.root) {\n window.requestAnimationFrame(() => (this.millerViewWrapper.nativeElement.scrollLeft = 0));\n this.columns.length = 1;\n }\n\n const isLevelLowerThanColumnNumber = level < this.columns.length - 1;\n let goBack = false;\n if (isLevelLowerThanColumnNumber) {\n this.columns.length = level + 1;\n goBack = true;\n }\n if (!node.root && !(this.config.singleColumn && goBack)) {\n this.columns.push(node.nodeCopy);\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const col = this;\n window.requestAnimationFrame(() => (col.millerViewWrapper.nativeElement.scrollLeft = 50000));\n /* triggered twice with a small delay as a workaround for dealing with Safari's bug:\n \"Safari doesn’t update the scrollTop / scrollLeft properties of an element its any of its\n ancestors has overflow set to hidden.\"\n This was reported on customer portal with the ticket SI-488573\n */\n setTimeout(function () {\n window.requestAnimationFrame(\n () => (col.millerViewWrapper.nativeElement.scrollLeft = 55000)\n );\n }, 700);\n }\n }\n\n /**\n * Change the loading state of the asset selector.\n */\n onLoad(event) {\n this.isLoading = event.loading;\n this.filterText = event.filterText;\n this.columnIndex = event.index;\n this.selectedDevice = event.selectedDevice;\n this.cd.detectChanges();\n }\n\n /**\n * Add the selected node to the selected array.\n */\n onSelectionChange(event: AssetSelectionChangeEvent): void {\n if (!this.config.multi) {\n this.deselectAll(event.change.item);\n return;\n }\n if (event.change.isSelected) {\n this.select(event.change.item);\n return;\n }\n this.deselect(event.change.item);\n }\n}\n","<div\n class=\"miller-view-wrapper {{ config.label }}\"\n [ngStyle]=\"{\n 'padding-top': selectedDevice ? '0px' : (assetSelectorHeaderHeight$ | async)\n }\"\n #millerViewWrapper\n [ngClass]=\"{\n 'single-column': config.singleColumn,\n }\"\n>\n <div\n class=\"miller-column bg-inherit\"\n *ngFor=\"let column of columns; index as i\"\n >\n <c8y-asset-selector\n class=\"bg-inherit\"\n #assetSelector\n [config]=\"config\"\n [index]=\"i\"\n [active]=\"columns[i + 1]\"\n [rootNode]=\"column\"\n [selected]=\"selected || []\"\n [selectedDevice]=\"selectedDevice\"\n (onSelected)=\"onSelectionChange($event)\"\n (onClearSelected)=\"onClearSelected.emit()\"\n (onRowSelected)=\"addNewColumn($event)\"\n (onLoad)=\"onLoad($event)\"\n [container]=\"container\"\n ></c8y-asset-selector>\n <div\n class=\"p-relative p-b-64\"\n *ngIf=\"isLoading && columnIndex === i && !selectedDevice\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <div\n class=\"p-l-8 p-r-8\"\n *ngIf=\"!column.children.length && !isLoading\"\n >\n <c8y-ui-empty-state\n [icon]=\"'folder-open'\"\n [title]=\"'No results to display.' | translate\"\n [subtitle]=\"'The selected asset has no children.' | translate\"\n *ngIf=\"!filterText; else noSearchResults\"\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","import { NgModule } from '@angular/core';\nimport { CoreModule, CommonModule, CoreSearchModule } from '@c8y/ngx-components';\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { GroupNodeService } from './group-node.service';\n\nimport { AssetSelectorNodeComponent } from './asset-selector-node.component';\nimport { AssetSelectorComponent } from './asset-selector.component';\nimport { FormsModule } from '@angular/forms';\nimport { MillerViewComponent } from './miller-view.component';\nimport { AssetSelectorService } from './asset-selector.service';\n\n@NgModule({\n imports: [\n CoreModule,\n CommonModule,\n CollapseModule,\n BsDropdownModule,\n CoreSearchModule,\n FormsModule,\n AssetSelectorNodeComponent,\n AssetSelectorComponent,\n MillerViewComponent\n ],\n exports: [AssetSelectorNodeComponent, AssetSelectorComponent, MillerViewComponent],\n providers: [GroupNodeService, AssetSelectorService]\n})\nexport class AssetSelectorModule {}\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport { DeviceStatusModule, hookNavigator, ModalModule, ModalService } from '@c8y/ngx-components';\nimport { AssetNavigatorConfig, ASSET_NAVIGATOR_CONFIG } from './asset-node-config.model';\nimport { AssetNodeFactory } from './asset-node.factory';\nimport { AssetNodeService } from './asset-node.service';\nimport { AssetSelectorModule } from './asset-selector/asset-selector.module';\n\n@NgModule({\n declarations: [],\n imports: [ModalModule, AssetSelectorModule, DeviceStatusModule],\n providers: [ModalService, AssetNodeService, hookNavigator(AssetNodeFactory)]\n})\nexport class AssetsNavigatorModule {\n static config(config: AssetNavigatorConfig = {}): ModuleWithProviders<AssetsNavigatorModule> {\n return {\n ngModule: AssetsNavigatorModule,\n providers: [\n {\n provide: ASSET_NAVIGATOR_CONFIG,\n useValue: config\n }\n ]\n };\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["getProp","i1","i2.AssetSelectorService","i1.GroupNodeService","i3.AssetSelectorService"],"mappings":"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"}
|