From 38039c3f264cab0ad1bb8014171f9327d49e1552 Mon Sep 17 00:00:00 2001 From: Bill Erickson Date: Tue, 8 May 2018 09:22:34 -0400 Subject: [PATCH] LP#1775466 more grid Signed-off-by: Bill Erickson --- .../share/grid/grid-column-config.component.html | 51 +++++++++-------- .../src/app/share/grid/grid-column.component.ts | 3 +- .../src/eg2/src/app/share/grid/grid.component.ts | 10 +++- .../src/eg2/src/app/share/grid/grid.service.ts | 64 +++++++++++++++++++--- .../server/config/billing_type.component.html | 2 +- 5 files changed, 92 insertions(+), 38 deletions(-) diff --git a/Open-ILS/src/eg2/src/app/share/grid/grid-column-config.component.html b/Open-ILS/src/eg2/src/app/share/grid/grid-column-config.component.html index 358946151f..7ce0cf04d2 100644 --- a/Open-ILS/src/eg2/src/app/share/grid/grid-column-config.component.html +++ b/Open-ILS/src/eg2/src/app/share/grid/grid-column-config.component.html @@ -16,52 +16,51 @@
Move Down
First Visible
Last Visible
-
Sort Priority
+
Sort Priority
-
-
-
- - +
+
+ +
-
{{col.label}}
-
diff --git a/Open-ILS/src/eg2/src/app/share/grid/grid-column.component.ts b/Open-ILS/src/eg2/src/app/share/grid/grid-column.component.ts index 2bade603e1..ad9e946d16 100644 --- a/Open-ILS/src/eg2/src/app/share/grid/grid-column.component.ts +++ b/Open-ILS/src/eg2/src/app/share/grid/grid-column.component.ts @@ -14,7 +14,8 @@ export class EgGridColumnComponent implements OnInit { @Input() path: string; @Input() label: string; @Input() flex: number; - @Input() hidden: boolean = false; + @Input() visible: boolean; + @Input() hidden: boolean; @Input() cellTemplate: TemplateRef; @Input() pkey: boolean; diff --git a/Open-ILS/src/eg2/src/app/share/grid/grid.component.ts b/Open-ILS/src/eg2/src/app/share/grid/grid.component.ts index 01a2aa4efd..865ca900ea 100644 --- a/Open-ILS/src/eg2/src/app/share/grid/grid.component.ts +++ b/Open-ILS/src/eg2/src/app/share/grid/grid.component.ts @@ -18,6 +18,8 @@ export class EgGridComponent implements OnInit { @Input() dataSource: EgGridDataSource; @Input() idlClass: string; + @Input() isMultiSortable: boolean; + @Input() persistKey: string; pager: Pager; columnSet: EgGridColumnSet; @@ -28,19 +30,21 @@ export class EgGridComponent implements OnInit { constructor(private gridSvc: EgGridService) { this.pager = new Pager(); this.selector = {}; - this.pager.limit = 10; // TODO + this.pager.limit = 10; // TODO config this.onRowDblClick$ = new EventEmitter(); this.toolbarButtons = []; } ngOnInit() { - this.columnSet = this.gridSvc.initializeColumnSet(this.idlClass); + this.columnSet = new EgGridColumnSet(this.idlClass); + this.columnSet.isMultiSortable = this.isMultiSortable; + this.gridSvc.generateColumns(this.columnSet); this.dataSource.requestPage(this.pager); } reload() { - this.dataSource.data = []; this.pager.offset = 0; + this.dataSource.data = []; this.dataSource.requestPage(this.pager); } 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 6b10fc0eb2..110ed2c4d0 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 @@ -48,18 +48,17 @@ export class EgGridService { return val+''; } - initializeColumnSet(idlClass?: string): EgGridColumnSet { - let columnSet = new EgGridColumnSet(); + generateColumns(columnSet: EgGridColumnSet) { // generate columns for all non-virtual fields on the IDL class - if (idlClass) { - this.idl.classes[idlClass].fields.forEach(field => { + if (columnSet.idlClass) { + this.idl.classes[columnSet.idlClass].fields.forEach(field => { if (field.virtual) return; let col = new EgGridColumn(); col.name = field.name; col.label = field.label || field.name; col.idlFieldDef = field; - if (field.name == this.idl.classes[idlClass].pkey) + if (field.name == this.idl.classes[columnSet.idlClass].pkey) col.isPkey = true; columnSet.add(col); }); @@ -76,20 +75,26 @@ export class EgGridColumn { label: string; flex: number; hidden: boolean; + visible: boolean; + sort: number; idlClass: string; idlFieldDef: any; cellTemplate: TemplateRef; isPkey: boolean; isDragTarget: boolean; + isMultiSortable: boolean; } export class EgGridColumnSet { columns: EgGridColumn[]; + idlClass: string; pkeyColumn: EgGridColumn; + isMultiSortable: boolean; - constructor() { + constructor(idlClass?: string) { this.columns = []; + this.idlClass = idlClass; } add(col: EgGridColumn) { @@ -98,11 +103,18 @@ export class EgGridColumnSet { if (col.isPkey) this.pkeyColumn = col; + col.visible = !col.hidden; + + // If a column set is multisortable, all columns are multisortable + // by default. TODO: add isNotMultiSortable ? + if (col.isMultiSortable === undefined && this.isMultiSortable) + col.isMultiSortable = true; + this.columns.push(col); } displayColumns(): EgGridColumn[] { - return this.columns.filter(c => !c.hidden); + return this.columns.filter(c => c.visible); } insertBefore(source: EgGridColumn, target: EgGridColumn) { @@ -120,6 +132,44 @@ export class EgGridColumnSet { this.columns.splice(targetIdx, 0, source); } + // Move visible columns to the front of the list. + moveVisibleToFront() { + let newCols = this.displayColumns(); + this.columns.forEach(col => { if (!col.visible) newCols.push(col) }); + this.columns = newCols; + } + + moveColumn(col: EgGridColumn, diff: number) { + var srcIdx, targetIdx; + + this.columns.forEach((c, i) => { + if (c.name == col.name) srcIdx = i + }); + + targetIdx = srcIdx + diff; + if (targetIdx < 0) { + targetIdx = 0; + } else if (targetIdx >= this.columns.length) { + // Target index follows the last visible column. + var lastVisible = 0; + this.columns.forEach((c, idx) => { + if (c.visible) lastVisible = idx; + }); + + // When moving a column (down) causes one or more + // visible columns to shuffle forward, our column + // moves into the slot of the last visible column. + // Otherwise, put it into the slot directly following + // the last visible column. + targetIdx = srcIdx <= lastVisible ? lastVisible : lastVisible + 1; + } + + // Splice column out of old position, insert at new position. + this.columns.splice(srcIdx, 1); + this.columns.splice(targetIdx, 0, col); + } + + } 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 684883c6e8..538bbc75dd 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,7 @@ - + -- 2.11.0