]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/src/eg2/src/app/share/grid/grid-body.component.ts
Docs: merge 3.2 release notes
[Evergreen.git] / Open-ILS / src / eg2 / src / app / share / grid / grid-body.component.ts
1 import {Component, Input, OnInit, Host} from '@angular/core';
2 import {GridContext, GridColumn, GridRowSelector,
3     GridColumnSet, GridDataSource} from './grid';
4 import {GridComponent} from './grid.component';
5
6 @Component({
7   selector: 'eg-grid-body',
8   templateUrl: './grid-body.component.html'
9 })
10
11 export class GridBodyComponent implements OnInit {
12
13     @Input() context: GridContext;
14
15     constructor(@Host() private grid: GridComponent) {}
16
17     ngOnInit() {}
18
19     // Not using @HostListener because it only works globally.
20     onGridKeyDown(evt: KeyboardEvent) {
21         switch (evt.key) {
22             case 'ArrowUp':
23                 this.context.selectPreviousRow();
24                 evt.stopPropagation();
25                 break;
26             case 'ArrowDown':
27                 this.context.selectNextRow();
28                 evt.stopPropagation();
29                 break;
30             case 'ArrowLeft':
31                 this.context.toPrevPage()
32                 .then(ok => this.context.selectFirstRow(), err => {});
33                 evt.stopPropagation();
34                 break;
35             case 'ArrowRight':
36                 this.context.toNextPage()
37                 .then(ok => this.context.selectFirstRow(), err => {});
38                 evt.stopPropagation();
39                 break;
40             case 'Enter':
41                 if (this.context.lastSelectedIndex) {
42                     this.grid.onRowActivate.emit(
43                         this.context.getRowByIndex(
44                             this.context.lastSelectedIndex)
45                     );
46                 }
47                 evt.stopPropagation();
48                 break;
49         }
50     }
51
52     onRowClick($event: any, row: any, idx: number) {
53         const index = this.context.getRowIndex(row);
54
55         if (this.context.disableMultiSelect) {
56             this.context.selectOneRow(index);
57         } else if ($event.ctrlKey || $event.metaKey /* mac command */) {
58             if (this.context.toggleSelectOneRow(index)) {
59                 this.context.lastSelectedIndex = index;
60             }
61
62         } else if ($event.shiftKey) {
63             // TODO shift range click
64
65         } else {
66             this.context.selectOneRow(index);
67         }
68
69         this.grid.onRowClick.emit(row);
70     }
71
72     onRowDblClick(row: any) {
73         this.grid.onRowActivate.emit(row);
74     }
75
76 }
77