Mercurial > hg > ng2-query-ismi
annotate src/app/query-result-table.component.ts @ 48:f8d6f8479e77 ng2-final
first working version with angular 2.4 (using old table w/o pager).
author | casties |
---|---|
date | Mon, 20 Mar 2017 18:12:48 +0100 |
parents | b65a031c4967 |
children | 738e90238443 |
rev | line source |
---|---|
45 | 1 import {Component, OnInit} from '@angular/core'; |
24 | 2 |
47
b65a031c4967
first step to angular2-final (2.4) version of the query browser.
casties
parents:
45
diff
changeset
|
3 //import {NG_TABLE_DIRECTIVES} from 'ng2-table/ng2-table'; |
b65a031c4967
first step to angular2-final (2.4) version of the query browser.
casties
parents:
45
diff
changeset
|
4 //import {PAGINATION_DIRECTIVES} from 'ng2-bootstrap/ng2-bootstrap'; |
24 | 5 |
6 import {QueryState} from './query-state'; | |
7 | |
8 @Component({ | |
27 | 9 selector: 'query-result', |
24 | 10 template: ` |
33 | 11 <div *ngIf="queryState?.results"> |
26 | 12 <span>Cypher query:</span> |
31
4926885f8a99
selectable result columns. nicer cypher query output.
casties
parents:
30
diff
changeset
|
13 <pre>{{queryState.getQueryText()}}</pre> |
25 | 14 <h2>Query result</h2> |
27 | 15 <pre>{{resultInfo}}</pre> |
29 | 16 <div *ngIf="showTable"><button (click)="showTable=false">hide results</button></div> |
17 <div *ngIf="!showTable"><button (click)="showTable=true">show results</button></div> | |
28
1ceea716600f
result table can be shown with checkbox. initially hidden if > 1000 results.
casties
parents:
27
diff
changeset
|
18 <div *ngIf="showTable"> |
30
193271b6b9d2
configure attributes per result type. select number of items per result page.
casties
parents:
29
diff
changeset
|
19 <div>Show |
193271b6b9d2
configure attributes per result type. select number of items per result page.
casties
parents:
29
diff
changeset
|
20 <select (change)="onSelectNumItems($event)"> |
193271b6b9d2
configure attributes per result type. select number of items per result page.
casties
parents:
29
diff
changeset
|
21 <option value="10">10</option> |
193271b6b9d2
configure attributes per result type. select number of items per result page.
casties
parents:
29
diff
changeset
|
22 <option value="100">100</option> |
193271b6b9d2
configure attributes per result type. select number of items per result page.
casties
parents:
29
diff
changeset
|
23 <option value="0">all</option> |
193271b6b9d2
configure attributes per result type. select number of items per result page.
casties
parents:
29
diff
changeset
|
24 </select> |
193271b6b9d2
configure attributes per result type. select number of items per result page.
casties
parents:
29
diff
changeset
|
25 results per page. |
193271b6b9d2
configure attributes per result type. select number of items per result page.
casties
parents:
29
diff
changeset
|
26 </div> |
31
4926885f8a99
selectable result columns. nicer cypher query output.
casties
parents:
30
diff
changeset
|
27 <div> |
4926885f8a99
selectable result columns. nicer cypher query output.
casties
parents:
30
diff
changeset
|
28 <form (ngSubmit)="onSelectCols($event)"> |
4926885f8a99
selectable result columns. nicer cypher query output.
casties
parents:
30
diff
changeset
|
29 Columns: |
45 | 30 <span *ngFor=" let col of allColumns"> |
31
4926885f8a99
selectable result columns. nicer cypher query output.
casties
parents:
30
diff
changeset
|
31 <input type="checkbox" value="{{col.name}}" [(ngModel)]="col.show">{{col.name}} |
4926885f8a99
selectable result columns. nicer cypher query output.
casties
parents:
30
diff
changeset
|
32 </span> |
4926885f8a99
selectable result columns. nicer cypher query output.
casties
parents:
30
diff
changeset
|
33 <button type="submit">change columns</button> |
4926885f8a99
selectable result columns. nicer cypher query output.
casties
parents:
30
diff
changeset
|
34 </form> |
4926885f8a99
selectable result columns. nicer cypher query output.
casties
parents:
30
diff
changeset
|
35 </div> |
28
1ceea716600f
result table can be shown with checkbox. initially hidden if > 1000 results.
casties
parents:
27
diff
changeset
|
36 <div *ngIf="config.paging">Page {{page}} of {{numPages}}</div> |
1ceea716600f
result table can be shown with checkbox. initially hidden if > 1000 results.
casties
parents:
27
diff
changeset
|
37 <pagination *ngIf="config.paging" |
1ceea716600f
result table can be shown with checkbox. initially hidden if > 1000 results.
casties
parents:
27
diff
changeset
|
38 class="pagination-sm" |
1ceea716600f
result table can be shown with checkbox. initially hidden if > 1000 results.
casties
parents:
27
diff
changeset
|
39 [(ngModel)]="page" |
1ceea716600f
result table can be shown with checkbox. initially hidden if > 1000 results.
casties
parents:
27
diff
changeset
|
40 [totalItems]="length" |
1ceea716600f
result table can be shown with checkbox. initially hidden if > 1000 results.
casties
parents:
27
diff
changeset
|
41 [itemsPerPage]="itemsPerPage" |
1ceea716600f
result table can be shown with checkbox. initially hidden if > 1000 results.
casties
parents:
27
diff
changeset
|
42 [maxSize]="maxSize" |
1ceea716600f
result table can be shown with checkbox. initially hidden if > 1000 results.
casties
parents:
27
diff
changeset
|
43 [boundaryLinks]="true" |
1ceea716600f
result table can be shown with checkbox. initially hidden if > 1000 results.
casties
parents:
27
diff
changeset
|
44 [rotate]="false" |
1ceea716600f
result table can be shown with checkbox. initially hidden if > 1000 results.
casties
parents:
27
diff
changeset
|
45 (pageChanged)="onChangeTable(config, $event)" |
1ceea716600f
result table can be shown with checkbox. initially hidden if > 1000 results.
casties
parents:
27
diff
changeset
|
46 (numPages)="numPages = $event"> |
1ceea716600f
result table can be shown with checkbox. initially hidden if > 1000 results.
casties
parents:
27
diff
changeset
|
47 </pagination> |
45 | 48 <ng-table |
28
1ceea716600f
result table can be shown with checkbox. initially hidden if > 1000 results.
casties
parents:
27
diff
changeset
|
49 [config]="config.sorting" |
42 | 50 (tableChanged)="onChangeTable($event)" |
28
1ceea716600f
result table can be shown with checkbox. initially hidden if > 1000 results.
casties
parents:
27
diff
changeset
|
51 [rows]="rows" [columns]="columns"> |
45 | 52 </ng-table> |
28
1ceea716600f
result table can be shown with checkbox. initially hidden if > 1000 results.
casties
parents:
27
diff
changeset
|
53 </div> |
24 | 54 </div> |
55 `, | |
27 | 56 inputs: ['queryState', 'resultInfo'], |
47
b65a031c4967
first step to angular2-final (2.4) version of the query browser.
casties
parents:
45
diff
changeset
|
57 // directives: [NG_TABLE_DIRECTIVES, PAGINATION_DIRECTIVES] |
24 | 58 }) |
42 | 59 |
24 | 60 export class QueryResultTableComponent implements OnInit { |
61 | |
62 public queryState: QueryState; | |
27 | 63 public resultInfo: string; |
64 | |
28
1ceea716600f
result table can be shown with checkbox. initially hidden if > 1000 results.
casties
parents:
27
diff
changeset
|
65 public showTable = false; |
25 | 66 public data: Array<any>; |
67 public columns: Array<any>; | |
31
4926885f8a99
selectable result columns. nicer cypher query output.
casties
parents:
30
diff
changeset
|
68 public allColumns: Array<any>; |
25 | 69 |
70 public rows: Array<any>; | |
71 | |
72 public page: number = 1; | |
73 public itemsPerPage: number = 10; | |
74 public maxSize: number = 5; | |
75 public numPages: number = 1; | |
76 public length: number = 0; | |
77 | |
78 public config: any = { | |
79 paging: true, | |
80 sorting: {'columns': this.columns}, | |
81 //filtering: {filterString: '', columnName: 'position'} | |
82 }; | |
24 | 83 |
31
4926885f8a99
selectable result columns. nicer cypher query output.
casties
parents:
30
diff
changeset
|
84 ngOnChanges(changes: any) { |
4926885f8a99
selectable result columns. nicer cypher query output.
casties
parents:
30
diff
changeset
|
85 console.debug("result table changed! changes=", changes); |
27 | 86 this.data = this.queryState.results; |
31
4926885f8a99
selectable result columns. nicer cypher query output.
casties
parents:
30
diff
changeset
|
87 this.allColumns = this.queryState.resultColumns; |
4926885f8a99
selectable result columns. nicer cypher query output.
casties
parents:
30
diff
changeset
|
88 this.columns = this.allColumns.filter(c => c.show); |
4926885f8a99
selectable result columns. nicer cypher query output.
casties
parents:
30
diff
changeset
|
89 this.config.sorting = this.columns; |
42 | 90 this.config.paging = {'page': this.page, 'itemsPerPage': this.itemsPerPage}; |
28
1ceea716600f
result table can be shown with checkbox. initially hidden if > 1000 results.
casties
parents:
27
diff
changeset
|
91 this.showTable = (this.data.length < 1000); |
42 | 92 this.onChangeTable(this.config); |
24 | 93 } |
94 | |
95 ngOnInit() { | |
96 console.debug("result table init!"); | |
97 } | |
98 | |
30
193271b6b9d2
configure attributes per result type. select number of items per result page.
casties
parents:
29
diff
changeset
|
99 onSelectNumItems(event: any) { |
193271b6b9d2
configure attributes per result type. select number of items per result page.
casties
parents:
29
diff
changeset
|
100 let selected = event.target.value; |
193271b6b9d2
configure attributes per result type. select number of items per result page.
casties
parents:
29
diff
changeset
|
101 console.debug("selected number of items:", selected); |
193271b6b9d2
configure attributes per result type. select number of items per result page.
casties
parents:
29
diff
changeset
|
102 let num = parseInt(selected); |
193271b6b9d2
configure attributes per result type. select number of items per result page.
casties
parents:
29
diff
changeset
|
103 if (num == 0) { |
193271b6b9d2
configure attributes per result type. select number of items per result page.
casties
parents:
29
diff
changeset
|
104 this.itemsPerPage = this.length; |
193271b6b9d2
configure attributes per result type. select number of items per result page.
casties
parents:
29
diff
changeset
|
105 } else { |
193271b6b9d2
configure attributes per result type. select number of items per result page.
casties
parents:
29
diff
changeset
|
106 this.itemsPerPage = num; |
193271b6b9d2
configure attributes per result type. select number of items per result page.
casties
parents:
29
diff
changeset
|
107 } |
42 | 108 // update something |
109 this.config.paging = {'page': this.page, 'itemsPerPage': this.itemsPerPage}; | |
110 this.onChangeTable(this.config); | |
30
193271b6b9d2
configure attributes per result type. select number of items per result page.
casties
parents:
29
diff
changeset
|
111 } |
193271b6b9d2
configure attributes per result type. select number of items per result page.
casties
parents:
29
diff
changeset
|
112 |
31
4926885f8a99
selectable result columns. nicer cypher query output.
casties
parents:
30
diff
changeset
|
113 onSelectCols(event: any) { |
4926885f8a99
selectable result columns. nicer cypher query output.
casties
parents:
30
diff
changeset
|
114 console.debug("select cols:", this.allColumns); |
4926885f8a99
selectable result columns. nicer cypher query output.
casties
parents:
30
diff
changeset
|
115 this.columns = this.allColumns.filter(c => c.show); |
4926885f8a99
selectable result columns. nicer cypher query output.
casties
parents:
30
diff
changeset
|
116 this.config.sorting = this.columns; |
4926885f8a99
selectable result columns. nicer cypher query output.
casties
parents:
30
diff
changeset
|
117 } |
4926885f8a99
selectable result columns. nicer cypher query output.
casties
parents:
30
diff
changeset
|
118 |
25 | 119 changePage(page:any, data:Array<any> = this.data):Array<any> { |
120 let start = (page.page - 1) * page.itemsPerPage; | |
121 let end = page.itemsPerPage > -1 ? (start + page.itemsPerPage) : data.length; | |
122 return data.slice(start, end); | |
123 } | |
124 | |
125 changeSort(data: any, config: any) { | |
126 if (!config.sorting) { | |
127 return data; | |
128 } | |
129 let columns = this.columns.filter(c => c.sort); | |
130 // simple sorting | |
26 | 131 let sorted = data.sort((previous: any, current: any) => { |
25 | 132 for (let i = 0; i < columns.length; i++) { |
133 let sort = columns[i].sort; | |
134 let columnName = columns[i].name; | |
135 if (previous[columnName] > current[columnName]) { | |
136 return sort === 'desc' ? -1 : 1; | |
137 } else if (previous[columnName] < current[columnName]) { | |
138 return sort === 'asc' ? -1 : 1; | |
139 } | |
140 } | |
141 return 0; | |
142 }); | |
26 | 143 return sorted; |
25 | 144 } |
145 | |
146 changeFilter(data: any, config: any): any { | |
147 if (!config.filtering) { | |
148 return data; | |
149 } | |
150 | |
151 let filteredData: Array<any> = data.filter((item: any) => | |
152 item[config.filtering.columnName].match(this.config.filtering.filterString)); | |
153 | |
154 return filteredData; | |
155 } | |
156 | |
47
b65a031c4967
first step to angular2-final (2.4) version of the query browser.
casties
parents:
45
diff
changeset
|
157 onChangeTable(config: any, page: any = config.paging) { |
42 | 158 console.debug("onChangeTable config=", config, " page=", page); |
25 | 159 if (config.filtering) { |
160 Object.assign(this.config.filtering, config.filtering); | |
161 } | |
162 if (config.sorting) { | |
163 Object.assign(this.config.sorting, config.sorting); | |
42 | 164 // changing sorting resets page |
165 if (page == null) { | |
166 this.page = 1; | |
167 page = {'page': this.page, 'itemsPerPage': this.itemsPerPage}; | |
168 } | |
25 | 169 } |
170 | |
31
4926885f8a99
selectable result columns. nicer cypher query output.
casties
parents:
30
diff
changeset
|
171 //let filteredData = this.changeFilter(this.data, this.config); |
4926885f8a99
selectable result columns. nicer cypher query output.
casties
parents:
30
diff
changeset
|
172 //let sortedData = this.changeSort(filteredData, this.config); |
4926885f8a99
selectable result columns. nicer cypher query output.
casties
parents:
30
diff
changeset
|
173 let sortedData = this.changeSort(this.data, this.config); |
25 | 174 |
42 | 175 this.rows = (page && this.config.paging) ? this.changePage(page, sortedData) : sortedData; |
25 | 176 this.length = sortedData.length; |
177 } | |
178 | |
24 | 179 } |