url="/eg/staff/admin/local/asset/copy_location_order"></eg-link-table-link>
<eg-link-table-link i18n-label label="Shelving Locations Editor"
routerLink="/staff/admin/local/asset/copy_location"></eg-link-table-link>
+ <eg-link-table-link i18n-label label="Staff Portal Page"
+ routerLink="/staff/admin/local/config/ui_staff_portal_page_entry"></eg-link-table-link>
<eg-link-table-link i18n-label label="Standing Penalties"
routerLink="/staff/admin/local/config/standing_penalty"></eg-link-table-link>
<eg-link-table-link i18n-label label="Statistical Categories Editor"
import {AdminLocalSplashComponent} from './admin-local-splash.component';
import {AddressAlertComponent} from './address-alert.component';
import {AdminCarouselComponent} from './admin-carousel.component';
+import {AdminStaffPortalPageComponent} from './staff_portal_page/staff-portal-page.component';
import {StandingPenaltyComponent} from './standing-penalty.component';
@NgModule({
AdminLocalSplashComponent,
AddressAlertComponent,
AdminCarouselComponent,
- StandingPenaltyComponent
+ StandingPenaltyComponent,
+ AdminStaffPortalPageComponent
],
imports: [
AdminCommonModule,
import {BasicAdminPageComponent} from '@eg/staff/admin/basic-admin-page.component';
import {AddressAlertComponent} from './address-alert.component';
import {AdminCarouselComponent} from './admin-carousel.component';
+import {AdminStaffPortalPageComponent} from './staff_portal_page/staff-portal-page.component';
import {StandingPenaltyComponent} from './standing-penalty.component';
import {CourseTermMapComponent} from './course-reserves/course-term-map.component';
path: 'config/standing_penalty',
component: StandingPenaltyComponent
}, {
+ path: 'config/ui_staff_portal_page_entry',
+ component: AdminStaffPortalPageComponent
+}, {
path: 'action/survey',
loadChildren: () =>
import('./survey/survey.module').then(m => m.SurveyModule)
--- /dev/null
+<ng-template #successStrTmpl i18n>{{idlClassDef.label}} Update Succeeded</ng-template>
+<eg-string #successString [template]="successStrTmpl"></eg-string>
+
+<ng-template #updateFailedStrTmpl i18n>Update of {{idlClassDef.label}} failed</ng-template>
+<eg-string #updateFailedString [template]="updateFailedStrTmpl"></eg-string>
+
+<ng-template #deleteFailedStrTmpl i18n>Delete of {{idlClassDef.label}} failed or was not allowed</ng-template>
+<eg-string #deleteFailedString [template]="deleteFailedStrTmpl"></eg-string>
+
+<ng-template #deleteSuccessStrTmpl i18n>{{idlClassDef.label}} Successfully Deleted</ng-template>
+<eg-string #deleteSuccessString [template]="deleteSuccessStrTmpl"></eg-string>
+
+<ng-template #createStrTmpl i18n>{{idlClassDef.label}} Successfully Created</ng-template>
+<eg-string #createString [template]="createStrTmpl"></eg-string>
+
+<ng-template #createErrStrTmpl i18n>Failed to create new {{idlClassDef.label}}</ng-template>
+<eg-string #createErrString [template]="createErrStrTmpl"></eg-string>
+
+<ng-container *ngIf="orgField || gridFilters">
+ <div class="row">
+ <div class="col-lg-6">
+ <ng-container *ngIf="orgField">
+ <eg-org-family-select
+ [limitPerms]="viewPerms"
+ [selectedOrgId]="contextOrg.id()"
+ [ancestorSelectorChecked]="true"
+ [(ngModel)]="searchOrgs"
+ (ngModelChange)="grid.reload()">
+ </eg-org-family-select>
+ </ng-container>
+ </div>
+ <div class="col-lg-6 d-flex">
+ <div class="flex-1"></div><!-- push right -->
+ <ng-container *ngIf="gridFilters">
+ <span i18n>Filters Applied: {{gridFilters | json}}</span>
+ <a class="pl-2 font-italic"
+ [attr.href]="clearGridFiltersUrl()" i18n>Clear Filters</a>
+ </ng-container>
+ </div>
+ </div>
+ <hr/>
+</ng-container>
+
+<!-- idlObject and fieldName applied programmatically -->
+<eg-translate #translator></eg-translate>
+
+<ng-container *ngIf="helpTemplate">
+ <ng-container *ngTemplateOutlet="helpTemplate"></ng-container>
+</ng-container>
+
+<ng-template #configFieldLink let-row="row" let-col="col">
+ <a i18n-title title="Link To {{col.label}}"
+ [attr.href]="configFieldLinkUrl(row, col)">{{configLinkLabel(row, col)}}</a>
+</ng-template>
+
+<eg-grid #grid idlClass="{{idlClass}}" [dataSource]="dataSource" hideFields="{{hideGridFields}}"
+ [sortable]="true" persistKey="{{persistKey}}" autoGeneratedColumnOrder="{{fieldOrder}}"
+ [filterable]="true" [stickyHeader]="true">
+ <eg-grid-toolbar-button [disabled]="!canCreate"
+ label="New {{idlClassDef.label}}" i18n-label (onClick)="createNew()">
+ </eg-grid-toolbar-button>
+ <eg-grid-toolbar-button [disabled]="translatableFields.length == 0"
+ label="Apply Translations" i18n-label (onClick)="translate()">
+ </eg-grid-toolbar-button>
+ <eg-grid-toolbar-action label="Edit Selected" i18n-label (onClick)="editSelected($event)">
+ </eg-grid-toolbar-action>
+ <eg-grid-toolbar-action label="Delete Selected" i18n-label (onClick)="deleteSelected($event)">
+ </eg-grid-toolbar-action>
+ <ng-container *ngFor="let cf of configFields">
+ <eg-grid-column name="{{cf.name}}" [cellTemplate]="configFieldLink">
+ </eg-grid-column>
+ </ng-container>
+</eg-grid>
+
+<eg-fm-record-editor #editDialog idlClass="{{idlClass}}"
+ [fieldOptions]="fieldOptions"
+ [fieldOrder]="fieldOrder"
+ [defaultNewRecord]="defaultNewRecord"
+ [preloadLinkedValues]="true"
+ [readonlyFields]="readonlyFields">
+</eg-fm-record-editor>
+
+
--- /dev/null
+import {Component, Input, ViewChild, OnInit} from '@angular/core';
+import {Location} from '@angular/common';
+import {FormatService} from '@eg/core/format.service';
+import {AdminPageComponent} from '@eg/staff/share/admin-page/admin-page.component';
+import {ActivatedRoute} from '@angular/router';
+import {IdlService, IdlObject} from '@eg/core/idl.service';
+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 {NetService} from '@eg/core/net.service';
+import {GridCellTextGenerator} from '@eg/share/grid/grid';
+import {StringComponent} from '@eg/share/string/string.component';
+import {FmRecordEditorComponent} from '@eg/share/fm-editor/fm-editor.component';
+
+@Component({
+ templateUrl: './staff-portal-page.component.html'
+})
+
+export class AdminStaffPortalPageComponent extends AdminPageComponent implements OnInit {
+
+ idlClass = 'cusppe';
+ fieldOrder = 'label,entry_type,target_url,entry_text,image_url,page_col,col_pos,owner,id';
+ classLabel: string;
+
+ refreshSelected: (idlThings: IdlObject[]) => void;
+ createNew: () => void;
+ deleteSelected: (idlThings: IdlObject[]) => void;
+ cellTextGenerator: GridCellTextGenerator;
+
+ @ViewChild('refreshString', { static: true }) refreshString: StringComponent;
+ @ViewChild('refreshErrString', { static: true }) refreshErrString: StringComponent;
+
+ constructor(
+ route: ActivatedRoute,
+ ngLocation: Location,
+ format: FormatService,
+ idl: IdlService,
+ org: OrgService,
+ auth: AuthService,
+ pcrud: PcrudService,
+ perm: PermService,
+ toast: ToastService,
+ private net: NetService
+ ) {
+ super(route, ngLocation, format, idl, org, auth, pcrud, perm, toast);
+ }
+
+ ngOnInit() {
+ super.ngOnInit();
+
+ this.defaultNewRecord = this.idl.create(this.idlClass);
+ this.defaultNewRecord.owner(this.auth.user().ws_ou());
+ }
+
+}