From 1ab46577f3dccd76cfe52ff9b5cb3563bf5f1a6d Mon Sep 17 00:00:00 2001 From: Dan Percic Date: Fri, 7 Jul 2023 16:00:34 +0300 Subject: [PATCH] RED-6922 fix selected text delay --- .../file-preview-screen.component.ts | 27 ++++++++++--------- .../services/pdf-proxy.service.ts | 6 ++--- .../services/document-viewer.service.ts | 12 +++++---- 3 files changed, 24 insertions(+), 21 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 fb61214bb..f5dce87ef 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 @@ -158,19 +158,6 @@ export class FilePreviewScreenComponent } }); - effect(() => { - const selectedText = this._documentViewer.selectedText(); - console.log('selectedText', selectedText); - const canPerformActions = this.pdfProxyService.canPerformActions(); - const isCurrentPageExcluded = this.state.file().isPageExcluded(this.pdf.currentPage()); - - if ((selectedText.length > 2 || this._isJapaneseString(selectedText)) && canPerformActions && !isCurrentPageExcluded) { - this.pdf.enable(textActions); - } else { - this.pdf.disable(textActions); - } - }); - effect(() => { if (this._viewModeService.viewMode()) { this.updateViewMode().then(); @@ -734,6 +721,20 @@ export class FilePreviewScreenComponent ), ) .subscribe(); + + const selectedTextEffect = this._documentViewer.selectedText$.pipe( + tap(selectedText => { + const canPerformActions = this.pdfProxyService.canPerformActions(); + const isCurrentPageExcluded = this.state.file().isPageExcluded(this.pdf.currentPage()); + + if ((selectedText.length > 2 || this._isJapaneseString(selectedText)) && canPerformActions && !isCurrentPageExcluded) { + this.pdf.enable(textActions); + } else { + this.pdf.disable(textActions); + } + }), + ); + this.addActiveScreenSubscription = selectedTextEffect.subscribe(); } #handleDeletedDossier(): void { diff --git a/apps/red-ui/src/app/modules/file-preview/services/pdf-proxy.service.ts b/apps/red-ui/src/app/modules/file-preview/services/pdf-proxy.service.ts index edfa6f2a0..6f0792a4b 100644 --- a/apps/red-ui/src/app/modules/file-preview/services/pdf-proxy.service.ts +++ b/apps/red-ui/src/app/modules/file-preview/services/pdf-proxy.service.ts @@ -186,14 +186,14 @@ export class PdfProxyService { #addManualRedactionOfType(type: ManualRedactionEntryType) { const selectedQuads: Record = this._pdf.documentViewer.getSelectedTextQuads(); - const text = this._documentViewer.selectedText(); + const text = this._documentViewer.selectedText; const manualRedactionEntry = this.#getManualRedaction(selectedQuads, text, true); this.manualAnnotationRequested$.next({ manualRedactionEntry, type }); } #redactText(type: ManualRedactionEntryType) { const selectedQuads: Record = this._pdf.documentViewer.getSelectedTextQuads(); - const text = this._documentViewer.selectedText(); + const text = this._documentViewer.selectedText; const manualRedactionEntry = this.#getManualRedaction(selectedQuads, text, true); this.redactTextRequested$.next({ manualRedactionEntry, type }); } @@ -241,7 +241,7 @@ export class PdfProxyService { this._pdf.enable(TEXT_POPUPS_TO_TOGGLE); this._viewerHeaderService.enable(HEADER_ITEMS_TO_TOGGLE); - if (this._documentViewer.selectedText().length > 2) { + if (this._documentViewer.selectedText.length > 2) { this._pdf.enable([TextPopups.REDACT_TEXT, TextPopups.ADD_HINT, TextPopups.ADD_FALSE_POSITIVE]); } } diff --git a/apps/red-ui/src/app/modules/pdf-viewer/services/document-viewer.service.ts b/apps/red-ui/src/app/modules/pdf-viewer/services/document-viewer.service.ts index 7561fc1ce..1bdeea966 100644 --- a/apps/red-ui/src/app/modules/pdf-viewer/services/document-viewer.service.ts +++ b/apps/red-ui/src/app/modules/pdf-viewer/services/document-viewer.service.ts @@ -1,7 +1,7 @@ import { effect, inject, Injectable, Signal, signal } from '@angular/core'; import { Core } from '@pdftron/webviewer'; import { NGXLogger } from 'ngx-logger'; -import { fromEvent, Observable } from 'rxjs'; +import { BehaviorSubject, fromEvent, Observable } from 'rxjs'; import { filter, tap } from 'rxjs/operators'; import { ActivatedRoute } from '@angular/router'; import { PdfViewer } from './pdf-viewer.service'; @@ -20,14 +20,13 @@ export class REDDocumentViewer { #document: DocumentViewer; readonly #loaded = signal(false); readonly #pageComplete = signal(undefined); - readonly #selectedText = signal(''); readonly #logger = inject(NGXLogger); readonly #userPreferenceService = inject(UserPreferenceService); readonly #pdf = inject(PdfViewer); readonly #activatedRoute = inject(ActivatedRoute); readonly loaded$: Observable; keyUp$: Observable; - readonly selectedText: Signal; + readonly selectedText$ = new BehaviorSubject(''); readonly loaded: Signal; readonly pageComplete: Signal; @@ -35,7 +34,6 @@ export class REDDocumentViewer { this.loaded = this.#loaded.asReadonly(); this.loaded$ = toObservable(this.#loaded); this.pageComplete = this.#pageComplete.asReadonly(); - this.selectedText = this.#selectedText.asReadonly(); effect(() => { const viewerElement = document.getElementById('viewer'); @@ -53,6 +51,10 @@ export class REDDocumentViewer { }); } + get selectedText() { + return this.selectedText$.value; + } + get PDFDoc() { return this.document?.getPDFDoc(); } @@ -156,7 +158,7 @@ export class REDDocumentViewer { #listenForDocEvents() { this.#document.addEventListener('textSelected', (quads: Quad, selectedText: string, pageNumber: number) => { - this.#selectedText.set(selectedText); + this.selectedText$.next(selectedText); this.#disableTextPopupIfCompareMode(pageNumber); });