{"version":3,"file":"c8y-ngx-components-sub-assets.mjs","sources":["../../sub-assets/shared/sub-assets.model.ts","../../sub-assets/sub-assets.service.ts","../../sub-assets/add-group/add-group.service.ts","../../sub-assets/delete-assets-modal/delete-assets-modal.component.ts","../../sub-assets/delete-assets-modal/delete-assets-modal.component.html","../../sub-assets/smart-group-grid-configuration-strategy.service.ts","../../sub-assets/sub-assets-grid-configuration-strategy.service.ts","../../sub-assets/unassign-assets-modal/unassign-modal.component.ts","../../sub-assets/unassign-assets-modal/unassign-modal.component.html","../../sub-assets/sub-assets-grid.component.ts","../../sub-assets/sub-assets-grid.component.html","../../sub-assets/assign-devices/assign-child-devices.component.ts","../../sub-assets/assign-devices/assign-child-devices.component.html","../../sub-assets/add-group/add-group.component.ts","../../sub-assets/add-group/add-group.component.html","../../sub-assets/assign-devices/assign-devices.component.ts","../../sub-assets/assign-devices/assign-devices.component.html","../../sub-assets/sub-assets-grids.module.ts","../../sub-assets/add-group/add-group.module.ts","../../sub-assets/asset-properties-item.component.ts","../../sub-assets/asset-properties-item.component.html","../../sub-assets/fullscreen.util.ts","../../sub-assets/location/asset-location.component.ts","../../sub-assets/location/asset-location.component.html","../../sub-assets/asset-properties.component.ts","../../sub-assets/asset-properties.component.html","../../sub-assets/sub-assets.model.ts","../../sub-assets/group-info.component.ts","../../sub-assets/group-info.component.html","../../sub-assets/groups.component.ts","../../sub-assets/groups.component.html","../../sub-assets/sub-assets.component.ts","../../sub-assets/sub-assets.component.html","../../sub-assets/sub-assets.module.ts","../../sub-assets/c8y-ngx-components-sub-assets.ts"],"sourcesContent":["export const PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED = {\n  EVENT: 'subAssets',\n  DELETE_ASSET: {\n    COMPONENTS: { DELETE_ASSETS_MODAL: 'delete-assets-modal' },\n    ACTIONS: { CASCADE_DELETE: 'cascadeDelete', DELETE_DEVICE_OWNER: 'deleteDeviceOwner' },\n    RESULTS: { CANCELED: 'canceled', DELETED: 'deleted' }\n  },\n  ASSIGN_DEVICES: {\n    COMPONENTS: { ASSIGN_DEVICES: 'assign-devices' },\n    ACTIONS: { ASSIGN: 'assign', CANCEL: 'cancel', DISPLAY_CHILD_DEVICES: 'displayChildDevices' }\n  },\n  UNASSIGN_MODAL: {\n    COMPONENTS: { UNASSIGN_MODAL: 'unassign-modal' },\n    RESULTS: { ASSET_UNASSIGNED: 'asset-unassigned' },\n    ACTIONS: { CANCEL: 'cancel' }\n  },\n  GROUP_INFO: {\n    COMPONENTS: { GROUP_INFO: 'group-info' },\n    ACTIONS: { EDIT: 'edit' },\n    RESULTS: { EDIT_SAVED: 'edit-saved' },\n    PROPERTIES: { NAME: 'name', DESCRIPTION: 'description' }\n  },\n  ADD_GROUP: {\n    COMPONENTS: { ADD_GROUP: 'add-group' },\n    ACTIONS: { ADD: 'add' },\n    RESULTS: { ADD_SUCCESS: 'group-added' }\n  }\n} as const;\n","import { Injectable } from '@angular/core';\nimport {\n  IManagedObject,\n  IRule,\n  InventoryService,\n  QueriesUtil,\n  SmartGroupsService,\n  SmartRulesService,\n  UserService\n} from '@c8y/client';\nimport {\n  ActionControl,\n  AlertService,\n  AppStateService,\n  AssetTypesRealtimeService,\n  BulkActionControl,\n  Column,\n  DataGridService,\n  Pagination,\n  Permissions,\n  UserPreferencesService,\n  gettext\n} from '@c8y/ngx-components';\nimport { AssetNodeService } from '@c8y/ngx-components/assets-navigator';\nimport {\n  AlarmsDeviceGridColumn,\n  ImeiDeviceGridColumn,\n  ModelDeviceGridColumn,\n  NameDeviceGridColumn,\n  RegistrationDateDeviceGridColumn,\n  SerialNumberDeviceGridColumn,\n  SystemIdDeviceGridColumn\n} from '@c8y/ngx-components/device-grid';\nimport { TranslateService } from '@ngx-translate/core';\nimport { AssetTypeGridColumn } from '@c8y/ngx-components/data-grid-columns/asset-type';\nimport { firstValueFrom } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SubAssetsService extends DataGridService {\n  queriesUtil: QueriesUtil;\n  protected GRID_CONFIG_DEFAULT_STORAGE_KEY = 'sub-assets-grid-config';\n  private IS_DEVICE_GROUP_FRAGMENT = 'c8y_IsDeviceGroup';\n  private IS_DYNAMIC_GROUP_FRAGMENT = 'c8y_IsDynamicGroup';\n\n  constructor(\n    protected translateService: TranslateService,\n    protected inventoryService: InventoryService,\n    protected appState: AppStateService,\n    protected user: UserService,\n    protected assetNodeService: AssetNodeService,\n    protected smartGroupsService: SmartGroupsService,\n    protected smartRulesService: SmartRulesService,\n    protected alertService: AlertService,\n    protected permissionsService: Permissions,\n    protected assetTypes: AssetTypesRealtimeService,\n    protected userPreferencesService: UserPreferencesService\n  ) {\n    super(userPreferencesService);\n  }\n\n  async getCustomProperties(group: IManagedObject): Promise<IManagedObject[]> {\n    const assetType$ = this.assetTypes.getAssetTypeByName$(group.type);\n    const assetType = await firstValueFrom(assetType$);\n    if (assetType) {\n      const { data } = await this.inventoryService.childAdditionsList(assetType, {\n        pageSize: 2000,\n        query: \"$filter=(has('c8y_IsAssetProperty'))\"\n      });\n      return data;\n    }\n    return [];\n  }\n\n  getDefaultColumns(_filterable = true, _sortable = true): Column[] {\n    const defaultColumns = [\n      new AssetTypeGridColumn({ sortOrder: 'desc' }),\n      new NameDeviceGridColumn({ sortOrder: 'asc' }),\n      new ModelDeviceGridColumn(),\n      new SerialNumberDeviceGridColumn({ visible: false }),\n      new RegistrationDateDeviceGridColumn({ visible: false }),\n      new SystemIdDeviceGridColumn({ visible: false }),\n      new ImeiDeviceGridColumn({ visible: false }),\n      new AlarmsDeviceGridColumn()\n    ];\n    return defaultColumns;\n  }\n\n  getDefaultPagination(): Pagination {\n    return {\n      pageSize: 25,\n      currentPage: 1\n    };\n  }\n\n  getDefaultActionControls(): ActionControl[] {\n    return [];\n  }\n\n  async unassignAsset(asset: IManagedObject, parentRef: IManagedObject) {\n    const { id: assetId } = asset;\n    const { id: parentId } = parentRef;\n\n    if (this.isDevice(asset)) {\n      try {\n        await this.inventoryService.childAssetsRemove(assetId, parentId);\n        const alertMessage = this.translateService.instant(gettext('Device unassigned.'));\n        this.alertService.success(alertMessage);\n      } catch (error) {\n        const alertMessage = this.translateService.instant(gettext('Could not unassign device.'));\n        this.alertService.danger(alertMessage, error);\n      }\n      await this.deactivateSmartrulesForAsset(asset, parentRef);\n    }\n  }\n\n  isDevice(asset: IManagedObject): boolean {\n    return (\n      !asset.hasOwnProperty(this.IS_DEVICE_GROUP_FRAGMENT) &&\n      !asset.hasOwnProperty(this.IS_DYNAMIC_GROUP_FRAGMENT)\n    );\n  }\n\n  async deleteAsset(asset: IManagedObject, parentRef: IManagedObject, params = {}) {\n    const isGroup =\n      asset.hasOwnProperty(this.IS_DEVICE_GROUP_FRAGMENT) ||\n      this.smartGroupsService.isSmartGroup(asset);\n\n    if (isGroup) {\n      await this.deleteGroup(asset, params);\n    } else {\n      await this.deleteDevice(asset, params);\n    }\n\n    if (parentRef && !this.smartGroupsService.isSmartGroup(asset)) {\n      await this.deactivateSmartrulesForAsset(asset, parentRef);\n    }\n  }\n\n  shouldShowWithDeviceUserCheckbox(asset: IManagedObject): boolean {\n    const { owner, c8y_IsDevice: isRootDevice } = asset;\n    const hasDeviceUserAsOwner = asset.owner && this.isDeviceUser(owner);\n\n    return Boolean(isRootDevice && hasDeviceUserAsOwner);\n  }\n\n  getDefaultBulkActionControls(): BulkActionControl[] {\n    return [];\n  }\n\n  async getData(\n    columns: Column[],\n    pagination: Pagination,\n    parentReference: IManagedObject,\n    baseQuery: any = {},\n    text: string = null\n  ) {\n    const isRoot = !parentReference;\n    if (isRoot) {\n      const query = this.buildCombinedRootQueryFilter(columns, pagination, baseQuery);\n      return this.assetNodeService.getRootNodes({ ...pagination, ...(text && { text }), query });\n    }\n    const filters = {\n      ...this.getAssetsFilters(columns, pagination, baseQuery, text),\n      withParents: false\n    };\n    if (this.assetNodeService.isGroup(parentReference)) {\n      return this.assetNodeService.getGroupItems(parentReference.id, filters);\n    }\n    if (this.assetNodeService.isDynamicGroup(parentReference)) {\n      return this.assetNodeService.getDynamicGroupItems(\n        parentReference.c8y_DeviceQueryString,\n        filters\n      );\n    }\n    if (this.assetNodeService.isDevice(parentReference)) {\n      return this.assetNodeService.getDeviceChildren(parentReference.id, filters);\n    }\n  }\n\n  async getCount(\n    columns: Column[],\n    pagination: Pagination,\n    parentReference: IManagedObject,\n    baseQuery: any = {},\n    text: string = null\n  ): Promise<number> {\n    const defaultFilters = {\n      pageSize: 1,\n      withChildren: false\n    };\n    const filters = !parentReference\n      ? {\n          query: this.buildCombinedRootQueryFilter(columns, pagination, baseQuery),\n          ...defaultFilters\n        }\n      : {\n          ...this.getAssetsFilters(columns, pagination, baseQuery, text),\n          ...defaultFilters\n        };\n    return this.getAssetsStatistics(parentReference, filters);\n  }\n\n  getTotal(parentReference: IManagedObject, baseQuery: any = {}): Promise<number> {\n    const queryFilter = this.assetNodeService.rootQueryFilter();\n    const query = !parentReference\n      ? this.queriesUtil.addAndFilter(queryFilter, baseQuery)\n      : baseQuery;\n    const filters = {\n      query: this.queriesUtil.buildQuery(query),\n      withChildren: false,\n      withTotalPages: true,\n      pageSize: 1\n    };\n    return this.getAssetsStatistics(parentReference, filters);\n  }\n\n  async canEditGroup(group: IManagedObject): Promise<boolean> {\n    return await this.permissionsService.canEdit(\n      [Permissions.ROLE_INVENTORY_ADMIN, Permissions.ROLE_MANAGED_OBJECT_ADMIN],\n      group\n    );\n  }\n\n  canCreateGroup(): boolean {\n    const currentUser = this.appState.currentUser.value;\n    const hasAdminRole = this.user.hasAnyRole(currentUser, [\n      Permissions.ROLE_INVENTORY_ADMIN,\n      Permissions.ROLE_INVENTORY_CREATE,\n      Permissions.ROLE_MANAGED_OBJECT_ADMIN,\n      Permissions.ROLE_MANAGED_OBJECT_CREATE\n    ]);\n    return hasAdminRole;\n  }\n\n  async canAssignDevice(group: IManagedObject): Promise<boolean> {\n    return await this.permissionsService.canEdit(\n      [Permissions.ROLE_INVENTORY_ADMIN, Permissions.ROLE_MANAGED_OBJECT_ADMIN],\n      group\n    );\n  }\n\n  canEditSmartGroup(): boolean {\n    const SMART_GROUPS_ROLES_EDIT = [\n      Permissions.ROLE_SMARTGROUP_UPDATE,\n      Permissions.ROLE_SMARTGROUP_ADMIN\n    ];\n    return this.permissionsService.hasAnyRole(SMART_GROUPS_ROLES_EDIT);\n  }\n\n  canDeleteSmartGroup(): boolean {\n    const SMART_GROUPS_ROLES_DELETE = [\n      Permissions.ROLE_SMARTGROUP_ADMIN,\n      Permissions.ROLE_INVENTORY_ADMIN,\n      Permissions.ROLE_MANAGED_OBJECT_ADMIN\n    ];\n    return this.permissionsService.hasAnyRole(SMART_GROUPS_ROLES_DELETE);\n  }\n\n  isSmartGroup(group: IManagedObject): boolean {\n    return this.smartGroupsService.isSmartGroup(group);\n  }\n\n  isUsingInventoryRoles() {\n    const currentUser = this.appState.currentUser.value;\n    const hasAnyInventoryRole = this.user.hasAnyRole(currentUser, [\n      Permissions.ROLE_INVENTORY_ADMIN,\n      Permissions.ROLE_INVENTORY_READ,\n      Permissions.ROLE_INVENTORY_CREATE,\n      Permissions.ROLE_MANAGED_OBJECT_ADMIN,\n      Permissions.ROLE_MANAGED_OBJECT_CREATE,\n      Permissions.ROLE_MANAGED_OBJECT_READ\n    ]);\n    return !hasAnyInventoryRole;\n  }\n\n  protected async getAssetsStatistics(\n    parentReference: IManagedObject,\n    filters: object\n  ): Promise<number> {\n    const isRoot = !parentReference;\n    if (isRoot) {\n      return (await this.assetNodeService.getRootNodes(filters)).paging.totalPages;\n    }\n    if (this.assetNodeService.isGroup(parentReference)) {\n      return (await this.assetNodeService.getGroupItems(parentReference.id, filters)).paging\n        .totalPages;\n    }\n    if (this.assetNodeService.isDynamicGroup(parentReference)) {\n      return (\n        await this.assetNodeService.getDynamicGroupItems(\n          parentReference.c8y_DeviceQueryString,\n          filters\n        )\n      ).paging.totalPages;\n    }\n    if (this.assetNodeService.isDevice(parentReference)) {\n      return (await this.assetNodeService.getDeviceChildren(parentReference.id, filters)).paging\n        .totalPages;\n    }\n  }\n\n  protected buildCombinedRootQueryFilter(columns, pagination, baseQuery = {}) {\n    const userQuery = this.getQueryObj(columns, pagination);\n    const rootQuery = this.assetNodeService.rootQueryFilter();\n    const orderedRootQuery = this.queriesUtil.addOrderbys(rootQuery, userQuery.__orderby, 'append');\n    const rootAndUserQuery = this.queriesUtil.addAndFilter(orderedRootQuery, userQuery.__filter);\n    const fullQuery = this.queriesUtil.addAndFilter(rootAndUserQuery, baseQuery);\n    return this.queriesUtil.buildQuery(fullQuery);\n  }\n\n  private async deleteGroup(group: IManagedObject, params: any = {}) {\n    const { cascade } = params;\n\n    try {\n      this.smartGroupsService.isSmartGroup(group)\n        ? await this.smartGroupsService.delete(group, { cascade })\n        : await this.inventoryService.delete(group, { cascade });\n\n      const alertMessage = this.translateService.instant(gettext('\"{{ name }}\" deleted.'), {\n        name: group.name\n      });\n      this.alertService.success(alertMessage);\n    } catch (error) {\n      const alertMessage = this.translateService.instant(\n        gettext('Could not delete \"{{ name }}\".'),\n        {\n          name: group.name\n        }\n      );\n      this.alertService.danger(alertMessage, error);\n    }\n  }\n\n  private async deleteDevice(device: IManagedObject, params: any = {}) {\n    const { cascade, withDeviceUser } = params;\n    try {\n      const { owner } = device;\n      const shouldRemoveOwner = withDeviceUser && owner && this.isDeviceUser(owner);\n\n      shouldRemoveOwner\n        ? await this.deleteDeviceWithUser(device, cascade)\n        : await this.inventoryService.delete(device, { cascade });\n\n      const alertMessage = this.translateService.instant(gettext('Device deleted.'));\n      this.alertService.success(alertMessage);\n    } catch (error) {\n      const alertMessage = this.translateService.instant(gettext('Could not delete device.'));\n      this.alertService.danger(alertMessage, error);\n    }\n  }\n\n  private async deactivateSmartrulesForAsset(asset: IManagedObject, parentRef: IManagedObject) {\n    const { id: assetId } = asset;\n    const { id: parentId } = parentRef;\n    const rules: IRule[] = (await this.smartRulesService.listByContext(parentId)).data;\n\n    const upateSmartrulesPromises = rules.map(rule =>\n      this.smartRulesService.bulkDeactivateEnabledSources(rule, [assetId])\n    );\n\n    try {\n      await Promise.all(upateSmartrulesPromises);\n    } catch (error) {\n      const alertMessage = this.translateService.instant(\n        gettext('Could not deactivate smart rules.')\n      );\n      this.alertService.danger(alertMessage);\n    }\n  }\n\n  private isDeviceUser(userId: string) {\n    return userId.match(/^device_/);\n  }\n\n  private async deleteDeviceWithUser(device: IManagedObject, cascade: boolean) {\n    const params = { cascade, withDeviceUser: true };\n    try {\n      return await this.inventoryService.delete(device, params);\n    } catch (error) {\n      return await this.inventoryService.delete(device, { cascade });\n    }\n  }\n\n  private getAssetsFilters(columns: Column[], pagination: Pagination, baseQuery, text?: string) {\n    const query = this.queriesUtil.addAndFilter(this.getQueryObj(columns), baseQuery);\n    return {\n      ...(text && { text }),\n      query: this.queriesUtil.buildQuery(query),\n      pageSize: pagination.pageSize || this.DEFAULT_PAGE_SIZE,\n      currentPage: pagination.currentPage,\n      withTotalPages: true\n    };\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { IIdentified, IManagedObject, InventoryService } from '@c8y/client';\nimport { GroupForm } from './add-group.model';\nimport { GroupFragment } from '@c8y/ngx-components';\n\n@Injectable()\nexport class AddGroupService {\n  private GROUP_FRAGMENT_TYPE = 'c8y_IsDeviceGroup';\n\n  constructor(private inventoryService: InventoryService) {}\n\n  async createGroupAndAssignDevices(\n    groupForm: GroupForm,\n    groupContextId: string | number,\n    selectedDevices: string[]\n  ): Promise<IManagedObject | IIdentified> {\n    let group: IManagedObject | IIdentified;\n    const { name, description } = groupForm;\n    const newGroupMO = this.getGroupMO(name, description, groupContextId);\n\n    if (groupContextId) {\n      group = (await this.inventoryService.childAssetsCreate(newGroupMO, groupContextId)).data;\n    } else {\n      group = (await this.inventoryService.create(newGroupMO)).data;\n    }\n\n    if (selectedDevices.length > 0) {\n      await this.assignDevices(group.id, selectedDevices);\n    }\n\n    return group;\n  }\n\n  private getGroupMO(\n    name: string,\n    description = '',\n    groupContextId: string | number\n  ): Partial<IManagedObject> {\n    const group = {\n      type: this.getGroupType(groupContextId),\n      [this.GROUP_FRAGMENT_TYPE]: {},\n      name,\n      c8y_Notes: description\n    };\n\n    return group;\n  }\n\n  private getGroupType(\n    groupContextId: string | number\n  ): GroupFragment.subGroupType | GroupFragment.groupType {\n    return groupContextId ? GroupFragment.subGroupType : GroupFragment.groupType;\n  }\n\n  private async assignDevices(id: string | number, selectedDevices: string[]) {\n    const promises = [];\n\n    selectedDevices.forEach(moId => {\n      promises.push(this.inventoryService.childAssetsAdd(moId, id));\n    });\n\n    return await Promise.all(promises);\n  }\n}\n","import { Component, Input, ViewChild } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport {\n  ConfirmModalComponent,\n  GainsightService,\n  gettext,\n  ModalLabels,\n  Status,\n  StatusType\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport { PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED } from '../shared/sub-assets.model';\nimport { DeleteModalCheckboxes } from './delete-assets-modal.model';\n\n@Component({\n  selector: 'c8y-delete-assets-modal',\n  templateUrl: './delete-assets-modal.component.html'\n})\nexport class DeleteAssetsModalComponent {\n  CURRENT_LOCATION = location.href;\n  PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED;\n\n  @Input() showWithCascadeCheckbox = true;\n  @Input() showWithDeviceUserCheckbox = false;\n  @Input() asset: IManagedObject;\n  @ViewChild('modalRef', { static: false }) modalRef: ConfirmModalComponent;\n  closeSubject: Subject<DeleteModalCheckboxes> = new Subject();\n  labels: ModalLabels = { ok: gettext('Delete'), cancel: gettext('Cancel') };\n  title: string = gettext('Delete');\n  status: StatusType = Status.DANGER;\n  config: DeleteModalCheckboxes = {\n    cascade: false,\n    withDeviceUser: false\n  };\n  message: string;\n  deleteGroupSubAssetsMsg: string;\n\n  constructor(\n    private translateService: TranslateService,\n    private gainsightService: GainsightService\n  ) {}\n\n  ngOnInit() {\n    this.setModalTexts();\n  }\n\n  async ngAfterViewInit() {\n    try {\n      await this.modalRef.result;\n      this.onClose();\n    } catch (error) {\n      this.onDismiss();\n    }\n  }\n\n  onClose() {\n    this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED.EVENT, {\n      component: PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED.DELETE_ASSET.COMPONENTS.DELETE_ASSETS_MODAL,\n      result: PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED.DELETE_ASSET.RESULTS.DELETED,\n      url: this.CURRENT_LOCATION\n    });\n    this.closeSubject.next(this.config);\n    this.closeSubject.complete();\n  }\n\n  onDismiss() {\n    this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED.EVENT, {\n      component: PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED.DELETE_ASSET.COMPONENTS.DELETE_ASSETS_MODAL,\n      result: PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED.DELETE_ASSET.RESULTS.CANCELED,\n      url: this.CURRENT_LOCATION\n    });\n    this.closeSubject.complete();\n  }\n\n  private setModalTexts() {\n    this.message = this.translateService.instant(\n      gettext(\n        'You are about to delete: \"{{name}}\". This operation is irreversible. Do you want to proceed?'\n      ),\n      { name: this.asset.name }\n    );\n    this.deleteGroupSubAssetsMsg = this.translateService.instant(\n      gettext('Also delete all devices inside \"{{name}}\" and its subassets.'),\n      { name: this.asset.name }\n    );\n  }\n}\n","<c8y-confirm-modal [title]=\"title\" [status]=\"status\" [labels]=\"labels\" #modalRef>\n  <form #assetsForm=\"ngForm\">\n    <p class=\"text-wrap m-b-16\">\n      {{ message | translate }}\n    </p>\n    <c8y-form-group *ngIf=\"showWithCascadeCheckbox\" class=\"m-b-0\">\n      <label title=\"{{ 'Delete devices' | translate }}\" class=\"c8y-checkbox\">\n        <input\n          type=\"checkbox\"\n          name=\"cascade\"\n          [(ngModel)]=\"config.cascade\"\n          c8yProductExperience\n          [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n          [actionData]=\"{\n            component: PRODUCT_EXPERIENCE.DELETE_ASSET.COMPONENTS.DELETE_ASSETS_MODAL,\n            action: PRODUCT_EXPERIENCE.DELETE_ASSET.ACTIONS.CASCADE_DELETE\n          }\"\n          [disabled]=\"config?.withDeviceUser\"\n        />\n        <span></span>\n        <span class=\"text-break-word\">\n          {{ deleteGroupSubAssetsMsg | translate }}\n        </span>\n      </label>\n    </c8y-form-group>\n    <c8y-form-group *ngIf=\"showWithDeviceUserCheckbox\" class=\"m-b-0\">\n      <label title=\"{{ 'Delete associated device owner' | translate }}\" class=\"c8y-checkbox\">\n        <input\n          type=\"checkbox\"\n          name=\"withDeviceUser\"\n          [(ngModel)]=\"config.withDeviceUser\"\n          c8yProductExperience\n          [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n          [actionData]=\"{\n            component: PRODUCT_EXPERIENCE.DELETE_ASSET.COMPONENTS.DELETE_ASSETS_MODAL,\n            action: PRODUCT_EXPERIENCE.DELETE_ASSET.ACTIONS.DELETE_DEVICE_OWNER\n          }\"\n          [disabled]=\"config?.cascade\"\n        />\n        <span></span>\n        <span>\n          {{ 'Also delete associated device owner.' | translate }}\n        </span>\n      </label>\n    </c8y-form-group>\n  </form>\n</c8y-confirm-modal>\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport {\n  AbstractConfigurationStrategy,\n  DATA_GRID_CONFIGURATION_CONTEXT,\n  DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER,\n  GridConfig,\n  GridConfigContext,\n  GridConfigContextProvider,\n  UserPreferencesConfigurationStrategy\n} from '@c8y/ngx-components';\nimport { cloneDeep } from 'lodash-es';\nimport { Observable, of } from 'rxjs';\nimport { SubAssetsGridConfigContext } from './sub-assets-grid-configuration-strategy.service';\n\n@Injectable({ providedIn: 'root' })\nexport class SmartGroupGridConfigurationStrategy extends AbstractConfigurationStrategy {\n  constructor(\n    protected userPreferencesConfigurationStrategy: UserPreferencesConfigurationStrategy,\n    @Inject(DATA_GRID_CONFIGURATION_CONTEXT)\n    @Optional()\n    protected context: GridConfigContext,\n    @Inject(DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER)\n    @Optional()\n    protected contextProvider: GridConfigContextProvider\n  ) {\n    super(context, contextProvider);\n  }\n\n  getConfig$(context?: SubAssetsGridConfigContext): Observable<GridConfig> {\n    const group = cloneDeep(this.retrieveContext(context)?.group);\n\n    if (group?.c8y_DeviceColumnsConfig?.columns?.length) {\n      group.c8y_DeviceColumnsConfig.columns = group.c8y_DeviceColumnsConfig.columns.map(column => {\n        delete column.filter;\n        return column;\n      });\n    }\n\n    return of(group?.c8y_DeviceColumnsConfig);\n  }\n\n  saveConfig$(config: GridConfig, _context?: SubAssetsGridConfigContext): Observable<GridConfig> {\n    return of(config);\n  }\n}\n","import { Inject, Injectable, Optional } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport {\n  AbstractConfigurationStrategy,\n  DataGridConfigurationStrategy,\n  DATA_GRID_CONFIGURATION_CONTEXT,\n  DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER,\n  GridConfig,\n  GridConfigContext,\n  GridConfigContextProvider,\n  UserPreferencesConfigurationStrategy,\n  UserPreferencesGridConfigContext\n} from '@c8y/ngx-components';\nimport { AssetNodeService } from '@c8y/ngx-components/assets-navigator';\nimport { Observable } from 'rxjs';\nimport { SmartGroupGridConfigurationStrategy } from './smart-group-grid-configuration-strategy.service';\n\nexport interface SubAssetsGridConfigContext extends UserPreferencesGridConfigContext {\n  group: IManagedObject;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class SubAssetsGridConfigurationStrategy extends AbstractConfigurationStrategy {\n  constructor(\n    protected userPreferencesConfigurationStrategy: UserPreferencesConfigurationStrategy,\n    protected smartGroupGridConfigurationStrategy: SmartGroupGridConfigurationStrategy,\n    protected assetNodeService: AssetNodeService,\n    @Inject(DATA_GRID_CONFIGURATION_CONTEXT)\n    @Optional()\n    protected context: GridConfigContext,\n    @Inject(DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER)\n    @Optional()\n    protected contextProvider: GridConfigContextProvider\n  ) {\n    super(context, contextProvider);\n  }\n\n  getConfig$(context?: SubAssetsGridConfigContext): Observable<GridConfig> {\n    return this.getStrategy(context).getConfig$(context);\n  }\n\n  saveConfig$(config: GridConfig, context?: SubAssetsGridConfigContext): Observable<GridConfig> {\n    return this.getStrategy(context).saveConfig$(config, context);\n  }\n\n  private getStrategy(ctx?: SubAssetsGridConfigContext): DataGridConfigurationStrategy {\n    const context = this.retrieveContext(ctx) as SubAssetsGridConfigContext;\n    return !!context?.group &&\n      this.assetNodeService.isDynamicGroup(context?.group) &&\n      context?.group?.c8y_DeviceColumnsConfig\n      ? this.smartGroupGridConfigurationStrategy\n      : this.userPreferencesConfigurationStrategy;\n  }\n}\n","import { Component, Input, ViewChild } from '@angular/core';\nimport { IManagedObject } from '@c8y/client';\nimport {\n  ConfirmModalComponent,\n  GainsightService,\n  gettext,\n  ModalLabels,\n  Status,\n  StatusType\n} from '@c8y/ngx-components';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subject } from 'rxjs';\nimport { PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED } from '../shared/sub-assets.model';\n\n@Component({\n  selector: 'c8y-unassign-modal',\n  templateUrl: './unassign-modal.component.html'\n})\nexport class UnassignModalComponent {\n  CURRENT_LOCATION = location.href;\n  @Input() asset: IManagedObject;\n  @ViewChild('modalRef', { static: false }) modalRef: ConfirmModalComponent;\n  message: string;\n  closeSubject: Subject<boolean> = new Subject();\n  labels: ModalLabels = { ok: gettext('Unassign'), cancel: gettext('Cancel') };\n  title = gettext('Unassign');\n  status: StatusType = Status.WARNING;\n\n  constructor(\n    private translateService: TranslateService,\n    private gainsightService: GainsightService\n  ) {}\n\n  ngOnInit() {\n    this.message = this.translateService.instant(\n      gettext('You are about to unassign \"{{name}}\". Do you want to proceed?'),\n      { name: this.asset.name }\n    );\n  }\n\n  async ngAfterViewInit() {\n    try {\n      await this.modalRef.result;\n      this.onClose();\n    } catch (error) {\n      this.onDismiss();\n    }\n  }\n\n  onClose() {\n    this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED.EVENT, {\n      component: PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED.UNASSIGN_MODAL.COMPONENTS.UNASSIGN_MODAL,\n      result: PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED.UNASSIGN_MODAL.RESULTS.ASSET_UNASSIGNED,\n      url: this.CURRENT_LOCATION\n    });\n    this.closeSubject.next(true);\n    this.closeSubject.complete();\n  }\n\n  onDismiss() {\n    this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED.EVENT, {\n      component: PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED.UNASSIGN_MODAL.COMPONENTS.UNASSIGN_MODAL,\n      action: PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED.UNASSIGN_MODAL.ACTIONS.CANCEL,\n      url: this.CURRENT_LOCATION\n    });\n    this.closeSubject.complete();\n  }\n}\n","<c8y-confirm-modal [title]=\"title\" [status]=\"status\" [labels]=\"labels\" #modalRef>\n  <span>{{ message | translate }}</span>\n</c8y-confirm-modal>\n","import {\n  Component,\n  EventEmitter,\n  Input,\n  OnDestroy,\n  OnInit,\n  Output,\n  SimpleChanges,\n  ViewChild\n} from '@angular/core';\nimport { IManagedObject, SmartGroupsService } from '@c8y/client';\nimport {\n  ActionControl,\n  BuiltInActionType,\n  BulkActionControl,\n  Column,\n  DataGridComponent,\n  DataSourceModifier,\n  DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER,\n  DATA_GRID_CONFIGURATION_STRATEGY,\n  DisplayOptions,\n  gettext,\n  GridConfigContextProvider,\n  Pagination,\n  Row,\n  ServerSideDataCallback,\n  ServerSideDataResult,\n  UserPreferencesConfigurationStrategy\n} from '@c8y/ngx-components';\nimport { AssetNodeService } from '@c8y/ngx-components/assets-navigator';\nimport { DeviceListExtensionService } from '@c8y/ngx-components/device-list';\nimport { BsModalService } from 'ngx-bootstrap/modal';\nimport { of, Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { DeleteModalCheckboxes } from './delete-assets-modal';\nimport { DeleteAssetsModalComponent } from './delete-assets-modal/delete-assets-modal.component';\nimport { PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED } from './shared/sub-assets.model';\nimport { SmartGroupGridConfigurationStrategy } from './smart-group-grid-configuration-strategy.service';\nimport {\n  SubAssetsGridConfigContext,\n  SubAssetsGridConfigurationStrategy\n} from './sub-assets-grid-configuration-strategy.service';\nimport { SubAssetsService } from './sub-assets.service';\nimport { UnassignModalComponent } from './unassign-assets-modal/unassign-modal.component';\n@Component({\n  selector: 'c8y-sub-assets-grid',\n  templateUrl: './sub-assets-grid.component.html',\n  providers: [\n    {\n      provide: UserPreferencesConfigurationStrategy,\n      useClass: UserPreferencesConfigurationStrategy\n    },\n    {\n      provide: SmartGroupGridConfigurationStrategy,\n      useClass: SmartGroupGridConfigurationStrategy\n    },\n    {\n      provide: DATA_GRID_CONFIGURATION_STRATEGY,\n      useClass: SubAssetsGridConfigurationStrategy\n    },\n    {\n      provide: DATA_GRID_CONFIGURATION_CONTEXT_PROVIDER,\n      useExisting: SubAssetsGridComponent\n    }\n  ]\n})\nexport class SubAssetsGridComponent implements OnInit, OnDestroy, GridConfigContextProvider {\n  PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED;\n  @Input('parent-group') parentGroup: IManagedObject;\n  @Input() refresh: EventEmitter<void>;\n  @Input() title: string = gettext('Subassets');\n  @Input() emptyStateText: string = gettext(\n    'Add your first group or assign devices using the buttons on the action bar.'\n  );\n  @Input() loadingItemsLabel: string = gettext('Loading assets…');\n  /** The name of the key where columns configuration will be stored. */\n  @Input() columnsConfigKey: string;\n\n  get columns() {\n    return this._columns;\n  }\n  @Input() set columns(value: Column[]) {\n    this._columns = value ?? this.subAssetsGridService.getDefaultColumns();\n  }\n  @Input('pagination') set _pagination(value: Pagination) {\n    if (value) {\n      this.pagination = value;\n    } else {\n      this.pagination = this.subAssetsGridService.getDefaultPagination();\n    }\n  }\n  @Input('actionControls') set _actionControls(value: ActionControl[]) {\n    if (value) {\n      this.actionControls = value;\n    } else {\n      this.actionControls = this.subAssetsGridService.getDefaultActionControls();\n    }\n  }\n  @Input() selectable = false;\n  @Input() baseQuery: object = {};\n  @Input('bulkActionControls') set _bulkActionControls(value: BulkActionControl[]) {\n    if (value) {\n      this.bulkActionControls = value;\n    } else {\n      this.bulkActionControls = this.subAssetsGridService.getDefaultBulkActionControls();\n    }\n  }\n  @Input() filterable = true;\n  @Input() sortable = true;\n  @Output() onColumnsChange: EventEmitter<Column[]> = new EventEmitter<Column[]>();\n  @Output() itemsSelect: EventEmitter<string[]> = new EventEmitter<string[]>();\n\n  pagination: Pagination = this.subAssetsGridService.getDefaultPagination();\n  showCounterWarning = false;\n  actionControls: ActionControl[];\n  bulkActionControls: BulkActionControl[] =\n    this.subAssetsGridService.getDefaultBulkActionControls();\n  serverSideDataCallback: ServerSideDataCallback;\n\n  @ViewChild(DataGridComponent, { static: true })\n  dataGrid: DataGridComponent;\n\n  displayOptions: DisplayOptions = {\n    striped: true,\n    bordered: false,\n    gridHeader: true,\n    filter: true,\n    hover: true\n  };\n\n  showSearch = false;\n\n  noResultsMessage = gettext('No matching items.');\n  noDataMessage = gettext('No items to display.');\n  noResultsSubtitle = gettext('Refine your search terms or check your spelling.');\n\n  private _columns: Column[];\n  private destroyed$ = new Subject<void>();\n\n  get isRootGroup() {\n    return !this.parentGroup;\n  }\n\n  get getInfiniteScrollMode() {\n    return this.isRootGroup && this.subAssetsGridService.isUsingInventoryRoles()\n      ? 'auto'\n      : undefined;\n  }\n\n  @Input('displayOptions')\n  set _displayOptions(displayOptions) {\n    this.displayOptions = { ...this.displayOptions, ...displayOptions };\n  }\n\n  constructor(\n    public subAssetsGridService: SubAssetsService,\n    private bsModalService: BsModalService,\n    private smartGroupsService: SmartGroupsService,\n    private deviceListExtensionService: DeviceListExtensionService,\n    private assetNodeService: AssetNodeService\n  ) {\n    this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n  }\n\n  getGridConfigContext(): SubAssetsGridConfigContext {\n    if (!!this.columnsConfigKey) {\n      return { key: this.columnsConfigKey, group: this.parentGroup };\n    }\n  }\n\n  ngOnInit() {\n    const isDynamicGroup =\n      !!this.parentGroup && this.assetNodeService.isDynamicGroup(this.parentGroup);\n    if (!this.isRootGroup) {\n      (isDynamicGroup\n        ? this.deviceListExtensionService.items$\n        : of(this.subAssetsGridService.getDefaultColumns(this.filterable, this.sortable))\n      )\n        .pipe(takeUntil(this.destroyed$))\n        .subscribe(columns => (this.columns = columns));\n    }\n    if (!this.filterable || !this.sortable) {\n      this.displayOptions.filter = this.filterable;\n      this.columns.forEach(column => {\n        column.filterable = this.filterable;\n        column.sortable = this.sortable;\n      });\n    }\n    this.setActionControls();\n    this.showSearch = isDynamicGroup || !this.parentGroup;\n  }\n\n  setActionControls() {\n    const actionControls: ActionControl[] = [];\n\n    const unassignAction: ActionControl = {\n      type: 'UNASSIGN',\n      icon: 'unlink',\n      text: gettext('Unassign'),\n      priority: 1000,\n      callback: (asset: Row) => this.onUnassignAsset(asset as IManagedObject, this.parentGroup),\n      showIf: (asset: Row) =>\n        this.subAssetsGridService.isDevice(asset as IManagedObject) &&\n        !this.subAssetsGridService.isSmartGroup(this.parentGroup as IManagedObject)\n    };\n\n    actionControls.push(unassignAction);\n\n    const deleteAction: ActionControl = {\n      type: BuiltInActionType.Delete,\n      priority: -Infinity,\n      callback: (asset: Row) => this.onDeleteAsset(asset as IManagedObject, this.parentGroup),\n      showIf: (asset: Row) => {\n        if (this.smartGroupsService.isSmartGroup(asset as IManagedObject)) {\n          return this.subAssetsGridService.canDeleteSmartGroup();\n        }\n\n        return true;\n      }\n    };\n\n    actionControls.push(deleteAction);\n\n    if (!this.actionControls) {\n      this.actionControls = actionControls;\n    }\n  }\n\n  onUnassignAsset(asset: IManagedObject, parentRef: IManagedObject) {\n    const initialState = {\n      asset\n    };\n    const modalRef = this.bsModalService.show(UnassignModalComponent, { initialState });\n\n    modalRef.content.closeSubject.subscribe(async (result: boolean) => {\n      if (result) {\n        await this.subAssetsGridService.unassignAsset(asset, parentRef);\n        this.refresh.emit();\n      }\n    });\n  }\n\n  async onDeleteAsset(asset: IManagedObject, parentRef: IManagedObject) {\n    const initialState = {\n      showWithDeviceUserCheckbox: this.subAssetsGridService.shouldShowWithDeviceUserCheckbox(asset),\n      asset,\n      showWithCascadeCheckbox: !this.smartGroupsService.isSmartGroup(asset)\n    };\n\n    const modalRef = this.bsModalService.show(DeleteAssetsModalComponent, { initialState });\n\n    modalRef.content.closeSubject.subscribe(async (result: DeleteModalCheckboxes) => {\n      if (result) {\n        await this.subAssetsGridService.deleteAsset(asset, parentRef, result);\n        if (result.cascade) {\n          this.showCounterWarning = true;\n        }\n        this.refresh.emit();\n      }\n    });\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.parentGroup && !changes.parentGroup.firstChange) {\n      this.dataGrid.reload();\n    }\n  }\n\n  trackByName(_index, column: Column): string {\n    return column.name;\n  }\n\n  onReload() {\n    this.assetNodeService.rootNode.refresh();\n  }\n\n  async onDataSourceModifier(\n    dataSourceModifier: DataSourceModifier\n  ): Promise<ServerSideDataResult> {\n    const promises = [];\n    let counters;\n\n    promises.push(\n      this.subAssetsGridService.getData(\n        dataSourceModifier.columns,\n        dataSourceModifier.pagination,\n        this.parentGroup,\n        this.baseQuery,\n        dataSourceModifier.searchText\n      )\n    );\n\n    promises.push(this.subAssetsGridService.getTotal(this.parentGroup, this.baseQuery));\n    promises.push(\n      this.subAssetsGridService.getCount(\n        dataSourceModifier.columns,\n        dataSourceModifier.pagination,\n        this.parentGroup,\n        this.baseQuery,\n        dataSourceModifier.searchText\n      )\n    );\n\n    const [dataResponse, size, filteredSize] = await Promise.all(promises);\n    if (!counters) {\n      counters = {\n        size,\n        filteredSize\n      };\n    }\n    this.onColumnsChange.emit(dataSourceModifier.columns);\n\n    return {\n      res: dataResponse.res,\n      data: dataResponse.data,\n      paging: dataResponse.paging,\n      ...counters\n    };\n  }\n\n  ngOnDestroy(): void {\n    this.destroyed$.next();\n    this.destroyed$.complete();\n  }\n}\n","<c8y-data-grid\n  [title]=\"title\"\n  [loadingItemsLabel]=\"loadingItemsLabel\"\n  [columns]=\"columns\"\n  [pagination]=\"pagination\"\n  [actionControls]=\"actionControls\"\n  [selectable]=\"selectable\"\n  [bulkActionControls]=\"bulkActionControls\"\n  [serverSideDataCallback]=\"serverSideDataCallback\"\n  [infiniteScroll]=\"getInfiniteScrollMode\"\n  [showCounterWarning]=\"showCounterWarning\"\n  [refresh]=\"refresh\"\n  [showSearch]=\"showSearch\"\n  [displayOptions]=\"displayOptions\"\n  (itemsSelect)=\"itemsSelect.emit($event)\"\n  c8yProductExperience\n  [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n  (onReload)=\"onReload()\"\n>\n  <c8y-ui-empty-state\n    [icon]=\"'c8y-group-add'\"\n    [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n    [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (emptyStateText | translate)\"\n    *emptyStateContext=\"let stats\"\n    [horizontal]=\"true\"\n  ></c8y-ui-empty-state>\n\n  <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n    <c8y-column [name]=\"column.name\"></c8y-column>\n  </ng-container>\n</c8y-data-grid>\n","import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';\nimport { AlertService, gettext } from '@c8y/ngx-components';\nimport { InventoryService } from '@c8y/client';\nimport { SubAssetsService } from '../sub-assets.service';\nimport { IManagedObject } from '@c8y/client';\n\n@Component({\n  selector: 'c8y-assign-child-devices',\n  templateUrl: './assign-child-devices.component.html'\n})\nexport class AssignChildDevicesComponent {\n  @Input() currentGroupId: string;\n  @Input() parentDevice: IManagedObject;\n  @Output() onCancel = new EventEmitter<any>();\n  @Output() onSelectedDevices = new EventEmitter<string[]>();\n  @Input() refresh = new EventEmitter<any>();\n  @Input() onlySelect = false; // if true, devices are only selected, not assigned\n\n  selected: string[] = [];\n  baseQuery: any;\n  canAssignDevice = false;\n  pendingStatus = false;\n\n  constructor(\n    private alert: AlertService,\n    private subAssetsService: SubAssetsService,\n    private inventoryService: InventoryService\n  ) {}\n\n  @HostListener('document:keydown.enter', ['$event']) onEnterKeyDown(_event: KeyboardEvent) {\n    if (this.selected.length > 0) {\n      this.assignDevices();\n    }\n  }\n\n  @HostListener('document:keydown.escape', ['$event']) onEscapeKeyDown(_event: KeyboardEvent) {\n    this.onCancel.emit();\n  }\n\n  async ngOnInit() {\n    this.setNotIncludedInGroupQuery();\n    this.canAssignDevice = await this.subAssetsService.canAssignDevice({\n      id: this.currentGroupId\n    } as IManagedObject);\n  }\n\n  setNotIncludedInGroupQuery() {\n    const notIncludedInGroupQuery = { __not: { __bygroupid: this.currentGroupId } };\n    this.baseQuery = notIncludedInGroupQuery;\n  }\n\n  async assignDevices() {\n    if (this.canAssignDevice === false) {\n      return;\n    }\n    if (this.onlySelect) {\n      this.onSelectedDevices.emit(this.selected);\n      this.alert.success(gettext('Child devices selected.'));\n      this.onCancel.emit();\n      return;\n    }\n\n    this.pendingStatus = true;\n\n    try {\n      await this.inventoryService.childAssetsBulkAdd(this.selected, this.currentGroupId);\n      this.refresh.emit();\n      this.alert.success(gettext('Child devices assigned.'));\n    } catch (error) {\n      this.alert.danger(gettext('Could not assign child devices.'), error);\n    }\n    this.pendingStatus = false;\n    this.selected = [];\n    this.onCancel.emit();\n  }\n\n  onSelected(selectedDevicesIDs: string[]) {\n    this.selected = selectedDevicesIDs;\n  }\n}\n","<div class=\"card-block flex-no-shrink separator-bottom col-xs-12 large-padding p-t-24 p-b-24\">\n  <div class=\"row\">\n    <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n      <h4 class=\"text-center text-medium\">\n        {{ 'Assign child devices' | translate }}\n      </h4>\n    </div>\n  </div>\n</div>\n\n<c8y-sub-assets-grid\n  [title]=\"''\"\n  [emptyStateText]=\"'All child devices are already assigned' | translate\"\n  [refresh]=\"refresh\"\n  [actionControls]=\"[]\"\n  [columnsConfigKey]=\"'assign-child-devices'\"\n  [selectable]=\"true\"\n  [parent-group]=\"parentDevice\"\n  [baseQuery]=\"baseQuery\"\n  (itemsSelect)=\"onSelected($event)\"\n  class=\"d-contents\"\n></c8y-sub-assets-grid>\n\n<div class=\"text-center card-footer p-24 separator\">\n  <button\n    (click)=\"onCancel.emit()\"\n    type=\"button\"\n    class=\"btn btn-default\"\n    title=\"{{ 'Cancel' | translate }}\"\n  >\n    <span>{{ 'Cancel' | translate }}</span>\n  </button>\n  <button\n    (click)=\"assignDevices()\"\n    type=\"button\"\n    class=\"btn btn-primary\"\n    [ngClass]=\"{ 'btn-pending': pendingStatus }\"\n    title=\"{{ 'Assign' | translate }}\"\n    [disabled]=\"selected.length === 0 || !canAssignDevice\"\n  >\n    <span>{{ 'Assign' | translate }}</span>\n  </button>\n</div>\n","import {\n  Component,\n  ElementRef,\n  EventEmitter,\n  HostListener,\n  Input,\n  Output,\n  ViewChild\n} from '@angular/core';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { IManagedObject } from '@c8y/client';\nimport {\n  ActionControl,\n  AlertService,\n  C8yStepper,\n  GainsightService,\n  gettext,\n  Pagination,\n  Permissions,\n  Row\n} from '@c8y/ngx-components';\nimport { Subscription } from 'rxjs';\nimport { PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED } from '../shared/sub-assets.model';\nimport { SubAssetsService } from '../sub-assets.service';\nimport { AddGroupService } from './add-group.service';\n\n@Component({\n  selector: 'c8y-add-group',\n  templateUrl: './add-group.component.html'\n})\nexport class AddGroupComponent {\n  @Input() currentGroupId: string;\n  @Input() refresh = new EventEmitter<void>();\n  @Output() onDeviceQueryStringChange: EventEmitter<string> = new EventEmitter<string>();\n  @Output() onCancel = new EventEmitter<void>();\n  @ViewChild(C8yStepper, { static: false })\n  stepper: C8yStepper;\n  @ViewChild('nameRef', { static: false })\n  nameInputRef: ElementRef;\n  deviceQueryStringOutput: string;\n  showAssignChildDevices = false;\n  showChildrenForDevice: IManagedObject;\n  formGroupStepOne: FormGroup;\n  actionControls: ActionControl[] = [];\n  pendingStatus = false;\n  pagination: Pagination = { pageSize: 20, currentPage: 1 };\n  selected: string[] = [];\n  selectedChildDevices: string[] = [];\n  subscription: Subscription;\n  canCreateGroup = false;\n  canAssignDevice = false;\n  PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED;\n\n  readonly ITEMS_SELECT_LIMIT: number = 15;\n  readonly btnLabels = {\n    next: gettext('Next'),\n    cancel: gettext('Cancel'),\n    create: gettext('Create')\n  };\n\n  private nameInput: HTMLInputElement;\n\n  constructor(\n    private fb: FormBuilder,\n    private addGroupService: AddGroupService,\n    private alert: AlertService,\n    private subAssetsService: SubAssetsService,\n    private gainsightService: GainsightService,\n    private permissionsService: Permissions\n  ) {}\n\n  @HostListener('document:keydown.enter', ['$event']) onEnterKeyDown(_event: KeyboardEvent) {\n    // Order matters! Needs to be placed before this.stepper.next\n    if ((this.isGroupDetailsStep() && !this.canAssignDevice) || this.isAssignDeviceStep()) {\n      this.createGroup();\n      return;\n    }\n    this.stepper.next();\n  }\n\n  async ngOnInit() {\n    this.formGroupStepOne = this.fb.group({\n      name: ['', Validators.required],\n      description: ['']\n    });\n    this.subscription = this.onCancel.subscribe(() => this.resetStepper());\n    this.canCreateGroup =\n      this.subAssetsService.canCreateGroup() ||\n      (await this.permissionsService.canEdit(\n        [\n          Permissions.ROLE_INVENTORY_ADMIN,\n          Permissions.ROLE_INVENTORY_CREATE,\n          Permissions.ROLE_MANAGED_OBJECT_ADMIN,\n          Permissions.ROLE_MANAGED_OBJECT_CREATE\n        ],\n        {\n          id: this.currentGroupId\n        }\n      ));\n    this.canAssignDevice = await this.subAssetsService.canAssignDevice({\n      id: this.currentGroupId\n    } as IManagedObject);\n    this.setActionControls();\n  }\n\n  setActionControls() {\n    const actionControls: ActionControl[] = [];\n\n    const selectChildrenAction: ActionControl = {\n      type: 'SHOW_TARGET_CHILD_DEVICES',\n      icon: 'enter-bottom',\n      text: gettext('Select target child devices'),\n      callback: (asset: Row) => this.selectChildren(asset as IManagedObject),\n      showIf: (asset: Row) => asset.childDevices.references.length > 0\n    };\n\n    actionControls.push(selectChildrenAction);\n\n    this.actionControls = actionControls;\n    this.refresh.emit();\n  }\n\n  ngAfterViewInit() {\n    this.nameInput = this.nameInputRef.nativeElement as HTMLInputElement;\n    this.setFocusOnNameInput();\n  }\n\n  async createGroup() {\n    if (this.canCreateGroup === false) {\n      return;\n    }\n\n    this.pendingStatus = true;\n    const combinedDevices = [...this.selected, ...this.selectedChildDevices];\n    await this.addGroupService.createGroupAndAssignDevices(\n      this.formGroupStepOne.value,\n      this.currentGroupId,\n      combinedDevices\n    );\n\n    this.pendingStatus = false;\n    this.resetStepper();\n    const alertMsg = gettext('Group created.');\n    this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED.EVENT, {\n      component: PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED.ADD_GROUP.COMPONENTS.ADD_GROUP,\n      url: window.location.href,\n      result: PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED.ADD_GROUP.RESULTS.ADD_SUCCESS\n    });\n    this.alert.success(alertMsg);\n    this.refresh.emit();\n    this.onCancel.emit();\n  }\n\n  onSelected(selectedDevicesIDs: string[]) {\n    this.selected = selectedDevicesIDs;\n  }\n\n  onSelectedChildDevices(selectedDevicesIDs: string[]) {\n    this.selectedChildDevices = selectedDevicesIDs;\n  }\n\n  resetStepper() {\n    this.stepper.reset();\n    this.stepper.selectedIndex = 1;\n    this.selected = [];\n  }\n\n  ngOnDestroy() {\n    if (this.subscription) {\n      this.subscription.unsubscribe();\n    }\n  }\n\n  private isGroupDetailsStep() {\n    return this.stepper.selectedIndex === 0;\n  }\n\n  private isAssignDeviceStep() {\n    return this.stepper.selectedIndex === 1;\n  }\n\n  private setFocusOnNameInput() {\n    if (this.nameInput) {\n      this.nameInput.focus();\n      this.nameInput.select();\n    }\n  }\n\n  private selectChildren(asset: IManagedObject) {\n    this.showAssignChildDevices = true;\n    this.showChildrenForDevice = asset;\n  }\n}\n","<div [ngClass]=\"{ drawerOpen: true }\">\n  <div class=\"bottom-drawer\">\n    <div\n      class=\"d-contents\"\n      *ngIf=\"!currentGroupId; else stepper\"\n    >\n      <ng-container [ngTemplateOutlet]=\"stepper\"></ng-container>\n    </div>\n  </div>\n</div>\n\n<ng-template #stepper>\n  <c8y-stepper\n    class=\"d-col flex-nowrap no-align-items fit-h c8y-stepper--no-btns\"\n    [disableDefaultIcons]=\"{ edit: true, done: false }\"\n    [customClasses]=\"['col-md-6', 'col-md-offset-3', 'm-t-24', 'm-b-40', 'p-0', 'flex-no-shrink']\"\n    linear\n    c8yProductExperience\n    inherit\n    [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n    [actionData]=\"{ component: PRODUCT_EXPERIENCE.ADD_GROUP.COMPONENTS.ADD_GROUP }\"\n  >\n    <cdk-step\n      [stepControl]=\"formGroupStepOne\"\n      [label]=\"'New group' | translate\"\n    >\n      <div class=\"p-16 p-t-0 flex-no-shrink separator-bottom col-xs-12\">\n        <div class=\"row\">\n          <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n            <div class=\"h4 text-center text-medium\">\n              {{ 'New group' | translate }}\n            </div>\n          </div>\n        </div>\n      </div>\n      <div class=\"col-xs-12 flex-grow no-gutter\">\n        <div class=\"card-inner-scroll fit-h\">\n          <div class=\"card-block p-b-0\">\n            <div class=\"row\">\n              <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n                <c8y-form-group [novalidation]=\"true\">\n                  <div [formGroup]=\"formGroupStepOne\">\n                    <c8y-form-group>\n                      <label translate>Name</label>\n                      <input\n                        class=\"form-control\"\n                        placeholder=\"{{ 'e.g. First floor' | translate }} \"\n                        type=\"text\"\n                        required\n                        formControlName=\"name\"\n                        maxlength=\"254\"\n                        #nameRef\n                      />\n                    </c8y-form-group>\n\n                    <c8y-form-group>\n                      <label translate>Description</label>\n                      <input\n                        class=\"form-control\"\n                        placeholder=\"{{ 'e.g. first floor devices' | translate }}\"\n                        type=\"text\"\n                        formControlName=\"description\"\n                      />\n                    </c8y-form-group>\n                  </div>\n                </c8y-form-group>\n                <c8y-form-group>\n                  <div [formGroup]=\"formGroupStepOne\"></div>\n                </c8y-form-group>\n                <div\n                  class=\"alert alert-info max-width-100\"\n                  translate\n                  *ngIf=\"!canAssignDevice\"\n                >\n                  You don't have permission to assign devices.\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <c8y-stepper-buttons\n        class=\"d-block card-footer p-24 separator\"\n        (onCancel)=\"onCancel.emit()\"\n        (onCustom)=\"createGroup()\"\n        [disabled]=\"!canCreateGroup\"\n        [labels]=\"\n          canAssignDevice\n            ? { next: btnLabels.next, cancel: btnLabels.cancel }\n            : { custom: btnLabels.create, cancel: btnLabels.cancel }\n        \"\n        [showButtons]=\"\n          canAssignDevice ? { next: true, cancel: true } : { custom: true, cancel: true }\n        \"\n      ></c8y-stepper-buttons>\n    </cdk-step>\n    <cdk-step [label]=\"'Assign devices' | translate\">\n      <div class=\"p-16 p-t-0 flex-no-shrink separator-bottom col-xs-12\">\n        <div class=\"row\">\n          <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n            <div class=\"h4 text-center text-medium\">\n              {{ 'Assign devices' | translate }}\n            </div>\n          </div>\n        </div>\n      </div>\n      <div class=\"col-xs-12 no-gutter flex-grow\">\n        <c8y-device-grid\n          [title]=\"'Select target devices' | translate\"\n          [actionControls]=\"actionControls\"\n          [infiniteScroll]=\"'auto'\"\n          [selectable]=\"true\"\n          [withChildren]=\"true\"\n          [pagination]=\"pagination\"\n          (itemsSelect)=\"onSelected($event)\"\n          [refresh]=\"refresh\"\n          c8yProductExperience\n          [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n          [actionData]=\"{ component: PRODUCT_EXPERIENCE.ADD_GROUP.COMPONENTS.ADD_GROUP }\"\n        ></c8y-device-grid>\n      </div>\n      <c8y-stepper-buttons\n        class=\"d-block card-footer p-24 separator\"\n        (onCancel)=\"onCancel.emit()\"\n        (onCustom)=\"createGroup()\"\n        [labels]=\"{ custom: btnLabels.create }\"\n        [disabled]=\"!canAssignDevice\"\n        [pending]=\"pendingStatus\"\n      ></c8y-stepper-buttons>\n    </cdk-step>\n  </c8y-stepper>\n</ng-template>\n\n<div\n  [ngClass]=\"{ drawerOpen: showAssignChildDevices }\"\n  *ngIf=\"showAssignChildDevices\"\n>\n  <div class=\"bottom-drawer m-t-40\">\n    <div class=\"d-flex d-col no-align-items fit-h\">\n      <c8y-assign-child-devices\n        class=\"d-contents\"\n        (onCancel)=\"showAssignChildDevices = false\"\n        [refresh]=\"refresh\"\n        [currentGroupId]=\"currentGroupId\"\n        [parentDevice]=\"showChildrenForDevice\"\n        [onlySelect]=\"true\"\n        (onSelectedDevices)=\"onSelectedChildDevices($event)\"\n      ></c8y-assign-child-devices>\n    </div>\n  </div>\n</div>\n","import {\n  Component,\n  EventEmitter,\n  HostListener,\n  Input,\n  Output,\n  TemplateRef,\n  ViewChild\n} from '@angular/core';\nimport { IManagedObject, InventoryService } from '@c8y/client';\nimport {\n  ActionControl,\n  AlertService,\n  DATA_GRID_CONFIGURATION_CONTEXT,\n  DATA_GRID_CONFIGURATION_STRATEGY,\n  GainsightService,\n  gettext,\n  HeaderActionControl,\n  Pagination,\n  Row,\n  UserPreferencesConfigurationStrategy,\n  UserPreferencesGridConfigContext\n} from '@c8y/ngx-components';\nimport { PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED } from '../shared/sub-assets.model';\nimport { SubAssetsService } from '../sub-assets.service';\n\n@Component({\n  selector: 'c8y-assign-devices',\n  templateUrl: './assign-devices.component.html',\n  providers: [\n    {\n      provide: DATA_GRID_CONFIGURATION_STRATEGY,\n      useClass: UserPreferencesConfigurationStrategy\n    },\n    {\n      provide: DATA_GRID_CONFIGURATION_CONTEXT,\n      useValue: AssignDevicesComponent.GRID_CONFIG_CONTEXT\n    }\n  ]\n})\nexport class AssignDevicesComponent {\n  static readonly GRID_CONFIG_CONTEXT: UserPreferencesGridConfigContext = {\n    key: 'assign-devices-grid',\n    configFilter: {\n      filter: false\n    }\n  };\n\n  CURRENT_LOCATION = location.href;\n  PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED;\n\n  @Input() currentGroupId: string;\n  @Input() refresh = new EventEmitter<any>();\n  @Output() onCancel = new EventEmitter<any>();\n  @Output() onShowChildDevices = new EventEmitter<boolean>();\n  @Output() selectedDevice = new EventEmitter<IManagedObject>();\n  @ViewChild('showDevicesToggle', { read: TemplateRef }) showDevicesToggle: TemplateRef<any>;\n\n  deviceQueryStringOutput: string;\n  pendingStatus = false;\n  pagination: Pagination = { pageSize: 20, currentPage: 1 };\n  selected: string[] = [];\n  baseQuery: any;\n  canAssignDevice = false;\n  actionControls: ActionControl[] = [];\n  headerActionControls: HeaderActionControl[] = [];\n  showChildren = false;\n  readonly isSelectable = true;\n\n  constructor(\n    private alert: AlertService,\n    private subAssetsService: SubAssetsService,\n    private inventoryService: InventoryService,\n    private gainsightService: GainsightService\n  ) {}\n\n  @HostListener('document:keydown.enter', ['$event']) onEnterKeyDown(_event: KeyboardEvent) {\n    if (this.selected.length > 0) {\n      this.assignDevices();\n    }\n  }\n\n  async ngOnInit() {\n    this.setNotIncludedInGroupQuery();\n    this.canAssignDevice = await this.subAssetsService.canAssignDevice({\n      id: this.currentGroupId\n    } as IManagedObject);\n    this.setHeaderActionControls();\n  }\n\n  setNotIncludedInGroupQuery() {\n    const notIncludedInGroupQuery = { __not: { __bygroupid: this.currentGroupId } };\n    this.baseQuery = notIncludedInGroupQuery;\n  }\n\n  setHeaderActionControls() {\n    const headerActionControls: HeaderActionControl[] = [];\n    const showChildDevices = {\n      type: 'DISPLAY_CHILD_DEVICES_BUTTON',\n      text: gettext('Enable child devices selection'),\n      template: this.showDevicesToggle,\n      callback: () => {\n        this.showChildren = !this.showChildren;\n        this.setActionControls(this.showChildren);\n        this.gainsightService.triggerEvent(PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED.EVENT, {\n          component: PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED.ASSIGN_DEVICES.COMPONENTS.ASSIGN_DEVICES,\n          action: PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED.ASSIGN_DEVICES.ACTIONS.DISPLAY_CHILD_DEVICES,\n          url: this.CURRENT_LOCATION\n        });\n      }\n    };\n    headerActionControls.push(showChildDevices);\n    this.headerActionControls = headerActionControls;\n  }\n\n  setActionControls(showChildren: boolean) {\n    const actionControls: ActionControl[] = [];\n\n    const selectChildrenAction: ActionControl = {\n      type: 'SHOW_TARGET_CHILD_DEVICES',\n      icon: 'enter-bottom',\n      text: gettext('Select target child devices'),\n      callback: (asset: Row) => this.selectChildren(asset as IManagedObject),\n      showIf: (asset: Row) => asset.childDevices.references.length > 0\n    };\n\n    if (showChildren) {\n      actionControls.push(selectChildrenAction);\n    }\n\n    this.actionControls = actionControls;\n    this.refresh.emit();\n  }\n\n  async assignDevices() {\n    if (this.canAssignDevice === false) {\n      return;\n    }\n    this.pendingStatus = true;\n\n    try {\n      await this.inventoryService.childAssetsBulkAdd(this.selected, this.currentGroupId);\n      this.refresh.emit();\n      this.alert.success(gettext('Devices assigned.'));\n    } catch (error) {\n      this.alert.danger(gettext('Could not assign devices.'), error);\n    }\n    this.pendingStatus = false;\n    this.selected = [];\n    this.onCancel.emit();\n  }\n\n  onSelected(selectedDevicesIDs: string[]) {\n    this.selected = selectedDevicesIDs;\n  }\n\n  selectChildren(asset: IManagedObject) {\n    this.onShowChildDevices.emit(true);\n    this.selectedDevice.emit(asset);\n  }\n}\n","<div class=\"card-block flex-no-shrink separator-bottom col-xs-12 large-padding p-t-24 p-b-24\">\n  <div class=\"row\">\n    <div class=\"col-md-6 col-md-offset-3 col-lg-4 col-lg-offset-4\">\n      <div class=\"h4 text-center text-medium\">\n        {{ 'Assign devices' | translate }}\n      </div>\n    </div>\n  </div>\n</div>\n<c8y-device-grid\n  class=\"flex-grow col-xs-12 no-gutter\"\n  [title]=\"''\"\n  [actionControls]=\"actionControls\"\n  [infiniteScroll]=\"'auto'\"\n  [selectable]=\"isSelectable\"\n  [pagination]=\"pagination\"\n  (itemsSelect)=\"onSelected($event)\"\n  [refresh]=\"refresh\"\n  [baseQuery]=\"baseQuery\"\n  [headerActionControls]=\"headerActionControls\"\n  [withChildren]=\"true\"\n  c8yProductExperience\n  [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n  [actionData]=\"{ component: PRODUCT_EXPERIENCE.ASSIGN_DEVICES.COMPONENTS.ASSIGN_DEVICES }\"\n></c8y-device-grid>\n\n<div class=\"text-center card-footer p-24 separator\">\n  <button\n    class=\"btn btn-default\"\n    title=\"{{ 'Cancel' | translate }}\"\n    type=\"button\"\n    (click)=\"onCancel.emit()\"\n    c8yProductExperience\n    [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n    [actionData]=\"{\n      component: PRODUCT_EXPERIENCE.ASSIGN_DEVICES.COMPONENTS.ASSIGN_DEVICES,\n      action: PRODUCT_EXPERIENCE.ASSIGN_DEVICES.ACTIONS.CANCEL\n    }\"\n  >\n    <span>{{ 'Cancel' | translate }}</span>\n  </button>\n  <button\n    class=\"btn btn-primary\"\n    title=\"{{ 'Assign' | translate }}\"\n    type=\"button\"\n    [ngClass]=\"{ 'btn-pending': pendingStatus }\"\n    (click)=\"assignDevices()\"\n    [disabled]=\"selected.length === 0 || !canAssignDevice\"\n    c8yProductExperience\n    [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n    [actionData]=\"{\n      component: PRODUCT_EXPERIENCE.ASSIGN_DEVICES.COMPONENTS.ASSIGN_DEVICES,\n      action: PRODUCT_EXPERIENCE.ASSIGN_DEVICES.ACTIONS.ASSIGN\n    }\"\n  >\n    <span>{{ 'Assign' | translate }}</span>\n  </button>\n</div>\n\n<ng-template\n  #showDevicesToggle\n  let-control=\"headerActionControl\"\n>\n  <label\n    class=\"c8y-switch a-s-center\"\n    title=\"{{ control.text | translate }}\"\n  >\n    <input\n      type=\"checkbox\"\n      [(ngModel)]=\"showChildren\"\n      (click)=\"control.callback()\"\n    />\n    <span></span>\n    <span>{{ control.text | translate }}</span>\n  </label>\n  <button\n    class=\"btn-help m-r-16 a-s-center\"\n    [attr.aria-label]=\"'Help' | translate\"\n    [popover]=\"childDevicesPop\"\n    placement=\"bottom\"\n    triggers=\"focus\"\n    type=\"button\"\n  ></button>\n  <ng-template #childDevicesPop>\n    <span translate>\n      Displays the button\n      <span\n        class=\"btn btn-dot btn-icon no-pointer\"\n        title=\"Child devices icon\"\n      >\n        <i class=\"text-primary dlt-c8y-icon-enter-bottom\"></i>\n      </span>\n      next to target devices with children. Clicking it displays a list with all child devices of\n      the selected target device.\n    </span>\n  </ng-template>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@c8y/ngx-components';\nimport { DeviceGridModule } from '@c8y/ngx-components/device-grid';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { SubAssetsGridComponent } from './sub-assets-grid.component';\nimport { AssignChildDevicesComponent } from './assign-devices/assign-child-devices.component';\nimport { AssignDevicesComponent } from './assign-devices/assign-devices.component';\n\n@NgModule({\n  declarations: [AssignDevicesComponent, AssignChildDevicesComponent, SubAssetsGridComponent],\n  imports: [CoreModule, DeviceGridModule, PopoverModule, BsDropdownModule, TooltipModule],\n  exports: [SubAssetsGridComponent, AssignDevicesComponent, AssignChildDevicesComponent]\n})\nexport class SubAssetsGridsModule {}\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@c8y/ngx-components';\nimport { DeviceGridModule } from '@c8y/ngx-components/device-grid';\nimport { AddGroupComponent } from './add-group.component';\nimport { AddGroupService } from './add-group.service';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { SubAssetsGridsModule } from '../sub-assets-grids.module';\n\n@NgModule({\n  declarations: [AddGroupComponent],\n  imports: [\n    CoreModule,\n    DeviceGridModule,\n    FormsModule,\n    ReactiveFormsModule,\n    PopoverModule,\n    SubAssetsGridsModule\n  ],\n  exports: [AddGroupComponent],\n  providers: [AddGroupService]\n})\nexport class AddGroupModule {}\n","import { Component, Input, OnChanges, SimpleChanges } from '@angular/core';\nimport { FormGroup } from '@angular/forms';\nimport { IManagedObjectBinary } from '@c8y/client';\nimport { AlertService, C8yJSONSchema, gettext, FilesService } from '@c8y/ngx-components';\nimport { FormlyFieldConfig } from '@ngx-formly/core';\nimport { AssetPropertiesItem } from './asset-properties.model';\nimport { JSONSchema7 } from 'json-schema';\nimport { clone, sortBy } from 'lodash-es';\n\n@Component({\n  selector: 'c8y-asset-properties-item',\n  templateUrl: './asset-properties-item.component.html'\n})\nexport class AssetPropertiesItemComponent implements AssetPropertiesItem, OnChanges {\n  @Input()\n  key: string;\n  @Input()\n  value: any;\n  @Input()\n  label: string;\n  @Input()\n  type: string;\n  @Input()\n  file: IManagedObjectBinary;\n  @Input()\n  complex: AssetPropertiesItem[];\n  @Input()\n  isEdit: boolean;\n  @Input()\n  jsonSchema: JSONSchema7;\n\n  form: FormGroup;\n  fields: FormlyFieldConfig[];\n  model: any;\n  previewImage;\n\n  constructor(\n    private alert: AlertService,\n    private c8yJsonSchemaService: C8yJSONSchema,\n    public filesService: FilesService\n  ) {}\n\n  async ngOnChanges(changes: SimpleChanges): Promise<void> {\n    if (changes.isEdit) {\n      this.resolveJsonSchema();\n      await this.resolveFile();\n    }\n  }\n\n  private async resolveFile() {\n    if (this.file) {\n      try {\n        if (this.filesService.fileNamesHaveValidExtension(this.file.name, 'image')) {\n          const imageFile = await this.filesService.getFile(this.file);\n          this.previewImage = await this.getPreviewIfImage(imageFile);\n        }\n      } catch (ex) {\n        this.alert.danger(gettext('File could not be loaded.'));\n      }\n    }\n  }\n\n  private formComplexPropsValue() {\n    const complexProps = {};\n    this.complex.forEach(complexObj => {\n      if (complexObj.file) {\n        complexProps[complexObj.key] = complexObj.value;\n      } else {\n        complexProps[complexObj.key] = this.value[complexObj.key];\n      }\n    });\n    return complexProps;\n  }\n\n  private getModel() {\n    if (this.complex && this.complex.length > 0) {\n      return {\n        [this.key]: this.formComplexPropsValue()\n      };\n    }\n    return {\n      [this.key]: clone(this.value)\n    };\n  }\n\n  private resolveJsonSchema() {\n    if (this.jsonSchema) {\n      const fieldConfig = this.c8yJsonSchemaService.toFieldConfig(this.jsonSchema, this.jsonSchema);\n      if (this.complex && this.complex.length > 0) {\n        const orderedFieldConfig = sortBy(fieldConfig.fieldGroup[0].fieldGroup, 'order');\n        fieldConfig.fieldGroup[0].fieldGroup = orderedFieldConfig;\n      }\n      this.form = new FormGroup({});\n      this.fields = [fieldConfig];\n      this.model = this.getModel();\n    }\n  }\n\n  private async getPreviewIfImage(imageFile: File) {\n    return this.filesService.toBase64(imageFile);\n  }\n}\n","<ng-container [ngSwitch]=\"type\" *ngIf=\"!isEdit\">\n  <ng-container *ngSwitchCase=\"'date'\">\n    {{ (value | c8yDate: 'fullDate') || ('Undefined' | translate) }}\n  </ng-container>\n  <ng-container *ngSwitchCase=\"'file'\">\n    <ng-container *ngIf=\"file\">\n      <img *ngIf=\"previewImage\" [src]=\"previewImage\" class=\"img-responsive\" />\n      <button\n        *ngIf=\"!previewImage\"\n        (click)=\"filesService.download(file)\"\n        type=\"button\"\n        title=\"{{ 'Download' | translate }} {{ file.name }}\"\n        class=\"btn btn-clean text-truncate p-0\"\n      >\n        {{ file.name }}\n      </button>\n    </ng-container>\n    <ng-container *ngIf=\"!file\">\n      {{ 'No file attached.' | translate }}\n    </ng-container>\n  </ng-container>\n  <ng-container *ngSwitchCase=\"'object'\">\n    <ul class=\"list-unstyled c8y-custom-properties\">\n      <li\n        *ngFor=\"let prop of complex; let i = index\"\n        [ngClass]=\"{ 'separator-top-bottom': i === 0, 'separator-bottom': i > 0 }\"\n        class=\"p-t-4 p-b-4 d-flex text-nowrap\"\n      >\n        <label\n          class=\"small m-b-0 m-r-8 text-truncate\"\n          title=\"{{ prop.label | translate }}\"\n          [ngClass]=\"{ 'a-s-start': prop.file }\"\n        >\n          {{ prop.label | translate }}\n        </label>\n        <span class=\"m-l-auto\" style=\"max-width: {{ prop.file ? '50%' : '100%' }}; min-width:0;\">\n          <c8y-asset-properties-item\n            [file]=\"prop.file\"\n            [key]=\"prop.key\"\n            [type]=\"prop.type\"\n            [value]=\"prop.value\"\n          ></c8y-asset-properties-item>\n        </span>\n      </li>\n    </ul>\n  </ng-container>\n  <!--\n  <ng-container *ngSwitchCase=\"'boolean'\">\n      <input type=\"checkbox\" [checked]=\"value\" [disabled]=\"true\" />\n    </ng-container>\n  -->\n  <ng-container *ngSwitchCase=\"type === 'number' || type === 'boolean' ? type : ''\">\n    <p class=\"text-truncate\" title=\"{{ value != null ? value : ('Undefined' | translate) }}\">\n      {{ value != null ? value : ('Undefined' | translate) }}\n    </p>\n  </ng-container>\n  <ng-container *ngSwitchDefault>\n    <p class=\"text-truncate\" title=\"{{ (value | translate) || ('Undefined' | translate) }}\">\n      {{ (value | translate) || ('Undefined' | translate) }}\n    </p>\n  </ng-container>\n</ng-container>\n<formly-form *ngIf=\"isEdit\" [form]=\"form\" [fields]=\"fields\" [model]=\"model\"></formly-form>\n","function isFullScreenEnabled(element) {\n  const doc: any = element;\n  return !!(\n    doc.fullscreenElement ||\n    doc.mozFullScreenElement ||\n    doc.webkitFullscreenElement ||\n    doc.msFullscreenElement\n  );\n}\n\nexport function toggleFullscreen(element) {\n  const elem = element as any;\n  const doc = element as any;\n  if (!isFullScreenEnabled(element)) {\n    if (elem.requestFullscreen) {\n      elem.requestFullscreen();\n    } else if (elem.msRequestFullscreen) {\n      elem.msRequestFullscreen();\n    } else if (elem.mozRequestFullScreen) {\n      elem.mozRequestFullScreen();\n    } else if (elem.webkitRequestFullscreen) {\n      elem.webkitRequestFullscreen((Element as any).ALLOW_KEYBOARD_INPUT);\n    }\n  } else if (doc.exitFullscreen) {\n    doc.exitFullscreen();\n  } else if (doc.msExitFullscreen) {\n    doc.msExitFullscreen();\n  } else if (doc.mozCancelFullScreen) {\n    doc.mozCancelFullScreen();\n  } else if (doc.webkitExitFullscreen) {\n    doc.webkitExitFullscreen();\n  }\n}\n","import {\n  Component,\n  Input,\n  OnChanges,\n  OnDestroy,\n  OnInit,\n  SimpleChanges,\n  ViewChild\n} from '@angular/core';\nimport * as L from 'leaflet';\nimport {\n  MapComponent,\n  MapConfig,\n  MapService,\n  PositionManagedObject,\n  defaultMapConfig,\n  getC8yMarker\n} from '@c8y/ngx-components/map';\nimport { FormArray, FormGroup } from '@angular/forms';\nimport { IManagedObject } from '@c8y/client';\nimport { ActivatedRoute } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { toggleFullscreen } from '../fullscreen.util';\nimport { isNumber } from 'lodash-es';\n\n// Düsseldorf\nexport const defaultMapLocation = {\n  lat: defaultMapConfig.center[0],\n  lng: defaultMapConfig.center[1]\n} as const;\n\n@Component({\n  selector: 'c8y-asset-location',\n  templateUrl: './asset-location.component.html'\n})\nexport class AssetLocationComponent implements OnInit, OnChanges, OnDestroy {\n  @ViewChild(MapComponent)\n  mapView: MapComponent;\n  @Input() isEdit: boolean;\n  @Input() locationMO: IManagedObject;\n  @Input() form: FormGroup;\n  config: MapConfig = {\n    center: defaultMapConfig.center,\n    zoomLevel: 13,\n    color: 'green',\n    icon: 'c8y-icon-location'\n  };\n  assets: PositionManagedObject;\n  isMarkerDraggable = false;\n  isMapClickable = false;\n  dragListener: L.LeafletEventHandlerFn;\n  formSubscription: Subscription;\n  showMap = true;\n\n  constructor(\n    private activatedRouter: ActivatedRoute,\n    private mapService: MapService\n  ) {}\n\n  async ngOnInit() {\n    const leaflet = await this.mapService.getLeaflet();\n    if (leaflet) {\n      const { contextData } =\n        !this.activatedRouter.parent || this.activatedRouter.snapshot.data.context\n          ? this.activatedRouter.snapshot.data\n          : this.activatedRouter.parent.snapshot.data;\n      this.assets = contextData ? contextData : this.locationMO;\n      if (this.assets.c8y_Position.lat && this.assets.c8y_Position.lng)\n        this.config.center = [this.assets.c8y_Position.lat, this.assets.c8y_Position.lng];\n      this.setView(this.assets.c8y_Position.lat, this.assets.c8y_Position.lng);\n    }\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.isEdit?.currentValue) {\n      this.showMap = true;\n      this.isMarkerDraggable = true;\n      this.isMapClickable = true;\n      queueMicrotask(() => this.mapView?.map.invalidateSize());\n      this.mapView?.map.on('click', event => {\n        this.onClickOfMap(event);\n        this.updateMarker(event.latlng.lat, event.latlng.lng);\n      });\n      this.formSubscription = this.form?.valueChanges.subscribe(value => {\n        this.updateMarker(value.c8y_Position.lat, value.c8y_Position.lng);\n        this.setView(value.c8y_Position.lat, value.c8y_Position.lng);\n      });\n      return;\n    }\n    if (!changes.isEdit?.currentValue) {\n      const isAnyValueMissing = this.checkIfAnyValueIsMissing(\n        this.locationMO?.c8y_Position.lat,\n        this.locationMO?.c8y_Position.lng\n      );\n      if (isAnyValueMissing) {\n        this.showMap = false;\n        return;\n      }\n      this.isMarkerDraggable = false;\n      this.isMapClickable = false;\n      this.updateMarker(this.locationMO?.c8y_Position.lat, this.locationMO?.c8y_Position.lng);\n      this.setView(this.locationMO?.c8y_Position.lat, this.locationMO?.c8y_Position.lng);\n    }\n  }\n\n  ngOnDestroy() {\n    this.formSubscription?.unsubscribe();\n    if (this.mapView?.markers && this.dragListener) {\n      this.mapView?.markers.forEach(marker => {\n        marker.off('drag', this.dragListener);\n      });\n    }\n  }\n\n  /**\n   * This command is used to prefill the latitude and longitude values in the form when the marker is dragged.\n   */\n  onMarkerDrag(event: L.LeafletEvent) {\n    if (this.form) {\n      const properties = this.form.get('c8y_Position') as FormArray;\n      properties?.get('lat').patchValue(event.target._latlng.lat);\n      properties?.get('lng').patchValue(event.target._latlng.lng);\n    }\n  }\n\n  /**\n   * This method is used to update the marker with the specified values and if any one of the values is not availble, sets\n   * showWarning to true.\n   * @param latitude - The latitude of the marker\n   * @param longitude - The longitude of the marker\n   */\n  updateMarker(latitude: number, longitude: number) {\n    const isAnyValueMissing = this.checkIfAnyValueIsMissing(latitude, longitude);\n    if (!isAnyValueMissing) {\n      [latitude, longitude] = this.setLatLngValues(latitude, longitude);\n      const asset: any = {\n        c8y_Position: {\n          latitude,\n          longitude\n        }\n      };\n\n      if (this.mapView) {\n        const icon = this.mapView.getAssetIcon(this.assets);\n        const leafletMarker = this.mapView.leaflet.marker([latitude, longitude], {\n          icon: icon,\n          draggable: this.isMarkerDraggable\n        });\n        if (this.isMarkerDraggable) {\n          this.dragListener = event => {\n            this.onMarkerDrag(event);\n          };\n          leafletMarker.on('dragend', this.dragListener);\n        }\n        this.mapView.clearMarkers();\n        const marker = getC8yMarker(leafletMarker, asset);\n        this.mapView.addMarkerToMap(marker);\n        this.setView(latitude, longitude);\n      }\n      return;\n    }\n    this.mapView.clearMarkers();\n  }\n\n  /**\n   * This command is used to prefill the latitude and longitude values in the form on click of map.\n   */\n  onClickOfMap(event: L.LeafletMouseEvent) {\n    if (this.form) {\n      const properties = this.form.get('c8y_Position') as FormArray;\n      properties?.get('lat').patchValue(event.latlng.lat);\n      properties?.get('lng').patchValue(event.latlng.lng);\n      this.form.markAsDirty();\n    }\n  }\n\n  /**\n   * Used to enable full screen of the map.\n   */\n  enableFullscreen() {\n    toggleFullscreen(this.mapView.mapElement.nativeElement);\n  }\n\n  /**\n   * Checks if any one of the values i.e., latitude/longitude is undefined or null.\n   * @param latitude Latitude value of the position\n   * @param longitude Longitude value of the position\n   * @returns returns true if any one of the values are both the values are missing else it returns false.\n   */\n  checkIfAnyValueIsMissing(latitude: number, longitude: number) {\n    return this.isNullOrUndefined(latitude) || this.isNullOrUndefined(longitude);\n  }\n\n  /**\n   * Sets the view of the map based on the position of marker.\n   * @param latitude - Latitude of the marker\n   * @param longitude Longitude of the marker\n   */\n  setView(latitude: number, longitude: number) {\n    if (isNumber(latitude) && isNumber(longitude) && this.mapView) {\n      [latitude, longitude] = this.setLatLngValues(latitude, longitude);\n      this.config.center = [latitude, longitude];\n      this.mapView.center();\n    }\n  }\n\n  setLatLngValues(latitude: number, longitude: number): [number, number] {\n    latitude = this.isNullOrUndefined(latitude) ? defaultMapLocation.lat : latitude;\n    longitude = this.isNullOrUndefined(longitude) ? defaultMapLocation.lng : longitude;\n    return [latitude, longitude];\n  }\n\n  private isNullOrUndefined(value): boolean {\n    return value === null || value === undefined;\n  }\n}\n","<div [hidden]=\"!showMap\">\n  <div class=\"row\">\n    <button\n      class=\"btn btn-link pull-right\"\n      style=\"margin-right: 12px\"\n      title=\"Full screen\"\n      type=\"button\"\n      data-cy=\"asset-location-full-screen\"\n      (click)=\"enableFullscreen()\"\n    >\n    <i c8yIcon=\"expand\"></i>\n    </button>\n  </div>\n  <div style=\"width: 100%; height: 400px\">\n    <c8y-map\n      #map\n      [assets]=\"assets\"\n      [config]=\"config\"\n    ></c8y-map>\n  </div>\n</div>\n","import { Component, EventEmitter, Input, OnChanges, Output, SimpleChanges } from '@angular/core';\nimport {\n  IManagedObject,\n  IManagedObjectBinary,\n  InventoryBinaryService,\n  InventoryService\n} from '@c8y/client';\nimport { AlertService, AssetTypesRealtimeService, gettext } from '@c8y/ngx-components';\nimport { AssetPropertiesItem } from './asset-properties.model';\nimport { JSONSchema7 } from 'json-schema';\nimport { sortBy, toPairs, fromPairs, find } from 'lodash-es';\nimport { firstValueFrom } from 'rxjs';\n\n@Component({\n  selector: 'c8y-asset-properties',\n  templateUrl: './asset-properties.component.html'\n})\nexport class AssetPropertiesComponent implements OnChanges {\n  @Input() asset: IManagedObject;\n  @Output() assetChange = new EventEmitter<IManagedObject>();\n\n  @Input()\n  properties: IManagedObject[] = [];\n\n  assetType: IManagedObject;\n  customProperties: AssetPropertiesItem[] = [];\n  isEdit = false;\n  isLoading = false;\n\n  constructor(\n    private assetTypes: AssetTypesRealtimeService,\n    private inventory: InventoryService,\n    private inventoryBinary: InventoryBinaryService,\n    private alert: AlertService\n  ) {}\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.asset) {\n      // Back button handling, as component is not destroyed\n      this.assetType = undefined;\n      this.customProperties = [];\n      this.loadAsset();\n    }\n  }\n\n  async loadAsset() {\n    this.isLoading = true;\n    const assetType$ = this.assetTypes.getAssetTypeByName$(this.asset.type);\n    this.assetType = await firstValueFrom(assetType$);\n    try {\n      this.properties = this.keepOrder(\n        this.assetType?.c8y_IsAssetType?.properties,\n        this.properties\n      );\n    } catch (ex) {\n      console.warn(ex);\n    }\n    this.customProperties = await this.resolveCustomProperties(this.properties);\n    this.isLoading = false;\n  }\n\n  async resolveCustomProperties(managedObjects: IManagedObject[]) {\n    const properties = [];\n    for (const mo of managedObjects) {\n      if (mo.c8y_JsonSchema) {\n        const [item] = await this.parseItem(mo, mo.c8y_JsonSchema.properties, this.asset);\n        this.setItemRequired(item, mo);\n        properties.push(item);\n      }\n    }\n    return properties;\n  }\n\n  deleteTitleFromMOJsonSchema(mo: IManagedObject) {\n    const schemaProperties = mo?.c8y_JsonSchema?.properties;\n    const property = Object.keys(schemaProperties || {})[0];\n    delete (mo?.c8y_JsonSchema?.properties[property] || {}).title;\n  }\n\n  /**\n   * This method is used to order the complex properties in the order specified by the user in asset properties screen.\n   * @param mo - Managed object of the complex property associated with the asset.\n   */\n  orderComplexProperties(mo: IManagedObject) {\n    const complexProperties = mo.c8y_JsonSchema.properties[mo.name]?.['properties'];\n    const keyValuesArray = toPairs(complexProperties);\n    const orderedProperties = sortBy(keyValuesArray, ([, value]) => value.order);\n    mo.c8y_JsonSchema.properties[mo.name]['properties'] = fromPairs(orderedProperties);\n  }\n\n  async parseItem(mo: IManagedObject, properties, asset): Promise<AssetPropertiesItem[]> {\n    if (!asset) {\n      return [];\n    }\n    const keys = Object.keys(properties);\n    const items: AssetPropertiesItem[] = [];\n\n    for (const key of keys) {\n      const type = properties[key].type;\n      const title = properties[key].title;\n      let value = this.getTypeValue(type, asset[key]);\n      let file;\n      if (type === 'file' && value) {\n        const fileId = typeof value === 'object' ? value[0]?.file?.id : value;\n        const fileData = await this.getFileManagedObject(fileId);\n        file = fileData;\n        value = [fileData];\n      } else if (type === 'date') {\n        const valueDate = new Date(value);\n        value = !isNaN(valueDate.getTime()) ? valueDate : '';\n      }\n      if (type === 'object') {\n        // remove title to avoid excessive property name on asset complex properties form\n        this.deleteTitleFromMOJsonSchema(mo);\n        this.orderComplexProperties(mo);\n        if (!value) {\n          value = {};\n          for (const prop in properties[key].properties) {\n            value[prop] = this.getTypeValue(properties[key].properties[prop].type, null);\n          }\n        }\n      }\n      items.push({\n        key,\n        value,\n        label: title || mo.label,\n        type,\n        description: mo.description,\n        file,\n        complex:\n          type === 'object'\n            ? await this.parseItem(mo, properties[key].properties, value)\n            : undefined,\n        isEdit: false,\n        jsonSchema: mo.c8y_JsonSchema\n      });\n    }\n    return items;\n  }\n\n  toggleEdit(prop: AssetPropertiesItem) {\n    prop.isEdit = !prop.isEdit;\n  }\n\n  async getFileManagedObject(id: string) {\n    try {\n      const { data } = await this.inventory.detail(id);\n      return data;\n    } catch (ex) {\n      this.alert.addServerFailure(ex);\n    }\n  }\n\n  async save(propertyValue, prop: AssetPropertiesItem): Promise<void> {\n    try {\n      if (prop.type === 'object') {\n        this.updateUndefinedToPropTypeValue(prop, propertyValue[prop.key]);\n      } else {\n        this.updateUndefinedToPropTypeValue(prop, propertyValue);\n      }\n\n      propertyValue = await this.uploadFiles(propertyValue, prop.value);\n\n      // Avoid making a PUT request containing just the id, as response body might be incomplete\n      const hasValues = Object.values(propertyValue).some(value => value !== undefined);\n      if (!hasValues) {\n        this.toggleEdit(prop);\n        return;\n      }\n      const updatedAsset = { id: this.asset.id, ...propertyValue };\n      const { data } = await this.inventory.update(updatedAsset);\n      this.toggleEdit(prop);\n      this.asset = data;\n      this.assetChange.emit(this.asset);\n      await this.loadAsset();\n      this.alert.success(gettext('Asset properties updated.'));\n    } catch (ex) {\n      this.alert.addServerFailure(ex);\n      this.toggleEdit(prop);\n    }\n  }\n\n  private updateUndefinedToPropTypeValue(prop, propertyValue) {\n    for (const [key, value] of Object.entries(propertyValue)) {\n      const property = prop.complex ? find(prop.complex, { key: key }) : prop;\n      propertyValue[key] = this.getTypeValue(property.type, value);\n    }\n  }\n\n  private getTypeValue(propType: string, value) {\n    if (value || (propType === 'boolean' && value !== undefined)) return value;\n\n    switch (propType) {\n      case 'number':\n      case 'boolean':\n        return value || value === 0 ? value : null;\n\n      default:\n        return '';\n    }\n  }\n\n  private keepOrder(correctOrderedIds, properties) {\n    const orderedProperties = correctOrderedIds.map(({ id }) => {\n      const foundProperty = properties.find(property => property.id === id);\n      if (!foundProperty) {\n        throw new Error('Custom property mismatch');\n      }\n      return foundProperty;\n    });\n    return orderedProperties;\n  }\n\n  private async uploadFiles(model: object, moId?: IManagedObjectBinary[]): Promise<object> {\n    const keys = Object.keys(model);\n    for (const key of keys) {\n      if (Array.isArray(model[key]) && model[key][0]?.file instanceof File) {\n        try {\n          const upload = await this.inventoryBinary.create(model[key][0].file);\n          try {\n            if (moId && moId[0]) {\n              await this.inventory.childAdditionsRemove(moId[0], this.asset.id);\n            }\n          } catch (ex) {\n            throw ex;\n          }\n          model[key] = upload.data.id;\n          await this.inventory.childAdditionsAdd(upload.data.id, this.asset.id);\n        } catch (ex) {\n          throw ex;\n        }\n      }\n    }\n    return model;\n  }\n\n  private setItemRequired(item: AssetPropertiesItem, mo: IManagedObject): void {\n    const isAssetPropertyRequired = !!this.assetType?.c8y_IsAssetType?.properties.find(\n      p => p.id === mo.id\n    )?.isRequired;\n    if (!isAssetPropertyRequired) {\n      return;\n    }\n    const isComplexProperty = !!item?.complex?.length;\n    if (isComplexProperty) {\n      const complexProperty = item.jsonSchema?.properties?.[mo.c8y_JsonSchema.key] as JSONSchema7;\n      complexProperty.required = item.complex.map(({ key }) => key);\n    } else {\n      item.jsonSchema.required = [mo.c8y_JsonSchema.key];\n    }\n  }\n}\n","<ng-container>\n  <div class=\"card-header bg-inherit separator sticky-top\">\n    <h1\n      class=\"card-title p-t-4 p-b-4\"\n      ngNonBindable\n      translate\n      [translateParams]=\"{ label: assetType?.label || '' | translate }\"\n    >\n      {{ label }} properties\n    </h1>\n  </div>\n  <div class=\"card-block\">\n    <div\n      class=\"text-center\"\n      *ngIf=\"isLoading\"\n    >\n      <c8y-loading></c8y-loading>\n    </div>\n\n    <ng-container *ngIf=\"!isLoading\">\n      <div\n        class=\"card m-b-8\"\n        title=\"{{ prop.description | translate }}\"\n        *ngFor=\"let prop of customProperties\"\n        [ngClass]=\"{ 'card-highlight': prop.isEdit }\"\n      >\n        <div\n          class=\"card-block\"\n          [ngClass]=\"{ 'p-b-0': prop.isEdit }\"\n        >\n          <div\n            class=\"d-flex p-b-8 a-i-center\"\n            *ngIf=\"!prop.isEdit\"\n          >\n            <p\n              class=\"text-medium text-truncate\"\n              title=\"{{ prop?.label | translate }}\"\n            >\n              {{ prop?.label | translate }}\n            </p>\n            <button\n              class=\"btn btn-dot m-l-auto text-12\"\n              [attr.aria-label]=\"'Edit' | translate\"\n              tooltip=\"{{ 'Edit' | translate }}\"\n              type=\"button\"\n              [delay]=\"500\"\n              (click)=\"toggleEdit(prop)\"\n            >\n              <i c8yIcon=\"pencil\"></i>\n            </button>\n          </div>\n          <c8y-asset-properties-item\n            #assetProps\n            [file]=\"prop.file\"\n            [key]=\"prop.key\"\n            [type]=\"prop.type\"\n            [value]=\"prop.value\"\n            [complex]=\"prop.complex\"\n            [isEdit]=\"prop.isEdit\"\n            [jsonSchema]=\"prop.jsonSchema\"\n          ></c8y-asset-properties-item>\n          <div *ngIf=\"prop.key === 'c8y_Position'\">\n            <c8y-asset-location\n              [locationMO]=\"asset\"\n              [isEdit]=\"prop.isEdit\"\n              [form]=\"assetProps.form\"\n            ></c8y-asset-location>\n          </div>\n        </div>\n        <div\n          class=\"card-footer p-t-0\"\n          *ngIf=\"prop.isEdit\"\n        >\n          <button\n            class=\"btn btn-default btn-sm\"\n            title=\"{{ 'Cancel' | translate }}\"\n            type=\"button\"\n            (click)=\"toggleEdit(prop)\"\n          >\n            {{ 'Cancel' | translate }}\n          </button>\n          <button\n            class=\"btn btn-primary btn-sm\"\n            title=\"{{ 'Save' | translate }}\"\n            type=\"button\"\n            [disabled]=\"!assetProps?.form?.valid || !assetProps?.form?.dirty \"\n            (click)=\"save(assetProps.form.value, prop)\"\n          >\n            {{ 'Save' | translate }}\n          </button>\n        </div>\n      </div>\n    </ng-container>\n  </div>\n</ng-container>\n","import { InjectionToken } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components';\n\nexport const SUB_ASSETS_CONFIG = new InjectionToken<SubAssetsConfig>('SubAssetsConfig');\n/**\n * Configuration object of the SubAssetsModule.\n */\nexport interface SubAssetsConfig {\n  /**\n   * Allows to show or hide the \"Add group\" button.\n   */\n  showAddGroupBtn?: boolean;\n  /**\n   * Allows to show or hide the \"Assign devices\" button.\n   */\n  showAssignDeviceBtn?: boolean;\n  /**\n   * Allows to change the displayed text in the title and breadcrumbs.\n   */\n  name?: string;\n  /**\n   * Allows to set the base query that is responsible for retrieving sub-assets.\n   *\n   * **Example**\n   *\n   * ```typescript\n   * SubAssetsModule.config({\n   *   baseQuery: { __has: 'c8y_IsAsset' }\n   * })\n   * ```\n   * Check QueriesUtil service from '@c8y/client' to see more examples.\n   */\n  baseQuery?: object;\n  /**\n   * Allows to show or hide asset details.\n   */\n  showDetails?: boolean;\n  /**\n   * Allows to show or hide the asset properties.\n   */\n  showProperties?: boolean;\n  /**\n   * Allows to show or hide the groups context help.\n   */\n  showGroupsContextHelp?: boolean;\n}\n\nexport const defaultModuleConfig: SubAssetsConfig = {\n  showAddGroupBtn: true,\n  showAssignDeviceBtn: true,\n  name: gettext('Groups'),\n  baseQuery: {},\n  showDetails: true,\n  showProperties: true,\n  showGroupsContextHelp: true\n};\n","import {\n  Component,\n  EventEmitter,\n  Inject,\n  Input,\n  OnChanges,\n  OnDestroy,\n  Output,\n  SimpleChanges\n} from '@angular/core';\nimport { IManagedObject, InventoryService, SmartGroupsService } from '@c8y/client';\nimport {\n  AlertService,\n  AssetTypesRealtimeService,\n  Column,\n  CustomColumn,\n  ModalService,\n  Status,\n  gettext\n} from '@c8y/ngx-components';\nimport { AssetNodeService } from '@c8y/ngx-components/assets-navigator';\nimport { DeviceListExtensionService } from '@c8y/ngx-components/device-list';\nimport { pick } from 'lodash-es';\nimport { Subject, firstValueFrom } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED } from './shared/sub-assets.model';\nimport { SUB_ASSETS_CONFIG, SubAssetsConfig } from './sub-assets.model';\nimport { SubAssetsService } from './sub-assets.service';\nimport { SupportedIconsSuggestions } from '@c8y/ngx-components/icon-selector/icons';\n\n@Component({\n  selector: 'c8y-group-info',\n  templateUrl: './group-info.component.html'\n})\nexport class GroupInfoComponent implements OnDestroy, OnChanges {\n  PRODUCT_EXPERIENCE = PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED;\n  @Input() group: IManagedObject;\n  @Output() groupChange = new EventEmitter<IManagedObject>();\n  canEdit: boolean;\n  groupIcon: SupportedIconsSuggestions;\n  smartGroupFilter: string;\n  label: string;\n  columnsWithFilter: Column[];\n\n  groupInfoModel: {\n    name: string;\n    c8y_Notes: string;\n  } = {\n    name: '',\n    c8y_Notes: ''\n  };\n\n  filterMsg = gettext(\n    'Smart groups are groups dynamically constructed based on filtering criteria.'\n  );\n  private readonly GROUP_UPDATED_MSG = gettext('Group updated.');\n  private allDevicesGridColumns: Column[];\n  private destroyed$ = new Subject<void>();\n\n  constructor(\n    private inventory: InventoryService,\n    private subAssetsService: SubAssetsService,\n    private smartGroupsService: SmartGroupsService,\n    private alertService: AlertService,\n    private modalService: ModalService,\n    private assetNodeService: AssetNodeService,\n    private assetType: AssetTypesRealtimeService,\n    private deviceListExtensionService: DeviceListExtensionService,\n    @Inject(SUB_ASSETS_CONFIG) public moduleConfig: SubAssetsConfig\n  ) {\n    this.deviceListExtensionService.items$.pipe(takeUntil(this.destroyed$)).subscribe(columns => {\n      this.allDevicesGridColumns = columns;\n    });\n  }\n\n  async ngOnChanges(changes: SimpleChanges) {\n    if (changes.group) {\n      const { name, c8y_Notes } = this.group;\n      this.groupInfoModel = { name, c8y_Notes };\n      this.canEdit = await this.subAssetsService.canEditGroup(this.group);\n      this.groupIcon = await this.assetNodeService.icon(this.group);\n      this.smartGroupFilter = this.group.c8y_DeviceQueryString;\n      this.columnsWithFilter = this.group.c8y_DeviceColumnsConfig?.columns\n        ?.filter(col => !!col.filter)\n        .map(col => ({\n          ...col,\n          externalFilterQuery: col.filter.externalFilterQuery,\n          ...this.withPropsFromGridColumn(col)\n        }));\n      this.label = this.assetNodeService.isAsset(this.group)\n        ? (await firstValueFrom(this.assetType.getAssetTypeByName$(this.group.type))).label\n        : gettext('Group');\n    }\n  }\n\n  isSmartGroup() {\n    return this.subAssetsService.isSmartGroup(this.group);\n  }\n\n  async update(partialGroup: Partial<IManagedObject>) {\n    try {\n      const isSmartGroup: boolean = this.subAssetsService.isSmartGroup(this.group);\n      const updatedGroup = isSmartGroup\n        ? await this.updateSmartGroup(partialGroup)\n        : await this.updateGroup(partialGroup);\n\n      this.group = updatedGroup;\n      this.groupChange.emit(this.group);\n      this.alertService.success(this.GROUP_UPDATED_MSG);\n    } catch (error) {\n      this.alertService.addServerFailure(error);\n    }\n  }\n\n  ngOnDestroy(): void {\n    this.destroyed$.next();\n    this.destroyed$.complete();\n  }\n\n  private withPropsFromGridColumn(column: Column): Partial<Column> {\n    if (column.custom) {\n      const col = new CustomColumn();\n      return {\n        filteringConfig: col.filteringConfig\n      };\n    } else {\n      return pick(\n        this.allDevicesGridColumns.find(col => col.name === column.name),\n        'filteringConfig',\n        'header'\n      );\n    }\n  }\n\n  private async updateGroup(partialGroup: Partial<IManagedObject>) {\n    const { id } = this.group;\n    const group: Partial<IManagedObject> = { id, ...partialGroup };\n\n    return (await this.inventory.update(group)).data;\n  }\n\n  private async updateSmartGroup(partialGroup: Partial<IManagedObject>) {\n    const { id } = this.group;\n    const { c8y_DeviceQueryString } = partialGroup;\n    const group: Partial<IManagedObject> = { id, ...partialGroup };\n\n    if (!c8y_DeviceQueryString) {\n      return (await this.smartGroupsService.update(group)).data;\n    }\n\n    try {\n      const modalBody = gettext(\n        'You are about to change the smart group filter. Do you want to proceed?'\n      );\n      const title = gettext('Smart group filter');\n      await this.modalService.confirm(title, modalBody, Status.WARNING, {\n        ok: gettext('Save'),\n        cancel: gettext('Cancel')\n      });\n\n      await this.isQueryExecutable(c8y_DeviceQueryString);\n    } catch (error) {\n      throw Error(error);\n    }\n    return (await this.smartGroupsService.update(group)).data;\n  }\n\n  private async isQueryExecutable(query: string) {\n    try {\n      const filter = { q: query };\n      await this.inventory.list(filter);\n    } catch (error) {\n      throw Error(error);\n    }\n  }\n}\n","<div class=\"bg-level-1 separator-bottom\">\n  <div class=\"card-block p-t-24 p-b-24 large-padding\">\n    <div class=\"content-flex-70\">\n      <div class=\"text-center col-1\">\n        <i\n          class=\"c8y-icon-duocolor icon-48\"\n          [c8yIcon]=\"groupIcon\"\n        ></i>\n        <p>\n          <small\n            class=\"label label-info\"\n            *ngIf=\"group.c8y_IsDynamicGroup\"\n          >\n            {{ 'Smart group' | translate }}\n          </small>\n          <small\n            class=\"label label-info text-truncate d-inline-block\"\n            title=\"{{ label | translate }}\"\n            *ngIf=\"!group.c8y_IsDynamicGroup && !group.com_cumulocity_model_Agent\"\n          >\n            {{ label | translate }}\n          </small>\n          <small\n            class=\"label label-info\"\n            *ngIf=\"group.com_cumulocity_model_Agent\"\n          >\n            {{ 'Remote group' | translate }}\n          </small>\n        </p>\n      </div>\n\n      <div class=\"flex-grow col-10\">\n        <div class=\"content-flex-80\">\n          <div class=\"col-9\">\n            <form #groupNameForm=\"ngForm\">\n              <c8y-form-group class=\"form-group-lg m-b-0\">\n                <label\n                  class=\"sr-only\"\n                  for=\"groupName\"\n                  translate\n                >\n                  Name\n                </label>\n                <p\n                  class=\"form-control-static\"\n                  *ngIf=\"!canEdit\"\n                >\n                  {{ groupInfoModel.name }}\n                </p>\n                <div\n                  class=\"input-group input-group-lg input-group-editable\"\n                  *ngIf=\"canEdit\"\n                >\n                  <input\n                    class=\"form-control\"\n                    title=\"{{ groupInfoModel.name }}\"\n                    id=\"groupName\"\n                    placeholder=\"{{ 'e.g. My group' | translate }}\"\n                    name=\"name\"\n                    type=\"text\"\n                    required\n                    [(ngModel)]=\"groupInfoModel.name\"\n                    size=\"{{ groupInfoModel.name.length + 2 }}\"\n                    maxlength=\"254\"\n                    c8yProductExperience\n                    [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n                    [actionData]=\"{\n                      component: PRODUCT_EXPERIENCE.GROUP_INFO.COMPONENTS.GROUP_INFO,\n                      action: PRODUCT_EXPERIENCE.GROUP_INFO.ACTIONS.EDIT,\n                      property: PRODUCT_EXPERIENCE.GROUP_INFO.PROPERTIES.NAME\n                    }\"\n                  />\n                  <span></span>\n                  <div class=\"input-group-btn\">\n                    <button\n                      class=\"btn btn-primary\"\n                      title=\"{{ 'Save' | translate }}\"\n                      type=\"submit\"\n                      [disabled]=\"groupNameForm.form.invalid\"\n                      (click)=\"\n                        update({ name: groupInfoModel.name }); groupNameForm.form.markAsPristine()\n                      \"\n                      [actionName]=\"'groupInfo:EditedNameSaved'\"\n                      c8yProductExperience\n                      [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n                      [actionData]=\"{\n                        component: PRODUCT_EXPERIENCE.GROUP_INFO.COMPONENTS.GROUP_INFO,\n                        result: PRODUCT_EXPERIENCE.GROUP_INFO.RESULTS.EDIT_SAVED,\n                        property: PRODUCT_EXPERIENCE.GROUP_INFO.PROPERTIES.NAME\n                      }\"\n                    >\n                      {{ 'Save' | translate }}\n                    </button>\n                  </div>\n                </div>\n              </c8y-form-group>\n            </form>\n            <form #groupDescriptionForm=\"ngForm\">\n              <label\n                class=\"sr-only\"\n                for=\"description\"\n                translate\n              >\n                Description\n              </label>\n              <p\n                class=\"form-control-static\"\n                *ngIf=\"!canEdit\"\n              >\n                {{ groupInfoModel.c8y_Notes }}\n              </p>\n              <div\n                class=\"input-group input-group-editable\"\n                *ngIf=\"canEdit\"\n              >\n                <textarea\n                  class=\"form-control no-resize\"\n                  title=\"{{\n                    groupInfoModel.c8y_Notes\n                      ? groupInfoModel.c8y_Notes\n                      : ('e.g. My description' | translate)\n                  }}\"\n                  id=\"description\"\n                  placeholder=\"{{ 'e.g. My description' | translate }}\"\n                  name=\"description\"\n                  c8y-textarea-autoresize\n                  [(ngModel)]=\"groupInfoModel.c8y_Notes\"\n                  cols=\"{{ groupInfoModel.c8y_Notes ? groupInfoModel.c8y_Notes.length : 25 }}\"\n                  c8yProductExperience\n                  [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n                  [actionData]=\"{\n                    component: PRODUCT_EXPERIENCE.GROUP_INFO.COMPONENTS.GROUP_INFO,\n                    action: PRODUCT_EXPERIENCE.GROUP_INFO.ACTIONS.EDIT,\n                    property: PRODUCT_EXPERIENCE.GROUP_INFO.PROPERTIES.DESCRIPTION\n                  }\"\n                ></textarea>\n                <span></span>\n                <div class=\"input-group-btn\">\n                  <button\n                    class=\"btn btn-primary\"\n                    title=\"{{ 'Save' | translate }}\"\n                    type=\"submit\"\n                    [disabled]=\"groupDescriptionForm.form.invalid\"\n                    (click)=\"\n                      update({ c8y_Notes: groupInfoModel.c8y_Notes });\n                      groupDescriptionForm.form.markAsPristine()\n                    \"\n                    c8yProductExperience\n                    [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n                    [actionData]=\"{\n                      component: PRODUCT_EXPERIENCE.GROUP_INFO.COMPONENTS.GROUP_INFO,\n                      result: PRODUCT_EXPERIENCE.GROUP_INFO.RESULTS.EDIT_SAVED,\n                      property: PRODUCT_EXPERIENCE.GROUP_INFO.PROPERTIES.DESCRIPTION\n                    }\"\n                  >\n                    {{ 'Save' | translate }}\n                  </button>\n                </div>\n              </div>\n            </form>\n\n            <div\n              class=\"dropdown m-t-8\"\n              placement=\"bottom left\"\n              container=\"body\"\n              type=\"button\"\n              dropdown\n              *ngIf=\"isSmartGroup()\"\n              #ddFilters=\"bs-dropdown\"\n              [insideClick]=\"true\"\n            >\n              <button\n                class=\"btn btn-default btn-sm\"\n                title=\"{{ 'Smart group filters' | translate }}\"\n                aria-haspopup=\"true\"\n                dropdownToggle\n                data-cy=\"c8y-data-grid--filters\"\n                [disabled]=\"columnsWithFilter?.length === 0\"\n              >\n                <i\n                  class=\"m-r-4\"\n                  c8yIcon=\"filter\"\n                ></i>\n                <span>{{ 'Smart group filters' | translate }}</span>\n                <span\n                  class=\"p-relative p-l-4 p-r-16\"\n                  *ngIf=\"columnsWithFilter?.length > 0\"\n                >\n                  <span class=\"badge badge-system p-absolute\" data-cy=\"group-info--filter-number\">\n                    {{ columnsWithFilter?.length }}\n                  </span>\n                </span>\n              </button>\n              <button\n                class=\"btn-help btn-help--sm m-r-4\"\n                [attr.aria-label]=\"'Help' | translate\"\n                popover=\"{{ filterMsg | translate }}\"\n                placement=\"right\"\n                triggers=\"focus\"\n                data-cy=\"group-info--help-button\"\n                container=\"body\"\n                type=\"button\"\n              ></button>\n              <div\n                class=\"dropdown-menu\"\n                *dropdownMenu\n                (click)=\"$event.stopPropagation()\"\n              >\n                <div class=\"data-grid__dropdown bg-level-0\">\n                  <ul class=\"list-unstyled m-0\">\n                    <li\n                      *ngFor=\"let column of columnsWithFilter; let last = last\"\n                      [ngClass]=\"{ 'separator-bottom': !last }\"\n                    >\n                      <ng-container>\n                        <div\n                          class=\"dropdown-header sticky-top text-truncate no-border-top p-b-0\"\n                          title=\"{{ (column.header | translate) || column.name }}\"\n                        >\n                          <label>\n                            {{ (column.header | translate) || column.name }}\n                          </label>\n                        </div>\n                        <div\n                          class=\"list-group-item borderless d-flex d-col\"\n                          *ngFor=\"\n                            let groupedFilterChips of column\n                              | mapToFilterChips\n                              | async\n                              | groupedFilterChips;\n                            let first = first\n                          \"\n                          [ngClass]=\"{ 'p-t-0': first }\"\n                        >\n                          <p\n                            class=\"small p-b-4\"\n                            *ngIf=\"groupedFilterChips.label\"\n                          >\n                            {{ groupedFilterChips.label | translate }}\n                          </p>\n                          <div class=\"d-flex a-i-center gap-4 flex-wrap\">\n                            <span\n                              class=\"tag tag--info chip\"\n                              data-cy=\"group-info--grouped-filter-chip\"\n                              *ngFor=\"let chip of groupedFilterChips.chips\"\n                            >\n                              {{ chip.displayValue | translate }}\n                            </span>\n                          </div>\n                        </div>\n                      </ng-container>\n                    </li>\n                  </ul>\n                </div>\n              </div>\n            </div>\n          </div>\n          <div class=\"flex-grow\">\n            <ul class=\"list-unstyled small\">\n              <li class=\"p-t-4 p-b-4 d-flex separator-top-bottom text-nowrap\">\n                <label class=\"small m-b-0 m-r-8\">{{ 'Created' | translate }}</label>\n                <span class=\"m-l-auto\">{{ group.creationTime | c8yDate }}</span>\n              </li>\n              <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n                <label class=\"small m-b-0 m-r-8\">{{ 'Last updated' | translate }}</label>\n                <span class=\"m-l-auto\">{{ group.lastUpdated | c8yDate }}</span>\n              </li>\n              <li\n                class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\"\n                *ngIf=\"group.com_cumulocity_model_Agent\"\n              >\n                <label class=\"small m-b-0 m-r-8\">{{ 'Status' | translate }}</label>\n                <span\n                  class=\"m-l-auto\"\n                  *ngIf=\"group.c8y_BrokerSource\"\n                >\n                  {{ group.c8y_BrokerSource.status }}\n                </span>\n                <span\n                  class=\"m-l-auto\"\n                  *ngIf=\"!group.c8y_BrokerSource\"\n                >\n                  {{ 'Offline' | translate }}\n                </span>\n              </li>\n            </ul>\n          </div>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n","import { Component, EventEmitter, Inject, OnDestroy, OnInit, signal } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { Column, Permissions } from '@c8y/ngx-components';\nimport { delay, Subject, takeUntil, tap } from 'rxjs';\nimport { SUB_ASSETS_CONFIG, SubAssetsConfig } from './sub-assets.model';\nimport { SubAssetsService } from './sub-assets.service';\n\n@Component({\n  selector: 'c8y-groups-name',\n  templateUrl: './groups.component.html'\n})\nexport class GroupsComponent implements OnInit, OnDestroy {\n  private SHOW_ADD_GROUP = 'showAddGroup';\n  showAddGroup = signal(false);\n  refresh: EventEmitter<void> = new EventEmitter();\n  filterable = true;\n  sortable = true;\n  shouldDisableAddGroup = false;\n  columns: Column[] = [];\n  destroyed: Subject<void> = new Subject();\n  constructor(\n    private permissions: Permissions,\n    private subAssetsService: SubAssetsService,\n    @Inject(SUB_ASSETS_CONFIG) public moduleConfig: SubAssetsConfig,\n    private activeRoute: ActivatedRoute,\n    private router: Router\n  ) {}\n\n  ngOnInit() {\n    if (\n      !this.permissions.hasAnyRole([\n        Permissions.ROLE_INVENTORY_READ,\n        Permissions.ROLE_MANAGED_OBJECT_READ\n      ])\n    ) {\n      this.sortable = false;\n    }\n    this.shouldDisableAddGroup = !this.subAssetsService.canCreateGroup();\n\n    this.columns = this.subAssetsService\n      .getDefaultColumns()\n      .filter(column => column.name !== 'alarms');\n\n    this.activeRoute.queryParamMap\n      .pipe(\n        delay(50), // It allows seeing drawer animation.\n        takeUntil(this.destroyed),\n        tap(params => this.showAddGroup.set(params.has(this.SHOW_ADD_GROUP)))\n      )\n      .subscribe();\n  }\n\n  onAddGroupClick() {\n    this.showAddGroup.set(!this.showAddGroup());\n    this.handleShowAddGroupQueryParam();\n  }\n\n  ngOnDestroy() {\n    this.destroyed.next();\n    this.destroyed.complete();\n  }\n\n  /**\n   * Updates the query parameter `showAddGroup` based on the value of `showAddGroup` property.\n   * - If `showAddGroup` is `true`, adds `showAddGroup=true` to the query parameters.\n   * - If `showAddGroup` is `false`, removes `showAddGroup` from the query parameters.\n   */\n  private handleShowAddGroupQueryParam() {\n    const currentParams = { ...this.activeRoute.snapshot.queryParams };\n\n    if (this.showAddGroup()) {\n      currentParams[this.SHOW_ADD_GROUP] = true;\n    } else {\n      delete currentParams[this.SHOW_ADD_GROUP];\n    }\n    this.router.navigate([], {\n      relativeTo: this.activeRoute,\n      queryParams: currentParams\n    });\n  }\n}\n","<c8y-title>\n  {{ moduleConfig.name | translate }}\n</c8y-title>\n\n<c8y-breadcrumb>\n  <c8y-breadcrumb-item\n    icon=\"c8y-group-open\"\n    label=\"{{ moduleConfig.name | translate }}\"\n  ></c8y-breadcrumb-item>\n</c8y-breadcrumb>\n\n<c8y-action-bar-item\n  [placement]=\"'right'\"\n  *ngIf=\"moduleConfig.showAddGroupBtn\"\n>\n  <button\n    class=\"btn btn-link\"\n    title=\"{{ 'Add group' | translate }}\"\n    (click)=\"onAddGroupClick()\"\n    [disabled]=\"shouldDisableAddGroup\"\n    [attr.data-cy]=\"'groups-add-group-button'\"\n  >\n    <i\n      class=\"m-r-4\"\n      c8yIcon=\"plus-circle\"\n    ></i>\n    {{ 'Add group' | translate }}\n  </button>\n</c8y-action-bar-item>\n\n<c8y-help\n  src=\"/docs/device-management-application/grouping-devices/#grouping-devices\"\n  *ngIf=\"moduleConfig.showGroupsContextHelp\"\n></c8y-help>\n\n<c8y-add-group\n  [refresh]=\"refresh\"\n  (onCancel)=\"onAddGroupClick()\"\n  *ngIf=\"showAddGroup()\"\n></c8y-add-group>\n<c8y-sub-assets-grid\n  class=\"content-fullpage d-flex d-col border-top border-bottom\"\n  [refresh]=\"refresh\"\n  [filterable]=\"filterable\"\n  [sortable]=\"sortable\"\n  [columns]=\"columns\"\n  [columnsConfigKey]=\"'sub-assets-grid'\"\n  [baseQuery]=\"moduleConfig.baseQuery\"\n></c8y-sub-assets-grid>\n","import { Component, EventEmitter, Inject, OnDestroy, OnInit, signal } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { IManagedObject } from '@c8y/client';\nimport { ContextRouteService, DisplayOptions, Permissions } from '@c8y/ngx-components';\nimport { delay, Subject, takeUntil, tap } from 'rxjs';\nimport { SUB_ASSETS_CONFIG, SubAssetsConfig } from './sub-assets.model';\nimport { SubAssetsService } from './sub-assets.service';\n\n@Component({\n  selector: 'c8y-sub-assets',\n  templateUrl: './sub-assets.component.html'\n})\nexport class SubAssetsComponent implements OnInit, OnDestroy {\n  private SHOW_ADD_GROUP = 'showAddGroup';\n  group: IManagedObject;\n  currentGroupId: string;\n  showChildrenForDevice: IManagedObject;\n  title: string;\n  toggle = false;\n  showAddGroup = signal(false);\n  showAssignDevices = false;\n  requestInProgress: boolean;\n  showAssignChildDevices = false;\n  refresh: EventEmitter<any> = new EventEmitter();\n  filterable = true;\n  shouldDisableAddGroup = false;\n  shouldDisableAssignDevices = false;\n  shouldShowAssetsProperties = false;\n  displayOptions: DisplayOptions;\n  customProperties: IManagedObject[] = [];\n  isSmartGroup = false;\n  destroyed: Subject<void> = new Subject();\n\n  constructor(\n    private activeRoute: ActivatedRoute,\n    private subAssetsService: SubAssetsService,\n    private contextRouteService: ContextRouteService,\n    private permissionsService: Permissions,\n    @Inject(SUB_ASSETS_CONFIG) public moduleConfig: SubAssetsConfig,\n    private router: Router\n  ) {\n    this.activeRoute.parent.data.pipe(takeUntil(this.destroyed)).subscribe(({ contextData }) => {\n      this.init(contextData);\n    });\n  }\n\n  async ngOnInit() {\n    this.displayOptions = {\n      striped: true,\n      bordered: false,\n      gridHeader: true,\n      filter: true,\n      hover: true\n    };\n    this.isSmartGroup = this.subAssetsService.isSmartGroup(this.group);\n    this.activeRoute.queryParamMap\n      .pipe(\n        delay(50), // It allows seeing drawer animation.\n        takeUntil(this.destroyed),\n        tap(params => this.showAddGroup.set(params.has(this.SHOW_ADD_GROUP)))\n      )\n      .subscribe();\n  }\n\n  async init(contextData) {\n    this.group = { ...contextData };\n    this.title = this.group.name;\n    this.currentGroupId = this.group.id;\n    this.shouldDisableAddGroup = !(await this.permissionsService.canEdit(\n      [\n        Permissions.ROLE_INVENTORY_ADMIN,\n        Permissions.ROLE_INVENTORY_CREATE,\n        Permissions.ROLE_MANAGED_OBJECT_ADMIN,\n        Permissions.ROLE_MANAGED_OBJECT_CREATE\n      ],\n      this.group\n    ));\n    this.shouldDisableAssignDevices = !(await this.subAssetsService.canAssignDevice(this.group));\n    this.customProperties = await this.subAssetsService.getCustomProperties(this.group);\n    this.shouldShowAssetsProperties =\n      this.moduleConfig.showProperties && this.customProperties.length > 0;\n  }\n\n  groupChange(group: IManagedObject): void {\n    this.group = group;\n    this.title = group.name;\n    this.contextRouteService.setContext(this.activeRoute, group);\n    this.contextRouteService.refreshContext();\n    this.refresh.emit();\n  }\n  onAddGroupClick() {\n    this.showAddGroup.set(!this.showAddGroup());\n    this.handleShowAddGroupQueryParam();\n  }\n\n  ngOnDestroy(): void {\n    this.destroyed.next();\n    this.destroyed.complete();\n  }\n\n  /**\n   * Updates the query parameter `showAddGroup` based on the value of `showAddGroup` property.\n   * - If `showAddGroup` is `true`, adds `showAddGroup=true` to the query parameters.\n   * - If `showAddGroup` is `false`, removes `showAddGroup` from the query parameters.\n   */\n  private handleShowAddGroupQueryParam() {\n    const currentParams = { ...this.activeRoute.snapshot.queryParams };\n\n    if (this.showAddGroup()) {\n      currentParams[this.SHOW_ADD_GROUP] = true;\n    } else {\n      delete currentParams[this.SHOW_ADD_GROUP];\n    }\n    this.router.navigate([], {\n      relativeTo: this.activeRoute,\n      queryParams: currentParams\n    });\n  }\n}\n","<c8y-title>\n  {{ title }}\n</c8y-title>\n\n<c8y-action-bar-item\n  [placement]=\"'right'\"\n  *ngIf=\"!isSmartGroup && moduleConfig.showAddGroupBtn\"\n>\n  <button\n    class=\"btn btn-link\"\n    title=\"{{ 'Add group' | translate }}\"\n    (click)=\"onAddGroupClick()\"\n    [disabled]=\"shouldDisableAddGroup\"\n  >\n    <i\n      class=\"m-r-4\"\n      c8yIcon=\"plus-circle\"\n    ></i>\n    <span translate>Add group</span>\n  </button>\n</c8y-action-bar-item>\n\n<c8y-action-bar-item\n  [placement]=\"'right'\"\n  *ngIf=\"!isSmartGroup && moduleConfig.showAssignDeviceBtn\"\n>\n  <button\n    class=\"btn btn-link\"\n    title=\"{{ 'Assign devices' | translate }}\"\n    (click)=\"showAssignDevices = !showAssignDevices\"\n    [disabled]=\"shouldDisableAssignDevices\"\n  >\n    <i\n      class=\"m-r-4\"\n      c8yIcon=\"plus-circle\"\n    ></i>\n    <span translate>Assign devices</span>\n  </button>\n</c8y-action-bar-item>\n\n<c8y-help\n  *ngIf=\"isSmartGroup; else assetsHelp\"\n  src=\"/docs/device-management-application/grouping-devices/#using-smart-groups\"\n></c8y-help>\n\n<ng-template #assetsHelp>\n  <c8y-help src=\"/docs/cockpit/managing-assets/#managing-assets\"></c8y-help>\n</ng-template>\n\n<div\n  class=\"card content-fullpage\"\n  [ngClass]=\"{\n    'card--grid grid__col--8-4--md grid__row--fit-auto': shouldShowAssetsProperties,\n    'd-flex d-col': !shouldShowAssetsProperties\n  }\"\n>\n  <c8y-group-info\n    class=\"grid__col--fullspan\"\n    *ngIf=\"moduleConfig.showDetails\"\n    [group]=\"group\"\n    (groupChange)=\"groupChange($event)\"\n  ></c8y-group-info>\n  <c8y-sub-assets-grid\n    class=\"d-contents\"\n    [refresh]=\"refresh\"\n    [parent-group]=\"group\"\n    [filterable]=\"filterable\"\n    [displayOptions]=\"displayOptions\"\n    [columnsConfigKey]=\"'sub-assets-grid'\"\n    [baseQuery]=\"moduleConfig.baseQuery\"\n  ></c8y-sub-assets-grid>\n  <div\n    class=\"inner-scroll bg-level-1\"\n    *ngIf=\"shouldShowAssetsProperties\"\n  >\n    <c8y-asset-properties\n      class=\"d-contents\"\n      [properties]=\"customProperties\"\n      [asset]=\"group\"\n      (assetChange)=\"groupChange($event)\"\n    ></c8y-asset-properties>\n  </div>\n</div>\n\n<div [ngClass]=\"{ drawerOpen: showAddGroup() }\">\n  <div class=\"bottom-drawer\">\n    <c8y-add-group\n      [currentGroupId]=\"currentGroupId\"\n      [refresh]=\"refresh\"\n      (onCancel)=\"onAddGroupClick()\"\n      *ngIf=\"showAddGroup()\"\n    ></c8y-add-group>\n  </div>\n</div>\n\n<div [ngClass]=\"{ drawerOpen: showAssignDevices }\">\n  <div class=\"bottom-drawer\">\n    <div class=\"d-flex d-col no-align-items fit-h\">\n      <c8y-assign-devices\n        class=\"d-contents\"\n        (onCancel)=\"showAssignDevices = false\"\n        [refresh]=\"refresh\"\n        [currentGroupId]=\"currentGroupId\"\n        (onShowChildDevices)=\"showAssignChildDevices = $event\"\n        (selectedDevice)=\"showChildrenForDevice = $event\"\n        *ngIf=\"showAssignDevices\"\n      ></c8y-assign-devices>\n    </div>\n  </div>\n</div>\n\n<div [ngClass]=\"{ drawerOpen: showAssignChildDevices }\">\n  <div class=\"bottom-drawer m-t-40\">\n    <div class=\"d-flex d-col no-align-items fit-h\">\n      <c8y-assign-child-devices\n        class=\"d-contents\"\n        *ngIf=\"showAssignChildDevices\"\n        (onCancel)=\"showAssignChildDevices = false\"\n        [refresh]=\"refresh\"\n        [currentGroupId]=\"currentGroupId\"\n        [parentDevice]=\"showChildrenForDevice\"\n      ></c8y-assign-child-devices>\n    </div>\n  </div>\n</div>\n","import { ModuleWithProviders, NgModule } from '@angular/core';\nimport {\n  CoreModule,\n  FilterMapperModule,\n  gettext,\n  hookRoute,\n  ViewContext\n} from '@c8y/ngx-components';\nimport { DeviceGridModule } from '@c8y/ngx-components/device-grid';\nimport { MapModule } from '@c8y/ngx-components/map';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { PopoverModule } from 'ngx-bootstrap/popover';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { AddGroupModule } from './add-group/add-group.module';\nimport { AssetPropertiesItemComponent } from './asset-properties-item.component';\nimport { AssetPropertiesComponent } from './asset-properties.component';\nimport { AssetTypeCellRendererComponent } from '@c8y/ngx-components/data-grid-columns/asset-type';\nimport { DeleteAssetsModalComponent } from './delete-assets-modal/delete-assets-modal.component';\nimport { GroupInfoComponent } from './group-info.component';\nimport { GroupsComponent } from './groups.component';\nimport { AssetLocationComponent } from './location/asset-location.component';\nimport { SubAssetsGridComponent } from './sub-assets-grid.component';\nimport { SubAssetsComponent } from './sub-assets.component';\nimport { defaultModuleConfig, SubAssetsConfig, SUB_ASSETS_CONFIG } from './sub-assets.model';\nimport { SubAssetsService } from './sub-assets.service';\nimport { UnassignModalComponent } from './unassign-assets-modal/unassign-modal.component';\nimport { SubAssetsGridsModule } from './sub-assets-grids.module';\n\n@NgModule({\n  declarations: [\n    SubAssetsComponent,\n    GroupsComponent,\n    GroupInfoComponent,\n    DeleteAssetsModalComponent,\n    UnassignModalComponent,\n    AssetPropertiesComponent,\n    AssetPropertiesItemComponent,\n    AssetLocationComponent\n  ],\n  imports: [\n    CoreModule,\n    DeviceGridModule,\n    AddGroupModule,\n    PopoverModule,\n    BsDropdownModule,\n    TooltipModule,\n    FilterMapperModule,\n    MapModule,\n    AssetTypeCellRendererComponent,\n    SubAssetsGridsModule\n  ],\n  exports: [SubAssetsGridComponent, AssetLocationComponent],\n  providers: [\n    {\n      provide: SUB_ASSETS_CONFIG,\n      useValue: defaultModuleConfig\n    },\n\n    hookRoute([\n      {\n        context: ViewContext.Group,\n        path: 'subassets',\n        priority: 1000,\n        icon: 'c8y-group-open',\n        label: gettext('Subassets'),\n        component: SubAssetsComponent,\n        featureId: 'subassets'\n      },\n      {\n        path: 'group',\n        component: GroupsComponent\n      }\n    ]),\n    SubAssetsService\n  ]\n})\nexport class SubAssetsModule {\n  static config(config: SubAssetsConfig = {}): ModuleWithProviders<SubAssetsModule> {\n    return {\n      ngModule: SubAssetsModule,\n      providers: [\n        {\n          provide: SUB_ASSETS_CONFIG,\n          useValue: { ...defaultModuleConfig, ...config }\n        }\n      ]\n    };\n  }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4","i2.SmartGroupGridConfigurationStrategy","i1.SubAssetsService","i5","i6","i7","i2.SubAssetsService","i5.SubAssetsGridComponent","i2.AddGroupService","i4.SubAssetsService","i8.AssignChildDevicesComponent","i5.AssetPropertiesItemComponent","i6.AssetLocationComponent","i8","takeUntil","i5.AddGroupComponent","i6.SubAssetsGridComponent","i7.AssignDevicesComponent","i9.GroupInfoComponent","i10.AssetPropertiesComponent"],"mappings":"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"}