// 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
// 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();
--- /dev/null
+<eg-title i18n-prefix prefix="Edit Floating Group"></eg-title>
+<eg-staff-banner bannerText="Edit Floating Group" i18n-bannerText>
+</eg-staff-banner>
+
+<div class="col-lg-6 offset-lg-3">
+ <eg-fm-record-editor displayMode="inline"
+ idlClass="cfg" mode="update" recordId="{{this.currentId}}">
+ </eg-fm-record-editor>
+</div>
+
+<eg-string #createString i18n-text text="New Floating Group Member Added"></eg-string>
+<eg-string #createErrString i18n-text text="Failed to Create New Floating Group Member"></eg-string>
+<eg-string #successString i18n-text text="Floating Group Member Update Succeeded"></eg-string>
+<eg-string #updateFailedString i18n-text text="Floating Group Member Update Failed"></eg-string>
+<eg-string #deleteFailedString i18n-text text="Delete of Floating Group Member failed or was not allowed"></eg-string>
+<eg-string #deleteSuccessString i18n-text text="Delete of Floating Group Member succeeded"></eg-string>
+
+<eg-staff-banner bannerText="Edit Floating Group Members" i18n-bannerText>
+</eg-staff-banner>
+<eg-admin-page idlClass="cfgm" disableOrgFilter="true"
+ hideFields="id,floating_group"
+ [dataSource]="dataSource"
+ [defaultNewRecord]="defaultNewRecord">
+</eg-admin-page>
\ No newline at end of file
--- /dev/null
+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
--- /dev/null
+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 {}
--- /dev/null
+<eg-title i18n-prefix prefix="Floating Group Administration"></eg-title>
+<eg-staff-banner bannerText="Floating Group Configuration" i18n-bannerText>
+</eg-staff-banner>
+
+<eg-string #createString i18n-text text="New Floating Group Added"></eg-string>
+<eg-string #createErrString i18n-text text="Failed to Create New Floating Group">
+ </eg-string>
+<eg-string #deleteFailedString i18n-text text="Delete of Floating Group failed
+ or was not allowed"></eg-string>
+<eg-string #deleteSuccessString i18n-text text="Delete of Floating Group
+ succeeded"></eg-string>
+
+<eg-grid #grid idlClass="cfg" [dataSource]="gridDataSource"
+ [sortable]="true">
+ <eg-grid-toolbar-button
+ label="New Floating Group" i18n-label [action]="createNew">
+ </eg-grid-toolbar-button>
+ <eg-grid-toolbar-action label="Edit Selected" i18n-label [action]="editSelected">
+ </eg-grid-toolbar-action>
+ <eg-grid-toolbar-action label="Delete Selected" i18n-label
+ [action]="deleteSelected"></eg-grid-toolbar-action>
+</eg-grid>
+<eg-fm-record-editor #editDialog idlClass="cfg">
+</eg-fm-record-editor>
--- /dev/null
+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<any> {
+ return;
+ }
+
+ }
\ No newline at end of file
--- /dev/null
+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
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
}, {
<ng-container *ngTemplateOutlet="helpTemplate"></ng-container>
</ng-container>
-<eg-grid #grid idlClass="{{idlClass}}" [dataSource]="dataSource"
+<eg-grid #grid idlClass="{{idlClass}}" [dataSource]="dataSource" hideFields={{hideFields}}
[sortable]="true" persistKey="{{persistKey}}">
<eg-grid-toolbar-button [disabled]="!canCreate"
label="New {{idlClassDef.label}}" i18n-label (onClick)="createNew()">
</eg-grid>
<eg-fm-record-editor #editDialog idlClass="{{idlClass}}"
- [fieldOptions]="fieldOptions"
+ [fieldOptions]="fieldOptions" [defaultNewRecord]="defaultNewRecord"
[preloadLinkedValues]="true" readonlyFields="{{readonlyFields}}">
</eg-fm-record-editor>
// 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;
// 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;