From d3eaa66515afa7bc94fb0f1fd5d01e187bd56e25 Mon Sep 17 00:00:00 2001 From: Valentin Mihai Date: Mon, 16 Dec 2024 11:26:32 +0200 Subject: [PATCH] RED-10583 - WIP on adding web sockets to be notified when there are backend updates for dossiers and files --- .../dossier-overview-screen.component.ts | 2 +- .../services/file-preview-state.service.ts | 34 ++++++++++++------- .../dossiers/dossier-changes.service.ts | 4 --- .../app/services/dossiers/dossiers.service.ts | 16 --------- .../src/app/services/files/files.service.ts | 2 +- libs/common-ui | 2 +- .../web-socket/{ => events}/analysis-event.ts | 0 .../src/lib/web-socket/events/file-event.ts | 11 ++++++ libs/red-domain/src/lib/web-socket/index.ts | 3 +- libs/red-domain/src/lib/web-socket/topics.ts | 2 ++ 10 files changed, 40 insertions(+), 36 deletions(-) rename libs/red-domain/src/lib/web-socket/{ => events}/analysis-event.ts (100%) create mode 100644 libs/red-domain/src/lib/web-socket/events/file-event.ts diff --git a/apps/red-ui/src/app/modules/dossier-overview/screen/dossier-overview-screen.component.ts b/apps/red-ui/src/app/modules/dossier-overview/screen/dossier-overview-screen.component.ts index 1325d4ccd..4685be208 100644 --- a/apps/red-ui/src/app/modules/dossier-overview/screen/dossier-overview-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossier-overview/screen/dossier-overview-screen.component.ts @@ -123,7 +123,7 @@ export default class DossierOverviewScreenComponent extends ListingComponent(WsTopics.FILE) .pipe( + log('[WS] file events'), + filter(event => event.fileEventType === FileEventTypes.UPDATE), switchMap(() => this._filesService.loadAll(this.dossierId)), takeUntilDestroyed(), ) .subscribe(); + effect( () => { if (this._viewModeService.isEarmarks() && !this.file().hasHighlights) { @@ -122,14 +140,6 @@ export class FilePreviewStateService { ); } - get #dossierFilesChange$() { - return this._dossiersService.dossierFileChanges$.pipe( - map(changes => changes[this.dossierId]), - filter(fileIds => fileIds && fileIds.length > 0), - map(() => true), - ); - } - reloadBlob(): void { this.#reloadBlob$.next(true); } 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 5d74de769..fa5a606ad 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 @@ -62,10 +62,6 @@ export class DossiersChangesService extends GenericService implements O const subscription = timer(CHANGED_CHECK_INTERVAL, CHANGED_CHECK_INTERVAL).pipe( filterEventsOnPages(this.#router), switchMap(() => this.loadOnlyChanged()), - tap(changes => { - this.#activeDossiersService.emitFileChanges(changes); - this.#archivedDossiersService.emitFileChanges(changes); - }), ); this.#subscription.add(subscription.subscribe()); } diff --git a/apps/red-ui/src/app/services/dossiers/dossiers.service.ts b/apps/red-ui/src/app/services/dossiers/dossiers.service.ts index bca71afb3..b7a509d1e 100644 --- a/apps/red-ui/src/app/services/dossiers/dossiers.service.ts +++ b/apps/red-ui/src/app/services/dossiers/dossiers.service.ts @@ -47,23 +47,7 @@ export abstract class DossiersService extends EntitiesService ); } - updateDossier(dossier: Dossier): Observable { - this.replace(dossier); - return this._dossierStatsService.getFor([dossier.id]); - } - updateDossiers(dossier: Dossier[]): void { dossier.forEach(d => this.replace(d)); } - - emitFileChanges(changes: IChangesDetails): void { - const changeModel: DossierFileChanges = {}; - changes.fileChanges.forEach(change => { - if (!changeModel[change.dossierId]) { - changeModel[change.dossierId] = []; - } - changeModel[change.dossierId].push(change.fileId); - }); - this.dossierFileChanges$.next(changeModel); - } } diff --git a/apps/red-ui/src/app/services/files/files.service.ts b/apps/red-ui/src/app/services/files/files.service.ts index a8616eb86..235b54e54 100644 --- a/apps/red-ui/src/app/services/files/files.service.ts +++ b/apps/red-ui/src/app/services/files/files.service.ts @@ -1,7 +1,7 @@ import { Injectable } from '@angular/core'; import { EntitiesService, isArray, QueryParam } from '@iqser/common-ui'; import { List, mapEach } from '@iqser/common-ui/lib/utils'; -import { ApproveResponse, Dossier, DossierFileChanges, File, IFile } from '@red/domain'; +import { ApproveResponse, DossierFileChanges, File, IFile } from '@red/domain'; import { UserService } from '@users/user.service'; import { NGXLogger } from 'ngx-logger'; import { firstValueFrom } from 'rxjs'; diff --git a/libs/common-ui b/libs/common-ui index fc8be33dc..4ed721529 160000 --- a/libs/common-ui +++ b/libs/common-ui @@ -1 +1 @@ -Subproject commit fc8be33dc6d33642ae207b6ae4c17a6ec254d11a +Subproject commit 4ed7215292cb4d00c9c94b94ec1e6bf1182146bf diff --git a/libs/red-domain/src/lib/web-socket/analysis-event.ts b/libs/red-domain/src/lib/web-socket/events/analysis-event.ts similarity index 100% rename from libs/red-domain/src/lib/web-socket/analysis-event.ts rename to libs/red-domain/src/lib/web-socket/events/analysis-event.ts diff --git a/libs/red-domain/src/lib/web-socket/events/file-event.ts b/libs/red-domain/src/lib/web-socket/events/file-event.ts new file mode 100644 index 000000000..c6c133198 --- /dev/null +++ b/libs/red-domain/src/lib/web-socket/events/file-event.ts @@ -0,0 +1,11 @@ +export const FileEventTypes = { + UPDATE: 'UPDATE', +} as const; + +export type FileEventType = keyof typeof FileEventTypes; + +export interface FileEvent { + dossierId: string; + fileId: string; + fileEventType: FileEventType; +} diff --git a/libs/red-domain/src/lib/web-socket/index.ts b/libs/red-domain/src/lib/web-socket/index.ts index 6a0f0ec49..044f1d1af 100644 --- a/libs/red-domain/src/lib/web-socket/index.ts +++ b/libs/red-domain/src/lib/web-socket/index.ts @@ -1,2 +1,3 @@ -export * from './analysis-event'; +export * from './events/analysis-event'; +export * from './events/file-event'; export * from './topics'; diff --git a/libs/red-domain/src/lib/web-socket/topics.ts b/libs/red-domain/src/lib/web-socket/topics.ts index ed9721867..5b886c68c 100644 --- a/libs/red-domain/src/lib/web-socket/topics.ts +++ b/libs/red-domain/src/lib/web-socket/topics.ts @@ -1,3 +1,5 @@ export const WsTopics = { ANALYSIS: 'analysis-events', + FILE: 'file-events', + DOSSIER: 'dossier-events', } as const;