diff --git a/src/angular/hq/src/app/psr/Services/psr-refresh.service.ts b/src/angular/hq/src/app/psr/Services/psr-refresh.service.ts new file mode 100644 index 00000000..3b260847 --- /dev/null +++ b/src/angular/hq/src/app/psr/Services/psr-refresh.service.ts @@ -0,0 +1,17 @@ +import { Injectable } from '@angular/core'; +import { BehaviorSubject } from 'rxjs'; + +@Injectable({ + providedIn: 'root', +}) +export class PsrRefreshService { + private refreshSubject = new BehaviorSubject(false); + + triggerRefresh() { + this.refreshSubject.next(true); + } + + getRefreshObservable() { + return this.refreshSubject.asObservable(); + } +} diff --git a/src/angular/hq/src/app/psr/psr-details-header/psr-details-header.component.ts b/src/angular/hq/src/app/psr/psr-details-header/psr-details-header.component.ts index 6fa93e1f..55d35449 100644 --- a/src/angular/hq/src/app/psr/psr-details-header/psr-details-header.component.ts +++ b/src/angular/hq/src/app/psr/psr-details-header/psr-details-header.component.ts @@ -5,6 +5,7 @@ import { combineLatest, debounceTime, map, + merge, shareReplay, switchMap, } from 'rxjs'; @@ -12,6 +13,7 @@ import { GetPSRRecordV1 } from '../../models/PSR/get-PSR-v1'; import { ActivatedRoute, RouterLink } from '@angular/router'; import { HQService } from '../../services/hq.service'; import { Period } from '../../enums/period'; +import { PsrRefreshService } from '../Services/psr-refresh.service'; @Component({ selector: 'hq-psr-details-header', @@ -26,6 +28,7 @@ export class PsrDetailsHeaderComponent { constructor( private activatedRoute: ActivatedRoute, private hqService: HQService, + private psrRefreshService: PsrRefreshService, ) { this.projectReportId$ = activatedRoute.paramMap.pipe( map((params) => params.get('psrId')), @@ -33,7 +36,15 @@ export class PsrDetailsHeaderComponent { const request$ = combineLatest({ id: this.projectReportId$, }); - const response$ = request$.pipe( + + const requestTrigger$ = merge( + request$, + this.psrRefreshService + .getRefreshObservable() + .pipe(switchMap(() => request$)), + ); + + const response$ = requestTrigger$.pipe( debounceTime(500), switchMap((request) => this.hqService.getPSRV1(request)), shareReplay({ bufferSize: 1, refCount: false }), @@ -45,7 +56,6 @@ export class PsrDetailsHeaderComponent { }), ); } - getPeriodName(period: Period) { return Period[period]; } diff --git a/src/angular/hq/src/app/psr/psrtime-list/psrtime-list.component.ts b/src/angular/hq/src/app/psr/psrtime-list/psrtime-list.component.ts index 9bef6382..9326ef88 100644 --- a/src/angular/hq/src/app/psr/psrtime-list/psrtime-list.component.ts +++ b/src/angular/hq/src/app/psr/psrtime-list/psrtime-list.component.ts @@ -1,3 +1,4 @@ +import { PsrRefreshService } from './../Services/psr-refresh.service'; import { SelectInputOptionDirective } from './../../core/directives/select-input-option.directive'; import { HQConfirmationModalService } from './../../common/confirmation-modal/services/hq-confirmation-modal-service'; import { HQSnackBarService } from './../../common/hq-snack-bar/services/hq-snack-bar-service'; @@ -124,6 +125,7 @@ export class PSRTimeListComponent implements OnInit, OnDestroy { private modalService: ModalService, private toastService: ToastService, private oidcSecurityService: OidcSecurityService, + private psrRefreshService: PsrRefreshService, ) { this.sortOption$ = new BehaviorSubject(SortColumn.Date); this.sortDirection$ = new BehaviorSubject(SortDirection.Asc); @@ -228,7 +230,10 @@ export class PSRTimeListComponent implements OnInit, OnDestroy { const refresh$ = this.refresh$.pipe( switchMap(() => apiResponse$), - tap(() => this.deselectAll()), + tap(() => { + this.deselectAll(); + this.psrRefreshService.triggerRefresh(); + }), ); const response$ = merge(apiResponse$, refresh$).pipe(