{"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 { gettext } 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';\n\n@Component({\n  selector: 'c8y-asset-selector-node',\n  templateUrl: './asset-selector-node.component.html'\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","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 } 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 { gettext } from '@c8y/ngx-components';\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})\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    requestAnimationFrame(() => {\n      if (this.header?.nativeElement) {\n        this.getHeaderHeight$.next(this.header.nativeElement.clientHeight);\n      } else {\n        this.getHeaderHeight$.next(0);\n      }\n    });\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  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  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","<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)=\"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)=\"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 { gettext } from '@c8y/ngx-components';\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})\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      const selected = this.selectedDevice || this.asset;\n      this.selected = [selected];\n      this.emitChange(this.selected, selected as IManagedObject, true);\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  ],\n  exports: [AssetSelectorNodeComponent, AssetSelectorComponent, MillerViewComponent],\n  providers: [GroupNodeService, AssetSelectorService],\n  declarations: [AssetSelectorNodeComponent, AssetSelectorComponent, MillerViewComponent]\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":["i1","getProp","i2.AssetSelectorService","i3","i4","i5","i1.GroupNodeService","i3.AssetSelectorService","i7.AssetSelectorNodeComponent","i6.AssetSelectorComponent"],"mappings":"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"}