- connect(): Observable<EIProducer[]> {
- const dataMutations = [
- this.producerSubject.asObservable(),
- this.sort.sortChange
- ];
- return merge(...dataMutations).pipe(map(() => {
- return this.getSortedData([...this.producerSubject.getValue()]);
- }));
- }
-
- disconnect(): void {
- this.producerSubject.complete();
- this.loadingSubject.complete();
- }
-
- private getSortedData(data: EIProducer[]) {
- if (!this.sort || !this.sort.active || this.sort.direction === '') {
- return data;
- }
-
- return data.sort((a, b) => {
- const isAsc = this.sort.direction === 'asc';
- switch (this.sort.active) {
- case 'id': return compare(a.ei_producer_id, b.ei_producer_id, isAsc);
- case 'type': return compare(a.ei_producer_types[0], b.ei_producer_types[0], isAsc);
- case 'status': return compare(a.status, b.status, isAsc);
- default: return 0;
- }
+ this.eiSvc.getProducerIds().pipe(
+ mergeMap(prodIds =>
+ forkJoin(prodIds.map(id => {
+ return forkJoin([
+ of(id),
+ this.eiSvc.getProducer(id),
+ this.eiSvc.getProducerStatus(id)
+ ])
+ })
+ )),
+ finalize(() => this.loadingSubject.next(false))
+ ).subscribe(result => {
+ this.producers = result.map(producer => {
+ let eiProducer = <EIProducer>{};
+ eiProducer.ei_producer_id = producer[0];
+ eiProducer.ei_producer_types = producer[1].supported_ei_types;
+ eiProducer.status = producer[2].operational_state.toString();
+ return eiProducer;
+ });
+ this.producersSubject.next(this.producers);