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 @@
- +
@@ -80,5 +80,5 @@ - + diff --git a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/document-info/document-info.component.html b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/document-info/document-info.component.html index 8e4bdd16f..aef5c8633 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/document-info/document-info.component.html +++ b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/document-info/document-info.component.html @@ -2,7 +2,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(), ); }