From: Bill Erickson Date: Thu, 10 May 2018 18:38:02 +0000 (-0400) Subject: LP#1775466 Grid column persistence X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=ed8bb92fdf8ea243aa7166a0ac298fe8d8968727;p=working%2FEvergreen.git LP#1775466 Grid column persistence Signed-off-by: Bill Erickson --- diff --git a/Open-ILS/src/eg2/src/app/core/store.service.ts b/Open-ILS/src/eg2/src/app/core/store.service.ts index 218ad8375b..b4341a6750 100644 --- a/Open-ILS/src/eg2/src/app/core/store.service.ts +++ b/Open-ILS/src/eg2/src/app/core/store.service.ts @@ -43,12 +43,13 @@ export class EgStoreService { setItem(key: string, val: any, isJson?: Boolean): Promise { // TODO: route keys appropriately - this.setLocalItem(key, val, false); + this.setLocalItem(key, val, isJson); return Promise.resolve(); } setLocalItem(key: string, val: any, isJson?: Boolean): void { if (!isJson) val = JSON.stringify(val); + console.log(`${key} ${val}`); window.localStorage.setItem(key, val); } diff --git a/Open-ILS/src/eg2/src/app/share/grid/grid-toolbar.component.html b/Open-ILS/src/eg2/src/app/share/grid/grid-toolbar.component.html index 6d4f471969..36206d7366 100644 --- a/Open-ILS/src/eg2/src/app/share/grid/grid-toolbar.component.html +++ b/Open-ILS/src/eg2/src/app/share/grid/grid-toolbar.component.html @@ -46,6 +46,12 @@ compare_arrows Manage Column Widths + + save + Save Columns + + this.dataSource.requestPage(this.pager)); } + + saveColumns() { + // TODO: when server-side settings are supported, this operation + // may offer to save to user/workstation OR org unit settings + // depending on perms. + + this.gridSvc.saveColumns(this.columnSet, this.persistKey) + .then( + // hide the with config after saving + ok => this.colWidthConfig.isVisible = false, + err => console.error(`Error saving columns: ${err}`) + ); + } } diff --git a/Open-ILS/src/eg2/src/app/share/grid/grid.component.html b/Open-ILS/src/eg2/src/app/share/grid/grid.component.html index 8a1ad186a7..ca94f76eec 100644 --- a/Open-ILS/src/eg2/src/app/share/grid/grid.component.html +++ b/Open-ILS/src/eg2/src/app/share/grid/grid.component.html @@ -3,7 +3,7 @@ + [colWidthConfig]="colWidthConfig" persistKey="{{persistKey}}"> diff --git a/Open-ILS/src/eg2/src/app/share/grid/grid.service.ts b/Open-ILS/src/eg2/src/app/share/grid/grid.service.ts index 20b0b4fb21..2b57f67d30 100644 --- a/Open-ILS/src/eg2/src/app/share/grid/grid.service.ts +++ b/Open-ILS/src/eg2/src/app/share/grid/grid.service.ts @@ -2,6 +2,7 @@ import {Injectable, TemplateRef} from '@angular/core'; import {EgIdlService, EgIdlObject} from '@eg/core/idl.service'; import {EgOrgService} from '@eg/core/org.service'; import {EgPcrudService} from '@eg/core/pcrud.service'; +import {EgStoreService} from '@eg/core/store.service'; @Injectable() @@ -10,6 +11,7 @@ export class EgGridService { constructor( private idl: EgIdlService, private org: EgOrgService, + private store: EgStoreService, private pcrud: EgPcrudService ) { } @@ -66,6 +68,16 @@ export class EgGridService { return columnSet; } + + + saveColumns(columnSet: EgGridColumnSet, persistKey: string): Promise { + if (!persistKey) + throw new Error('Grid persistKey required to save columns'); + let compiled = columnSet.compileSaveObject(); + return this.store.setItem('eg.grid.' + persistKey, compiled); + } + + // TODO: saveColumnsAsOrgSetting(...) } @@ -74,6 +86,7 @@ export class EgGridColumn { path: string; label: string; flex: number; + align: string; hidden: boolean; visible: boolean; sort: number; @@ -106,6 +119,7 @@ export class EgGridColumnSet { if (col.isPkey) this.pkeyColumn = col; if (!col.flex) col.flex = 2; if (!col.label) col.label = col.name; + if (!col.align) col.align = 'left'; col.visible = !col.hidden; @@ -181,6 +195,20 @@ export class EgGridColumnSet { this.columns.splice(targetIdx, 0, col); } + compileSaveObject() { + // only store information about visible columns. + let conf = this.displayColumns(); + + // scrunch the data down to just the needed info + return conf.map(col => { + let c: any = {name : col.name} + if (col.align != 'left') c.align = col.align; + if (col.flex != 2) c.flex = col.flex; + if (Number(col.sort)) c.sort = Number(c.sort); + return c; + }); + } + } export class EgGridToolbarButton { diff --git a/Open-ILS/src/eg2/src/app/staff/admin/server/config/billing_type.component.html b/Open-ILS/src/eg2/src/app/staff/admin/server/config/billing_type.component.html index fddd632aa4..af6bdb15fa 100644 --- a/Open-ILS/src/eg2/src/app/staff/admin/server/config/billing_type.component.html +++ b/Open-ILS/src/eg2/src/app/staff/admin/server/config/billing_type.component.html @@ -1,7 +1,8 @@ - +