From 1ea03ac01526d4748d5a59a0fe1356ac5eb6db6c Mon Sep 17 00:00:00 2001 From: Nicoleta Panaghiu Date: Fri, 31 May 2024 11:33:14 +0300 Subject: [PATCH 1/3] RED-9175: prevent search re-trigger upon navigating the file pages. --- .../page-exclusion/page-exclusion.component.ts | 13 +++++++++++++ .../file-preview-screen.component.ts | 18 +++++++++++------- .../services/file-preview-state.service.ts | 14 ++++++++++---- 3 files changed, 34 insertions(+), 11 deletions(-) diff --git a/apps/red-ui/src/app/modules/file-preview/components/page-exclusion/page-exclusion.component.ts b/apps/red-ui/src/app/modules/file-preview/components/page-exclusion/page-exclusion.component.ts index 14dbef330..261994079 100644 --- a/apps/red-ui/src/app/modules/file-preview/components/page-exclusion/page-exclusion.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/components/page-exclusion/page-exclusion.component.ts @@ -36,6 +36,7 @@ export class PageExclusionComponent { try { const pageRanges = extractPageRanges(inputValue, file); await this._reanalysisService.excludePages({ pageRanges }, file); + this._state.excludedPages.update(value => [...value, ...this.flattenPageRanges(pageRanges)]); this._inputComponent.reset(); } catch (e) { this._toaster.error(_('file-preview.tabs.exclude-pages.error')); @@ -46,6 +47,7 @@ export class PageExclusionComponent { async includePagesRange(range: IPageRange): Promise { this._loadingService.start(); await this._reanalysisService.includePages({ pageRanges: [range] }, this._state.file()); + this._state.excludedPages.update(value => value.filter(page => !this.flattenPageRanges([range]).includes(page))); this._inputComponent.reset(); this._loadingService.stop(); } @@ -64,4 +66,15 @@ export class PageExclusionComponent { return ranges; }, []); } + + flattenPageRanges(ranges: IPageRange[]) { + const flattenedPages = []; + ranges.forEach(range => { + for (let page = range.startPage; page <= range.endPage; page++) { + flattenedPages.push(page); + } + }); + + return flattenedPages; + } } diff --git a/apps/red-ui/src/app/modules/file-preview/file-preview-screen.component.ts b/apps/red-ui/src/app/modules/file-preview/file-preview-screen.component.ts index 436f34efb..e6ba71edf 100644 --- a/apps/red-ui/src/app/modules/file-preview/file-preview-screen.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/file-preview-screen.component.ts @@ -32,7 +32,7 @@ import { Toaster, } from '@iqser/common-ui'; import { copyLocalStorageFiltersValues, FilterService, NestedFilter, processFilters } from '@iqser/common-ui/lib/filtering'; -import { AutoUnsubscribe, Bind, bool, Debounce, List, OnAttach, OnDetach } from '@iqser/common-ui/lib/utils'; +import { AutoUnsubscribe, Bind, bool, Debounce, List, log, OnAttach, OnDetach } from '@iqser/common-ui/lib/utils'; import { AnnotationWrapper } from '@models/file/annotation.wrapper'; import { ManualRedactionEntryTypes, ManualRedactionEntryWrapper } from '@models/file/manual-redaction-entry.wrapper'; import { Dictionary, File, ViewModes } from '@red/domain'; @@ -173,14 +173,17 @@ export class FilePreviewScreenComponent } }); + effect(() => { + this._viewModeService.viewMode(); + this.updateViewMode().then(); + }); + effect(() => { this.state.updateExcludedPagesStyle(); - if (this._viewModeService.viewMode()) { - this.updateViewMode().then(); - if (_documentViewer.loaded()) { - this._logger.info('[PDF] Stamp pdf'); - this._stampService.stampPDF().then(); - } + this._viewModeService.viewMode(); + if (_documentViewer.loaded()) { + this._logger.info('[PDF] Stamp pdf'); + this._stampService.stampPDF().then(); } }); } @@ -810,6 +813,7 @@ export class FilePreviewScreenComponent _('error.deleted-entity.file-dossier.label'), _('error.deleted-entity.file-dossier.action'), 'iqser:expand', + null, ); this._errorService.set(error); } diff --git a/apps/red-ui/src/app/modules/file-preview/services/file-preview-state.service.ts b/apps/red-ui/src/app/modules/file-preview/services/file-preview-state.service.ts index 11d386628..12e4bfc3a 100644 --- a/apps/red-ui/src/app/modules/file-preview/services/file-preview-state.service.ts +++ b/apps/red-ui/src/app/modules/file-preview/services/file-preview-state.service.ts @@ -1,10 +1,10 @@ import { HttpEvent, HttpEventType, HttpProgressEvent, HttpResponse } from '@angular/common/http'; -import { computed, effect, inject, Injectable, signal, Signal } from '@angular/core'; +import { computed, effect, inject, Injectable, signal, Signal, WritableSignal } from '@angular/core'; import { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop'; import { LoadingService, wipeCache } from '@iqser/common-ui'; import { getParam } from '@iqser/common-ui/lib/utils'; import { TranslateService } from '@ngx-translate/core'; -import { Dictionary, Dossier, DOSSIER_ID, DOSSIER_TEMPLATE_ID, File, FILE_ID } from '@red/domain'; +import { Dictionary, Dossier, DOSSIER_ID, DOSSIER_TEMPLATE_ID, File, FILE_ID, ViewModes } from '@red/domain'; import { DossiersService } from '@services/dossiers/dossiers.service'; import { DictionariesMapService } from '@services/entity-services/dictionaries-map.service'; import { DossierDictionariesMapService } from '@services/entity-services/dossier-dictionaries-map.service'; @@ -44,7 +44,10 @@ export class FilePreviewStateService { readonly dossierId = getParam(DOSSIER_ID); readonly dossierTemplateId = getParam(DOSSIER_TEMPLATE_ID); readonly fileId = getParam(FILE_ID); - readonly updateExcludedPagesStyle = computed(() => this.file().excludedPages); + readonly excludedPages: WritableSignal; + readonly updateExcludedPagesStyle = computed(() => { + return this.excludedPages(); + }); readonly isEditingReviewer = signal(false); constructor( @@ -61,6 +64,7 @@ export class FilePreviewStateService { this.dossier = toSignal(dossiersServiceResolver().getEntityChanged$(this.dossierId)); this.file$ = inject(FilesMapService).watch$(this.dossierId, this.fileId); this.file = toSignal(this.file$); + this.excludedPages = signal(this.file().excludedPages); this.isWritable = computed(() => { const isWritable = this._permissionsService.canPerformAnnotationActions(this.file(), this.dossier()); this._logger.info('[FILE] Is writeable:', isWritable); @@ -80,7 +84,9 @@ export class FilePreviewStateService { effect( () => { if (this._viewModeService.isEarmarks() && !this.file().hasHighlights) { - this._viewModeService.switchToStandard(); + if (this._viewModeService.viewMode() !== ViewModes.STANDARD) { + this._viewModeService.switchToStandard(); + } } }, { allowSignalWrites: true }, From 129f2d97d6fb8ba59f0fa3c71f41dc75d6bad8b8 Mon Sep 17 00:00:00 2001 From: Nicoleta Panaghiu Date: Fri, 31 May 2024 11:34:25 +0300 Subject: [PATCH 2/3] RED-9175: remove unused import. --- .../app/modules/file-preview/file-preview-screen.component.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/apps/red-ui/src/app/modules/file-preview/file-preview-screen.component.ts b/apps/red-ui/src/app/modules/file-preview/file-preview-screen.component.ts index e6ba71edf..ea41e52b8 100644 --- a/apps/red-ui/src/app/modules/file-preview/file-preview-screen.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/file-preview-screen.component.ts @@ -32,7 +32,7 @@ import { Toaster, } from '@iqser/common-ui'; import { copyLocalStorageFiltersValues, FilterService, NestedFilter, processFilters } from '@iqser/common-ui/lib/filtering'; -import { AutoUnsubscribe, Bind, bool, Debounce, List, log, OnAttach, OnDetach } from '@iqser/common-ui/lib/utils'; +import { AutoUnsubscribe, Bind, bool, Debounce, List, OnAttach, OnDetach } from '@iqser/common-ui/lib/utils'; import { AnnotationWrapper } from '@models/file/annotation.wrapper'; import { ManualRedactionEntryTypes, ManualRedactionEntryWrapper } from '@models/file/manual-redaction-entry.wrapper'; import { Dictionary, File, ViewModes } from '@red/domain'; @@ -813,7 +813,6 @@ export class FilePreviewScreenComponent _('error.deleted-entity.file-dossier.label'), _('error.deleted-entity.file-dossier.action'), 'iqser:expand', - null, ); this._errorService.set(error); } From 8220f502e6b68ee63c9680b00859d6c283eb60fc Mon Sep 17 00:00:00 2001 From: Nicoleta Panaghiu Date: Mon, 3 Jun 2024 16:10:10 +0300 Subject: [PATCH 3/3] RED-9175: removed unnecessary brackets. --- .../file-preview/services/file-preview-state.service.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/red-ui/src/app/modules/file-preview/services/file-preview-state.service.ts b/apps/red-ui/src/app/modules/file-preview/services/file-preview-state.service.ts index 12e4bfc3a..6f584dd5d 100644 --- a/apps/red-ui/src/app/modules/file-preview/services/file-preview-state.service.ts +++ b/apps/red-ui/src/app/modules/file-preview/services/file-preview-state.service.ts @@ -45,9 +45,7 @@ export class FilePreviewStateService { readonly dossierTemplateId = getParam(DOSSIER_TEMPLATE_ID); readonly fileId = getParam(FILE_ID); readonly excludedPages: WritableSignal; - readonly updateExcludedPagesStyle = computed(() => { - return this.excludedPages(); - }); + readonly updateExcludedPagesStyle = computed(() => this.excludedPages()); readonly isEditingReviewer = signal(false); constructor(