UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

1 lines • 17.3 kB
{"version":3,"file":"c8y-ngx-components-user-roles.mjs","sources":["../../user-roles/inventory-role-selector/inventory-role-selector.component.ts","../../user-roles/roles-asset-tree/roles-asset-tree.component.ts","../../user-roles/roles-asset-tree/roles-asset-tree.component.html","../../user-roles/user-roles.module.ts","../../user-roles/c8y-ngx-components-user-roles.ts"],"sourcesContent":["import { Directive, ElementRef, EventEmitter, Injector, Input, Output } from '@angular/core';\nimport { UpgradeComponent } from '@angular/upgrade/static';\n\n@Directive({ selector: 'c8y-inventory-role-selector-upgraded' })\nexport class InventoryRoleSelector extends UpgradeComponent {\n @Input() assignedRoles: any;\n @Input() inheritedRoles: any;\n @Input() inventoryRoles: any;\n @Input() ownerAllowedRoles: any;\n @Output() onApply: EventEmitter<any>;\n\n constructor(elementRef: ElementRef, injector: Injector) {\n super('c8yInventoryRoleSelector', elementRef, injector);\n }\n}\n","import { Component, EventEmitter, Input, OnChanges, OnInit, Optional, Output } from '@angular/core';\nimport { gettext, IconDirective, EmptyStateComponent, C8yTranslatePipe } from '@c8y/ngx-components';\n\nimport {\n mergeWith,\n map as _map,\n filter,\n flatten,\n uniqBy,\n identity,\n property,\n get,\n reduce\n} from 'lodash-es';\nimport { BehaviorSubject, combineLatest } from 'rxjs';\nimport { map, tap } from 'rxjs/operators';\nimport { IIdentified } from '@c8y/client';\nimport {\n Ng1RolesService,\n Ng1UserInventoryRolesService\n} from '@c8y/ngx-components/upgrade/upgraded-services';\nimport { NgFor, NgStyle, NgIf, AsyncPipe, SlicePipe } from '@angular/common';\nimport { InventoryRoleSelector } from '../inventory-role-selector/inventory-role-selector.component';\n\n@Component({\n selector: 'c8y-roles-asset-tree-upgraded',\n templateUrl: './roles-asset-tree.component.html',\n imports: [\n NgFor,\n NgStyle,\n NgIf,\n IconDirective,\n InventoryRoleSelector,\n EmptyStateComponent,\n C8yTranslatePipe,\n AsyncPipe,\n SlicePipe\n ]\n})\nexport class RolesAssetTreeComponent implements OnInit, OnChanges {\n @Input() user;\n @Input() searchFilter;\n @Input() assignedRoles;\n @Input() ownerAssignedRoles;\n @Input() expandGroups;\n @Input() pageSize;\n @Input() paginationOffset;\n @Output() onChangeRoles = new EventEmitter();\n @Output() onChangeItemCount = new EventEmitter();\n\n rootGroups;\n flatAssetTree;\n inventoryRoles;\n loadingAssetTree;\n inheritedRoles;\n ownerAllAssignedRoles;\n\n noSubgroupTitle = gettext('No subgroups');\n manySubgroupsTitle = gettext('Subgroups: {{ count }}');\n oneSubgroupTitle = gettext('Subgroup: 1');\n clickToOpenTitle = gettext('Click to fetch subgroups');\n expandAriaLabel = gettext('Expand');\n collapseAriaLabel = gettext('Collapse');\n\n searchTermSubject = new BehaviorSubject<string>('');\n flatTreeSubject = new BehaviorSubject<IIdentified[]>([]);\n\n flatAssetTree$ = combineLatest([this.searchTermSubject, this.flatTreeSubject]).pipe(\n map(([searchTerm, flatTree]) => {\n return flatTree\n .filter(group => group.name.toLowerCase().includes(searchTerm.toLowerCase()))\n .filter(this.filterAsset.bind(this));\n }),\n tap(flatTree => {\n this.onChangeItemCount.emit(flatTree.length);\n })\n );\n\n constructor(\n @Optional() public c8yUserInventoryRoles: Ng1UserInventoryRolesService,\n @Optional() public c8yRoles: Ng1RolesService\n ) {}\n\n ngOnInit() {\n this.loadInventoryRoles();\n }\n\n loadAssetTree() {\n const onlyRootsUser = this.user.owner;\n return this.c8yUserInventoryRoles.listRootGroups({ onlyRootsUser }).then(result => {\n this.rootGroups = result;\n this.updateTree();\n });\n }\n\n updateTree() {\n this.flatAssetTree = this.c8yUserInventoryRoles.flatTree(this.rootGroups);\n this.setInheritedRoles();\n this.flatTreeSubject.next(this.flatAssetTree);\n }\n\n loadChildren(mo) {\n if (mo.isOpened) {\n // eslint-disable-next-line no-underscore-dangle\n mo._subGroups = [];\n mo.isOpened = false;\n this.updateTree();\n } else {\n this.c8yUserInventoryRoles.loadChildren(mo).then(_ => {\n this.updateTree();\n });\n mo.isOpened = true;\n }\n }\n\n loadInventoryRoles() {\n this.c8yRoles.list({ pageSize: 1000 }).then(roles => {\n this.inventoryRoles = roles;\n });\n }\n\n ngOnChanges(changes) {\n if (changes.searchFilter) {\n this.searchTermSubject.next(this.searchFilter || '');\n }\n if (changes.user && !this.loadingAssetTree) {\n this.loadingAssetTree = this.loadAssetTree();\n }\n if (changes.assignedRoles || changes.ownerAssignedRoles) {\n this.loadingAssetTree.then(this.setInheritedRoles.bind(this));\n }\n if (changes.expandGroups && this.expandGroups) {\n this.c8yUserInventoryRoles.expandAll(this.rootGroups, this.updateTree.bind(this));\n }\n }\n\n setInheritedRoles() {\n if (this.assignedRoles) {\n this.inheritedRoles = this.getInventoryInheritedRoles(this.flatAssetTree, this.assignedRoles);\n }\n if (this.ownerAssignedRoles) {\n const ownerInheritedRoles = this.getInventoryInheritedRoles(\n this.flatAssetTree,\n this.ownerAssignedRoles\n );\n this.ownerAllAssignedRoles = mergeWith(\n ownerInheritedRoles,\n this.ownerAssignedRoles,\n (objValue, srcValue) => {\n if (srcValue) {\n if (objValue) {\n return uniqBy(objValue.concat(srcValue.roles), 'id');\n }\n return srcValue.roles;\n }\n return objValue;\n }\n );\n }\n }\n\n getInventoryInheritedRoles(flatTree, assignedRoles) {\n return reduce(\n flatTree,\n (inheritedRoles, asset) => {\n // eslint-disable-next-line no-underscore-dangle\n let chain = asset._parentGroups;\n chain = _map(chain, group => get(assignedRoles, group.id));\n chain = filter(chain, identity);\n chain = _map(chain, property('roles'));\n chain = flatten(chain);\n chain = uniqBy(chain, 'id');\n inheritedRoles[asset.id] = chain;\n return inheritedRoles;\n },\n {}\n );\n }\n\n onApply(ev, managedObjectId) {\n return this.onChangeRoles.emit({\n managedObjectId: managedObjectId,\n roles: ev.roles\n });\n }\n\n filterAsset(asset) {\n if (this.ownerAllAssignedRoles) {\n return get(this.ownerAllAssignedRoles, [asset.id, 'length']);\n }\n return true;\n }\n}\n","<div class=\"c8y-list__group m-b-0 no-border-last\">\n <div\n class=\"c8y-list__item\"\n *ngFor=\"\n let asset of flatAssetTree$ | async | slice: paginationOffset:paginationOffset + pageSize\n \"\n >\n <div\n class=\"c8y-list__item__block\"\n [title]=\"\n (asset._subGroups && asset.isOpened\n ? asset._subGroups.length\n ? asset._subGroups.length > 1\n ? manySubgroupsTitle\n : oneSubgroupTitle\n : noSubgroupTitle\n : clickToOpenTitle\n ) | translate: { count: asset._subGroups?.length }\n \"\n >\n <div [ngStyle]=\"{ 'padding-left': asset._depth * 8 + 'px' }\"></div>\n <div class=\"c8y-list__item__icon m-t-4 p-l-0\">\n <button\n class=\"btn-clean\"\n [attr.aria-label]=\"(!asset.isOpened ? expandAriaLabel : collapseAriaLabel) | translate\"\n type=\"button\"\n (click)=\"loadChildren(asset)\"\n >\n <i\n class=\"c8y-icon-duocolor\"\n c8yIcon=\"c8y-group\"\n *ngIf=\"!asset.isOpened\"\n ></i>\n <i\n class=\"c8y-icon-duocolor\"\n c8yIcon=\"c8y-group-open\"\n *ngIf=\"asset.isOpened\"\n ></i>\n </button>\n </div>\n <div class=\"c8y-list__item__body\">\n <div class=\"d-flex a-i-center\">\n <div class=\"col-sm-7 p-l-0 col-xs-12\">\n <button\n class=\"btn-clean\"\n type=\"button\"\n (click)=\"loadChildren(asset)\"\n >\n <span\n class=\"text-truncate\"\n [ngStyle]=\"{ cursor: 'pointer' }\"\n title=\"{{ asset.name }}\"\n >\n {{ asset.name }}\n </span>\n </button>\n </div>\n <div class=\"p-t-8 col-xs-12 visible-xs\"></div>\n <div class=\"col-sm-5 p-l-0 col-xs-12 p-r-0\">\n <div class=\"d-flex\">\n <div class=\"flex-grow form-group-sm max-width-100\">\n <c8y-inventory-role-selector-upgraded\n [ownerAllowedRoles]=\"\n ownerAllAssignedRoles ? ownerAllAssignedRoles[asset.id] : undefined\n \"\n [inheritedRoles]=\"inheritedRoles ? inheritedRoles[asset.id] : undefined\"\n [assignedRoles]=\"assignedRoles ? assignedRoles[asset.id] : undefined\"\n [inventoryRoles]=\"inventoryRoles\"\n (onApply)=\"onApply($event, asset.id)\"\n (click)=\"$event.stopPropagation()\"\n ></c8y-inventory-role-selector-upgraded>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n <c8y-ui-empty-state\n [icon]=\"'search'\"\n [title]=\"'No matching group found among the expanded groups.' | translate\"\n [subtitle]=\"'Try to expand more groups or to refine your search term.' | translate\"\n *ngIf=\"searchFilter && !(flatAssetTree$ | async).length\"\n [horizontal]=\"false\"\n ></c8y-ui-empty-state>\n</div>\n","import { NgModule } from '@angular/core';\nimport { CoreModule } from '@c8y/ngx-components';\nimport { InventoryRoleSelector } from './inventory-role-selector/inventory-role-selector.component';\nimport { RolesAssetTreeComponent } from './roles-asset-tree/roles-asset-tree.component';\n\n@NgModule({\n imports: [CoreModule, InventoryRoleSelector, RolesAssetTreeComponent]\n})\nexport class UserRolesModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["_map"],"mappings":"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"}