diff --git a/apps/red-ui/src/app/models/file/file-data.model.ts b/apps/red-ui/src/app/models/file/file-data.model.ts index 7a073a94e..16727d14b 100644 --- a/apps/red-ui/src/app/models/file/file-data.model.ts +++ b/apps/red-ui/src/app/models/file/file-data.model.ts @@ -9,20 +9,30 @@ export class FileDataModel { allAnnotations: AnnotationWrapper[]; readonly hasChangeLog$ = new BehaviorSubject(false); readonly blob$ = new BehaviorSubject(undefined); + readonly file$ = new BehaviorSubject(undefined); constructor( - public file: File, + private readonly _file: File, private readonly _blob: Blob, private _redactionLog: IRedactionLog, public viewedPages?: IViewedPage[], private _dictionaryData?: { [p: string]: Dictionary }, private _areDevFeaturesEnabled?: boolean, ) { + this.file$.next(_file); this.blob$.next(_blob); this._buildAllAnnotations(); } - get redactionLog() { + get file(): File { + return this.file$.value; + } + + set file(file: File) { + this.file$.next(file); + } + + get redactionLog(): IRedactionLog { return this._redactionLog; } @@ -49,7 +59,7 @@ export class FileDataModel { const previousAnnotations = this.allAnnotations || []; this.allAnnotations = entries .map(entry => AnnotationWrapper.fromData(entry)) - .filter(ann => ann.manual || !this.file.excludedPages.includes(ann.pageNumber)); + .filter(ann => ann.manual || !this._file.excludedPages.includes(ann.pageNumber)); if (!this._areDevFeaturesEnabled) { this.allAnnotations = this.allAnnotations.filter(annotation => !annotation.isFalsePositive); @@ -123,7 +133,7 @@ export class FileDataModel { } private _isChangeLogEntry(redactionLogEntry: IRedactionLogEntry, wrapper: RedactionLogEntryWrapper) { - if (this.file.numberOfAnalyses > 1) { + if (this._file.numberOfAnalyses > 1) { const viableChanges = redactionLogEntry.changes.filter(c => c.analysisNumber > 1); viableChanges.sort((a, b) => moment(a.dateTime).valueOf() - moment(b.dateTime).valueOf()); diff --git a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/pdf-viewer/pdf-viewer.component.ts b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/pdf-viewer/pdf-viewer.component.ts index 2688a3d5b..f0c0968a4 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/pdf-viewer/pdf-viewer.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/components/pdf-viewer/pdf-viewer.component.ts @@ -27,7 +27,7 @@ import { AnnotationActionsService } from '../../services/annotation-actions.serv import { UserPreferenceService } from '@services/user-preference.service'; import { BASE_HREF } from '../../../../../../tokens'; import { ConfigService } from '@services/config.service'; -import { AutoUnsubscribe, ConfirmationDialogInput, LoadingService } from '@iqser/common-ui'; +import { AutoUnsubscribe, ConfirmationDialogInput, LoadingService, shareDistinctLast } from '@iqser/common-ui'; import { DossiersDialogService } from '../../../../services/dossiers-dialog.service'; import { loadCompareDocumentWrapper } from '../../../../utils/compare-mode.utils'; import { PdfViewerUtils } from '../../../../utils/pdf-viewer.utils'; @@ -125,6 +125,8 @@ export class PdfViewerComponent extends AutoUnsubscribe implements OnInit, OnCha .pipe( filter(fileData => !!fileData), switchMap(fileData => fileData.blob$), + // Skip document reload if file content hasn't changed + shareDistinctLast(), tap(() => this._loadDocument()), ) .subscribe(); diff --git a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.html b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.html index a7271bf42..b90dd8d93 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.html +++ b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.html @@ -1,5 +1,5 @@ - +