import { CollectionViewer, DataSource } from "@angular/cdk/collections"; import { Package } from "../api/models/package" import { BehaviorSubject, Observable, retry, map, catchError, of, finalize } from "rxjs"; import { PkgdashService } from "../api/services"; export class PackagesDataSource extends DataSource { private packageSubject = new BehaviorSubject([]); private loadingSubject = new BehaviorSubject(false); public loading$ = this.loadingSubject.asObservable(); constructor( private pkgdashService: PkgdashService ) { super(); } connect(): Observable { return this.packageSubject.asObservable(); } disconnect(): void { this.packageSubject.complete(); this.loadingSubject.complete(); } list(filter = '', sortField = 'name', sortOrder = 'asc', page = 0, limit = 20) { this.loadingSubject.next(true); this.pkgdashService.packagesList().pipe( retry(2), map(rsp => rsp.packages || []), catchError(this.handleError('getPackages', [])), finalize(() => this.loadingSubject.next(false)) ).subscribe(packages => this.packageSubject.next(packages)); } lookup(id: string, filter: string, sortDirection: string, pageIndex: number, pageSize: number) { } private handleError(operation = 'operation', result?: T) { return (error: any): Observable => { // TODO: send the error to remote logging infrastructure console.error(error); // log to console instead // Let the app keep running by returning an empty result. return of(result as T); }; }; }