From bfb65a1eb8b0c63c1d28173a9f466fdb1d43f8b2 Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Tue, 10 Feb 2026 15:10:45 -0800 Subject: [PATCH] Fix switching between docs --- .../common/pdf-viewer/pdf-viewer.component.ts | 29 ++++++++++++++++--- .../document-detail.component.html | 2 +- .../document-detail.component.ts | 27 +++++++++++++---- 3 files changed, 48 insertions(+), 10 deletions(-) diff --git a/src-ui/src/app/components/common/pdf-viewer/pdf-viewer.component.ts b/src-ui/src/app/components/common/pdf-viewer/pdf-viewer.component.ts index 4a7008b7b..032ccd3e0 100644 --- a/src-ui/src/app/components/common/pdf-viewer/pdf-viewer.component.ts +++ b/src-ui/src/app/components/common/pdf-viewer/pdf-viewer.component.ts @@ -81,7 +81,7 @@ export class PngxPdfViewerComponent this.dispatchFindIfReady() this.rendered.emit() } - private readonly onPagesInit = () => this.applyScale() + private readonly onPagesInit = () => this.applyViewerState() private readonly onPageChanging = (evt: { pageNumber: number }) => { // Avoid [(page)] two-way binding re-triggers navigation this.lastViewerPage = evt.pageNumber @@ -90,8 +90,10 @@ export class PngxPdfViewerComponent ngOnChanges(changes: SimpleChanges): void { if (changes['src']) { - this.hasLoaded = false - this.loadDocument() + this.resetViewerState() + if (this.src) { + this.loadDocument() + } return } @@ -139,6 +141,21 @@ export class PngxPdfViewerComponent this.pdfViewer = undefined } + private resetViewerState(): void { + this.hasLoaded = false + this.hasRenderedPage = false + this.lastFindQuery = '' + this.lastViewerPage = undefined + this.loadingTask?.destroy() + this.loadingTask = undefined + this.pdf = undefined + this.linkService.setDocument(null) + if (this.pdfViewer) { + this.pdfViewer.setDocument(null) + this.pdfViewer.currentPageNumber = 1 + } + } + private async loadDocument(): Promise { if (this.hasLoaded) { return @@ -222,7 +239,11 @@ export class PngxPdfViewerComponent hasPages && this.page !== this.lastViewerPage ) { - this.pdfViewer.currentPageNumber = this.page + const nextPage = Math.min( + Math.max(Math.trunc(this.page), 1), + this.pdfViewer.pagesCount + ) + this.pdfViewer.currentPageNumber = nextPage } if (this.page === this.lastViewerPage) { this.lastViewerPage = undefined diff --git a/src-ui/src/app/components/document-detail/document-detail.component.html b/src-ui/src/app/components/document-detail/document-detail.component.html index 0a52aebe7..b1b85054c 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.html +++ b/src-ui/src/app/components/document-detail/document-detail.component.html @@ -537,7 +537,7 @@ @if (!useNativePdfViewer) {
= new Subject() previewUrl: string thumbUrl: string - // Versioning: which document ID to use for file preview/download - selectedVersionId: number - newVersionLabel: string = '' - versionUploadState: UploadState = UploadState.Idle - versionUploadError: string | null = null previewText: string previewLoaded: boolean = false tiffURL: string tiffError: string + // Versioning + selectedVersionId: number + newVersionLabel: string = '' + pdfSource: PdfSource + versionUploadState: UploadState = UploadState.Idle + versionUploadError: string | null = null + correspondents: Correspondent[] documentTypes: DocumentType[] storagePaths: StoragePath[] @@ -362,6 +365,17 @@ export class DocumentDetailComponent return ContentRenderType.Other } + private updatePdfSource() { + if (!this.previewUrl) { + this.pdfSource = undefined + return + } + this.pdfSource = { + url: this.previewUrl, + password: this.password || undefined, + } + } + get isRTL() { if (!this.metadata || !this.metadata.lang) return false else { @@ -442,6 +456,7 @@ export class DocumentDetailComponent this.previewUrl = this.documentsService.getPreviewUrl( this.selectedVersionId ) + this.updatePdfSource() this.http .get(this.previewUrl, { responseType: 'text' }) .pipe( @@ -786,6 +801,7 @@ export class DocumentDetailComponent false, this.selectedVersionId ) + this.updatePdfSource() this.thumbUrl = this.documentsService.getThumbUrl(this.selectedVersionId) // For text previews, refresh content this.http @@ -1442,6 +1458,7 @@ export class DocumentDetailComponent onPasswordKeyUp(event: KeyboardEvent) { if ('Enter' == event.key) { this.password = (event.target as HTMLInputElement).value + this.updatePdfSource() } }