diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/manual-redaction-dialog/manual-annotation-dialog.component.html b/apps/red-ui/src/app/modules/dossier/dialogs/manual-redaction-dialog/manual-annotation-dialog.component.html
index 9ef9e3101..fee0300fa 100644
--- a/apps/red-ui/src/app/modules/dossier/dialogs/manual-redaction-dialog/manual-annotation-dialog.component.html
+++ b/apps/red-ui/src/app/modules/dossier/dialogs/manual-redaction-dialog/manual-annotation-dialog.component.html
@@ -69,7 +69,7 @@
;
constructor(readonly viewModeService: ViewModeService, private readonly _stateService: FilePreviewStateService) {
- this.canSwitchToDeltaView$ = this._stateService.fileData$.pipe(
+ this.canSwitchToDeltaView$ = _stateService.fileData$.pipe(
filter(fileData => !!fileData),
switchMap(fileData =>
- combineLatest([fileData.hasChangeLog$, fileData.file$]).pipe(
+ combineLatest([fileData.hasChangeLog$, _stateService.file$]).pipe(
map(([hasChangeLog, file]) => hasChangeLog && !file.isApproved),
),
),
);
- this.canSwitchToRedactedView$ = this._stateService.file$.pipe(map(file => !file.analysisRequired && !file.excluded));
+ this.canSwitchToRedactedView$ = _stateService.file$.pipe(map(file => !file.analysisRequired && !file.excluded));
}
}
diff --git a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/dialogs/accept-recommendation-dialog/accept-recommendation-dialog.component.html b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/dialogs/accept-recommendation-dialog/accept-recommendation-dialog.component.html
index dfdbdfc8d..442acf00e 100644
--- a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/dialogs/accept-recommendation-dialog/accept-recommendation-dialog.component.html
+++ b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/dialogs/accept-recommendation-dialog/accept-recommendation-dialog.component.html
@@ -32,7 +32,7 @@
-
+
diff --git a/apps/red-ui/src/app/modules/dossier/services/pdf-viewer-data.service.ts b/apps/red-ui/src/app/modules/dossier/services/pdf-viewer-data.service.ts
index bdf4a81d6..0a0313f4b 100644
--- a/apps/red-ui/src/app/modules/dossier/services/pdf-viewer-data.service.ts
+++ b/apps/red-ui/src/app/modules/dossier/services/pdf-viewer-data.service.ts
@@ -1,6 +1,6 @@
import { Injectable } from '@angular/core';
-import { forkJoin, Observable, of } from 'rxjs';
-import { catchError, map, tap } from 'rxjs/operators';
+import { forkJoin, Observable, of, switchMap } from 'rxjs';
+import { catchError, map, take, tap } from 'rxjs/operators';
import { FileDataModel } from '@models/file/file-data.model';
import { PermissionsService } from '@services/permissions.service';
import { File, IRedactionLog, IViewedPage } from '@red/domain';
@@ -32,19 +32,23 @@ export class PdfViewerDataService {
);
}
- loadDataFor(file: File): Observable
{
- const fileData = this._stateService.fileData;
- const blob$ = fileData?.file.cacheIdentifier === file.cacheIdentifier ? of(fileData.blob$.value) : this.downloadOriginalFile(file);
- const redactionLog$ = this.loadRedactionLogFor(file.dossierId, file.fileId);
- const viewedPages$ = this.getViewedPagesFor(file);
+ loadDataFor(newFile: File): Observable {
+ const oldBlob$ = this._stateService.fileData?.blob$;
+ const blob$ = this._stateService.file$.pipe(
+ map(file => file.cacheIdentifier === newFile.cacheIdentifier && oldBlob$),
+ switchMap(isSame => (isSame ? oldBlob$ : this.downloadOriginalFile(newFile))),
+ take(1),
+ );
+ const redactionLog$ = this.loadRedactionLogFor(newFile.dossierId, newFile.fileId);
+ const viewedPages$ = this.getViewedPagesFor(newFile);
- const dossier = this._dossiersService.find(file.dossierId);
+ const dossier = this._dossiersService.find(newFile.dossierId);
return forkJoin([blob$, redactionLog$, viewedPages$]).pipe(
map(
(data: [blob: Blob, redactionLog: IRedactionLog, viewedPages: IViewedPage[]]) =>
new FileDataModel(
- file,
+ newFile,
...data,
this._appStateService.dictionaryData[dossier.dossierTemplateId],
this._userPreferenceService.areDevFeaturesEnabled,
@@ -60,7 +64,7 @@ export class PdfViewerDataService {
return of([]);
}
- downloadOriginalFile(file: File): Observable {
+ downloadOriginalFile(file: File): Observable {
return this._fileManagementService.downloadOriginalFile(file.dossierId, file.fileId, 'body', true, file.cacheIdentifier);
}
}
diff --git a/apps/red-ui/src/app/services/entity-services/files-map.service.ts b/apps/red-ui/src/app/services/entity-services/files-map.service.ts
index 6f3232221..151c33723 100644
--- a/apps/red-ui/src/app/services/entity-services/files-map.service.ts
+++ b/apps/red-ui/src/app/services/entity-services/files-map.service.ts
@@ -2,6 +2,7 @@ import { Injectable } from '@angular/core';
import { BehaviorSubject, Observable, Subject } from 'rxjs';
import { File } from '@red/domain';
import { filter, startWith } from 'rxjs/operators';
+import { shareLast } from '@iqser/common-ui';
@Injectable({ providedIn: 'root' })
export class FilesMapService {
@@ -37,7 +38,7 @@ export class FilesMapService {
return entities.forEach(entity => this._entityChanged$.next(entity));
}
- const changedEntities = [];
+ const changedEntities: File[] = [];
const deletedEntities = this.get(key).filter(oldEntity => !entities.find(newEntity => newEntity.id === oldEntity.id));
// Keep old object references for unchanged entities
@@ -77,6 +78,7 @@ export class FilesMapService {
return this._entityChanged$.pipe(
filter(entity => entity.id === entityId),
startWith(this.get(key, entityId)),
+ shareLast(),
);
}