summaryrefslogtreecommitdiffstats
path: root/ecomp-sdk/epsdk-app-overlay/src/main/webapp/ngapp/src/app/report-run/run/run-report/run-report-datasource.ts
diff options
context:
space:
mode:
Diffstat (limited to 'ecomp-sdk/epsdk-app-overlay/src/main/webapp/ngapp/src/app/report-run/run/run-report/run-report-datasource.ts')
-rw-r--r--ecomp-sdk/epsdk-app-overlay/src/main/webapp/ngapp/src/app/report-run/run/run-report/run-report-datasource.ts89
1 files changed, 89 insertions, 0 deletions
diff --git a/ecomp-sdk/epsdk-app-overlay/src/main/webapp/ngapp/src/app/report-run/run/run-report/run-report-datasource.ts b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/ngapp/src/app/report-run/run/run-report/run-report-datasource.ts
new file mode 100644
index 00000000..8c8d6222
--- /dev/null
+++ b/ecomp-sdk/epsdk-app-overlay/src/main/webapp/ngapp/src/app/report-run/run/run-report/run-report-datasource.ts
@@ -0,0 +1,89 @@
+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 RunReportFinalTableItem {
+
+}
+
+// TODO: replace this with real data from your application
+
+
+/**
+ * Data source for the RunReportFinalTable view. This class should
+ * encapsulate all logic for fetching and manipulating the displayed data
+ * (including sorting, pagination, and filtering).
+ */
+export class RunReportDataSource extends DataSource<RunReportFinalTableItem> {
+ data: RunReportFinalTableItem[];
+ paginator: MatPaginator;
+ sort: MatSort;
+
+ 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<RunReportFinalTableItem[]> {
+ // 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: RunReportFinalTableItem[]) {
+ 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: RunReportFinalTableItem[]) {
+ 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 'name': return compare(a.name, b.name, isAsc);
+ // case 'id': return compare(+a.id, +b.id, 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);
+}