From: Bill Erickson Date: Thu, 9 May 2019 15:50:19 +0000 (-0400) Subject: LP1803787 Grid toolbar actions menu component; cleanup X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=94d1f041d834f3ef5bd63b8195e8b263edd25991;p=working%2FEvergreen.git LP1803787 Grid toolbar actions menu component; cleanup Moves the guts of the grid toolbar actions menu (the buttons) to a dedicated component that can be shared by both the actions drop-down menu and the actions popover. This adds support for honoring disableOnRow for the popover actions. And avoids duplication. Adds a sandbox example of using the toolbar action click event and divider. Some minor code cleanup/consistency changes. Signed-off-by: Bill Erickson Signed-off-by: Jane Sandberg --- diff --git a/Open-ILS/src/eg2/src/app/share/grid/grid-body.component.html b/Open-ILS/src/eg2/src/app/share/grid/grid-body.component.html index 616b6d20e0..b83c619044 100644 --- a/Open-ILS/src/eg2/src/app/share/grid/grid-body.component.html +++ b/Open-ILS/src/eg2/src/app/share/grid/grid-body.component.html @@ -1,15 +1,7 @@ - - - - - - - {{action.label}} - - - + + + {{action.label}} + + diff --git a/Open-ILS/src/eg2/src/app/share/grid/grid-toolbar-actions-menu.component.ts b/Open-ILS/src/eg2/src/app/share/grid/grid-toolbar-actions-menu.component.ts new file mode 100644 index 0000000000..2d8cffd151 --- /dev/null +++ b/Open-ILS/src/eg2/src/app/share/grid/grid-toolbar-actions-menu.component.ts @@ -0,0 +1,31 @@ +import {Component, Input, OnInit, Host} from '@angular/core'; +import {GridToolbarAction, GridContext} from '@eg/share/grid/grid'; + +/** Models a list of toolbar action menu entries */ + +@Component({ + selector: 'eg-grid-toolbar-actions-menu', + templateUrl: 'grid-toolbar-actions-menu.component.html' +}) + +export class GridToolbarActionsMenuComponent { + + @Input() gridContext: GridContext; + + performAction(action: GridToolbarAction) { + if (action.isGroup || action.isSeparator) { + return; // These don't perform actions + } + const rows = this.gridContext.getSelectedRows(); + action.onClick.emit(rows); + if (action.action) { action.action(rows); } + } + + shouldDisable(action: GridToolbarAction): boolean { + if (action.disableOnRows) { + return action.disableOnRows(this.gridContext.getSelectedRows()); + } + return false; + } +} + 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 036597db97..6be92080a3 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 @@ -38,21 +38,9 @@ playlist_add_check - diff --git a/Open-ILS/src/eg2/src/app/share/grid/grid-toolbar.component.ts b/Open-ILS/src/eg2/src/app/share/grid/grid-toolbar.component.ts index a05aaa5ea2..308fdd012a 100644 --- a/Open-ILS/src/eg2/src/app/share/grid/grid-toolbar.component.ts +++ b/Open-ILS/src/eg2/src/app/share/grid/grid-toolbar.component.ts @@ -77,28 +77,12 @@ export class GridToolbarComponent implements OnInit { ); } - performAction(action: GridToolbarAction) { - if (action.isGroup || action.separator) { - return; // These don't perform actions - } - const rows = this.gridContext.getSelectedRows(); - action.onClick.emit(rows); - if (action.action) { action.action(rows); } - } - performButtonAction(button: GridToolbarButton) { const rows = this.gridContext.getSelectedRows(); button.onClick.emit(); if (button.action) { button.action(); } } - shouldDisableAction(action: GridToolbarAction) { - if (action.disableOnRows) { - return action.disableOnRows(this.gridContext.getSelectedRows()); - } - return false; - } - printHtml() { this.gridPrinter.printGrid(); } diff --git a/Open-ILS/src/eg2/src/app/share/grid/grid.module.ts b/Open-ILS/src/eg2/src/app/share/grid/grid.module.ts index 0773a7e56f..454dcfb0ed 100644 --- a/Open-ILS/src/eg2/src/app/share/grid/grid.module.ts +++ b/Open-ILS/src/eg2/src/app/share/grid/grid.module.ts @@ -9,6 +9,7 @@ import {GridToolbarComponent} from './grid-toolbar.component'; import {GridToolbarButtonComponent} from './grid-toolbar-button.component'; import {GridToolbarCheckboxComponent} from './grid-toolbar-checkbox.component'; import {GridToolbarActionComponent} from './grid-toolbar-action.component'; +import {GridToolbarActionsMenuComponent} from './grid-toolbar-actions-menu.component'; import {GridColumnConfigComponent} from './grid-column-config.component'; import {GridColumnWidthComponent} from './grid-column-width.component'; import {GridPrintComponent} from './grid-print.component'; @@ -26,6 +27,7 @@ import {GridPrintComponent} from './grid-print.component'; GridToolbarButtonComponent, GridToolbarCheckboxComponent, GridToolbarActionComponent, + GridToolbarActionsMenuComponent, GridColumnConfigComponent, GridColumnWidthComponent, GridPrintComponent diff --git a/Open-ILS/src/eg2/src/app/share/grid/grid.ts b/Open-ILS/src/eg2/src/app/share/grid/grid.ts index cfed24e7a0..ae681694d8 100644 --- a/Open-ILS/src/eg2/src/app/share/grid/grid.ts +++ b/Open-ILS/src/eg2/src/app/share/grid/grid.ts @@ -770,6 +770,7 @@ export class GridContext { } this.rowSelector.select(index); + this.lastSelectedIndex = index; return true; } @@ -1035,7 +1036,7 @@ export class GridToolbarAction { group: string; disabled: boolean; isGroup: boolean; // used for group placeholder entries - separator: boolean; + isSeparator: boolean; disableOnRows: (rows: any[]) => boolean; } diff --git a/Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.component.html b/Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.component.html index 7406c1f29c..720fa0f307 100644 --- a/Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.component.html +++ b/Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.component.html @@ -155,6 +155,11 @@ + + + + diff --git a/Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.component.ts b/Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.component.ts index 4dd88921a0..6d4e2eaafc 100644 --- a/Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.component.ts +++ b/Open-ILS/src/eg2/src/app/staff/sandbox/sandbox.component.ts @@ -152,6 +152,11 @@ export class SandboxComponent implements OnInit { this.sbChannel.postMessage({msg : $event.target.value}); } + // Example of click handler for row action + complimentEvergreen2(rows: IdlObject[]) { + alert('I know, right?'); + } + openEditor() { this.fmRecordEditor.open({size: 'lg'}).then( ok => { console.debug(ok); },