From 28dbc21eabf9e2d4fdffe69ca3cd68b0434882af Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Mon, 8 Apr 2019 16:43:59 -0400 Subject: [PATCH] LPXXX Angular Permission group tree admin UI Signed-off-by: Bill Erickson --- .../admin/server/perm-group-tree.component.html | 7 ++++ .../admin/server/perm-group-tree.component.ts | 46 +++++++++++++++------- 2 files changed, 39 insertions(+), 14 deletions(-) diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/perm-group-tree.component.html b/Open-ILS/src/eg2/src/app/staff/admin/server/perm-group-tree.component.html index 8e2de548fe..c3c6ec82cd 100644 --- a/Open-ILS/src/eg2/src/app/staff/admin/server/perm-group-tree.component.html +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/perm-group-tree.component.html @@ -43,6 +43,13 @@
Select a permission group from the tree on the left.
+ +
+
+ +
+
+
diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/perm-group-tree.component.ts b/Open-ILS/src/eg2/src/app/staff/admin/server/perm-group-tree.component.ts index cef9da49f2..4a3d7958e2 100644 --- a/Open-ILS/src/eg2/src/app/staff/admin/server/perm-group-tree.component.ts +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/perm-group-tree.component.ts @@ -1,4 +1,5 @@ import {Component, ViewChild, OnInit} from '@angular/core'; +import {map} from 'rxjs/operators'; import {Tree, TreeNode} from '@eg/share/tree/tree'; import {IdlService, IdlObject} from '@eg/core/idl.service'; import {OrgService} from '@eg/core/org.service'; @@ -26,6 +27,9 @@ export class PermGroupTreeComponent implements OnInit { permMaps: IdlObject[]; orgDepths: ComboboxEntry[]; + // Have to fetch quite a bit of data for this UI. + loading: boolean; + @ViewChild('editDialog') editDialog: FmRecordEditorComponent; @ViewChild('delConfirm') delConfirm: ConfirmDialogComponent; @ViewChild('successString') successString: StringComponent; @@ -50,10 +54,14 @@ export class PermGroupTreeComponent implements OnInit { } - ngOnInit() { - this.loadPgtTree(); - this.loadPermMaps(); + async ngOnInit() { + this.loading = true; + await this.loadPgtTree(); + await this.loadPermissions(); + await this.loadPermMaps(); this.setOrgDepths(); + this.loading = false; + return Promise.resolve(); } setOrgDepths() { @@ -65,7 +73,7 @@ export class PermGroupTreeComponent implements OnInit { } }); - this.orgDepths = depths2.sort().map(d => ({id: d, label: d})); + this.orgDepths = depths2.sort().map(d => ({id: d, label: '' + d})); } groupPermMaps(): IdlObject[] { @@ -79,29 +87,31 @@ export class PermGroupTreeComponent implements OnInit { m1.perm().code() < m2.perm().code() ? -1 : 1); } - loadPgtTree() { + async loadPgtTree(): Promise { - this.pcrud.search('pgt', {parent: null}, + return this.pcrud.search('pgt', {parent: null}, {flesh: -1, flesh_fields: {pgt: ['children']}} - ).subscribe(pgtTree => this.ingestPgtTree(pgtTree)); + ).pipe(map(pgtTree => this.ingestPgtTree(pgtTree))).toPromise(); + } + async loadPermissions(): Promise { // ComboboxEntry's for perms uses code() for id instead of // the database ID, because the application_perm field on // "pgt" is text instead of a link. So the value it expects // is the code, not the ID. - this.pcrud.retrieveAll('ppl', {order_by: {ppl: ['name']}}) - .subscribe(perm => { + return this.pcrud.retrieveAll('ppl', {order_by: {ppl: ['name']}}) + .pipe(map(perm => { this.permissions.push(perm); this.permEntries.push({id: perm.code(), label: perm.code()}) this.permissions.forEach(perm => this.permIdMap[+perm.id()] = perm) - }); + })).toPromise(); } - loadPermMaps() { + async loadPermMaps(): Promise { this.permMaps = []; - this.pcrud.retrieveAll('pgpm', {}, + return this.pcrud.retrieveAll('pgpm', {}, {fleshSelectors: true, authoritative: true}) - .subscribe(map => this.permMaps.push(map)); + .pipe(map((map => this.permMaps.push(map)))).toPromise(); } fmEditorOptions(): {[fieldName: string]: FmFieldOptions} { @@ -167,9 +177,17 @@ export class PermGroupTreeComponent implements OnInit { } - nodeClicked($event: any) { this.selected = $event; + + // When the user selects a different perm tree node, + // reset the edit state for our perm maps. + + this.permMaps.forEach(m => { + m.isnew(false); + m.ischanged(false); + m.isdeleted(false); + }) } edit() { -- 2.11.0