From 27e64380b029c7d788b649fb2b1ccb42afd2e1d9 Mon Sep 17 00:00:00 2001 From: Valentin Mihai Date: Thu, 21 Nov 2024 11:34:00 +0200 Subject: [PATCH] RED-10483 - stop making additional dossier requests which leads to "Dossier not found" error when dossier is already deleted --- .../dossiers/dossier-changes.service.ts | 18 ++++++++++++++---- .../services/dossiers/dossier-stats.service.ts | 2 +- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/apps/red-ui/src/app/services/dossiers/dossier-changes.service.ts b/apps/red-ui/src/app/services/dossiers/dossier-changes.service.ts index 5ba7e9f9b..5d74de769 100644 --- a/apps/red-ui/src/app/services/dossiers/dossier-changes.service.ts +++ b/apps/red-ui/src/app/services/dossiers/dossier-changes.service.ts @@ -1,5 +1,5 @@ import { GenericService, ROOT_CHANGES_KEY } from '@iqser/common-ui'; -import { Dossier, DossierStats, IChangesDetails } from '@red/domain'; +import { Dossier, IChangesDetails, IDossierChanges } from '@red/domain'; import { forkJoin, Observable, Subscription, timer } from 'rxjs'; import { filter, map, switchMap, take, tap } from 'rxjs/operators'; import { NGXLogger } from 'ngx-logger'; @@ -24,17 +24,18 @@ export class DossiersChangesService extends GenericService implements O protected readonly _defaultModelPath = 'dossier'; loadOnlyChanged(): Observable { - const load = (changes: IChangesDetails) => this.#load(changes.dossierChanges.map(d => d.dossierId)); + const load = (changes: IChangesDetails) => this.#load(this.#mapDossierChanges(changes.dossierChanges)); const loadStats = (change: IChangesDetails) => { const dossierStatsToLoad = new Set(); change.dossierChanges.forEach(dossierChange => dossierStatsToLoad.add(dossierChange.dossierId)); change.fileChanges.forEach(fileChange => dossierStatsToLoad.add(fileChange.dossierId)); - return this.#dossierStatsService.getFor(Array.from(dossierStatsToLoad)); + const dossierIds = this.#filterDossierIds(Array.from(dossierStatsToLoad)); + return this.#dossierStatsService.getFor(dossierIds); }; return this.hasChangesDetails$().pipe( - tap(changes => this.#logger.info('[DOSSIERS_CHANGES] Found changes', changes)), + tap(changes => console.log('[DOSSIERS_CHANGES] Found changes', changes)), switchMap(dossierChanges => forkJoin([load(dossierChanges), loadStats(dossierChanges), this.#dashboardStatsService.loadAll().pipe(take(1))]).pipe( map(() => dossierChanges), @@ -97,4 +98,13 @@ export class DossiersChangesService extends GenericService implements O }), ); } + + #filterDossierIds(ids: string[]) { + return ids.filter(id => this.#dashboardStatsService.all.find(stats => stats.dossiersInTemplate.includes(id))); + } + + #mapDossierChanges(dossierChanges: IDossierChanges | string[]): string[] { + const dossierIds = dossierChanges.map(change => change.dossierId); + return this.#filterDossierIds(dossierIds); + } } diff --git a/apps/red-ui/src/app/services/dossiers/dossier-stats.service.ts b/apps/red-ui/src/app/services/dossiers/dossier-stats.service.ts index 139f9e126..1a2856eea 100644 --- a/apps/red-ui/src/app/services/dossiers/dossier-stats.service.ts +++ b/apps/red-ui/src/app/services/dossiers/dossier-stats.service.ts @@ -1,6 +1,6 @@ import { inject, Injectable } from '@angular/core'; import { StatsService } from '@iqser/common-ui'; -import { DOSSIER_ID, DossierStats, IDossierStats } from '@red/domain'; +import { DashboardStats, DOSSIER_ID, DossierStats, IDossierStats } from '@red/domain'; import { Observable, of } from 'rxjs'; import { UserService } from '@users/user.service'; import { NGXLogger } from 'ngx-logger';