From 95e34c54f0fbd6911dbfa91a6f56e40fa0b3fb95 Mon Sep 17 00:00:00 2001 From: Mike Risher Date: Mon, 9 Sep 2019 17:47:48 +0000 Subject: [PATCH] lp1840287 Edit Floating Group Members Add functionality so that when editing floating group members, one is taken to a page where one can edit a given floating group as well as all its linked members. Signed-off-by: Mike Risher Changes to be committed: modified: Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.ts modified: Open-ILS/src/eg2/src/app/staff/admin/server/admin-server.module.ts new file: Open-ILS/src/eg2/src/app/staff/admin/server/edit-floating-group.component.html new file: Open-ILS/src/eg2/src/app/staff/admin/server/edit-floating-group.component.ts new file: Open-ILS/src/eg2/src/app/staff/admin/server/floating-group.component.html new file: Open-ILS/src/eg2/src/app/staff/admin/server/floating-group.component.ts modified: Open-ILS/src/eg2/src/app/staff/admin/server/routing.module.ts modified: Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.component.html modified: Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.component.ts --- .../src/app/share/fm-editor/fm-editor.component.ts | 24 +++---- .../app/staff/admin/server/admin-server.module.ts | 22 +++++-- .../server/edit-floating-group.component.html | 17 +++++ .../admin/server/edit-floating-group.component.ts | 49 +++++++++++++++ .../admin/server/floating-group.component.html | 21 +++++++ .../staff/admin/server/floating-group.component.ts | 73 ++++++++++++++++++++++ .../src/app/staff/admin/server/routing.module.ts | 8 +++ .../share/admin-page/admin-page.component.html | 4 +- .../staff/share/admin-page/admin-page.component.ts | 8 +++ 9 files changed, 203 insertions(+), 23 deletions(-) create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/server/edit-floating-group.component.html create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/server/edit-floating-group.component.ts create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/server/floating-group.component.html create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/server/floating-group.component.ts diff --git a/Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.ts b/Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.ts index b6e2638bbf..896ad63e0b 100644 --- a/Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.ts +++ b/Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.ts @@ -85,7 +85,7 @@ export class FmRecordEditorComponent recId: any; // IDL record we are editing - record: IdlObject; + @Input() record: IdlObject; // Permissions extracted from the permacrud defs in the IDL // for the current IDL class @@ -176,21 +176,19 @@ export class FmRecordEditorComponent // Avoid fetching data on init since that may lead to unnecessary // data retrieval. ngOnInit() { - // In case the caller sets the value to null / undef. if (!this.fieldOptions) { this.fieldOptions = {}; } - this.listifyInputs(); this.idlDef = this.idl.classes[this.idlClass]; this.recordLabel = this.idlDef.label; // Add some randomness to the generated DOM IDs to ensure against clobbering this.idPrefix = 'fm-editor-' + Math.floor(Math.random() * 100000); - + let recordToInit = this.record; if (this.isDialog()) { - this.onOpen$.subscribe(() => this.initRecord()); + this.onOpen$.subscribe(() => this.initRecord(recordToInit)); } else { - this.initRecord(); + this.initRecord(recordToInit); } } @@ -198,6 +196,7 @@ export class FmRecordEditorComponent if (!args) { args = {}; } + // ensure we don't hang on to our copy of the record // if the user dismisses the dialog args.beforeDismiss = () => { @@ -235,8 +234,7 @@ export class FmRecordEditorComponent } } - private initRecord(): Promise { - + private initRecord(record): Promise { const pc = this.idlDef.permacrud || {}; this.modePerms = { view: pc.retrieve ? pc.retrieve.perms : [], @@ -247,22 +245,19 @@ export class FmRecordEditorComponent this.pkeyIsEditable = !('pkey_sequence' in this.idlDef); if (this.mode === 'update' || this.mode === 'view') { - let promise; - if (this.record && this.recId === null) { - promise = Promise.resolve(this.record); + if (record && this.recId === null) { + promise = Promise.resolve(record); } else { promise = this.pcrud.retrieve(this.idlClass, this.recId).toPromise(); } return promise.then(rec => { - if (!rec) { return Promise.reject(`No '${this.idlClass}' record found with id ${this.recId}`); } - this.record = rec; this.convertDatatypesToJs(); return this.getFieldList(); @@ -273,8 +268,7 @@ export class FmRecordEditorComponent // // Create a new record from the stub record provided by the // caller or a new from-scratch record - this.setRecord(this.record || this.idl.create(this.idlClass)); - + this.setRecord(record || this.idl.create(this.idlClass)); return this.getFieldList(); } diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/admin-server.module.ts b/Open-ILS/src/eg2/src/app/staff/admin/server/admin-server.module.ts index cbbadd38d6..b3a5ff1fd4 100644 --- a/Open-ILS/src/eg2/src/app/staff/admin/server/admin-server.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/admin-server.module.ts @@ -1,18 +1,30 @@ import {NgModule} from '@angular/core'; import {TreeModule} from '@eg/share/tree/tree.module'; -import {StaffCommonModule} from '@eg/staff/common.module'; -import {AdminServerRoutingModule} from './routing.module'; import {AdminCommonModule} from '@eg/staff/admin/common.module'; +import {AdminServerRoutingModule} from './routing.module'; import {AdminServerSplashComponent} from './admin-server-splash.component'; +import {FloatingGroupComponent} from './floating-group.component'; +import {EditFloatingGroupComponent} from './edit-floating-group.component'; import {OrgUnitTypeComponent} from './org-unit-type.component'; import {PrintTemplateComponent} from './print-template.component'; import {SampleDataService} from '@eg/share/util/sample-data.service'; +import {PermGroupTreeComponent} from './perm-group-tree.component'; +import {PermGroupMapDialogComponent} from './perm-group-map-dialog.component'; + +/* As it stands, all components defined under admin/server are +imported / declared in the admin/server base module. This could +cause the module to baloon in size. Consider moving non-auto- +generated UI's into lazy-loadable sub-mobules. */ @NgModule({ declarations: [ AdminServerSplashComponent, OrgUnitTypeComponent, - PrintTemplateComponent + PrintTemplateComponent, + PermGroupTreeComponent, + PermGroupMapDialogComponent, + FloatingGroupComponent, + EditFloatingGroupComponent ], imports: [ AdminCommonModule, @@ -27,6 +39,4 @@ import {SampleDataService} from '@eg/share/util/sample-data.service'; }) export class AdminServerModule { -} - - +} \ No newline at end of file diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/edit-floating-group.component.html b/Open-ILS/src/eg2/src/app/staff/admin/server/edit-floating-group.component.html new file mode 100644 index 0000000000..03ae46ae7a --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/edit-floating-group.component.html @@ -0,0 +1,17 @@ + + + + +
+ + +
+ + + + + \ No newline at end of file diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/edit-floating-group.component.ts b/Open-ILS/src/eg2/src/app/staff/admin/server/edit-floating-group.component.ts new file mode 100644 index 0000000000..7a024fca0c --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/edit-floating-group.component.ts @@ -0,0 +1,49 @@ +import {Component, Input} from '@angular/core'; +import {Router} from '@angular/router'; +import {GridDataSource} from '@eg/share/grid/grid'; +import {Pager} from '@eg/share/util/pager'; +import {PcrudService} from '@eg/core/pcrud.service'; +import {IdlObject, IdlService } from '@eg/core/idl.service'; + + @Component({ + templateUrl: './edit-floating-group.component.html' + }) + + export class EditFloatingGroupComponent { + + @Input() idlClass = 'cfgm'; + @Input() sortField: string; + @Input() dataSource: GridDataSource; + @Input() dialogSize: 'sm' | 'lg' = 'lg'; + + // recordObject is used when creating a new entry to give a default floating_group + // in fm-editor + recordObject: IdlObject; + + // This is the ID of the floating group being edited currently + currentId: number; + + constructor( + private pcrud: PcrudService, + private router: Router, + private idl: IdlService, + ) { + } + + ngOnInit() { + let currentUrl = this.router.routerState.snapshot.url; + let slash = currentUrl.lastIndexOf('/'); + this.currentId = parseInt(currentUrl.substring(slash+1)); + this.recordObject = this.idl.create('cfgm'); + this.recordObject.floating_group(this.currentId); + this.dataSource = new GridDataSource(); + this.dataSource.getRows = (pager: Pager, sort: any[]) => { + const searchOps = { + offset: pager.offset, + limit: pager.limit, + order_by: {} + }; + return this.pcrud.search(this.idlClass, {floating_group: this.currentId}, searchOps); + }; + } + } \ No newline at end of file diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/floating-group.component.html b/Open-ILS/src/eg2/src/app/staff/admin/server/floating-group.component.html new file mode 100644 index 0000000000..843bfdb7ec --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/floating-group.component.html @@ -0,0 +1,21 @@ + + + + +{{idlClassDef.label}} Succeessfully Created + + +Failed to create new {{idlClassDef.label}} + + + + + + + + + + + diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/floating-group.component.ts b/Open-ILS/src/eg2/src/app/staff/admin/server/floating-group.component.ts new file mode 100644 index 0000000000..a4c91e95fd --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/floating-group.component.ts @@ -0,0 +1,73 @@ +import {Component, Input, ViewChild} from '@angular/core'; +import { Router, ActivatedRoute } from '@angular/router'; +import {IdlService, IdlObject} from '@eg/core/idl.service'; +import {GridDataSource} from '@eg/share/grid/grid'; +import {GridComponent} from '@eg/share/grid/grid.component'; +import {ToastService} from '@eg/share/toast/toast.service'; +import {PcrudService} from '@eg/core/pcrud.service'; +import {OrgService} from '@eg/core/org.service'; +import {PermService} from '@eg/core/perm.service'; +import {AuthService} from '@eg/core/auth.service'; +import {FmRecordEditorComponent} from '@eg/share/fm-editor/fm-editor.component'; +import {StringComponent} from '@eg/share/string/string.component'; +import { AdminPageComponent } from '../../share/admin-page/admin-page.component'; + + @Component({ + templateUrl: './floating-group.component.html' + }) + + export class FloatingGroupComponent extends AdminPageComponent { + + @Input() idlClass: string = "cfg"; + @Input() sortField: string; + @Input() dataSource: GridDataSource; + @Input() dialogSize: 'sm' | 'lg' = 'lg'; + + @ViewChild('grid') grid: GridComponent; + @ViewChild('editDialog') editDialog: FmRecordEditorComponent; + @ViewChild('createString') createString: StringComponent; + @ViewChild('createErrString') createErrString: StringComponent; + + constructor( + route: ActivatedRoute, + idl: IdlService, + org: OrgService, + auth: AuthService, + pcrud: PcrudService, + perm: PermService, + toast: ToastService, + private router:Router + ) { + super(route, idl, org, auth, pcrud, perm, toast); + } + + ngOnInit() { + super.ngOnInit(); + + this.grid.onRowActivate.subscribe( + (idlThing: IdlObject) => { + let idToEdit = idlThing.a[0]; + this.navigateToEditPage(idToEdit); + } + ); + } + + createNew = () => { + super.createNew(); + }; + + editSelected = (floatingGroups: IdlObject[]) => { + let idToEdit = floatingGroups[0].a[0]; + this.navigateToEditPage(idToEdit); + } + + navigateToEditPage(id: any) { + this.router.navigate(["/staff/admin/server/config/floating_group/" + id]); + } + + // this was left mostly blank to ensure a modal does not open for edits + showEditDialog(idlThing: IdlObject): Promise { + return; + } + + } \ No newline at end of file diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/routing.module.ts b/Open-ILS/src/eg2/src/app/staff/admin/server/routing.module.ts index 4f9b9ff366..1f4bbe5fa2 100644 --- a/Open-ILS/src/eg2/src/app/staff/admin/server/routing.module.ts +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/routing.module.ts @@ -1,11 +1,19 @@ import {NgModule} from '@angular/core'; import {RouterModule, Routes} from '@angular/router'; import {AdminServerSplashComponent} from './admin-server-splash.component'; +import {FloatingGroupComponent} from './floating-group.component'; +import {EditFloatingGroupComponent} from './edit-floating-group.component'; import {BasicAdminPageComponent} from '@eg/staff/admin/basic-admin-page.component'; import {OrgUnitTypeComponent} from './org-unit-type.component'; import {PrintTemplateComponent} from './print-template.component'; const routes: Routes = [{ + path: 'config/floating_group', + component: FloatingGroupComponent +}, { + path: 'config/floating_group/:id', + component: EditFloatingGroupComponent +}, { path: 'splash', component: AdminServerSplashComponent }, { diff --git a/Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.component.html b/Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.component.html index c7479d62db..2e55de3a84 100644 --- a/Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.component.html +++ b/Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.component.html @@ -33,7 +33,7 @@ - @@ -48,7 +48,7 @@ diff --git a/Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.component.ts b/Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.component.ts index b853a6aef5..7bb959e2ed 100644 --- a/Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.component.ts +++ b/Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.component.ts @@ -42,6 +42,11 @@ export class AdminPageComponent implements OnInit { // Size of create/edito dialog. Uses large by default. @Input() dialogSize: 'sm' | 'lg' = 'lg'; + // comma-separated list of fields to hide. + // This does not imply all other fields should be visible, only that + // the selected fields will be hidden. + @Input() hideFields: string; + // If an org unit field is specified, an org unit filter // is added to the top of the page. @Input() orgField: string; @@ -75,6 +80,9 @@ export class AdminPageComponent implements OnInit { // Override field options for create/edit dialog @Input() fieldOptions: {[field: string]: FmFieldOptions}; + // Override default values for fm-editor + @Input() recordObject: IdlObject; + @ViewChild('grid') grid: GridComponent; @ViewChild('editDialog') editDialog: FmRecordEditorComponent; @ViewChild('successString') successString: StringComponent; -- 2.11.0