import { DataSource } from '@angular/cdk/collections'; import { BehaviorSubject, Observable } from 'rxjs'; import { map } from 'rxjs/operators'; export abstract class TbDatasource implements DataSource { protected dataSubject = new BehaviorSubject>([]); connect(): Observable> { return this.dataSubject.asObservable(); } disconnect(): void { this.dataSubject.complete(); } loadData(data: Array): void { this.dataSubject.next(data); } isEmpty(): Observable { return this.dataSubject.pipe( map((data: DataType[]) => !data.length) ); } total(): Observable { return this.dataSubject.pipe( map((data: DataType[]) => data.length) ); } }