diff options
Diffstat (limited to 'ecomp-sdk/epsdk-app-overlay/src/main/webapp/ngapp/src/app/pages/analytics/Report_List/report-list-datasource.ts')
-rw-r--r-- | ecomp-sdk/epsdk-app-overlay/src/main/webapp/ngapp/src/app/pages/analytics/Report_List/report-list-datasource.ts | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/ngapp/src/app/pages/analytics/Report_List/report-list-datasource.ts b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/ngapp/src/app/pages/analytics/Report_List/report-list-datasource.ts new file mode 100644 index 00000000..1bbdc5b4 --- /dev/null +++ b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/ngapp/src/app/pages/analytics/Report_List/report-list-datasource.ts @@ -0,0 +1,106 @@ +import { DataSource } from '@angular/cdk/collections'; +import { MatPaginator } from '@angular/material/paginator'; +import { MatSort } from '@angular/material/sort'; +import { map } from 'rxjs/operators'; +import { Observable, of as observableOf, merge } from 'rxjs'; + +// TODO: Replace this with your own data model type +export interface AllReportsItem { + rep_name: string; + descr : string; + owner : string; + create_date : string; + copy : string; + edit : string; + delete : string; + schedule : string; + run : string; + rep_id : number; +} + +// TODO: replace this with real data from your application +var EXAMPLE_DATA: AllReportsItem[]; + +/** + * Data source for the AllReports view. This class should + * encapsulate all logic for fetching and manipulating the displayed data + * (including sorting, pagination, and filtering). + */ +export class AllReportsDataSource extends DataSource<AllReportsItem> { + data: AllReportsItem[]; + paginator: MatPaginator; + sort: MatSort; + + toggle : boolean; + + constructor() { + + super(); + } + + /** + * Connect this data source to the table. The table will only update when + * the returned stream emits new items. + * @returns A stream of the items to be rendered. + */ + connect(): Observable<AllReportsItem[]> { + // Combine everything that affects the rendered data into one update + // stream for the data-table to consume. + const dataMutations = [ + observableOf(this.data), + this.paginator.page, + this.sort.sortChange + ]; + + return merge(...dataMutations).pipe(map(() => { + return this.getPagedData(this.getSortedData([...this.data])); + })); + } + + /** + * Called when the table is being destroyed. Use this function, to clean up + * any open connections or free any held resources that were set up during connect. + */ + disconnect() {} + + /** + * Paginate the data (client-side). If you're using server-side pagination, + * this would be replaced by requesting the appropriate data from the server. + */ + private getPagedData(data: AllReportsItem[]) { + const startIndex = this.paginator.pageIndex * this.paginator.pageSize; + return data.splice(startIndex, this.paginator.pageSize); + } + + /** + * Sort the data (client-side). If you're using server-side sorting, + * this would be replaced by requesting the appropriate data from the server. + */ + private getSortedData(data: AllReportsItem[]) { + if (!this.sort.active || this.sort.direction === '') { + return data; + } + + return data.sort((a, b) => { + const isAsc = this.sort.direction === 'asc'; + switch (this.sort.active) { + case 'rep_id': return compare(+a.rep_id, +b.rep_id, isAsc); + case 'rep_name': return compare(a.rep_name, b.rep_name, isAsc); + case 'descr': return compare(a.descr, b.descr, isAsc); + case 'owner': return compare(a.owner, b.owner, isAsc); + case 'create_date': return compare(a.create_date, b.create_date, isAsc); + case 'copy': return compare(a.copy, b.copy, isAsc); + case 'edit': return compare(a.edit, b.edit, isAsc); + case 'delete': return compare(a.delete, b.delete, isAsc); + case 'schedule': return compare(a.schedule, b.schedule, isAsc); + case 'run': return compare(a.run, b.run, isAsc); + default: return 0; + } + }); + } +} + +/** Simple sort comparator for example ID/Name columns (for client-side sorting). */ +function compare(a, b, isAsc) { + return (a < b ? -1 : 1) * (isAsc ? 1 : -1); +} |