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=c43690c45b3f4d08d013ec488b83dea793cca646;hp=255c5551a11a7835ecda780eada9f922ed4241b0;hpb=47d0224358d746f8a290a9c132580a4d46041495;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 255c555..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'; @@ -31,13 +33,18 @@ import { EIService } from '../services/ei/ei.service'; export class EIProducerDataSource { - private producerSubject = new BehaviorSubject([]); + private producers: Array = []; public eiProducers(): EIProducer[] { - return this.producerSubject.value; + 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(); @@ -49,29 +56,29 @@ export class EIProducerDataSource { loadProducers() { this.loadingSubject.next(true); - let producers: Array = []; - 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.addProducerToSubject(eiProducer); - producers.push(eiProducer); - }); - this.rowCount = this.producerSubject.value.length; - }); - } + this.producers = []; - private addProducerToSubject(producer: EIProducer) { - const currentValue = this.producerSubject.value; - const updatedValue = [...currentValue, producer]; - this.producerSubject.next(updatedValue); + 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