Files
luthor/otis/src/app/compliance-list/compliance-list-datasource.ts
tanshu e4783bc64e Compliance list done.
Except for the cleanup of the hearing import data, This is the first version.
2021-01-19 08:45:26 +05:30

43 lines
1.3 KiB
TypeScript

import { DataSource } from '@angular/cdk/collections';
import { EventEmitter } from '@angular/core';
import { MatPaginator, PageEvent } from '@angular/material/paginator';
import { merge, Observable, of as observableOf } from 'rxjs';
import { map, tap } from 'rxjs/operators';
import { ComplianceListItem } from './compliance-list-item';
export class ComplianceListDatasource extends DataSource<ComplianceListItem> {
constructor(public data: ComplianceListItem[], private paginator?: MatPaginator) {
super();
}
connect(): Observable<ComplianceListItem[]> {
const dataMutations: (Observable<ComplianceListItem[]> | EventEmitter<PageEvent>)[] = [
observableOf(this.data),
];
if (this.paginator) {
dataMutations.push((this.paginator as MatPaginator).page);
}
return merge(...dataMutations)
.pipe(
tap((x: ComplianceListItem[]) => {
if (this.paginator) {
this.paginator.length = x.length;
}
}),
)
.pipe(map((x: ComplianceListItem[]) => this.getPagedData(this.data)));
}
disconnect() {}
private getPagedData(data: ComplianceListItem[]) {
if (this.paginator === undefined) {
return data;
}
const startIndex = this.paginator.pageIndex * this.paginator.pageSize;
return data.slice(startIndex, startIndex + this.paginator.pageSize);
}
}