@c8y/ngx-components 1023.17.11 → 1023.17.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/auth-configuration/index.d.ts +6 -3
- package/auth-configuration/index.d.ts.map +1 -1
- package/datapoint-library/details/index.d.ts.map +1 -1
- package/datapoint-selector/index.d.ts +6 -3
- package/datapoint-selector/index.d.ts.map +1 -1
- package/device-grid/index.d.ts.map +1 -1
- package/echart/index.d.ts.map +1 -1
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs +133 -59
- package/fesm2022/c8y-ngx-components-auth-configuration.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-library-details.mjs +3 -16
- package/fesm2022/c8y-ngx-components-datapoint-library-details.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs +18 -19
- package/fesm2022/c8y-ngx-components-datapoint-selector.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-device-grid.mjs +5 -1
- package/fesm2022/c8y-ngx-components-device-grid.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-echart.mjs +17 -4
- package/fesm2022/c8y-ngx-components-echart.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-search.mjs +10 -2
- package/fesm2022/c8y-ngx-components-search.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components-sub-assets.mjs +10 -2
- package/fesm2022/c8y-ngx-components-sub-assets.mjs.map +1 -1
- package/fesm2022/c8y-ngx-components.mjs +10 -2
- package/fesm2022/c8y-ngx-components.mjs.map +1 -1
- package/index.d.ts.map +1 -1
- package/locales/de.po +1 -1
- package/package.json +1 -1
- package/search/index.d.ts.map +1 -1
- package/sub-assets/index.d.ts.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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$ = this.assetTypes.getAssetTypeByName$(group.type);\n const assetType = await firstValueFrom(assetType$);\n if (assetType) {\n const { data } = await this.inventoryService.childAdditionsList(assetType, {\n pageSize: 2000,\n query: \"$filter=(has('c8y_IsAssetProperty'))\"\n });\n return data;\n }\n return [];\n }\n\n getDefaultColumns(_filterable = true, _sortable = true): Column[] {\n const defaultColumns = [\n new AssetTypeGridColumn({ sortOrder: 'desc' }),\n new NameDeviceGridColumn({ sortOrder: 'asc' }),\n new ModelDeviceGridColumn(),\n new SerialNumberDeviceGridColumn({ visible: false }),\n new RegistrationDateDeviceGridColumn({ visible: false }),\n new SystemIdDeviceGridColumn({ visible: false }),\n new ImeiDeviceGridColumn({ visible: false }),\n new AlarmsDeviceGridColumn()\n ];\n return defaultColumns;\n }\n\n getDefaultPagination(): Pagination {\n return {\n pageSize: 25,\n currentPage: 1\n };\n }\n\n getDefaultActionControls(): ActionControl[] {\n return [];\n }\n\n async unassignAsset(asset: IManagedObject, parentRef: IManagedObject) {\n const { id: assetId } = asset;\n const { id: parentId } = parentRef;\n\n if (this.isDevice(asset)) {\n try {\n await this.inventoryService.childAssetsRemove(assetId, parentId);\n const alertMessage = this.translateService.instant(gettext('Device unassigned.'));\n this.alertService.success(alertMessage);\n } catch (error) {\n const alertMessage = this.translateService.instant(gettext('Could not unassign device.'));\n this.alertService.danger(alertMessage, error);\n }\n await this.deactivateSmartrulesForAsset(asset, parentRef);\n }\n }\n\n isDevice(asset: IManagedObject): boolean {\n return (\n !asset.hasOwnProperty(this.IS_DEVICE_GROUP_FRAGMENT) &&\n !asset.hasOwnProperty(this.IS_DYNAMIC_GROUP_FRAGMENT)\n );\n }\n\n async deleteAsset(asset: IManagedObject, parentRef: IManagedObject, params = {}) {\n const isGroup =\n asset.hasOwnProperty(this.IS_DEVICE_GROUP_FRAGMENT) ||\n this.smartGroupsService.isSmartGroup(asset);\n\n if (isGroup) {\n await this.deleteGroup(asset, params);\n } else {\n await this.deleteDevice(asset, params);\n }\n\n if (parentRef && !this.smartGroupsService.isSmartGroup(asset)) {\n await this.deactivateSmartrulesForAsset(asset, parentRef);\n }\n }\n\n shouldShowWithDeviceUserCheckbox(asset: IManagedObject): boolean {\n const { owner, c8y_IsDevice: isRootDevice } = asset;\n const hasDeviceUserAsOwner = asset.owner && this.isDeviceUser(owner);\n\n return Boolean(isRootDevice && hasDeviceUserAsOwner);\n }\n\n getDefaultBulkActionControls(): BulkActionControl[] {\n return [];\n }\n\n async getData(\n columns: Column[],\n pagination: Pagination,\n parentReference?: IManagedObject,\n baseQuery: any = {},\n text: string = null\n ) {\n const isRoot = !parentReference;\n 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 name: `*${text.trim().replace(/\\s+/g, '*')}*`\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 name: `*${text.trim().replace(/\\s+/g, '*')}*`\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 ColumnDirective,\n C8yTranslatePipe\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\nimport { NgFor } from '@angular/common';\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 NgFor,\n ColumnDirective,\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() {\n return this.isRootGroup && this.subAssetsGridService.isUsingInventoryRoles()\n ? 'auto'\n : undefined;\n }\n\n @Input('displayOptions')\n set _displayOptions(displayOptions) {\n this.displayOptions = { ...this.displayOptions, ...displayOptions };\n }\n\n constructor(\n public subAssetsGridService: SubAssetsService,\n private bsModalService: BsModalService,\n private smartGroupsService: SmartGroupsService,\n private deviceListExtensionService: DeviceListExtensionService,\n private assetNodeService: AssetNodeService\n ) {\n this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n }\n\n getGridConfigContext(): SubAssetsGridConfigContext {\n if (!!this.columnsConfigKey) {\n return { key: this.columnsConfigKey, group: this.parentGroup };\n }\n }\n\n ngOnInit() {\n const isDynamicGroup =\n !!this.parentGroup && this.assetNodeService.isDynamicGroup(this.parentGroup);\n if (!this.isRootGroup) {\n (isDynamicGroup\n ? this.deviceListExtensionService.items$\n : of(this.subAssetsGridService.getDefaultColumns(this.filterable, this.sortable))\n )\n .pipe(takeUntil(this.destroyed$))\n .subscribe(columns => (this.columns = columns));\n }\n if (!this.filterable || !this.sortable) {\n this.displayOptions.filter = this.filterable;\n this.columns.forEach(column => {\n column.filterable = this.filterable;\n column.sortable = this.sortable;\n });\n }\n this.setActionControls();\n this.showSearch = isDynamicGroup || !this.parentGroup;\n }\n\n setActionControls() {\n const actionControls: ActionControl[] = [];\n\n const unassignAction: ActionControl = {\n type: 'UNASSIGN',\n icon: 'unlink',\n text: gettext('Unassign'),\n priority: 1000,\n callback: (asset: Row) => this.onUnassignAsset(asset as IManagedObject, this.parentGroup),\n showIf: (asset: Row) =>\n this.subAssetsGridService.isDevice(asset as IManagedObject) &&\n !this.subAssetsGridService.isSmartGroup(this.parentGroup as IManagedObject)\n };\n\n actionControls.push(unassignAction);\n\n const deleteAction: ActionControl = {\n type: BuiltInActionType.Delete,\n priority: -Infinity,\n callback: (asset: Row) => this.onDeleteAsset(asset as IManagedObject, this.parentGroup),\n showIf: (asset: Row) => {\n if (this.smartGroupsService.isSmartGroup(asset as IManagedObject)) {\n return this.subAssetsGridService.canDeleteSmartGroup();\n }\n\n return true;\n }\n };\n\n actionControls.push(deleteAction);\n\n if (!this.actionControls) {\n this.actionControls = actionControls;\n }\n }\n\n onUnassignAsset(asset: IManagedObject, parentRef: IManagedObject) {\n const initialState = {\n asset\n };\n const modalRef = this.bsModalService.show(UnassignModalComponent, { initialState });\n\n modalRef.content.closeSubject.subscribe(async (result: boolean) => {\n if (result) {\n await this.subAssetsGridService.unassignAsset(asset, parentRef);\n this.refresh.emit();\n }\n });\n }\n\n async onDeleteAsset(asset: IManagedObject, parentRef: IManagedObject) {\n const initialState = {\n showWithDeviceUserCheckbox: this.subAssetsGridService.shouldShowWithDeviceUserCheckbox(asset),\n asset,\n showWithCascadeCheckbox: !this.smartGroupsService.isSmartGroup(asset)\n };\n\n const modalRef = this.bsModalService.show(DeleteAssetsModalComponent, { initialState });\n\n modalRef.content.closeSubject.subscribe(async (result: DeleteModalCheckboxes) => {\n if (result) {\n await this.subAssetsGridService.deleteAsset(asset, parentRef, result);\n if (result.cascade) {\n this.showCounterWarning = true;\n }\n this.refresh.emit();\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.parentGroup && !changes.parentGroup.firstChange) {\n this.dataGrid.reload();\n }\n }\n\n trackByName(_index, column: Column): string {\n return column.name;\n }\n\n onReload() {\n this.assetNodeService.rootNode.refresh();\n }\n\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const promises = [];\n let counters;\n\n promises.push(\n this.subAssetsGridService.getData(\n dataSourceModifier.columns,\n dataSourceModifier.pagination,\n this.parentGroup,\n this.baseQuery,\n dataSourceModifier.searchText\n )\n );\n\n promises.push(this.subAssetsGridService.getTotal(this.parentGroup, this.baseQuery));\n promises.push(\n this.subAssetsGridService.getCount(\n dataSourceModifier.columns,\n dataSourceModifier.pagination,\n this.parentGroup,\n this.baseQuery,\n dataSourceModifier.searchText\n )\n );\n\n const [dataResponse, size, filteredSize] = await Promise.all(promises);\n if (!counters) {\n counters = {\n size,\n filteredSize\n };\n }\n this.onColumnsChange.emit(dataSourceModifier.columns);\n\n return {\n res: dataResponse.res,\n data: dataResponse.data,\n paging: dataResponse.paging,\n ...counters\n };\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n}\n","<c8y-data-grid\n [title]=\"title\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [actionControls]=\"actionControls\"\n [selectable]=\"selectable\"\n [bulkActionControls]=\"bulkActionControls\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [infiniteScroll]=\"getInfiniteScrollMode\"\n [showCounterWarning]=\"showCounterWarning\"\n [refresh]=\"refresh\"\n [showSearch]=\"showSearch\"\n [displayOptions]=\"displayOptions\"\n (itemsSelect)=\"itemsSelect.emit($event)\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n (onReload)=\"onReload()\"\n>\n <c8y-ui-empty-state\n [icon]=\"'c8y-group-add'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (emptyStateText | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n</c8y-data-grid>\n","import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';\nimport { 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 { NgIf, NgSwitch, NgSwitchCase, NgFor, NgClass, NgSwitchDefault } from '@angular/common';\n\n@Component({\n selector: 'c8y-asset-properties-item',\n templateUrl: './asset-properties-item.component.html',\n imports: [\n NgIf,\n NgSwitch,\n NgSwitchCase,\n NgFor,\n NgClass,\n NgSwitchDefault,\n FormlyModule,\n C8yTranslatePipe,\n DatePipe\n ]\n})\nexport class AssetPropertiesItemComponent implements AssetPropertiesItem, OnChanges {\n @Input()\n key: string;\n @Input()\n value: any;\n @Input()\n label: string;\n @Input()\n type: string;\n @Input()\n file: IManagedObjectBinary;\n @Input()\n complex: AssetPropertiesItem[];\n @Input()\n isEdit: boolean;\n @Input()\n jsonSchema: JSONSchema7;\n\n form: FormGroup;\n fields: FormlyFieldConfig[];\n model: any;\n previewImage;\n\n constructor(\n private alert: AlertService,\n private c8yJsonSchemaService: C8yJSONSchema,\n public filesService: FilesService\n ) {}\n\n async ngOnChanges(changes: SimpleChanges): Promise<void> {\n if (changes.isEdit) {\n this.resolveJsonSchema();\n await this.resolveFile();\n }\n }\n\n private async resolveFile() {\n if (this.file) {\n try {\n if (this.filesService.fileNamesHaveValidExtension(this.file.name, 'image')) {\n const imageFile = await this.filesService.getFile(this.file);\n this.previewImage = await this.getPreviewIfImage(imageFile);\n }\n } catch (ex) {\n this.alert.danger(gettext('File could not be loaded.'));\n }\n }\n }\n\n private formComplexPropsValue() {\n const complexProps = {};\n this.complex.forEach(complexObj => {\n if (complexObj.file) {\n complexProps[complexObj.key] = complexObj.value;\n } else {\n complexProps[complexObj.key] = this.value[complexObj.key];\n }\n });\n return complexProps;\n }\n\n private getModel() {\n if (this.complex && this.complex.length > 0) {\n return {\n [this.key]: this.formComplexPropsValue()\n };\n }\n return {\n [this.key]: clone(this.value)\n };\n }\n\n private resolveJsonSchema() {\n if (this.jsonSchema) {\n const fieldConfig = this.c8yJsonSchemaService.toFieldConfig(this.jsonSchema, this.jsonSchema);\n if (this.complex && this.complex.length > 0) {\n const orderedFieldConfig = sortBy(fieldConfig.fieldGroup[0].fieldGroup, 'order');\n fieldConfig.fieldGroup[0].fieldGroup = orderedFieldConfig;\n }\n this.form = new FormGroup({});\n this.fields = [fieldConfig];\n this.model = this.getModel();\n }\n }\n\n private async getPreviewIfImage(imageFile: File) {\n return this.filesService.toBase64(imageFile);\n }\n}\n","<ng-container [ngSwitch]=\"type\" *ngIf=\"!isEdit\">\n <ng-container *ngSwitchCase=\"'date'\">\n {{ (value | c8yDate: 'fullDate') || ('Undefined' | translate) }}\n </ng-container>\n <ng-container *ngSwitchCase=\"'file'\">\n <ng-container *ngIf=\"file\">\n <img *ngIf=\"previewImage\" [src]=\"previewImage\" class=\"img-responsive\" />\n <button\n *ngIf=\"!previewImage\"\n (click)=\"filesService.download(file)\"\n type=\"button\"\n title=\"{{ 'Download' | translate }} {{ file.name }}\"\n class=\"btn btn-clean text-truncate p-0\"\n >\n {{ file.name }}\n </button>\n </ng-container>\n <ng-container *ngIf=\"!file\">\n {{ 'No file attached.' | translate }}\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'object'\">\n <ul class=\"list-unstyled c8y-custom-properties\">\n <li\n *ngFor=\"let prop of complex; let i = index\"\n [ngClass]=\"{ 'separator-top-bottom': i === 0, 'separator-bottom': i > 0 }\"\n class=\"p-t-4 p-b-4 d-flex text-nowrap\"\n >\n <label\n class=\"small m-b-0 m-r-8 text-truncate\"\n title=\"{{ prop.label | translate }}\"\n [ngClass]=\"{ 'a-s-start': prop.file }\"\n >\n {{ prop.label | translate }}\n </label>\n <span class=\"m-l-auto\" style=\"max-width: {{ prop.file ? '50%' : '100%' }}; min-width:0;\">\n <c8y-asset-properties-item\n [file]=\"prop.file\"\n [key]=\"prop.key\"\n [type]=\"prop.type\"\n [value]=\"prop.value\"\n ></c8y-asset-properties-item>\n </span>\n </li>\n </ul>\n </ng-container>\n <!--\n <ng-container *ngSwitchCase=\"'boolean'\">\n <input type=\"checkbox\" [checked]=\"value\" [disabled]=\"true\" />\n </ng-container>\n -->\n <ng-container *ngSwitchCase=\"type === 'number' || type === 'boolean' ? type : ''\">\n <p class=\"text-truncate\" title=\"{{ value != null ? value : ('Undefined' | translate) }}\">\n {{ value != null ? value : ('Undefined' | translate) }}\n </p>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <p class=\"text-truncate\" title=\"{{ (value | translate) || ('Undefined' | translate) }}\">\n {{ (value | translate) || ('Undefined' | translate) }}\n </p>\n </ng-container>\n</ng-container>\n<formly-form *ngIf=\"isEdit\" [form]=\"form\" [fields]=\"fields\" [model]=\"model\"></formly-form>\n","function isFullScreenEnabled(element) {\n const doc: any = element;\n return !!(\n doc.fullscreenElement ||\n doc.mozFullScreenElement ||\n doc.webkitFullscreenElement ||\n doc.msFullscreenElement\n );\n}\n\nexport function toggleFullscreen(element) {\n const elem = element as any;\n const doc = element as any;\n if (!isFullScreenEnabled(element)) {\n if (elem.requestFullscreen) {\n elem.requestFullscreen();\n } else if (elem.msRequestFullscreen) {\n elem.msRequestFullscreen();\n } else if (elem.mozRequestFullScreen) {\n elem.mozRequestFullScreen();\n } else if (elem.webkitRequestFullscreen) {\n elem.webkitRequestFullscreen((Element as any).ALLOW_KEYBOARD_INPUT);\n }\n } else if (doc.exitFullscreen) {\n doc.exitFullscreen();\n } else if (doc.msExitFullscreen) {\n doc.msExitFullscreen();\n } else if (doc.mozCancelFullScreen) {\n doc.mozCancelFullScreen();\n } else if (doc.webkitExitFullscreen) {\n doc.webkitExitFullscreen();\n }\n}\n","import {\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport * as L from 'leaflet';\nimport {\n MapComponent,\n MapConfig,\n MapService,\n PositionManagedObject,\n defaultMapConfig,\n getC8yMarker\n} from '@c8y/ngx-components/map';\nimport { FormArray, FormGroup } from '@angular/forms';\nimport { IManagedObject } from '@c8y/client';\nimport { ActivatedRoute } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { toggleFullscreen } from '../fullscreen.util';\nimport { isNumber } from 'lodash-es';\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 { NgIf, NgFor, 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 NgIf,\n LoadingComponent,\n NgFor,\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 const assetType$ = this.assetTypes.getAssetTypeByName$(this.asset.type);\n this.assetType = await firstValueFrom(assetType$);\n try {\n this.properties = this.keepOrder(\n this.assetType?.c8y_IsAssetType?.properties,\n this.properties\n );\n } catch (ex) {\n console.warn(ex);\n }\n this.customProperties = await this.resolveCustomProperties(this.properties);\n this.isLoading = false;\n }\n\n async resolveCustomProperties(managedObjects: IManagedObject[]) {\n const properties = [];\n for (const mo of managedObjects) {\n if (mo.c8y_JsonSchema) {\n const [item] = await this.parseItem(mo, mo.c8y_JsonSchema.properties, this.asset);\n this.setItemRequired(item, mo);\n this.updatePositionKeyLabel(item);\n properties.push(item);\n }\n }\n return properties;\n }\n\n deleteTitleFromMOJsonSchema(mo: IManagedObject) {\n const schemaProperties = mo?.c8y_JsonSchema?.properties;\n const property = Object.keys(schemaProperties || {})[0];\n delete (mo?.c8y_JsonSchema?.properties[property] || {}).title;\n }\n\n /**\n * This method is used to order the complex properties in the order specified by the user in asset properties screen.\n * @param mo - Managed object of the complex property associated with the asset.\n */\n orderComplexProperties(mo: IManagedObject) {\n const complexProperties = mo.c8y_JsonSchema.properties[mo.name]?.['properties'];\n const keyValuesArray = toPairs(complexProperties);\n const orderedProperties = sortBy(keyValuesArray, ([, value]) => value.order);\n mo.c8y_JsonSchema.properties[mo.name]['properties'] = fromPairs(orderedProperties);\n }\n\n async parseItem(mo: IManagedObject, properties, asset): Promise<AssetPropertiesItem[]> {\n if (!asset) {\n return [];\n }\n const keys = Object.keys(properties);\n const items: AssetPropertiesItem[] = [];\n\n for (const key of keys) {\n const type = properties[key].type;\n const title = properties[key].title;\n let value = this.getTypeValue(type, asset[key]);\n let file;\n if (type === 'file' && value) {\n const fileId = typeof value === 'object' ? value[0]?.file?.id : value;\n const fileData = await this.getFileManagedObject(fileId);\n file = fileData;\n value = [fileData];\n } else if (type === 'date') {\n const valueDate = new Date(value);\n value = !isNaN(valueDate.getTime()) ? valueDate : '';\n }\n if (type === 'object') {\n // remove title to avoid excessive property name on asset complex properties form\n this.deleteTitleFromMOJsonSchema(mo);\n this.orderComplexProperties(mo);\n if (!value) {\n value = {};\n for (const prop in properties[key].properties) {\n value[prop] = this.getTypeValue(properties[key].properties[prop].type, null);\n }\n }\n }\n items.push({\n key,\n value,\n label: title || mo.label,\n type,\n description: mo.description,\n file,\n complex:\n type === 'object'\n ? await this.parseItem(mo, properties[key].properties, value)\n : undefined,\n isEdit: false,\n jsonSchema: mo.c8y_JsonSchema\n });\n }\n return items;\n }\n\n toggleEdit(prop: AssetPropertiesItem) {\n prop.isEdit = !prop.isEdit;\n }\n\n async getFileManagedObject(id: string) {\n try {\n const { data } = await this.inventory.detail(id);\n return data;\n } catch (ex) {\n this.alert.addServerFailure(ex);\n }\n }\n\n async save(propertyValue, prop: AssetPropertiesItem): Promise<void> {\n try {\n if (prop.type === 'object') {\n this.updateUndefinedToPropTypeValue(prop, propertyValue[prop.key]);\n } else {\n this.updateUndefinedToPropTypeValue(prop, propertyValue);\n }\n\n propertyValue = await this.uploadFiles(propertyValue, prop.value);\n\n // Avoid making a PUT request containing just the id, as response body might be incomplete\n const hasValues = Object.values(propertyValue).some(value => value !== undefined);\n if (!hasValues) {\n this.toggleEdit(prop);\n return;\n }\n const updatedAsset = { id: this.asset.id, ...propertyValue };\n const { data } = await this.inventory.update(updatedAsset);\n this.toggleEdit(prop);\n this.asset = data;\n this.assetChange.emit(this.asset);\n await this.loadAsset();\n this.alert.success(gettext('Asset properties updated.'));\n } catch (ex) {\n this.alert.addServerFailure(ex);\n this.toggleEdit(prop);\n }\n }\n\n private updateUndefinedToPropTypeValue(prop, propertyValue) {\n for (const [key, value] of Object.entries(propertyValue)) {\n const property = prop.complex ? find(prop.complex, { key: key }) : prop;\n propertyValue[key] = this.getTypeValue(property.type, value);\n }\n }\n\n private getTypeValue(propType: string, value) {\n if (value || (propType === 'boolean' && value !== undefined)) return value;\n\n switch (propType) {\n case 'number':\n case 'boolean':\n return value || value === 0 ? value : null;\n\n default:\n return '';\n }\n }\n\n private keepOrder(correctOrderedIds, properties) {\n const orderedProperties = correctOrderedIds.map(({ id }) => {\n const foundProperty = properties.find(property => property.id === id);\n if (!foundProperty) {\n throw new Error('Custom property mismatch');\n }\n return foundProperty;\n });\n return orderedProperties;\n }\n\n private async uploadFiles(model: object, moId?: IManagedObjectBinary[]): Promise<object> {\n const keys = Object.keys(model);\n for (const key of keys) {\n if (Array.isArray(model[key]) && model[key][0]?.file instanceof File) {\n try {\n const upload = await this.inventoryBinary.create(model[key][0].file);\n try {\n if (moId && moId[0]) {\n await this.inventory.childAdditionsRemove(moId[0], this.asset.id);\n }\n } catch (ex) {\n throw ex;\n }\n model[key] = upload.data.id;\n await this.inventory.childAdditionsAdd(upload.data.id, this.asset.id);\n } catch (ex) {\n throw ex;\n }\n }\n }\n return model;\n }\n\n private 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?.properties.find(\n p => p.id === mo.id\n )?.isRequired;\n if (!isAssetPropertyRequired) {\n return;\n }\n const isComplexProperty = !!item?.complex?.length;\n if (isComplexProperty) {\n const complexProperty = item.jsonSchema?.properties?.[mo.c8y_JsonSchema.key] as JSONSchema7;\n complexProperty.required = item.complex.map(({ key }) => key);\n } else {\n item.jsonSchema.required = [mo.c8y_JsonSchema.key];\n }\n }\n}\n","<ng-container>\n <div class=\"card-header bg-inherit separator sticky-top\">\n <h1\n class=\"card-title p-t-4 p-b-4\"\n ngNonBindable\n translate\n [translateParams]=\"{ label: assetType?.label || '' | translate }\"\n >\n {{ label }} properties\n </h1>\n </div>\n <div class=\"card-block\">\n <div\n class=\"text-center\"\n *ngIf=\"isLoading\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <ng-container *ngIf=\"!isLoading\">\n <div\n class=\"card m-b-8\"\n title=\"{{ prop.description | translate }}\"\n *ngFor=\"let prop of customProperties\"\n [ngClass]=\"{ 'card-highlight': prop.isEdit }\"\n >\n <div\n class=\"card-block\"\n [ngClass]=\"{ 'p-b-0': prop.isEdit }\"\n >\n <div\n class=\"d-flex p-b-8 a-i-center\"\n *ngIf=\"!prop.isEdit\"\n >\n <p\n class=\"text-medium text-truncate\"\n title=\"{{ prop?.label | translate }}\"\n >\n {{ prop?.label | translate }}\n </p>\n <button\n class=\"btn btn-dot m-l-auto text-12\"\n [attr.aria-label]=\"'Edit' | translate\"\n tooltip=\"{{ 'Edit' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"toggleEdit(prop)\"\n >\n <i c8yIcon=\"pencil\"></i>\n </button>\n </div>\n <c8y-asset-properties-item\n #assetProps\n [file]=\"prop.file\"\n [key]=\"prop.key\"\n [type]=\"prop.type\"\n [value]=\"prop.value\"\n [complex]=\"prop.complex\"\n [isEdit]=\"prop.isEdit\"\n [jsonSchema]=\"prop.jsonSchema\"\n ></c8y-asset-properties-item>\n <div *ngIf=\"prop.key === POSITION_PROPERTY_KEY\">\n <c8y-asset-location\n [locationMO]=\"asset\"\n [isEdit]=\"prop.isEdit\"\n [form]=\"assetProps.form\"\n ></c8y-asset-location>\n </div>\n </div>\n <div\n class=\"card-footer p-t-0\"\n *ngIf=\"prop.isEdit\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"toggleEdit(prop)\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n [disabled]=\"!assetProps?.form?.valid || !assetProps?.form?.dirty\"\n (click)=\"save(assetProps.form.value, prop)\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </ng-container>\n </div>\n</ng-container>\n","import { InjectionToken } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/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 { NgIf, NgFor, 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 NgIf,\n FormsModule,\n FormGroupComponent,\n C8yTranslateDirective,\n RequiredInputPlaceholderDirective,\n ProductExperienceDirective,\n TextareaAutoresizeDirective,\n BsDropdownDirective,\n BsDropdownToggleDirective,\n PopoverDirective,\n BsDropdownMenuDirective,\n NgFor,\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 private readonly GROUP_UPDATED_MSG = gettext('Group updated.');\n private allDevicesGridColumns: Column[];\n private destroyed$ = new Subject<void>();\n\n constructor(\n private inventory: InventoryService,\n private subAssetsService: SubAssetsService,\n private smartGroupsService: SmartGroupsService,\n private alertService: AlertService,\n private modalService: ModalService,\n private assetNodeService: AssetNodeService,\n private assetType: AssetTypesRealtimeService,\n private deviceListExtensionService: DeviceListExtensionService,\n @Inject(SUB_ASSETS_CONFIG) public moduleConfig: SubAssetsConfig\n ) {\n this.deviceListExtensionService.items$.pipe(takeUntil(this.destroyed$)).subscribe(columns => {\n this.allDevicesGridColumns = columns;\n });\n }\n\n async ngOnChanges(changes: SimpleChanges) {\n if (changes.group) {\n const { name, c8y_Notes } = this.group;\n this.groupInfoModel = { name, c8y_Notes };\n this.canEdit = await this.subAssetsService.canEditGroup(this.group);\n this.groupIcon = await this.assetNodeService.icon(this.group);\n this.smartGroupFilter = this.group.c8y_DeviceQueryString;\n this.columnsWithFilter = this.group.c8y_DeviceColumnsConfig?.columns\n ?.filter(col => !!col.filter)\n .map(col => ({\n ...col,\n externalFilterQuery: col.filter.externalFilterQuery,\n ...this.withPropsFromGridColumn(col)\n }));\n this.label = this.assetNodeService.isAsset(this.group)\n ? (await firstValueFrom(this.assetType.getAssetTypeByName$(this.group.type))).label\n : gettext('Group');\n }\n }\n\n isSmartGroup() {\n return this.subAssetsService.isSmartGroup(this.group);\n }\n\n async update(partialGroup: Partial<IManagedObject>) {\n try {\n const isSmartGroup: boolean = this.subAssetsService.isSmartGroup(this.group);\n const updatedGroup = isSmartGroup\n ? await this.updateSmartGroup(partialGroup)\n : await this.updateGroup(partialGroup);\n\n this.group = updatedGroup;\n this.groupChange.emit(this.group);\n this.alertService.success(this.GROUP_UPDATED_MSG);\n } catch (error) {\n this.alertService.addServerFailure(error);\n }\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n private withPropsFromGridColumn(column: Column): Partial<Column> {\n if (column.custom) {\n const col = new CustomColumn();\n return {\n filteringConfig: col.filteringConfig\n };\n } else {\n return pick(\n this.allDevicesGridColumns.find(col => col.name === column.name),\n 'filteringConfig',\n 'header'\n );\n }\n }\n\n private async updateGroup(partialGroup: Partial<IManagedObject>) {\n const { id } = this.group;\n const group: Partial<IManagedObject> = { id, ...partialGroup };\n\n return (await this.inventory.update(group)).data;\n }\n\n private async updateSmartGroup(partialGroup: Partial<IManagedObject>) {\n const { id } = this.group;\n const { c8y_DeviceQueryString } = partialGroup;\n const group: Partial<IManagedObject> = { id, ...partialGroup };\n\n if (!c8y_DeviceQueryString) {\n return (await this.smartGroupsService.update(group)).data;\n }\n\n try {\n const modalBody = gettext(\n 'You are about to change the smart group filter. Do you want to proceed?'\n );\n const title = gettext('Smart group filter');\n await this.modalService.confirm(title, modalBody, Status.WARNING, {\n ok: gettext('Save'),\n cancel: gettext('Cancel')\n });\n\n await this.isQueryExecutable(c8y_DeviceQueryString);\n } catch (error) {\n throw Error(error);\n }\n return (await this.smartGroupsService.update(group)).data;\n }\n\n private async isQueryExecutable(query: string) {\n try {\n const filter = { q: query };\n await this.inventory.list(filter);\n } catch (error) {\n throw Error(error);\n }\n }\n}\n","<div class=\"bg-level-1 separator-bottom\">\n <div class=\"card-block p-t-24 p-b-24 large-padding\">\n <div class=\"content-flex-70\">\n <div class=\"text-center col-1\">\n <i\n class=\"c8y-icon-duocolor icon-48\"\n [c8yIcon]=\"groupIcon\"\n ></i>\n <p>\n <small\n class=\"label label-info\"\n *ngIf=\"group.c8y_IsDynamicGroup\"\n >\n {{ 'Smart group' | translate }}\n </small>\n <small\n class=\"label label-info text-truncate d-inline-block\"\n title=\"{{ label | translate }}\"\n *ngIf=\"!group.c8y_IsDynamicGroup && !group.com_cumulocity_model_Agent\"\n >\n {{ label | translate }}\n </small>\n <small\n class=\"label label-info\"\n *ngIf=\"group.com_cumulocity_model_Agent\"\n >\n {{ 'Remote group' | translate }}\n </small>\n </p>\n </div>\n\n <div class=\"flex-grow col-10\">\n <div class=\"content-flex-80\">\n <div class=\"col-9\">\n <form #groupNameForm=\"ngForm\">\n <c8y-form-group class=\"form-group-lg m-b-0\">\n <label\n class=\"sr-only\"\n for=\"groupName\"\n translate\n >\n Name\n </label>\n <p\n class=\"form-control-static\"\n *ngIf=\"!canEdit\"\n >\n {{ groupInfoModel.name }}\n </p>\n <div\n class=\"input-group input-group-lg input-group-editable\"\n *ngIf=\"canEdit\"\n >\n <input\n class=\"form-control\"\n title=\"{{ groupInfoModel.name }}\"\n id=\"groupName\"\n placeholder=\"{{ 'e.g. My group' | translate }}\"\n name=\"name\"\n type=\"text\"\n required\n [(ngModel)]=\"groupInfoModel.name\"\n size=\"{{ groupInfoModel.name.length + 2 }}\"\n maxlength=\"254\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.GROUP_INFO.COMPONENTS.GROUP_INFO,\n action: PRODUCT_EXPERIENCE.GROUP_INFO.ACTIONS.EDIT,\n property: PRODUCT_EXPERIENCE.GROUP_INFO.PROPERTIES.NAME\n }\"\n />\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n [disabled]=\"groupNameForm.form.invalid\"\n (click)=\"\n update({ name: groupInfoModel.name }); groupNameForm.form.markAsPristine()\n \"\n [actionName]=\"'groupInfo:EditedNameSaved'\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.GROUP_INFO.COMPONENTS.GROUP_INFO,\n result: PRODUCT_EXPERIENCE.GROUP_INFO.RESULTS.EDIT_SAVED,\n property: PRODUCT_EXPERIENCE.GROUP_INFO.PROPERTIES.NAME\n }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </c8y-form-group>\n </form>\n <form #groupDescriptionForm=\"ngForm\">\n <label\n class=\"sr-only\"\n for=\"description\"\n translate\n >\n Description\n </label>\n <p\n class=\"form-control-static\"\n *ngIf=\"!canEdit\"\n >\n {{ groupInfoModel.c8y_Notes }}\n </p>\n <div\n class=\"input-group input-group-editable\"\n *ngIf=\"canEdit\"\n >\n <textarea\n class=\"form-control no-resize\"\n title=\"{{\n groupInfoModel.c8y_Notes\n ? groupInfoModel.c8y_Notes\n : ('e.g. My description' | translate)\n }}\"\n id=\"description\"\n placeholder=\"{{ 'e.g. My description' | translate }}\"\n name=\"description\"\n c8y-textarea-autoresize\n [(ngModel)]=\"groupInfoModel.c8y_Notes\"\n cols=\"{{ groupInfoModel.c8y_Notes ? groupInfoModel.c8y_Notes.length : 25 }}\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.GROUP_INFO.COMPONENTS.GROUP_INFO,\n action: PRODUCT_EXPERIENCE.GROUP_INFO.ACTIONS.EDIT,\n property: PRODUCT_EXPERIENCE.GROUP_INFO.PROPERTIES.DESCRIPTION\n }\"\n ></textarea>\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n [disabled]=\"groupDescriptionForm.form.invalid\"\n (click)=\"\n update({ c8y_Notes: groupInfoModel.c8y_Notes });\n groupDescriptionForm.form.markAsPristine()\n \"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.GROUP_INFO.COMPONENTS.GROUP_INFO,\n result: PRODUCT_EXPERIENCE.GROUP_INFO.RESULTS.EDIT_SAVED,\n property: PRODUCT_EXPERIENCE.GROUP_INFO.PROPERTIES.DESCRIPTION\n }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </form>\n\n <div\n class=\"dropdown m-t-8\"\n placement=\"bottom left\"\n container=\"body\"\n type=\"button\"\n dropdown\n *ngIf=\"isSmartGroup()\"\n #ddFilters=\"bs-dropdown\"\n [insideClick]=\"true\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Smart group filters' | translate }}\"\n aria-haspopup=\"true\"\n dropdownToggle\n data-cy=\"c8y-data-grid--filters\"\n [disabled]=\"columnsWithFilter?.length === 0\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"filter\"\n ></i>\n <span>{{ 'Smart group filters' | translate }}</span>\n <span\n class=\"p-relative p-l-4 p-r-16\"\n *ngIf=\"columnsWithFilter?.length > 0\"\n >\n <span class=\"badge badge-system p-absolute\" data-cy=\"group-info--filter-number\">\n {{ columnsWithFilter?.length }}\n </span>\n </span>\n </button>\n <button\n class=\"btn-help btn-help--sm m-r-4\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ filterMsg | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n data-cy=\"group-info--help-button\"\n container=\"body\"\n type=\"button\"\n ></button>\n <div\n class=\"dropdown-menu\"\n *dropdownMenu\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"data-grid__dropdown bg-level-0\">\n <ul class=\"list-unstyled m-0\">\n <li\n *ngFor=\"let column of columnsWithFilter; let last = last\"\n [ngClass]=\"{ 'separator-bottom': !last }\"\n >\n <ng-container>\n <div\n class=\"dropdown-header sticky-top text-truncate no-border-top p-b-0\"\n title=\"{{ (column.header | translate) || column.name }}\"\n >\n <label>\n {{ (column.header | translate) || column.name }}\n </label>\n </div>\n <div\n class=\"list-group-item borderless d-flex d-col\"\n *ngFor=\"\n let groupedFilterChips of column\n | mapToFilterChips\n | async\n | groupedFilterChips;\n let first = first\n \"\n [ngClass]=\"{ 'p-t-0': first }\"\n >\n <p\n class=\"small p-b-4\"\n *ngIf=\"groupedFilterChips.label\"\n >\n {{ groupedFilterChips.label | translate }}\n </p>\n <div class=\"d-flex a-i-center gap-4 flex-wrap\">\n <span\n class=\"tag tag--info chip\"\n data-cy=\"group-info--grouped-filter-chip\"\n *ngFor=\"let chip of groupedFilterChips.chips\"\n >\n {{ chip.displayValue | translate }}\n </span>\n </div>\n </div>\n </ng-container>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n <div class=\"flex-grow\">\n <ul class=\"list-unstyled small\">\n <li class=\"p-t-4 p-b-4 d-flex separator-top-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">{{ 'Created' | translate }}</label>\n <span class=\"m-l-auto\">{{ group.creationTime | c8yDate }}</span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">{{ 'Last updated' | translate }}</label>\n <span class=\"m-l-auto\">{{ group.lastUpdated | c8yDate }}</span>\n </li>\n <li\n class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\"\n *ngIf=\"group.com_cumulocity_model_Agent\"\n >\n <label class=\"small m-b-0 m-r-8\">{{ 'Status' | translate }}</label>\n <span\n class=\"m-l-auto\"\n *ngIf=\"group.c8y_BrokerSource\"\n >\n {{ group.c8y_BrokerSource.status }}\n </span>\n <span\n class=\"m-l-auto\"\n *ngIf=\"!group.c8y_BrokerSource\"\n >\n {{ 'Offline' | translate }}\n </span>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { Component, EventEmitter, Inject, OnDestroy, OnInit, signal } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\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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"}
|
|
1
|
+
{"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$ = this.assetTypes.getAssetTypeByName$(group.type);\n const assetType = await firstValueFrom(assetType$);\n if (assetType) {\n const { data } = await this.inventoryService.childAdditionsList(assetType, {\n pageSize: 2000,\n query: \"$filter=(has('c8y_IsAssetProperty'))\"\n });\n return data;\n }\n return [];\n }\n\n getDefaultColumns(_filterable = true, _sortable = true): Column[] {\n const defaultColumns = [\n new AssetTypeGridColumn({ sortOrder: 'desc' }),\n new NameDeviceGridColumn({ sortOrder: 'asc' }),\n new ModelDeviceGridColumn(),\n new SerialNumberDeviceGridColumn({ visible: false }),\n new RegistrationDateDeviceGridColumn({ visible: false }),\n new SystemIdDeviceGridColumn({ visible: false }),\n new ImeiDeviceGridColumn({ visible: false }),\n new AlarmsDeviceGridColumn()\n ];\n return defaultColumns;\n }\n\n getDefaultPagination(): Pagination {\n return {\n pageSize: 25,\n currentPage: 1\n };\n }\n\n getDefaultActionControls(): ActionControl[] {\n return [];\n }\n\n async unassignAsset(asset: IManagedObject, parentRef: IManagedObject) {\n const { id: assetId } = asset;\n const { id: parentId } = parentRef;\n\n if (this.isDevice(asset)) {\n try {\n await this.inventoryService.childAssetsRemove(assetId, parentId);\n const alertMessage = this.translateService.instant(gettext('Device unassigned.'));\n this.alertService.success(alertMessage);\n } catch (error) {\n const alertMessage = this.translateService.instant(gettext('Could not unassign device.'));\n this.alertService.danger(alertMessage, error);\n }\n await this.deactivateSmartrulesForAsset(asset, parentRef);\n }\n }\n\n isDevice(asset: IManagedObject): boolean {\n return (\n !asset.hasOwnProperty(this.IS_DEVICE_GROUP_FRAGMENT) &&\n !asset.hasOwnProperty(this.IS_DYNAMIC_GROUP_FRAGMENT)\n );\n }\n\n async deleteAsset(asset: IManagedObject, parentRef: IManagedObject, params = {}) {\n const isGroup =\n asset.hasOwnProperty(this.IS_DEVICE_GROUP_FRAGMENT) ||\n this.smartGroupsService.isSmartGroup(asset);\n\n if (isGroup) {\n await this.deleteGroup(asset, params);\n } else {\n await this.deleteDevice(asset, params);\n }\n\n if (parentRef && !this.smartGroupsService.isSmartGroup(asset)) {\n await this.deactivateSmartrulesForAsset(asset, parentRef);\n }\n }\n\n shouldShowWithDeviceUserCheckbox(asset: IManagedObject): boolean {\n const { owner, c8y_IsDevice: isRootDevice } = asset;\n const hasDeviceUserAsOwner = asset.owner && this.isDeviceUser(owner);\n\n return Boolean(isRootDevice && hasDeviceUserAsOwner);\n }\n\n getDefaultBulkActionControls(): BulkActionControl[] {\n return [];\n }\n\n async getData(\n columns: Column[],\n pagination: Pagination,\n parentReference?: IManagedObject,\n baseQuery: any = {},\n text: string = null\n ) {\n const isRoot = !parentReference;\n 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 ColumnDirective,\n C8yTranslatePipe\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\nimport { NgFor } from '@angular/common';\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 NgFor,\n ColumnDirective,\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() {\n return this.isRootGroup && this.subAssetsGridService.isUsingInventoryRoles()\n ? 'auto'\n : undefined;\n }\n\n @Input('displayOptions')\n set _displayOptions(displayOptions) {\n this.displayOptions = { ...this.displayOptions, ...displayOptions };\n }\n\n constructor(\n public subAssetsGridService: SubAssetsService,\n private bsModalService: BsModalService,\n private smartGroupsService: SmartGroupsService,\n private deviceListExtensionService: DeviceListExtensionService,\n private assetNodeService: AssetNodeService\n ) {\n this.serverSideDataCallback = this.onDataSourceModifier.bind(this);\n }\n\n getGridConfigContext(): SubAssetsGridConfigContext {\n if (!!this.columnsConfigKey) {\n return { key: this.columnsConfigKey, group: this.parentGroup };\n }\n }\n\n ngOnInit() {\n const isDynamicGroup =\n !!this.parentGroup && this.assetNodeService.isDynamicGroup(this.parentGroup);\n if (!this.isRootGroup) {\n (isDynamicGroup\n ? this.deviceListExtensionService.items$\n : of(this.subAssetsGridService.getDefaultColumns(this.filterable, this.sortable))\n )\n .pipe(takeUntil(this.destroyed$))\n .subscribe(columns => (this.columns = columns));\n }\n if (!this.filterable || !this.sortable) {\n this.displayOptions.filter = this.filterable;\n this.columns.forEach(column => {\n column.filterable = this.filterable;\n column.sortable = this.sortable;\n });\n }\n this.setActionControls();\n this.showSearch = isDynamicGroup || !this.parentGroup;\n }\n\n setActionControls() {\n const actionControls: ActionControl[] = [];\n\n const unassignAction: ActionControl = {\n type: 'UNASSIGN',\n icon: 'unlink',\n text: gettext('Unassign'),\n priority: 1000,\n callback: (asset: Row) => this.onUnassignAsset(asset as IManagedObject, this.parentGroup),\n showIf: (asset: Row) =>\n this.subAssetsGridService.isDevice(asset as IManagedObject) &&\n !this.subAssetsGridService.isSmartGroup(this.parentGroup as IManagedObject)\n };\n\n actionControls.push(unassignAction);\n\n const deleteAction: ActionControl = {\n type: BuiltInActionType.Delete,\n priority: -Infinity,\n callback: (asset: Row) => this.onDeleteAsset(asset as IManagedObject, this.parentGroup),\n showIf: (asset: Row) => {\n if (this.smartGroupsService.isSmartGroup(asset as IManagedObject)) {\n return this.subAssetsGridService.canDeleteSmartGroup();\n }\n\n return true;\n }\n };\n\n actionControls.push(deleteAction);\n\n if (!this.actionControls) {\n this.actionControls = actionControls;\n }\n }\n\n onUnassignAsset(asset: IManagedObject, parentRef: IManagedObject) {\n const initialState = {\n asset\n };\n const modalRef = this.bsModalService.show(UnassignModalComponent, { initialState });\n\n modalRef.content.closeSubject.subscribe(async (result: boolean) => {\n if (result) {\n await this.subAssetsGridService.unassignAsset(asset, parentRef);\n this.refresh.emit();\n }\n });\n }\n\n async onDeleteAsset(asset: IManagedObject, parentRef: IManagedObject) {\n const initialState = {\n showWithDeviceUserCheckbox: this.subAssetsGridService.shouldShowWithDeviceUserCheckbox(asset),\n asset,\n showWithCascadeCheckbox: !this.smartGroupsService.isSmartGroup(asset)\n };\n\n const modalRef = this.bsModalService.show(DeleteAssetsModalComponent, { initialState });\n\n modalRef.content.closeSubject.subscribe(async (result: DeleteModalCheckboxes) => {\n if (result) {\n await this.subAssetsGridService.deleteAsset(asset, parentRef, result);\n if (result.cascade) {\n this.showCounterWarning = true;\n }\n this.refresh.emit();\n }\n });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.parentGroup && !changes.parentGroup.firstChange) {\n this.dataGrid.reload();\n }\n }\n\n trackByName(_index, column: Column): string {\n return column.name;\n }\n\n onReload() {\n this.assetNodeService.rootNode.refresh();\n }\n\n async onDataSourceModifier(\n dataSourceModifier: DataSourceModifier\n ): Promise<ServerSideDataResult> {\n const promises = [];\n let counters;\n\n promises.push(\n this.subAssetsGridService.getData(\n dataSourceModifier.columns,\n dataSourceModifier.pagination,\n this.parentGroup,\n this.baseQuery,\n dataSourceModifier.searchText\n )\n );\n\n promises.push(this.subAssetsGridService.getTotal(this.parentGroup, this.baseQuery));\n promises.push(\n this.subAssetsGridService.getCount(\n dataSourceModifier.columns,\n dataSourceModifier.pagination,\n this.parentGroup,\n this.baseQuery,\n dataSourceModifier.searchText\n )\n );\n\n const [dataResponse, size, filteredSize] = await Promise.all(promises);\n if (!counters) {\n counters = {\n size,\n filteredSize\n };\n }\n this.onColumnsChange.emit(dataSourceModifier.columns);\n\n return {\n res: dataResponse.res,\n data: dataResponse.data,\n paging: dataResponse.paging,\n ...counters\n };\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n}\n","<c8y-data-grid\n [title]=\"title\"\n [loadingItemsLabel]=\"loadingItemsLabel\"\n [columns]=\"columns\"\n [pagination]=\"pagination\"\n [actionControls]=\"actionControls\"\n [selectable]=\"selectable\"\n [bulkActionControls]=\"bulkActionControls\"\n [serverSideDataCallback]=\"serverSideDataCallback\"\n [infiniteScroll]=\"getInfiniteScrollMode\"\n [showCounterWarning]=\"showCounterWarning\"\n [refresh]=\"refresh\"\n [showSearch]=\"showSearch\"\n [displayOptions]=\"displayOptions\"\n (itemsSelect)=\"itemsSelect.emit($event)\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n (onReload)=\"onReload()\"\n>\n <c8y-ui-empty-state\n [icon]=\"'c8y-group-add'\"\n [title]=\"stats?.size > 0 ? (noResultsMessage | translate) : (noDataMessage | translate)\"\n [subtitle]=\"stats?.size > 0 ? (noResultsSubtitle | translate) : (emptyStateText | translate)\"\n *emptyStateContext=\"let stats\"\n [horizontal]=\"true\"\n ></c8y-ui-empty-state>\n\n <ng-container *ngFor=\"let column of columns; trackBy: trackByName\">\n <c8y-column [name]=\"column.name\"></c8y-column>\n </ng-container>\n</c8y-data-grid>\n","import { Component, Input, Output, EventEmitter, HostListener } from '@angular/core';\nimport { 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 { NgIf, NgSwitch, NgSwitchCase, NgFor, NgClass, NgSwitchDefault } from '@angular/common';\n\n@Component({\n selector: 'c8y-asset-properties-item',\n templateUrl: './asset-properties-item.component.html',\n imports: [\n NgIf,\n NgSwitch,\n NgSwitchCase,\n NgFor,\n NgClass,\n NgSwitchDefault,\n FormlyModule,\n C8yTranslatePipe,\n DatePipe\n ]\n})\nexport class AssetPropertiesItemComponent implements AssetPropertiesItem, OnChanges {\n @Input()\n key: string;\n @Input()\n value: any;\n @Input()\n label: string;\n @Input()\n type: string;\n @Input()\n file: IManagedObjectBinary;\n @Input()\n complex: AssetPropertiesItem[];\n @Input()\n isEdit: boolean;\n @Input()\n jsonSchema: JSONSchema7;\n\n form: FormGroup;\n fields: FormlyFieldConfig[];\n model: any;\n previewImage;\n\n constructor(\n private alert: AlertService,\n private c8yJsonSchemaService: C8yJSONSchema,\n public filesService: FilesService\n ) {}\n\n async ngOnChanges(changes: SimpleChanges): Promise<void> {\n if (changes.isEdit) {\n this.resolveJsonSchema();\n await this.resolveFile();\n }\n }\n\n private async resolveFile() {\n if (this.file) {\n try {\n if (this.filesService.fileNamesHaveValidExtension(this.file.name, 'image')) {\n const imageFile = await this.filesService.getFile(this.file);\n this.previewImage = await this.getPreviewIfImage(imageFile);\n }\n } catch (ex) {\n this.alert.danger(gettext('File could not be loaded.'));\n }\n }\n }\n\n private formComplexPropsValue() {\n const complexProps = {};\n this.complex.forEach(complexObj => {\n if (complexObj.file) {\n complexProps[complexObj.key] = complexObj.value;\n } else {\n complexProps[complexObj.key] = this.value[complexObj.key];\n }\n });\n return complexProps;\n }\n\n private getModel() {\n if (this.complex && this.complex.length > 0) {\n return {\n [this.key]: this.formComplexPropsValue()\n };\n }\n return {\n [this.key]: clone(this.value)\n };\n }\n\n private resolveJsonSchema() {\n if (this.jsonSchema) {\n const fieldConfig = this.c8yJsonSchemaService.toFieldConfig(this.jsonSchema, this.jsonSchema);\n if (this.complex && this.complex.length > 0) {\n const orderedFieldConfig = sortBy(fieldConfig.fieldGroup[0].fieldGroup, 'order');\n fieldConfig.fieldGroup[0].fieldGroup = orderedFieldConfig;\n }\n this.form = new FormGroup({});\n this.fields = [fieldConfig];\n this.model = this.getModel();\n }\n }\n\n private async getPreviewIfImage(imageFile: File) {\n return this.filesService.toBase64(imageFile);\n }\n}\n","<ng-container [ngSwitch]=\"type\" *ngIf=\"!isEdit\">\n <ng-container *ngSwitchCase=\"'date'\">\n {{ (value | c8yDate: 'fullDate') || ('Undefined' | translate) }}\n </ng-container>\n <ng-container *ngSwitchCase=\"'file'\">\n <ng-container *ngIf=\"file\">\n <img *ngIf=\"previewImage\" [src]=\"previewImage\" class=\"img-responsive\" />\n <button\n *ngIf=\"!previewImage\"\n (click)=\"filesService.download(file)\"\n type=\"button\"\n title=\"{{ 'Download' | translate }} {{ file.name }}\"\n class=\"btn btn-clean text-truncate p-0\"\n >\n {{ file.name }}\n </button>\n </ng-container>\n <ng-container *ngIf=\"!file\">\n {{ 'No file attached.' | translate }}\n </ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'object'\">\n <ul class=\"list-unstyled c8y-custom-properties\">\n <li\n *ngFor=\"let prop of complex; let i = index\"\n [ngClass]=\"{ 'separator-top-bottom': i === 0, 'separator-bottom': i > 0 }\"\n class=\"p-t-4 p-b-4 d-flex text-nowrap\"\n >\n <label\n class=\"small m-b-0 m-r-8 text-truncate\"\n title=\"{{ prop.label | translate }}\"\n [ngClass]=\"{ 'a-s-start': prop.file }\"\n >\n {{ prop.label | translate }}\n </label>\n <span class=\"m-l-auto\" style=\"max-width: {{ prop.file ? '50%' : '100%' }}; min-width:0;\">\n <c8y-asset-properties-item\n [file]=\"prop.file\"\n [key]=\"prop.key\"\n [type]=\"prop.type\"\n [value]=\"prop.value\"\n ></c8y-asset-properties-item>\n </span>\n </li>\n </ul>\n </ng-container>\n <!--\n <ng-container *ngSwitchCase=\"'boolean'\">\n <input type=\"checkbox\" [checked]=\"value\" [disabled]=\"true\" />\n </ng-container>\n -->\n <ng-container *ngSwitchCase=\"type === 'number' || type === 'boolean' ? type : ''\">\n <p class=\"text-truncate\" title=\"{{ value != null ? value : ('Undefined' | translate) }}\">\n {{ value != null ? value : ('Undefined' | translate) }}\n </p>\n </ng-container>\n <ng-container *ngSwitchDefault>\n <p class=\"text-truncate\" title=\"{{ (value | translate) || ('Undefined' | translate) }}\">\n {{ (value | translate) || ('Undefined' | translate) }}\n </p>\n </ng-container>\n</ng-container>\n<formly-form *ngIf=\"isEdit\" [form]=\"form\" [fields]=\"fields\" [model]=\"model\"></formly-form>\n","function isFullScreenEnabled(element) {\n const doc: any = element;\n return !!(\n doc.fullscreenElement ||\n doc.mozFullScreenElement ||\n doc.webkitFullscreenElement ||\n doc.msFullscreenElement\n );\n}\n\nexport function toggleFullscreen(element) {\n const elem = element as any;\n const doc = element as any;\n if (!isFullScreenEnabled(element)) {\n if (elem.requestFullscreen) {\n elem.requestFullscreen();\n } else if (elem.msRequestFullscreen) {\n elem.msRequestFullscreen();\n } else if (elem.mozRequestFullScreen) {\n elem.mozRequestFullScreen();\n } else if (elem.webkitRequestFullscreen) {\n elem.webkitRequestFullscreen((Element as any).ALLOW_KEYBOARD_INPUT);\n }\n } else if (doc.exitFullscreen) {\n doc.exitFullscreen();\n } else if (doc.msExitFullscreen) {\n doc.msExitFullscreen();\n } else if (doc.mozCancelFullScreen) {\n doc.mozCancelFullScreen();\n } else if (doc.webkitExitFullscreen) {\n doc.webkitExitFullscreen();\n }\n}\n","import {\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\nimport * as L from 'leaflet';\nimport {\n MapComponent,\n MapConfig,\n MapService,\n PositionManagedObject,\n defaultMapConfig,\n getC8yMarker\n} from '@c8y/ngx-components/map';\nimport { FormArray, FormGroup } from '@angular/forms';\nimport { IManagedObject } from '@c8y/client';\nimport { ActivatedRoute } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { toggleFullscreen } from '../fullscreen.util';\nimport { isNumber } from 'lodash-es';\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 { NgIf, NgFor, 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 NgIf,\n LoadingComponent,\n NgFor,\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 const assetType$ = this.assetTypes.getAssetTypeByName$(this.asset.type);\n this.assetType = await firstValueFrom(assetType$);\n try {\n this.properties = this.keepOrder(\n this.assetType?.c8y_IsAssetType?.properties,\n this.properties\n );\n } catch (ex) {\n console.warn(ex);\n }\n this.customProperties = await this.resolveCustomProperties(this.properties);\n this.isLoading = false;\n }\n\n async resolveCustomProperties(managedObjects: IManagedObject[]) {\n const properties = [];\n for (const mo of managedObjects) {\n if (mo.c8y_JsonSchema) {\n const [item] = await this.parseItem(mo, mo.c8y_JsonSchema.properties, this.asset);\n this.setItemRequired(item, mo);\n this.updatePositionKeyLabel(item);\n properties.push(item);\n }\n }\n return properties;\n }\n\n deleteTitleFromMOJsonSchema(mo: IManagedObject) {\n const schemaProperties = mo?.c8y_JsonSchema?.properties;\n const property = Object.keys(schemaProperties || {})[0];\n delete (mo?.c8y_JsonSchema?.properties[property] || {}).title;\n }\n\n /**\n * This method is used to order the complex properties in the order specified by the user in asset properties screen.\n * @param mo - Managed object of the complex property associated with the asset.\n */\n orderComplexProperties(mo: IManagedObject) {\n const complexProperties = mo.c8y_JsonSchema.properties[mo.name]?.['properties'];\n const keyValuesArray = toPairs(complexProperties);\n const orderedProperties = sortBy(keyValuesArray, ([, value]) => value.order);\n mo.c8y_JsonSchema.properties[mo.name]['properties'] = fromPairs(orderedProperties);\n }\n\n async parseItem(mo: IManagedObject, properties, asset): Promise<AssetPropertiesItem[]> {\n if (!asset) {\n return [];\n }\n const keys = Object.keys(properties);\n const items: AssetPropertiesItem[] = [];\n\n for (const key of keys) {\n const type = properties[key].type;\n const title = properties[key].title;\n let value = this.getTypeValue(type, asset[key]);\n let file;\n if (type === 'file' && value) {\n const fileId = typeof value === 'object' ? value[0]?.file?.id : value;\n const fileData = await this.getFileManagedObject(fileId);\n file = fileData;\n value = [fileData];\n } else if (type === 'date') {\n const valueDate = new Date(value);\n value = !isNaN(valueDate.getTime()) ? valueDate : '';\n }\n if (type === 'object') {\n // remove title to avoid excessive property name on asset complex properties form\n this.deleteTitleFromMOJsonSchema(mo);\n this.orderComplexProperties(mo);\n if (!value) {\n value = {};\n for (const prop in properties[key].properties) {\n value[prop] = this.getTypeValue(properties[key].properties[prop].type, null);\n }\n }\n }\n items.push({\n key,\n value,\n label: title || mo.label,\n type,\n description: mo.description,\n file,\n complex:\n type === 'object'\n ? await this.parseItem(mo, properties[key].properties, value)\n : undefined,\n isEdit: false,\n jsonSchema: mo.c8y_JsonSchema\n });\n }\n return items;\n }\n\n toggleEdit(prop: AssetPropertiesItem) {\n prop.isEdit = !prop.isEdit;\n }\n\n async getFileManagedObject(id: string) {\n try {\n const { data } = await this.inventory.detail(id);\n return data;\n } catch (ex) {\n this.alert.addServerFailure(ex);\n }\n }\n\n async save(propertyValue, prop: AssetPropertiesItem): Promise<void> {\n try {\n if (prop.type === 'object') {\n this.updateUndefinedToPropTypeValue(prop, propertyValue[prop.key]);\n } else {\n this.updateUndefinedToPropTypeValue(prop, propertyValue);\n }\n\n propertyValue = await this.uploadFiles(propertyValue, prop.value);\n\n // Avoid making a PUT request containing just the id, as response body might be incomplete\n const hasValues = Object.values(propertyValue).some(value => value !== undefined);\n if (!hasValues) {\n this.toggleEdit(prop);\n return;\n }\n const updatedAsset = { id: this.asset.id, ...propertyValue };\n const { data } = await this.inventory.update(updatedAsset);\n this.toggleEdit(prop);\n this.asset = data;\n this.assetChange.emit(this.asset);\n await this.loadAsset();\n this.alert.success(gettext('Asset properties updated.'));\n } catch (ex) {\n this.alert.addServerFailure(ex);\n this.toggleEdit(prop);\n }\n }\n\n private updateUndefinedToPropTypeValue(prop, propertyValue) {\n for (const [key, value] of Object.entries(propertyValue)) {\n const property = prop.complex ? find(prop.complex, { key: key }) : prop;\n propertyValue[key] = this.getTypeValue(property.type, value);\n }\n }\n\n private getTypeValue(propType: string, value) {\n if (value || (propType === 'boolean' && value !== undefined)) return value;\n\n switch (propType) {\n case 'number':\n case 'boolean':\n return value || value === 0 ? value : null;\n\n default:\n return '';\n }\n }\n\n private keepOrder(correctOrderedIds, properties) {\n const orderedProperties = correctOrderedIds.map(({ id }) => {\n const foundProperty = properties.find(property => property.id === id);\n if (!foundProperty) {\n throw new Error('Custom property mismatch');\n }\n return foundProperty;\n });\n return orderedProperties;\n }\n\n private async uploadFiles(model: object, moId?: IManagedObjectBinary[]): Promise<object> {\n const keys = Object.keys(model);\n for (const key of keys) {\n if (Array.isArray(model[key]) && model[key][0]?.file instanceof File) {\n try {\n const upload = await this.inventoryBinary.create(model[key][0].file);\n try {\n if (moId && moId[0]) {\n await this.inventory.childAdditionsRemove(moId[0], this.asset.id);\n }\n } catch (ex) {\n throw ex;\n }\n model[key] = upload.data.id;\n await this.inventory.childAdditionsAdd(upload.data.id, this.asset.id);\n } catch (ex) {\n throw ex;\n }\n }\n }\n return model;\n }\n\n private 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?.properties.find(\n p => p.id === mo.id\n )?.isRequired;\n if (!isAssetPropertyRequired) {\n return;\n }\n const isComplexProperty = !!item?.complex?.length;\n if (isComplexProperty) {\n const complexProperty = item.jsonSchema?.properties?.[mo.c8y_JsonSchema.key] as JSONSchema7;\n complexProperty.required = item.complex.map(({ key }) => key);\n } else {\n item.jsonSchema.required = [mo.c8y_JsonSchema.key];\n }\n }\n}\n","<ng-container>\n <div class=\"card-header bg-inherit separator sticky-top\">\n <h1\n class=\"card-title p-t-4 p-b-4\"\n ngNonBindable\n translate\n [translateParams]=\"{ label: assetType?.label || '' | translate }\"\n >\n {{ label }} properties\n </h1>\n </div>\n <div class=\"card-block\">\n <div\n class=\"text-center\"\n *ngIf=\"isLoading\"\n >\n <c8y-loading></c8y-loading>\n </div>\n\n <ng-container *ngIf=\"!isLoading\">\n <div\n class=\"card m-b-8\"\n title=\"{{ prop.description | translate }}\"\n *ngFor=\"let prop of customProperties\"\n [ngClass]=\"{ 'card-highlight': prop.isEdit }\"\n >\n <div\n class=\"card-block\"\n [ngClass]=\"{ 'p-b-0': prop.isEdit }\"\n >\n <div\n class=\"d-flex p-b-8 a-i-center\"\n *ngIf=\"!prop.isEdit\"\n >\n <p\n class=\"text-medium text-truncate\"\n title=\"{{ prop?.label | translate }}\"\n >\n {{ prop?.label | translate }}\n </p>\n <button\n class=\"btn btn-dot m-l-auto text-12\"\n [attr.aria-label]=\"'Edit' | translate\"\n tooltip=\"{{ 'Edit' | translate }}\"\n type=\"button\"\n [delay]=\"500\"\n (click)=\"toggleEdit(prop)\"\n >\n <i c8yIcon=\"pencil\"></i>\n </button>\n </div>\n <c8y-asset-properties-item\n #assetProps\n [file]=\"prop.file\"\n [key]=\"prop.key\"\n [type]=\"prop.type\"\n [value]=\"prop.value\"\n [complex]=\"prop.complex\"\n [isEdit]=\"prop.isEdit\"\n [jsonSchema]=\"prop.jsonSchema\"\n ></c8y-asset-properties-item>\n <div *ngIf=\"prop.key === POSITION_PROPERTY_KEY\">\n <c8y-asset-location\n [locationMO]=\"asset\"\n [isEdit]=\"prop.isEdit\"\n [form]=\"assetProps.form\"\n ></c8y-asset-location>\n </div>\n </div>\n <div\n class=\"card-footer p-t-0\"\n *ngIf=\"prop.isEdit\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Cancel' | translate }}\"\n type=\"button\"\n (click)=\"toggleEdit(prop)\"\n >\n {{ 'Cancel' | translate }}\n </button>\n <button\n class=\"btn btn-primary btn-sm\"\n title=\"{{ 'Save' | translate }}\"\n type=\"button\"\n [disabled]=\"!assetProps?.form?.valid || !assetProps?.form?.dirty\"\n (click)=\"save(assetProps.form.value, prop)\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </ng-container>\n </div>\n</ng-container>\n","import { InjectionToken } from '@angular/core';\nimport { gettext } from '@c8y/ngx-components/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 { NgIf, NgFor, 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 NgIf,\n FormsModule,\n FormGroupComponent,\n C8yTranslateDirective,\n RequiredInputPlaceholderDirective,\n ProductExperienceDirective,\n TextareaAutoresizeDirective,\n BsDropdownDirective,\n BsDropdownToggleDirective,\n PopoverDirective,\n BsDropdownMenuDirective,\n NgFor,\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 private readonly GROUP_UPDATED_MSG = gettext('Group updated.');\n private allDevicesGridColumns: Column[];\n private destroyed$ = new Subject<void>();\n\n constructor(\n private inventory: InventoryService,\n private subAssetsService: SubAssetsService,\n private smartGroupsService: SmartGroupsService,\n private alertService: AlertService,\n private modalService: ModalService,\n private assetNodeService: AssetNodeService,\n private assetType: AssetTypesRealtimeService,\n private deviceListExtensionService: DeviceListExtensionService,\n @Inject(SUB_ASSETS_CONFIG) public moduleConfig: SubAssetsConfig\n ) {\n this.deviceListExtensionService.items$.pipe(takeUntil(this.destroyed$)).subscribe(columns => {\n this.allDevicesGridColumns = columns;\n });\n }\n\n async ngOnChanges(changes: SimpleChanges) {\n if (changes.group) {\n const { name, c8y_Notes } = this.group;\n this.groupInfoModel = { name, c8y_Notes };\n this.canEdit = await this.subAssetsService.canEditGroup(this.group);\n this.groupIcon = await this.assetNodeService.icon(this.group);\n this.smartGroupFilter = this.group.c8y_DeviceQueryString;\n this.columnsWithFilter = this.group.c8y_DeviceColumnsConfig?.columns\n ?.filter(col => !!col.filter)\n .map(col => ({\n ...col,\n externalFilterQuery: col.filter.externalFilterQuery,\n ...this.withPropsFromGridColumn(col)\n }));\n this.label = this.assetNodeService.isAsset(this.group)\n ? (await firstValueFrom(this.assetType.getAssetTypeByName$(this.group.type))).label\n : gettext('Group');\n }\n }\n\n isSmartGroup() {\n return this.subAssetsService.isSmartGroup(this.group);\n }\n\n async update(partialGroup: Partial<IManagedObject>) {\n try {\n const isSmartGroup: boolean = this.subAssetsService.isSmartGroup(this.group);\n const updatedGroup = isSmartGroup\n ? await this.updateSmartGroup(partialGroup)\n : await this.updateGroup(partialGroup);\n\n this.group = updatedGroup;\n this.groupChange.emit(this.group);\n this.alertService.success(this.GROUP_UPDATED_MSG);\n } catch (error) {\n this.alertService.addServerFailure(error);\n }\n }\n\n ngOnDestroy(): void {\n this.destroyed$.next();\n this.destroyed$.complete();\n }\n\n private withPropsFromGridColumn(column: Column): Partial<Column> {\n if (column.custom) {\n const col = new CustomColumn();\n return {\n filteringConfig: col.filteringConfig\n };\n } else {\n return pick(\n this.allDevicesGridColumns.find(col => col.name === column.name),\n 'filteringConfig',\n 'header'\n );\n }\n }\n\n private async updateGroup(partialGroup: Partial<IManagedObject>) {\n const { id } = this.group;\n const group: Partial<IManagedObject> = { id, ...partialGroup };\n\n return (await this.inventory.update(group)).data;\n }\n\n private async updateSmartGroup(partialGroup: Partial<IManagedObject>) {\n const { id } = this.group;\n const { c8y_DeviceQueryString } = partialGroup;\n const group: Partial<IManagedObject> = { id, ...partialGroup };\n\n if (!c8y_DeviceQueryString) {\n return (await this.smartGroupsService.update(group)).data;\n }\n\n try {\n const modalBody = gettext(\n 'You are about to change the smart group filter. Do you want to proceed?'\n );\n const title = gettext('Smart group filter');\n await this.modalService.confirm(title, modalBody, Status.WARNING, {\n ok: gettext('Save'),\n cancel: gettext('Cancel')\n });\n\n await this.isQueryExecutable(c8y_DeviceQueryString);\n } catch (error) {\n throw Error(error);\n }\n return (await this.smartGroupsService.update(group)).data;\n }\n\n private async isQueryExecutable(query: string) {\n try {\n const filter = { q: query };\n await this.inventory.list(filter);\n } catch (error) {\n throw Error(error);\n }\n }\n}\n","<div class=\"bg-level-1 separator-bottom\">\n <div class=\"card-block p-t-24 p-b-24 large-padding\">\n <div class=\"content-flex-70\">\n <div class=\"text-center col-1\">\n <i\n class=\"c8y-icon-duocolor icon-48\"\n [c8yIcon]=\"groupIcon\"\n ></i>\n <p>\n <small\n class=\"label label-info\"\n *ngIf=\"group.c8y_IsDynamicGroup\"\n >\n {{ 'Smart group' | translate }}\n </small>\n <small\n class=\"label label-info text-truncate d-inline-block\"\n title=\"{{ label | translate }}\"\n *ngIf=\"!group.c8y_IsDynamicGroup && !group.com_cumulocity_model_Agent\"\n >\n {{ label | translate }}\n </small>\n <small\n class=\"label label-info\"\n *ngIf=\"group.com_cumulocity_model_Agent\"\n >\n {{ 'Remote group' | translate }}\n </small>\n </p>\n </div>\n\n <div class=\"flex-grow col-10\">\n <div class=\"content-flex-80\">\n <div class=\"col-9\">\n <form #groupNameForm=\"ngForm\">\n <c8y-form-group class=\"form-group-lg m-b-0\">\n <label\n class=\"sr-only\"\n for=\"groupName\"\n translate\n >\n Name\n </label>\n <p\n class=\"form-control-static\"\n *ngIf=\"!canEdit\"\n >\n {{ groupInfoModel.name }}\n </p>\n <div\n class=\"input-group input-group-lg input-group-editable\"\n *ngIf=\"canEdit\"\n >\n <input\n class=\"form-control\"\n title=\"{{ groupInfoModel.name }}\"\n id=\"groupName\"\n placeholder=\"{{ 'e.g. My group' | translate }}\"\n name=\"name\"\n type=\"text\"\n required\n [(ngModel)]=\"groupInfoModel.name\"\n size=\"{{ groupInfoModel.name.length + 2 }}\"\n maxlength=\"254\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.GROUP_INFO.COMPONENTS.GROUP_INFO,\n action: PRODUCT_EXPERIENCE.GROUP_INFO.ACTIONS.EDIT,\n property: PRODUCT_EXPERIENCE.GROUP_INFO.PROPERTIES.NAME\n }\"\n />\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n [disabled]=\"groupNameForm.form.invalid\"\n (click)=\"\n update({ name: groupInfoModel.name }); groupNameForm.form.markAsPristine()\n \"\n [actionName]=\"'groupInfo:EditedNameSaved'\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.GROUP_INFO.COMPONENTS.GROUP_INFO,\n result: PRODUCT_EXPERIENCE.GROUP_INFO.RESULTS.EDIT_SAVED,\n property: PRODUCT_EXPERIENCE.GROUP_INFO.PROPERTIES.NAME\n }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </c8y-form-group>\n </form>\n <form #groupDescriptionForm=\"ngForm\">\n <label\n class=\"sr-only\"\n for=\"description\"\n translate\n >\n Description\n </label>\n <p\n class=\"form-control-static\"\n *ngIf=\"!canEdit\"\n >\n {{ groupInfoModel.c8y_Notes }}\n </p>\n <div\n class=\"input-group input-group-editable\"\n *ngIf=\"canEdit\"\n >\n <textarea\n class=\"form-control no-resize\"\n title=\"{{\n groupInfoModel.c8y_Notes\n ? groupInfoModel.c8y_Notes\n : ('e.g. My description' | translate)\n }}\"\n id=\"description\"\n placeholder=\"{{ 'e.g. My description' | translate }}\"\n name=\"description\"\n c8y-textarea-autoresize\n [(ngModel)]=\"groupInfoModel.c8y_Notes\"\n cols=\"{{ groupInfoModel.c8y_Notes ? groupInfoModel.c8y_Notes.length : 25 }}\"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.GROUP_INFO.COMPONENTS.GROUP_INFO,\n action: PRODUCT_EXPERIENCE.GROUP_INFO.ACTIONS.EDIT,\n property: PRODUCT_EXPERIENCE.GROUP_INFO.PROPERTIES.DESCRIPTION\n }\"\n ></textarea>\n <span></span>\n <div class=\"input-group-btn\">\n <button\n class=\"btn btn-primary\"\n title=\"{{ 'Save' | translate }}\"\n type=\"submit\"\n [disabled]=\"groupDescriptionForm.form.invalid\"\n (click)=\"\n update({ c8y_Notes: groupInfoModel.c8y_Notes });\n groupDescriptionForm.form.markAsPristine()\n \"\n c8yProductExperience\n [actionName]=\"PRODUCT_EXPERIENCE.EVENT\"\n [actionData]=\"{\n component: PRODUCT_EXPERIENCE.GROUP_INFO.COMPONENTS.GROUP_INFO,\n result: PRODUCT_EXPERIENCE.GROUP_INFO.RESULTS.EDIT_SAVED,\n property: PRODUCT_EXPERIENCE.GROUP_INFO.PROPERTIES.DESCRIPTION\n }\"\n >\n {{ 'Save' | translate }}\n </button>\n </div>\n </div>\n </form>\n\n <div\n class=\"dropdown m-t-8\"\n placement=\"bottom left\"\n container=\"body\"\n type=\"button\"\n dropdown\n *ngIf=\"isSmartGroup()\"\n #ddFilters=\"bs-dropdown\"\n [insideClick]=\"true\"\n >\n <button\n class=\"btn btn-default btn-sm\"\n title=\"{{ 'Smart group filters' | translate }}\"\n aria-haspopup=\"true\"\n dropdownToggle\n data-cy=\"c8y-data-grid--filters\"\n [disabled]=\"columnsWithFilter?.length === 0\"\n >\n <i\n class=\"m-r-4\"\n c8yIcon=\"filter\"\n ></i>\n <span>{{ 'Smart group filters' | translate }}</span>\n <span\n class=\"p-relative p-l-4 p-r-16\"\n *ngIf=\"columnsWithFilter?.length > 0\"\n >\n <span class=\"badge badge-system p-absolute\" data-cy=\"group-info--filter-number\">\n {{ columnsWithFilter?.length }}\n </span>\n </span>\n </button>\n <button\n class=\"btn-help btn-help--sm m-r-4\"\n [attr.aria-label]=\"'Help' | translate\"\n popover=\"{{ filterMsg | translate }}\"\n placement=\"right\"\n triggers=\"focus\"\n data-cy=\"group-info--help-button\"\n container=\"body\"\n type=\"button\"\n ></button>\n <div\n class=\"dropdown-menu\"\n *dropdownMenu\n (click)=\"$event.stopPropagation()\"\n >\n <div class=\"data-grid__dropdown bg-level-0\">\n <ul class=\"list-unstyled m-0\">\n <li\n *ngFor=\"let column of columnsWithFilter; let last = last\"\n [ngClass]=\"{ 'separator-bottom': !last }\"\n >\n <ng-container>\n <div\n class=\"dropdown-header sticky-top text-truncate no-border-top p-b-0\"\n title=\"{{ (column.header | translate) || column.name }}\"\n >\n <label>\n {{ (column.header | translate) || column.name }}\n </label>\n </div>\n <div\n class=\"list-group-item borderless d-flex d-col\"\n *ngFor=\"\n let groupedFilterChips of column\n | mapToFilterChips\n | async\n | groupedFilterChips;\n let first = first\n \"\n [ngClass]=\"{ 'p-t-0': first }\"\n >\n <p\n class=\"small p-b-4\"\n *ngIf=\"groupedFilterChips.label\"\n >\n {{ groupedFilterChips.label | translate }}\n </p>\n <div class=\"d-flex a-i-center gap-4 flex-wrap\">\n <span\n class=\"tag tag--info chip\"\n data-cy=\"group-info--grouped-filter-chip\"\n *ngFor=\"let chip of groupedFilterChips.chips\"\n >\n {{ chip.displayValue | translate }}\n </span>\n </div>\n </div>\n </ng-container>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n <div class=\"flex-grow\">\n <ul class=\"list-unstyled small\">\n <li class=\"p-t-4 p-b-4 d-flex separator-top-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">{{ 'Created' | translate }}</label>\n <span class=\"m-l-auto\">{{ group.creationTime | c8yDate }}</span>\n </li>\n <li class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\">\n <label class=\"small m-b-0 m-r-8\">{{ 'Last updated' | translate }}</label>\n <span class=\"m-l-auto\">{{ group.lastUpdated | c8yDate }}</span>\n </li>\n <li\n class=\"p-t-4 p-b-4 d-flex separator-bottom text-nowrap\"\n *ngIf=\"group.com_cumulocity_model_Agent\"\n >\n <label class=\"small m-b-0 m-r-8\">{{ 'Status' | translate }}</label>\n <span\n class=\"m-l-auto\"\n *ngIf=\"group.c8y_BrokerSource\"\n >\n {{ group.c8y_BrokerSource.status }}\n </span>\n <span\n class=\"m-l-auto\"\n *ngIf=\"!group.c8y_BrokerSource\"\n >\n {{ 'Offline' | translate }}\n </span>\n </li>\n </ul>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n","import { Component, EventEmitter, Inject, OnDestroy, OnInit, signal } from '@angular/core';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport {\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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"}
|