UNPKG

@netgrif/components-core

Version:

Netgrif Application engine frontend core Angular library

106 lines 16.7 kB
import { Component, ViewChild } from '@angular/core'; import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling'; import { FormControl } from '@angular/forms'; import { debounceTime } from 'rxjs/operators'; import * as i0 from "@angular/core"; import * as i1 from "./services/role-assignment-ldap-group.service"; export class AbstractLdapGroupRoleAssignmentComponent { _service; ldapGroupList; viewport; ldapGroup; nets; filteredProcesses = []; ldapGroupMultiSelect; searchLdapGroupControl = new FormControl(); searchNetControl = new FormControl(); SEARCH_DEBOUNCE_TIME = 600; subValueChanges; subNetValueChanges; subLdapGroup; constructor(_service) { this._service = _service; this.ldapGroup = this._service.ldapGroupList; this.nets = this._service.processList; this.ldapGroupMultiSelect = true; } ngOnInit() { this.nets.loadProcesses().subscribe(processes => { this.filteredProcesses = processes; }); this.subValueChanges = this.searchLdapGroupControl.valueChanges.pipe(debounceTime(this.SEARCH_DEBOUNCE_TIME)).subscribe(searchText => { this.ldapGroup.reload(searchText); }); this.subNetValueChanges = this.searchNetControl.valueChanges.pipe(debounceTime(this.SEARCH_DEBOUNCE_TIME)).subscribe(searchText => { this.filteredProcesses = this.nets.processes.filter(itm => itm.title.toLowerCase().includes(searchText.toLowerCase())); }); } ngAfterViewInit() { this.subLdapGroup = this.ldapGroup.ldapGroupsReload$.subscribe(() => { this.ldapGroupList.deselectAll(); this.ldapGroupList.selectedOptions.clear(); this.autoSelectRoles(); }); } ngOnDestroy() { this.subValueChanges.unsubscribe(); this.subLdapGroup.unsubscribe(); this.ldapGroup = undefined; this.subNetValueChanges.unsubscribe(); this.nets = undefined; this.filteredProcesses = undefined; } loadNextLdapGroupPage() { if (!this.viewport) { return; } this.ldapGroup.nextPage(this.viewport.getRenderedRange().end, this.viewport.getDataLength()); } autoSelectRoles() { const all = this.ldapGroupList.selectedOptions.selected.map(option => option.value.roles); if (all.length === 0) { this.nets.selectRoles(new Set([])); } const intersection = all.reduce((acc, curr) => new Set([...acc].filter(s => curr.has(s))), all[0]); this.nets.selectRoles(intersection); } update(role) { this.nets.updateSelectedRoles(role); const selected = this.ldapGroupList.selectedOptions.selected.map(option => option.value); this.ldapGroup.updateRoles(selected, this.nets.selectedRoles).subscribe(_ => { this.autoSelectRoles(); }); } selectAllLdapGroup(select) { this.ldapGroupList.options.forEach(option => { option.value.selected = select; }); this.autoSelectRoles(); } toggleAllRoles(net, select) { net.roles.forEach(r => { r.selected = select; this.nets.updateSelectedRoles(r); }); const selected = this.ldapGroupList.selectedOptions.selected.map(option => option.value); this.ldapGroup.updateRoles(selected, this.nets.selectedRoles).subscribe(_ => { this.autoSelectRoles(); }); } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractLdapGroupRoleAssignmentComponent, deps: [{ token: i1.RoleAssignmentLdapGroupService }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: AbstractLdapGroupRoleAssignmentComponent, selector: "ncc-abstract-ldap-group-role-assignment", viewQueries: [{ propertyName: "ldapGroupList", first: true, predicate: ["ldapGroupList"], descendants: true }, { propertyName: "viewport", first: true, predicate: CdkVirtualScrollViewport, descendants: true }], ngImport: i0, template: '', isInline: true }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: AbstractLdapGroupRoleAssignmentComponent, decorators: [{ type: Component, args: [{ selector: 'ncc-abstract-ldap-group-role-assignment', template: '' }] }], ctorParameters: () => [{ type: i1.RoleAssignmentLdapGroupService }], propDecorators: { ldapGroupList: [{ type: ViewChild, args: ['ldapGroupList'] }], viewport: [{ type: ViewChild, args: [CdkVirtualScrollViewport] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtbGRhcC1ncm91cC1yb2xlLWFzc2lnbm1lbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmV0Z3JpZi1jb21wb25lbnRzLWNvcmUvc3JjL2xpYi9hZG1pbi9yb2xlLWFzc2lnbm1lbnQtbGRhcC1ncm91cC9hYnN0cmFjdC1sZGFwLWdyb3VwLXJvbGUtYXNzaWdubWVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQixTQUFTLEVBQXFCLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVyRixPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQU9oRSxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDOzs7QUFTNUMsTUFBTSxPQUFnQix3Q0FBd0M7SUFnQnBDO0lBZGEsYUFBYSxDQUFtQjtJQUN2QixRQUFRLENBQTJCO0lBRXhFLFNBQVMsQ0FBdUI7SUFDaEMsSUFBSSxDQUFjO0lBQ2xCLGlCQUFpQixHQUEyQixFQUFFLENBQUM7SUFDL0Msb0JBQW9CLENBQVU7SUFDOUIsc0JBQXNCLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUMzQyxnQkFBZ0IsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0lBQ2xDLG9CQUFvQixHQUFHLEdBQUcsQ0FBQztJQUMzQixlQUFlLENBQWU7SUFDOUIsa0JBQWtCLENBQWU7SUFDakMsWUFBWSxDQUFlO0lBRXJDLFlBQXNCLFFBQXdDO1FBQXhDLGFBQVEsR0FBUixRQUFRLENBQWdDO1FBQzFELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUM7UUFDN0MsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcs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QUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFFLE1BQU0sQ0FBQyxLQUEyQixDQUFDLENBQUM7UUFDaEgsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ3hFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUMzQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7d0dBOUZpQix3Q0FBd0M7NEZBQXhDLHdDQUF3QywwTkFHL0Msd0JBQXdCLGdEQUx6QixFQUFFOzs0RkFFTSx3Q0FBd0M7a0JBSjdELFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHlDQUF5QztvQkFDbkQsUUFBUSxFQUFFLEVBQUU7aUJBQ2Y7bUdBR3NDLGFBQWE7c0JBQS9DLFNBQVM7dUJBQUMsZUFBZTtnQkFDa0IsUUFBUTtzQkFBbkQsU0FBUzt1QkFBQyx3QkFBd0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FmdGVyVmlld0luaXQsIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge01hdFNlbGVjdGlvbkxpc3R9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2xpc3QnO1xuaW1wb3J0IHtDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnR9IGZyb20gJ0Bhbmd1bGFyL2Nkay9zY3JvbGxpbmcnO1xuaW1wb3J0IHtcbiAgICBQcm9jZXNzTGlzdCxcbiAgICBFeHRlbmRlZFByb2Nlc3NSb2xlLFxuICAgIFByb2Nlc3NWZXJzaW9uLFxuICAgIFByb2Nlc3NMaXN0SXRlbVxufSBmcm9tICcuLi9yb2xlLWFzc2lnbm1lbnQvc2VydmljZXMvUHJvY2Vzc0xpc3QnO1xuaW1wb3J0IHtGb3JtQ29udHJvbH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtkZWJvdW5jZVRpbWV9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7Um9sZUFzc2lnbm1lbnRMZGFwR3JvdXBTZXJ2aWNlfSBmcm9tICcuL3NlcnZpY2VzL3JvbGUtYXNzaWdubWVudC1sZGFwLWdyb3VwLnNlcnZpY2UnO1xuaW1wb3J0IHtMZGFwR3JvdXBMaXN0SXRlbSwgTGRhcEdyb3VwTGlzdFNlcnZpY2V9IGZyb20gJy4uLy4uL2dyb3Vwcy9zZXJ2aWNlcy9sZGFwLWdyb3VwLWxpc3Quc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbmNjLWFic3RyYWN0LWxkYXAtZ3JvdXAtcm9sZS1hc3NpZ25tZW50JyxcbiAgICB0ZW1wbGF0ZTogJydcbn0pXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RMZGFwR3JvdXBSb2xlQXNzaWdubWVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcblxuICAgIEBWaWV3Q2hpbGQoJ2xkYXBHcm91cExpc3QnKSBwdWJsaWMgbGRhcEdyb3VwTGlzdDogTWF0U2VsZWN0aW9uTGlzdDtcbiAgICBAVmlld0NoaWxkKENka1ZpcnR1YWxTY3JvbGxWaWV3cG9ydCkgcHVibGljIHZpZXdwb3J0OiBDZGtWaXJ0dWFsU2Nyb2xsVmlld3BvcnQ7XG5cbiAgICBwdWJsaWMgbGRhcEdyb3VwOiBMZGFwR3JvdXBMaXN0U2VydmljZTtcbiAgICBwdWJsaWMgbmV0czogUHJvY2Vzc0xpc3Q7XG4gICAgcHVibGljIGZpbHRlcmVkUHJvY2Vzc2VzOiBBcnJheTxQcm9jZXNzTGlzdEl0ZW0+ID0gW107XG4gICAgcHVibGljIGxkYXBHcm91cE11bHRpU2VsZWN0OiBib29sZWFuO1xuICAgIHB1YmxpYyBzZWFyY2hMZGFwR3JvdXBDb250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG4gICAgcHVibGljIHNlYXJjaE5ldENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgICBwcm90ZWN0ZWQgU0VBUkNIX0RFQk9VTkNFX1RJTUUgPSA2MDA7XG4gICAgcHJvdGVjdGVkIHN1YlZhbHVlQ2hhbmdlczogU3Vic2NyaXB0aW9uO1xuICAgIHByb3RlY3RlZCBzdWJOZXRWYWx1ZUNoYW5nZXM6IFN1YnNjcmlwdGlvbjtcbiAgICBwcm90ZWN0ZWQgc3ViTGRhcEdyb3VwOiBTdWJzY3JpcHRpb247XG5cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX3NlcnZpY2U6IFJvbGVBc3NpZ25tZW50TGRhcEdyb3VwU2VydmljZSkge1xuICAgICAgICB0aGlzLmxkYXBHcm91cCA9IHRoaXMuX3NlcnZpY2UubGRhcEdyb3VwTGlzdDtcbiAgICAgICAgdGhpcy5uZXRzID0gdGhpcy5fc2VydmljZS5wcm9jZXNzTGlzdDtcbiAgICAgICAgdGhpcy5sZGFwR3JvdXBNdWx0aVNlbGVjdCA9IHRydWU7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubmV0cy5sb2FkUHJvY2Vzc2VzKCkuc3Vic2NyaWJlKHByb2Nlc3NlcyA9PiB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlcmVkUHJvY2Vzc2VzID0gcHJvY2Vzc2VzO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdWJWYWx1ZUNoYW5nZXMgPSB0aGlzLnNlYXJjaExkYXBHcm91cENvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgICAgICBkZWJvdW5jZVRpbWUodGhpcy5TRUFSQ0hfREVCT1VOQ0VfVElNRSlcbiAgICAgICAgKS5zdWJzY3JpYmUoc2VhcmNoVGV4dCA9PiB7XG4gICAgICAgICAgICB0aGlzLmxkYXBHcm91cC5yZWxvYWQoc2VhcmNoVGV4dCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnN1Yk5ldFZhbHVlQ2hhbmdlcyA9IHRoaXMuc2VhcmNoTmV0Q29udHJvbC52YWx1ZUNoYW5nZXMucGlwZShkZWJvdW5jZVRpbWUodGhpcy5TRUFSQ0hfREVCT1VOQ0VfVElNRSkpLnN1YnNjcmliZShzZWFyY2hUZXh0ID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyZWRQcm9jZXNzZXMgPSB0aGlzLm5ldHMucHJvY2Vzc2VzLmZpbHRlcihpdG0gPT4gaXRtLnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoc2VhcmNoVGV4dC50b0xvd2VyQ2FzZSgpKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJMZGFwR3JvdXAgPSB0aGlzLmxkYXBHcm91cC5sZGFwR3JvdXBzUmVsb2FkJC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sZGFwR3JvdXBMaXN0LmRlc2VsZWN0QWxsKCk7XG4gICAgICAgICAgICB0aGlzLmxkYXBHcm91cExpc3Quc2VsZWN0ZWRPcHRpb25zLmNsZWFyKCk7XG4gICAgICAgICAgICB0aGlzLmF1dG9TZWxlY3RSb2xlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJWYWx1ZUNoYW5nZXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5zdWJMZGFwR3JvdXAudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5sZGFwR3JvdXAgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuc3ViTmV0VmFsdWVDaGFuZ2VzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMubmV0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5maWx0ZXJlZFByb2Nlc3NlcyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgbG9hZE5leHRMZGFwR3JvdXBQYWdlKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMudmlld3BvcnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmxkYXBHcm91cC5uZXh0UGFnZSh0aGlzLnZpZXdwb3J0LmdldFJlbmRlcmVkUmFuZ2UoKS5lbmQsIHRoaXMudmlld3BvcnQuZ2V0RGF0YUxlbmd0aCgpKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXV0b1NlbGVjdFJvbGVzKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhbGwgPSB0aGlzLmxkYXBHcm91cExpc3Quc2VsZWN0ZWRPcHRpb25zLnNlbGVjdGVkLm1hcChvcHRpb24gPT4gKG9wdGlvbi52YWx1ZSBhcyBMZGFwR3JvdXBMaXN0SXRlbSkucm9sZXMpO1xuICAgICAgICBpZiAoYWxsLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5uZXRzLnNlbGVjdFJvbGVzKG5ldyBTZXQ8c3RyaW5nPihbXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaW50ZXJzZWN0aW9uID0gYWxsLnJlZHVjZSgoYWNjLCBjdXJyKSA9PiBuZXcgU2V0KFsuLi5hY2NdLmZpbHRlcihzID0+IGN1cnIuaGFzKHMpKSksIGFsbFswXSk7XG4gICAgICAgIHRoaXMubmV0cy5zZWxlY3RSb2xlcyhpbnRlcnNlY3Rpb24pO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGUocm9sZTogRXh0ZW5kZWRQcm9jZXNzUm9sZSk6IHZvaWQge1xuICAgICAgICB0aGlzLm5ldHMudXBkYXRlU2VsZWN0ZWRSb2xlcyhyb2xlKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmxkYXBHcm91cExpc3Quc2VsZWN0ZWRPcHRpb25zLnNlbGVjdGVkLm1hcChvcHRpb24gPT4gKG9wdGlvbi52YWx1ZSBhcyBMZGFwR3JvdXBMaXN0SXRlbSkpO1xuICAgICAgICB0aGlzLmxkYXBHcm91cC51cGRhdGVSb2xlcyhzZWxlY3RlZCwgdGhpcy5uZXRzLnNlbGVjdGVkUm9sZXMpLnN1YnNjcmliZShfID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXV0b1NlbGVjdFJvbGVzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZWxlY3RBbGxMZGFwR3JvdXAoc2VsZWN0OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMubGRhcEdyb3VwTGlzdC5vcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHtcbiAgICAgICAgICAgIChvcHRpb24udmFsdWUgYXMgTGRhcEdyb3VwTGlzdEl0ZW0pLnNlbGVjdGVkID0gc2VsZWN0O1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5hdXRvU2VsZWN0Um9sZXMoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgdG9nZ2xlQWxsUm9sZXMobmV0OiBQcm9jZXNzVmVyc2lvbiwgc2VsZWN0OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIG5ldC5yb2xlcy5mb3JFYWNoKHIgPT4ge1xuICAgICAgICAgICAgci5zZWxlY3RlZCA9IHNlbGVjdDtcbiAgICAgICAgICAgIHRoaXMubmV0cy51cGRhdGVTZWxlY3RlZFJvbGVzKHIpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSB0aGlzLmxkYXBHcm91cExpc3Quc2VsZWN0ZWRPcHRpb25zLnNlbGVjdGVkLm1hcChvcHRpb24gPT4gKG9wdGlvbi52YWx1ZSBhcyBMZGFwR3JvdXBMaXN0SXRlbSkpO1xuICAgICAgICB0aGlzLmxkYXBHcm91cC51cGRhdGVSb2xlcyhzZWxlY3RlZCwgdGhpcy5uZXRzLnNlbGVjdGVkUm9sZXMpLnN1YnNjcmliZShfID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXV0b1NlbGVjdFJvbGVzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==