X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=webapp-frontend%2Fsrc%2Fapp%2Fei-coordinator%2Fei-producer.datasource.ts;h=439352dfaf4135bf77920f7fa44e385213b2ad3f;hb=923a26d056fd5b613aa1342fff7d7f0f74d9267e;hp=8dac859ba348d862e34395fb9fd27d885bae8cf9;hpb=8068db8c07399f73ef8a221415262308c6d1e3cc;p=portal%2Fnonrtric-controlpanel.git diff --git a/webapp-frontend/src/app/ei-coordinator/ei-producer.datasource.ts b/webapp-frontend/src/app/ei-coordinator/ei-producer.datasource.ts index 8dac859..439352d 100644 --- a/webapp-frontend/src/app/ei-coordinator/ei-producer.datasource.ts +++ b/webapp-frontend/src/app/ei-coordinator/ei-producer.datasource.ts @@ -21,6 +21,8 @@ import { Injectable } from '@angular/core'; import { BehaviorSubject } from 'rxjs/BehaviorSubject'; +import { mergeMap, finalize } from 'rxjs/operators'; +import { Observable, forkJoin, of } from 'rxjs'; import { EIProducer } from '../interfaces/ei.types'; import { EIService } from '../services/ei/ei.service'; @@ -37,7 +39,12 @@ export class EIProducerDataSource { return this.producers; } + public eiProducersSubject(): Observable { + return this.producersSubject.asObservable() as Observable; + } + private loadingSubject = new BehaviorSubject(false); + private producersSubject = new BehaviorSubject([]); public loading$ = this.loadingSubject.asObservable(); @@ -50,21 +57,28 @@ export class EIProducerDataSource { loadProducers() { this.loadingSubject.next(true); this.producers = []; - this.eiSvc.getProducerIds() - .subscribe((prodIds: string[]) => { - console.log("ProducerIds: " + prodIds); - prodIds.forEach(id => { - let eiProducer = {}; - eiProducer.ei_producer_id = id; - this.eiSvc.getProducer(id).subscribe(producer => { - eiProducer.ei_producer_types = producer.supported_ei_types; - }); - this.eiSvc.getProducerStatus(id).subscribe(prodStatus => { - eiProducer.status = prodStatus.opState.toString(); - }); - this.producers.push(eiProducer); - }); - this.rowCount = this.producers.length; + + 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.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); + }); + this.rowCount = this.producers.length; } } \ No newline at end of file