From 0c62ab0975cbffcf5346ddc328a9f2dfd2fb5f19 Mon Sep 17 00:00:00 2001 From: Mike Risher Date: Fri, 13 Sep 2019 20:26:47 +0000 Subject: [PATCH] lp1840287 Edit Floating Group Members Add functionality so that when editing a floating group, one is taken to a page where one can edit a given floating group as well as all its linked members. New functionality: - eg-admin-page can hide grid fields - fm-editor can create a record with fields defaulting to values Signed-off-by: Mike Risher Changes to be committed: modified: Open-ILS/src/eg2/src/app/share/fm-editor/fm-editor.component.ts new file: Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/edit-floating-group.component.html new file: Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/edit-floating-group.component.ts new file: Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/floating-group-routing.module.ts new file: Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/floating-group.component.html new file: Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/floating-group.component.ts new file: Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/floating-group.module.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 Signed-off-by: Bill Erickson Signed-off-by: Jane Sandberg --- .../src/app/share/fm-editor/fm-editor.component.ts | 5 +- .../edit-floating-group.component.html | 24 +++++++ .../edit-floating-group.component.ts | 45 ++++++++++++ .../floating-group-routing.module.ts | 19 +++++ .../floating-group/floating-group.component.html | 24 +++++++ .../floating-group/floating-group.component.ts | 81 ++++++++++++++++++++++ .../server/floating-group/floating-group.module.ts | 25 +++++++ .../src/app/staff/admin/server/routing.module.ts | 3 + .../share/admin-page/admin-page.component.html | 4 +- .../staff/share/admin-page/admin-page.component.ts | 9 +++ 10 files changed, 236 insertions(+), 3 deletions(-) create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/edit-floating-group.component.html create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/edit-floating-group.component.ts create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/floating-group-routing.module.ts create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/floating-group.component.html create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/floating-group.component.ts create mode 100644 Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/floating-group.module.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 58c400fcf1..d95646589a 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 @@ -100,6 +100,9 @@ export class FmRecordEditorComponent // behaviour for each field (by field name). @Input() fieldOptions: {[fieldName: string]: FmFieldOptions} = {}; + // This is used to set default values when making a new record + @Input() defaultNewRecord: IdlObject; + // list of fields that should not be displayed @Input() hiddenFieldsList: string[] = []; @Input() hiddenFields: string; // comma-separated string version @@ -357,7 +360,7 @@ export class FmRecordEditorComponent // Create a new record from the stub record provided by the // caller or a new from-scratch record // Set this._record (not this.record) to avoid loop in initRecord() - this._record = this.record || this.idl.create(this.idlClass); + this._record = this.defaultNewRecord || this.record || this.idl.create(this.idlClass); this._recordId = null; // avoid future confusion return this.getFieldList(); diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/edit-floating-group.component.html b/Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/edit-floating-group.component.html new file mode 100644 index 0000000000..00fda10854 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/edit-floating-group.component.html @@ -0,0 +1,24 @@ + + + + +
+ + +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/edit-floating-group.component.ts b/Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/edit-floating-group.component.ts new file mode 100644 index 0000000000..805e3e2f0c --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/edit-floating-group.component.ts @@ -0,0 +1,45 @@ +import {Component, Input} from '@angular/core'; +import {Router, ActivatedRoute} 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() sortField: string; + @Input() dataSource: GridDataSource; + @Input() dialogSize: 'sm' | 'lg' = 'lg'; + + // defaultNewRecord is used when creating a new entry to give a default floating_group + defaultNewRecord: IdlObject; + + // This is the ID of the floating group being edited currently + currentId: number; + + constructor( + private route: ActivatedRoute, + private pcrud: PcrudService, + private idl: IdlService, + ) { + } + + ngOnInit() { + this.currentId = parseInt(this.route.snapshot.paramMap.get('id')); + this.defaultNewRecord = this.idl.create('cfgm'); + this.defaultNewRecord.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("cfgm", {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/floating-group-routing.module.ts b/Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/floating-group-routing.module.ts new file mode 100644 index 0000000000..4e368de66f --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/floating-group-routing.module.ts @@ -0,0 +1,19 @@ +import {NgModule} from '@angular/core'; +import {RouterModule, Routes} from '@angular/router'; +import {EditFloatingGroupComponent} from './edit-floating-group.component'; +import {FloatingGroupComponent} from './floating-group.component'; + +const routes: Routes = [{ + path: ':id', + component: EditFloatingGroupComponent + }, { + path: '', + component: FloatingGroupComponent +}]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) + +export class FloatingGroupRoutingModule {} diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/floating-group.component.html b/Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/floating-group.component.html new file mode 100644 index 0000000000..1895293ebb --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/floating-group.component.html @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/floating-group.component.ts b/Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/floating-group.component.ts new file mode 100644 index 0000000000..fa639ee829 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/floating-group.component.ts @@ -0,0 +1,81 @@ +import {Pager} from '@eg/share/util/pager'; +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 { AdminPageComponent } from '../../../share/admin-page/admin-page.component'; + + @Component({ + templateUrl: './floating-group.component.html' + }) + + export class FloatingGroupComponent extends AdminPageComponent { + + idlClass = 'cfg'; + @Input() sortField: string; + @Input() dialogSize: 'sm' | 'lg' = 'lg'; + + gridDataSource: GridDataSource = new GridDataSource(); + + @ViewChild('grid', {static: true}) grid: GridComponent; + + 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.gridDataSource.getRows = (pager: Pager, sort: any[]) => { + const searchOps = { + offset: pager.offset, + limit: pager.limit, + order_by: {} + }; + return this.pcrud.retrieveAll("cfg", searchOps); + }; + 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); + } + + deleteSelected = (floatingGroups: IdlObject[]) => { + super.deleteSelected(floatingGroups); + } + + 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/floating-group/floating-group.module.ts b/Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/floating-group.module.ts new file mode 100644 index 0000000000..a52febc342 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/floating-group/floating-group.module.ts @@ -0,0 +1,25 @@ +import {NgModule} from '@angular/core'; +import {AdminCommonModule} from '@eg/staff/admin/common.module'; +import {TreeModule} from '@eg/share/tree/tree.module'; +import {FloatingGroupComponent} from './floating-group.component'; +import {EditFloatingGroupComponent} from './edit-floating-group.component'; +import {FloatingGroupRoutingModule} from './floating-group-routing.module'; + +@NgModule({ + declarations: [ + FloatingGroupComponent, + EditFloatingGroupComponent + ], + imports: [ + AdminCommonModule, + FloatingGroupRoutingModule, + TreeModule + ], + exports: [ + ], + providers: [ + ] +}) + +export class FloatingGroupModule { +} \ 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 6ce93653e4..55d9aa357f 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 @@ -13,6 +13,9 @@ const routes: Routes = [{ path: 'actor/org_unit_type', component: OrgUnitTypeComponent }, { + path: 'config/floating_group', + loadChildren: '@eg/staff/admin/server/floating-group/floating-group.module#FloatingGroupModule' +}, { path: 'config/print_template', component: PrintTemplateComponent }, { 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 00bc67a47b..285d9c9fc4 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 76c14cd7f4..db5c9be25c 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,10 @@ export class AdminPageComponent implements OnInit { // Override field options for create/edit dialog @Input() fieldOptions: {[field: string]: FmFieldOptions}; + // Override default values for fm-editor + @Input() defaultNewRecord: IdlObject; + + @ViewChild('grid', { static: true }) grid: GridComponent; @ViewChild('editDialog', { static: true }) editDialog: FmRecordEditorComponent; @ViewChild('successString', { static: true }) successString: StringComponent; -- 2.11.0