summaryrefslogtreecommitdiffstats
path: root/ecomp-sdk/epsdk-app-overlay/src/main/webapp/ngapp/src/app/pages/analytics/Report_List/report-list-datasource.ts
diff options
context:
space:
mode:
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.ts106
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);
+}