X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=webapp-frontend%2Fsrc%2Fapp%2Fei-coordinator%2Fjobs-list%2Fjobs-list.component.ts;h=178400ef6dcf6a18d00b56f1b3a1bc0c169c4576;hb=5e248c6923681f9a3990aa57da3a0403c100bb57;hp=58e437a095ab4c2ba91fa5b1d4ffc276b24ee1b0;hpb=18a21c8796772fab295df182763f59700333e9ab;p=portal%2Fnonrtric-controlpanel.git diff --git a/webapp-frontend/src/app/ei-coordinator/jobs-list/jobs-list.component.ts b/webapp-frontend/src/app/ei-coordinator/jobs-list/jobs-list.component.ts index 58e437a..178400e 100644 --- a/webapp-frontend/src/app/ei-coordinator/jobs-list/jobs-list.component.ts +++ b/webapp-frontend/src/app/ei-coordinator/jobs-list/jobs-list.component.ts @@ -22,19 +22,9 @@ import { FormControl, FormGroup } from "@angular/forms"; import { MatPaginator } from "@angular/material/paginator"; import { Sort } from "@angular/material/sort"; import { MatTableDataSource } from "@angular/material/table"; -import { - forkJoin, - Subscription, - timer, -} from "rxjs"; +import { EMPTY, forkJoin, Subscription, timer } from "rxjs"; import { BehaviorSubject } from "rxjs/BehaviorSubject"; -import { - mergeMap, - finalize, - map, - tap, - switchMap, -} from "rxjs/operators"; +import { mergeMap, finalize, map, tap, switchMap } from "rxjs/operators"; import { EIJob } from "@interfaces/ei.types"; import { EIService } from "@services/ei/ei.service"; import { UiService } from "@services/ui/ui.service"; @@ -59,11 +49,14 @@ export class JobsListComponent implements OnInit { jobForm: FormGroup; darkMode: boolean; - private jobsSubject = new BehaviorSubject([]); + private jobsSubject$ = new BehaviorSubject([]); private refresh$ = new BehaviorSubject(""); - private loadingSubject = new BehaviorSubject(false); - public loading$ = this.loadingSubject.asObservable(); + private loadingSubject$ = new BehaviorSubject(false); + private polling$ = new BehaviorSubject(0); + public loading$ = this.loadingSubject$.asObservable(); subscription: Subscription; + checked: boolean = false; + firstTime: boolean = true; constructor(private eiSvc: EIService, private ui: UiService) { this.jobForm = new FormGroup({ @@ -78,7 +71,7 @@ export class JobsListComponent implements OnInit { ngOnInit(): void { this.subscription = this.dataSubscription(); - this.jobsSubject.subscribe((data) => { + this.jobsSubject$.subscribe((data) => { this.jobsDataSource = new MatTableDataSource(data); this.jobsDataSource.paginator = this.paginator; @@ -110,21 +103,28 @@ export class JobsListComponent implements OnInit { mergeMap((prodIds) => forkJoin(prodIds.map((id) => this.eiSvc.getJobsForProducer(id))) ), - finalize(() => this.loadingSubject.next(false)) + finalize(() => this.loadingSubject$.next(false)) ); - return this.refresh$ - .pipe( - switchMap((_) => - timer(0, 10000).pipe( - tap((_) => { - this.loadingSubject.next(true); - }), - switchMap((_) => jobs$), - map((response) => this.extractJobs(prodId, response)) - ) + const refreshedJobs$ = this.refresh$.pipe( + switchMap((_) => + timer(0, 10000).pipe( + tap((_) => { + this.loadingSubject$.next(true); + }), + switchMap((_) => jobs$), + map((response) => this.extractJobs(prodId, response)) ) ) + ); + + return this.polling$ + .pipe( + switchMap((value) => { + let pollCondition = value == 0 || this.checked; + return pollCondition ? refreshedJobs$ : EMPTY; + }) + ) .subscribe(); } @@ -162,6 +162,11 @@ export class JobsListComponent implements OnInit { this.jobsDataSource.data = data; } + stopPolling(checked) { + this.checked = checked; + this.polling$.next(this.jobs().length); + } + compare(a: any, b: any, isAsc: boolean) { return (a < b ? -1 : 1) * (isAsc ? 1 : -1); } @@ -190,17 +195,21 @@ export class JobsListComponent implements OnInit { } public jobs(): Job[] { - return this.jobsSubject.value; + return this.jobsSubject$.value; } private extractJobs(prodId: number[], res: EIJob[][]) { - console.log(res.length); + this.clearFilter(); let jobList = []; prodId.forEach((element, index) => { let jobs = res[index]; jobList = jobList.concat(jobs.map((job) => this.createJob(element, job))); }); - this.jobsSubject.next(jobList); + this.jobsSubject$.next(jobList); + if (this.firstTime && jobList.length > 0) { + this.polling$.next(jobList.length); + this.firstTime = false; + } return jobList; }