{"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  FeatureCacheService,\n  Pagination,\n  Permissions,\n  UserPreferencesService,\n  WILDCARD_SEARCH_FEATURE_KEY\n} from '@c8y/ngx-components';\nimport { AssetNodeService } from '@c8y/ngx-components/assets-navigator';\nimport { AssetTypeGridColumn } from '@c8y/ngx-components/data-grid-columns/asset-type';\nimport {\n  AlarmsDeviceGridColumn,\n  ImeiDeviceGridColumn,\n  ModelDeviceGridColumn,\n  NameDeviceGridColumn,\n  RegistrationDateDeviceGridColumn,\n  SerialNumberDeviceGridColumn,\n  SystemIdDeviceGridColumn\n} from '@c8y/ngx-components/device-grid';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { TranslateService } from '@ngx-translate/core';\nimport { catchError, firstValueFrom, of } 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    protected featureCacheService: FeatureCacheService\n  ) {\n    super(userPreferencesService);\n  }\n\n  async getCustomProperties(group: IManagedObject): Promise<IManagedObject[]> {\n    const assetType = await firstValueFrom(this.assetTypes.getAssetTypeByName$(group.type));\n    if (assetType?.c8y_IsAssetType) {\n      const { data } = await this.inventoryService.childAdditionsList(assetType, {\n        pageSize: 2000,\n        query: \"$filter=(has('c8y_IsAssetProperty'))\"\n      });\n      return data;\n    } else if (assetType?.c8y_JsonSchema?.definitions) {\n      const data = [];\n      Object.entries(assetType.c8y_JsonSchema.definitions).forEach(([key, value]) => {\n        const required = assetType.c8y_JsonSchema.required?.includes(key) || false;\n        if (typeof value === 'object' && value !== null) {\n          data.push({ ...value, key, isRequired: required });\n        } else {\n          data.push({ key, isRequired: required });\n        }\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    const isWildcardSearchEnabled = await this.isWildcardSearchEnabled();\n    if (isRoot) {\n      const query = this.buildCombinedRootQueryFilter(\n        columns,\n        pagination,\n        baseQuery,\n        isWildcardSearchEnabled,\n        text\n      );\n      return this.assetNodeService.getRootNodes({\n        ...pagination,\n        ...(text && !isWildcardSearchEnabled && { text }),\n        query\n      });\n    }\n    const filters = {\n      ...this.getAssetsFilters(columns, pagination, baseQuery, text, isWildcardSearchEnabled),\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 isWildcardSearchEnabled = await this.isWildcardSearchEnabled();\n    const filters = !parentReference\n      ? {\n          query: this.buildCombinedRootQueryFilter(\n            columns,\n            pagination,\n            baseQuery,\n            isWildcardSearchEnabled,\n            text\n          ),\n          ...defaultFilters\n        }\n      : {\n          ...this.getAssetsFilters(columns, pagination, baseQuery, text, isWildcardSearchEnabled),\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(\n    columns,\n    pagination,\n    baseQuery: { text?: string } = {},\n    isWildcardSearchEnabled = true,\n    text?: string\n  ) {\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    let fullQuery = this.queriesUtil.addAndFilter(rootAndUserQuery, baseQuery);\n    if (text && isWildcardSearchEnabled) {\n      fullQuery = this.queriesUtil.addAndFilter(fullQuery, {\n        __or: {\n          name: `*${text.trim().replace(/\\s+/g, '*')}*`,\n          id: text.trim(),\n          'c8y_Hardware.serialNumber': `*${text.trim().replace(/\\s+/g, '*')}*`\n        }\n      });\n    }\n\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 isWildcardSearchEnabled(): Promise<boolean> {\n    return firstValueFrom(\n      this.featureCacheService\n        .getFeatureState(WILDCARD_SEARCH_FEATURE_KEY)\n        .pipe(catchError(() => of(true)))\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(\n    columns: Column[],\n    pagination: Pagination,\n    baseQuery,\n    text?: string,\n    isWildcardSearchEnabled = true\n  ) {\n    let query = this.queriesUtil.addAndFilter(this.getQueryObj(columns), baseQuery);\n    if (text && isWildcardSearchEnabled) {\n      query = this.queriesUtil.addAndFilter(query, {\n        __or: {\n          name: `*${text.trim().replace(/\\s+/g, '*')}*`,\n          id: text.trim(),\n          'c8y_Hardware.serialNumber': `*${text.trim().replace(/\\s+/g, '*')}*`\n        }\n      });\n    }\n    return {\n      ...(text && !isWildcardSearchEnabled && { 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 { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  ConfirmModalComponent,\n  GainsightService,\n  ModalLabels,\n  Status,\n  StatusType,\n  FormGroupComponent,\n  ProductExperienceDirective,\n  C8yTranslatePipe\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\nimport { FormsModule } from '@angular/forms';\nimport { NgIf } from '@angular/common';\n\n@Component({\n  selector: 'c8y-delete-assets-modal',\n  templateUrl: './delete-assets-modal.component.html',\n  imports: [\n    ConfirmModalComponent,\n    FormsModule,\n    NgIf,\n    FormGroupComponent,\n    ProductExperienceDirective,\n    C8yTranslatePipe\n  ]\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 { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  ConfirmModalComponent,\n  GainsightService,\n  ModalLabels,\n  Status,\n  StatusType,\n  C8yTranslatePipe\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  imports: [ConfirmModalComponent, C8yTranslatePipe]\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 { gettext } from '@c8y/ngx-components/gettext';\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  GridConfigContextProvider,\n  Pagination,\n  Row,\n  ServerSideDataCallback,\n  ServerSideDataResult,\n  UserPreferencesConfigurationStrategy,\n  ProductExperienceDirective,\n  EmptyStateContextDirective,\n  EmptyStateComponent,\n  C8yTranslatePipe,\n  LoadMoreMode\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\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  imports: [\n    DataGridComponent,\n    ProductExperienceDirective,\n    EmptyStateContextDirective,\n    EmptyStateComponent,\n    C8yTranslatePipe\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(): LoadMoreMode {\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</c8y-data-grid>\n","import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport { AlertService, C8yTranslatePipe } from '@c8y/ngx-components';\nimport { InventoryService, IManagedObject } from '@c8y/client';\nimport { SubAssetsService } from '../sub-assets.service';\nimport { SubAssetsGridComponent } from '../sub-assets-grid.component';\nimport { NgClass } from '@angular/common';\n\n@Component({\n  selector: 'c8y-assign-child-devices',\n  templateUrl: './assign-child-devices.component.html',\n  imports: [SubAssetsGridComponent, NgClass, C8yTranslatePipe]\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\" id=\"childDevicesDrawerTitle\">\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 {\n  FormBuilder,\n  FormGroup,\n  Validators,\n  FormsModule,\n  ReactiveFormsModule\n} from '@angular/forms';\nimport { IManagedObject } from '@c8y/client';\nimport { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  ActionControl,\n  AlertService,\n  C8yStepper,\n  GainsightService,\n  Pagination,\n  Permissions,\n  Row,\n  ProductExperienceDirective,\n  FormGroupComponent,\n  C8yTranslateDirective,\n  RequiredInputPlaceholderDirective,\n  C8yStepperButtons,\n  C8yTranslatePipe\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';\nimport { NgIf, NgClass, NgTemplateOutlet, NgStyle } from '@angular/common';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { CdkStep } from '@angular/cdk/stepper';\nimport { DeviceGridComponent } from '@c8y/ngx-components/device-grid';\nimport { AssignChildDevicesComponent } from '../assign-devices/assign-child-devices.component';\n\n@Component({\n  selector: 'c8y-add-group',\n  templateUrl: './add-group.component.html',\n  imports: [\n    NgIf,\n    NgClass,\n    NgTemplateOutlet,\n    C8yStepper,\n    ProductExperienceDirective,\n    CdkStep,\n    CdkTrapFocus,\n    FormGroupComponent,\n    FormsModule,\n    ReactiveFormsModule,\n    C8yTranslateDirective,\n    RequiredInputPlaceholderDirective,\n    C8yStepperButtons,\n    DeviceGridComponent,\n    NgStyle,\n    AssignChildDevicesComponent,\n    C8yTranslatePipe\n  ]\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\n  [ngClass]=\"{ drawerOpen: true }\"\n  *ngIf=\"!currentGroupId; else stepper\"\n>\n  <div class=\"bottom-drawer has-backdrop\"\n    role=\"dialog\" \n    [cdkTrapFocus]=\"!currentGroupId\" \n    aria-modal=\"true\" \n    aria-labelledby=\"drawerTitle\">\n    <div class=\"d-contents\">\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    [disableProgressButtons]=\"true\"\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\" id=\"drawerTitle\">\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  *ngIf=\"showAssignChildDevices\"\n  [ngClass]=\"{ drawerOpen: showAssignChildDevices }\"\n>\n  <div\n    class=\"m-t-40 bottom-drawer has-backdrop\"\n    role=\"dialog\"\n    aria-modal=\"true\"\n    aria-labelledby=\"childDevicesDrawerTitle\"\n    [ngStyle]=\"!!currentGroupId && { right: '0px'  }\"\n  >\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 { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  ActionControl,\n  AlertService,\n  DATA_GRID_CONFIGURATION_CONTEXT,\n  DATA_GRID_CONFIGURATION_STRATEGY,\n  GainsightService,\n  HeaderActionControl,\n  Pagination,\n  Row,\n  UserPreferencesConfigurationStrategy,\n  UserPreferencesGridConfigContext,\n  ProductExperienceDirective,\n  C8yTranslateDirective,\n  C8yTranslatePipe\n} from '@c8y/ngx-components';\nimport { PRODUCT_EXPERIENCE_SUB_ASSETS_SHARED } from '../shared/sub-assets.model';\nimport { SubAssetsService } from '../sub-assets.service';\nimport { DeviceGridComponent } from '@c8y/ngx-components/device-grid';\nimport { NgClass } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { PopoverDirective } from 'ngx-bootstrap/popover';\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  imports: [\n    DeviceGridComponent,\n    ProductExperienceDirective,\n    NgClass,\n    FormsModule,\n    PopoverDirective,\n    C8yTranslateDirective,\n    C8yTranslatePipe\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\n        class=\"h4 text-center text-medium\"\n        id=\"drawerTitle\"\n      >\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\n      class=\"btn btn-dot btn-icon no-pointer\"\n      title=\"{{ 'Child devices icon' | translate }}\"\n    >\n      <i class=\"text-primary dlt-c8y-icon-enter-bottom\"></i>\n    </span>\n    <span translate>\n      Displays the button next to target devices with children. Clicking it displays a list with all\n      child devices of 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  imports: [\n    CoreModule,\n    DeviceGridModule,\n    PopoverModule,\n    BsDropdownModule,\n    TooltipModule,\n    AssignDevicesComponent,\n    AssignChildDevicesComponent,\n    SubAssetsGridComponent\n  ],\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  imports: [\n    CoreModule,\n    DeviceGridModule,\n    FormsModule,\n    ReactiveFormsModule,\n    PopoverModule,\n    SubAssetsGridsModule,\n    AddGroupComponent\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 { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  AlertService,\n  C8yJSONSchema,\n  FilesService,\n  C8yTranslatePipe,\n  DatePipe\n} from '@c8y/ngx-components';\nimport { FormlyFieldConfig, FormlyModule } from '@ngx-formly/core';\nimport { AssetPropertiesItem } from './asset-properties.model';\nimport { JSONSchema7 } from 'json-schema';\nimport { clone, sortBy } from 'lodash-es';\nimport { NgClass } from '@angular/common';\n\n@Component({\n  selector: 'c8y-asset-properties-item',\n  templateUrl: './asset-properties-item.component.html',\n  imports: [NgClass, FormlyModule, C8yTranslatePipe, DatePipe]\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 || complexObj.type === 'date') {\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","@if (!isEdit) {\n  @switch (type) {\n    @case ('date') {\n      {{ (value | c8yDate: 'fullDate') || ('Undefined' | translate) }}\n    }\n    @case ('file') {\n      @if (file) {\n        @if (previewImage) {\n          <img\n            class=\"img-responsive\"\n            [src]=\"previewImage\"\n          />\n        }\n        @if (!previewImage) {\n          <button\n            class=\"btn btn-clean text-truncate p-0\"\n            title=\"{{ 'Download' | translate }} {{ file.name }}\"\n            type=\"button\"\n            (click)=\"filesService.download(file)\"\n          >\n            {{ file.name }}\n          </button>\n        }\n      } @else {\n        {{ 'No file attached.' | translate }}\n      }\n    }\n    @case ('object') {\n      <ul class=\"list-unstyled c8y-custom-properties\">\n        @for (prop of complex; track prop.key; let i = $index) {\n          <li\n            class=\"p-t-4 p-b-4 d-flex text-nowrap\"\n            [ngClass]=\"{ 'separator-top-bottom': i === 0, 'separator-bottom': i > 0 }\"\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\n              class=\"m-l-auto\"\n              [ngStyle]=\"{\n                'max-width': prop.file ? '50%' : '100%',\n                'min-width': '0'\n              }\"\n            >\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        }\n      </ul>\n    }\n    @case (type === 'number' || type === 'boolean' ? type : '') {\n      <p\n        class=\"text-truncate\"\n        title=\"{{ value != null ? value : ('Undefined' | translate) }}\"\n      >\n        {{ value != null ? value : ('Undefined' | translate) }}\n      </p>\n    }\n    @default {\n      <p\n        class=\"text-truncate\"\n        title=\"{{ (value | translate) || ('Undefined' | translate) }}\"\n      >\n        {{ (value | translate) || ('Undefined' | translate) }}\n      </p>\n    }\n  }\n}\n@if (isEdit) {\n  <formly-form\n    [form]=\"form\"\n    [fields]=\"fields\"\n    [model]=\"model\"\n  ></formly-form>\n}\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';\nimport { IconDirective } from '@c8y/ngx-components';\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  imports: [IconDirective, MapComponent]\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 { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  AlertService,\n  AssetTypesRealtimeService,\n  C8yTranslateDirective,\n  LoadingComponent,\n  IconDirective,\n  C8yTranslatePipe\n} 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';\nimport { NgClass } from '@angular/common';\nimport { TooltipDirective } from 'ngx-bootstrap/tooltip';\nimport { AssetPropertiesItemComponent } from './asset-properties-item.component';\nimport { AssetLocationComponent } from './location/asset-location.component';\n\n@Component({\n  selector: 'c8y-asset-properties',\n  templateUrl: './asset-properties.component.html',\n  imports: [\n    C8yTranslateDirective,\n    LoadingComponent,\n    NgClass,\n    TooltipDirective,\n    IconDirective,\n    AssetPropertiesItemComponent,\n    AssetLocationComponent,\n    C8yTranslatePipe\n  ]\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  POSITION_PROPERTY_KEY = 'c8y_Position';\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    this.assetType = await firstValueFrom(this.assetTypes.getAssetTypeByName$(this.asset.type));\n    try {\n      const sourceArray =\n        this.assetType?.c8y_IsAssetType?.properties ||\n        this.assetType?.c8y_AllowedPropertyDefinitions;\n      const keyField = this.assetType?.c8y_IsAssetType?.properties ? 'id' : 'identifier';\n      if (sourceArray) {\n        this.properties = this.keepOrder(sourceArray, this.properties, keyField);\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 property of managedObjects) {\n      let item;\n      if (property.c8y_JsonSchema) {\n        [item] = await this.parseItem(property, property.c8y_JsonSchema.properties, this.asset);\n      } else if (property.key) {\n        this.transformType(property);\n        const jsonSchema = {};\n        jsonSchema[property.key] = property;\n        [item] = await this.parseItem(null, jsonSchema, this.asset);\n      }\n      if (item) {\n        this.setItemRequired(item, property);\n        this.updatePositionKeyLabel(item);\n        properties.push(item);\n      }\n    }\n    return properties;\n  }\n\n  transformType(property: any): void {\n    if (property.format === 'date-time') {\n      property.type = 'date';\n    } else if (this.isFileTypeProperty(property)) {\n      property.type = 'file';\n      property.contentMediaType = property.properties?.binaryId?.contentMediaType;\n      property.maxSize = property.properties?.binarySize?.maximum;\n    } else if (property.enum) {\n      property.type = 'enum';\n    }\n  }\n\n  isFileTypeProperty(property: any): boolean {\n    return property.required?.[0] === 'binaryId';\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 (old structure) or properties object (new structure).\n   */\n  orderComplexProperties(mo: IManagedObject | any) {\n    const target = mo.c8y_JsonSchema ? mo.c8y_JsonSchema.properties[mo.name]?.['properties'] : mo;\n    const keyValuesArray = toPairs(target);\n    const orderedProperties = sortBy(keyValuesArray, ([, value]) => value.order);\n    const result = fromPairs(orderedProperties);\n    if (mo.c8y_JsonSchema) {\n      mo.c8y_JsonSchema.properties[mo.name]['properties'] = result;\n      return mo;\n    }\n    return result;\n  }\n\n  async addOrderDetails(properties: any, key: string): Promise<void> {\n    const propDetails = await this.getPropertyDetails(key);\n    propDetails.c8y_Order?.forEach(item => {\n      if (properties[item.identifier]) {\n        properties[item.identifier]['order'] = item.order;\n      }\n    });\n  }\n\n  async getPropertyDetails(identifier: string): Promise<IManagedObject> {\n    const query = {\n      __filter: {\n        __and: [{ type: 'c8y_PropertyDefinition' }, { c8y_Contexts: 'asset' }, { name: identifier }]\n      }\n    };\n    const { data } = await this.inventory.listQuery(query);\n    return data[0];\n  }\n\n  async parseItem(mo: IManagedObject | null, 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        if (mo?.c8y_JsonSchema) {\n          this.deleteTitleFromMOJsonSchema(mo);\n          this.orderComplexProperties(mo);\n        } else {\n          for (const [, value] of Object.entries(properties[key].properties)) {\n            this.transformType(value);\n          }\n          await this.addOrderDetails(properties[key].properties, key);\n          properties[key].properties = this.orderComplexProperties(properties[key].properties);\n        }\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      const schema = mo?.c8y_JsonSchema || { properties: properties };\n      items.push({\n        key,\n        value,\n        label: title || mo?.label,\n        type,\n        description: mo?.description || properties[key].description,\n        file,\n        complex:\n          type === 'object'\n            ? await this.parseItem(mo, properties[key].properties, value)\n            : undefined,\n        isEdit: false,\n        jsonSchema: schema\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        for (const currentProp of prop.complex) {\n          if (currentProp.type === 'file') {\n            await this.uploadFileProperty(propertyValue, prop, currentProp);\n          }\n        }\n      } else {\n        this.updateUndefinedToPropTypeValue(prop, propertyValue);\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 async uploadFileProperty(\n    propertyValue: any,\n    prop: AssetPropertiesItem,\n    currentProp: any\n  ): Promise<void> {\n    const fileInfo = {};\n    fileInfo[currentProp.key] = propertyValue[prop.key][currentProp.key];\n    const value = await this.uploadFiles(fileInfo, currentProp.value);\n    propertyValue[prop.key][currentProp.key] = value[currentProp.key];\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, keyField) {\n    return correctOrderedIds.map(item => {\n      const itemKey = item[keyField];\n      const foundProperty = properties.find(\n        property => property.key === itemKey || property.id === itemKey\n      );\n      if (!foundProperty) {\n        throw new Error('Custom property mismatch');\n      }\n      return foundProperty;\n    });\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 updatePositionKeyLabel(item: AssetPropertiesItem): void {\n    if (item.label === this.POSITION_PROPERTY_KEY) {\n      item.label = gettext('Location');\n    }\n  }\n\n  private setItemRequired(item: AssetPropertiesItem, mo: IManagedObject): void {\n    const isAssetPropertyRequired = this.assetType?.c8y_IsAssetType\n      ? !!this.assetType.c8y_IsAssetType.properties.find(p => p.id === mo.id)?.isRequired\n      : mo.isRequired;\n\n    if (!isAssetPropertyRequired) {\n      return;\n    }\n    const isComplexProperty = !!item?.complex?.length;\n    const propertyKey = mo.c8y_JsonSchema?.key || mo.key;\n    if (isComplexProperty) {\n      const complexProperty = item.jsonSchema?.properties?.[propertyKey] as JSONSchema7;\n      complexProperty.required = item.complex.map(({ key }) => key);\n    } else {\n      item.jsonSchema.required = [propertyKey];\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]=\"{\n        label: assetType?.c8y_JsonSchema?.title || assetType?.label || '' | translate\n      }\"\n    >\n      {{ label }} properties\n    </h1>\n  </div>\n  <div class=\"card-block\">\n    @if (isLoading) {\n      <div class=\"text-center\">\n        <c8y-loading></c8y-loading>\n      </div>\n    }\n\n    @if (!isLoading) {\n      @for (prop of customProperties; track prop.key) {\n        <div\n          class=\"card m-b-8\"\n          title=\"{{ prop.description | translate }}\"\n          [ngClass]=\"{ 'card-highlight': prop.isEdit }\"\n        >\n          <div\n            class=\"card-block\"\n            [ngClass]=\"{ 'p-b-0': prop.isEdit }\"\n          >\n            @if (!prop.isEdit) {\n              <div class=\"d-flex p-b-8 a-i-center\">\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            }\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            @if (prop.key === POSITION_PROPERTY_KEY) {\n              <div>\n                <c8y-asset-location\n                  [locationMO]=\"asset\"\n                  [isEdit]=\"prop.isEdit\"\n                  [form]=\"assetProps.form\"\n                ></c8y-asset-location>\n              </div>\n            }\n          </div>\n          @if (prop.isEdit) {\n            <div class=\"card-footer p-t-0\">\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          }\n        </div>\n      }\n    }\n  </div>\n</ng-container>\n","import { InjectionToken } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/gettext';\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 { gettext } from '@c8y/ngx-components/gettext';\nimport {\n  AlertService,\n  AssetTypesRealtimeService,\n  Column,\n  CustomColumn,\n  ModalService,\n  Status,\n  IconDirective,\n  FormGroupComponent,\n  C8yTranslateDirective,\n  RequiredInputPlaceholderDirective,\n  ProductExperienceDirective,\n  TextareaAutoresizeDirective,\n  C8yTranslatePipe,\n  DatePipe,\n  FilterMapperPipe,\n  GroupedFilterChips\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';\nimport { NgClass, AsyncPipe } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport {\n  BsDropdownDirective,\n  BsDropdownToggleDirective,\n  BsDropdownMenuDirective\n} from 'ngx-bootstrap/dropdown';\nimport { PopoverDirective } from 'ngx-bootstrap/popover';\n\n@Component({\n  selector: 'c8y-group-info',\n  templateUrl: './group-info.component.html',\n  imports: [\n    IconDirective,\n    FormsModule,\n    FormGroupComponent,\n    C8yTranslateDirective,\n    RequiredInputPlaceholderDirective,\n    ProductExperienceDirective,\n    TextareaAutoresizeDirective,\n    BsDropdownDirective,\n    BsDropdownToggleDirective,\n    PopoverDirective,\n    BsDropdownMenuDirective,\n    NgClass,\n    C8yTranslatePipe,\n    AsyncPipe,\n    DatePipe,\n    FilterMapperPipe,\n    GroupedFilterChips\n  ]\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  descriptionLabel = gettext('e.g. My description');\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      if (this.assetNodeService.isAsset(this.group)) {\n        const assetType = await firstValueFrom(this.assetType.getAssetTypeByName$(this.group.type));\n        this.label = assetType?.label || assetType?.c8y_JsonSchema?.title || gettext('Group');\n      } else {\n        this.label = gettext('Group');\n      }\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          @if (group.c8y_IsDynamicGroup) {\n            <small class=\"label label-info\">\n              {{ 'Smart group' | translate }}\n            </small>\n          }\n          @if (!group.c8y_IsDynamicGroup && !group.com_cumulocity_model_Agent) {\n            <small\n              class=\"label label-info text-truncate d-inline-block\"\n              title=\"{{ label | translate }}\"\n            >\n              {{ label | translate }}\n            </small>\n          }\n          @if (group.com_cumulocity_model_Agent) {\n            <small class=\"label label-info\">\n              {{ 'Remote group' | translate }}\n            </small>\n          }\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                @if (!canEdit) {\n                  <p class=\"form-control-static\">\n                    {{ groupInfoModel.name }}\n                  </p>\n                }\n                @if (canEdit) {\n                  <div class=\"input-group input-group-lg input-group-editable\">\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                        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                }\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              @if (canEdit) {\n                <div class=\"input-group input-group-editable\">\n                  <textarea\n                    class=\"form-control no-resize\"\n                    title=\"{{\n                      groupInfoModel.c8y_Notes\n                        ? groupInfoModel.c8y_Notes\n                        : (descriptionLabel | translate)\n                    }}\"\n                    id=\"description\"\n                    placeholder=\"{{ descriptionLabel | 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              } @else {\n                <p class=\"form-control-static\">\n                  {{ groupInfoModel.c8y_Notes }}\n                </p>\n              }\n            </form>\n\n            @if (isSmartGroup()) {\n              <div\n                class=\"dropdown m-t-8\"\n                placement=\"bottom left\"\n                container=\"body\"\n                type=\"button\"\n                dropdown\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                  @if (columnsWithFilter?.length > 0) {\n                    <span class=\"p-relative p-l-4 p-r-16\">\n                      <span\n                        class=\"badge badge-system p-absolute\"\n                        data-cy=\"group-info--filter-number\"\n                      >\n                        {{ columnsWithFilter?.length }}\n                      </span>\n                    </span>\n                  }\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                  container=\"body\"\n                  type=\"button\"\n                  data-cy=\"group-info--help-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                      @for (column of columnsWithFilter; track column; let last = $last) {\n                        <li [ngClass]=\"{ 'separator-bottom': !last }\">\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                          @for (\n                            groupedFilterChips of column\n                              | mapToFilterChips\n                              | async\n                              | groupedFilterChips;\n                            track groupedFilterChips;\n                            let first = $first\n                          ) {\n                            <div\n                              class=\"list-group-item borderless d-flex d-col\"\n                              [ngClass]=\"{ 'p-t-0': first }\"\n                            >\n                              @if (groupedFilterChips.label) {\n                                <p class=\"small p-b-4\">\n                                  {{ groupedFilterChips.label | translate }}\n                                </p>\n                              }\n                              <div class=\"d-flex a-i-center gap-4 flex-wrap\">\n                                @for (chip of groupedFilterChips.chips; track chip) {\n                                  <span\n                                    class=\"tag tag--info chip\"\n                                    data-cy=\"group-info--grouped-filter-chip\"\n                                  >\n                                    {{ chip.displayValue | translate }}\n                                  </span>\n                                }\n                              </div>\n                            </div>\n                          }\n                        </li>\n                      }\n                    </ul>\n                  </div>\n                </div>\n              </div>\n            }\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              @if (group.com_cumulocity_model_Agent) {\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\">{{ 'Status' | translate }}</label>\n                  @if (group.c8y_BrokerSource) {\n                    <span class=\"m-l-auto\">\n                      {{ group.c8y_BrokerSource.status | translate }}\n                    </span>\n                  }\n                  @if (!group.c8y_BrokerSource) {\n                    <span class=\"m-l-auto\">\n                      {{ 'Offline' | translate }}\n                    </span>\n                  }\n                </li>\n              }\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 {\n  Column,\n  Permissions,\n  TitleComponent,\n  BreadcrumbComponent,\n  BreadcrumbItemComponent,\n  ActionBarItemComponent,\n  IconDirective,\n  HelpComponent,\n  C8yTranslatePipe\n} 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';\nimport { NgIf } from '@angular/common';\nimport { AddGroupComponent } from './add-group/add-group.component';\nimport { SubAssetsGridComponent } from './sub-assets-grid.component';\n\n@Component({\n  selector: 'c8y-groups-name',\n  templateUrl: './groups.component.html',\n  imports: [\n    TitleComponent,\n    BreadcrumbComponent,\n    BreadcrumbItemComponent,\n    NgIf,\n    ActionBarItemComponent,\n    IconDirective,\n    HelpComponent,\n    AddGroupComponent,\n    SubAssetsGridComponent,\n    C8yTranslatePipe\n  ]\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 {\n  ContextRouteService,\n  DisplayOptions,\n  Permissions,\n  TitleComponent,\n  ActionBarItemComponent,\n  IconDirective,\n  C8yTranslateDirective,\n  HelpComponent,\n  C8yTranslatePipe\n} 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';\nimport { NgIf, NgClass } from '@angular/common';\nimport { GroupInfoComponent } from './group-info.component';\nimport { SubAssetsGridComponent } from './sub-assets-grid.component';\nimport { AssetPropertiesComponent } from './asset-properties.component';\nimport { AddGroupComponent } from './add-group/add-group.component';\nimport { AssignDevicesComponent } from './assign-devices/assign-devices.component';\nimport { AssignChildDevicesComponent } from './assign-devices/assign-child-devices.component';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\n\n@Component({\n  selector: 'c8y-sub-assets',\n  templateUrl: './sub-assets.component.html',\n  imports: [\n    TitleComponent,\n    NgIf,\n    ActionBarItemComponent,\n    IconDirective,\n    C8yTranslateDirective,\n    HelpComponent,\n    NgClass,\n    CdkTrapFocus,\n    GroupInfoComponent,\n    SubAssetsGridComponent,\n    AssetPropertiesComponent,\n    AddGroupComponent,\n    AssignDevicesComponent,\n    AssignChildDevicesComponent,\n    C8yTranslatePipe\n  ]\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  src=\"/docs/device-management-application/grouping-devices/#using-smart-groups\"\n  *ngIf=\"isSmartGroup; else assetsHelp\"\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\n    class=\"bottom-drawer has-backdrop\"\n    aria-labelledby=\"drawerTitle\"\n    aria-modal=\"true\"\n    role=\"dialog\"\n    [cdkTrapFocus]=\"showAddGroup()\"\n  >\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\n    class=\"bottom-drawer has-backdrop\"\n    aria-labelledby=\"drawerTitle\"\n    aria-modal=\"true\"\n    role=\"dialog\"\n    [cdkTrapFocus]=\"showAssignDevices\"\n  >\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\n    class=\"bottom-drawer has-backdrop m-t-40\"\n    aria-labelledby=\"childDevicesDrawerTitle\"\n    aria-modal=\"true\"\n    role=\"dialog\"\n    [cdkTrapFocus]=\"showAssignChildDevices\"\n  >\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 { gettext } from '@c8y/ngx-components/gettext';\nimport { CoreModule, FilterMapperModule, hookRoute, ViewContext } 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  imports: [\n    CoreModule,\n    DeviceGridModule,\n    AddGroupModule,\n    PopoverModule,\n    BsDropdownModule,\n    TooltipModule,\n    FilterMapperModule,\n    MapModule,\n    AssetTypeCellRendererComponent,\n    SubAssetsGridsModule,\n    SubAssetsComponent,\n    GroupsComponent,\n    GroupInfoComponent,\n    DeleteAssetsModalComponent,\n    UnassignModalComponent,\n    AssetPropertiesComponent,\n    AssetPropertiesItemComponent,\n    AssetLocationComponent\n  ],\n  exports: [SubAssetsGridComponent, AssetLocationComponent],\n  providers: [\n    {\n      provide: SUB_ASSETS_CONFIG,\n      useValue: defaultModuleConfig\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","i2.SmartGroupGridConfigurationStrategy","i1.SubAssetsService","i4","i5","i2.SubAssetsService","i2.AddGroupService","i4.SubAssetsService","i6","takeUntil"],"mappings":"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"}