From fd52e77aed78eecefed7a8c30d38aeebaa1a1caa Mon Sep 17 00:00:00 2001 From: shamoon <4887959+shamoon@users.noreply.github.com> Date: Sun, 26 Jul 2026 14:09:46 -0700 Subject: [PATCH] Fix: propagate reload to PDF viewer even when URL doesnt change --- .../pdf-viewer/pdf-viewer.component.spec.ts | 16 ++++++++++++++++ .../common/pdf-viewer/pdf-viewer.component.ts | 3 ++- .../document-detail.component.html | 1 + .../document-detail.component.spec.ts | 1 + .../document-detail/document-detail.component.ts | 4 ++++ 5 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src-ui/src/app/components/common/pdf-viewer/pdf-viewer.component.spec.ts b/src-ui/src/app/components/common/pdf-viewer/pdf-viewer.component.spec.ts index 3b6add68c..0e16ac2b2 100644 --- a/src-ui/src/app/components/common/pdf-viewer/pdf-viewer.component.spec.ts +++ b/src-ui/src/app/components/common/pdf-viewer/pdf-viewer.component.spec.ts @@ -283,6 +283,22 @@ describe('PngxPdfViewerComponent', () => { expect(mockViewer.currentPageNumber).toBe(1) }) + it('reloads when the source revision changes', () => { + const resetSpy = jest.spyOn(component as any, 'resetViewerState') + const loadSpy = jest + .spyOn(component as any, 'loadDocument') + .mockImplementation(() => {}) + component.src = 'test.pdf' + component.sourceRevision = 1 + + component.ngOnChanges({ + sourceRevision: new SimpleChange(0, 1, false), + }) + + expect(resetSpy).toHaveBeenCalled() + expect(loadSpy).toHaveBeenCalled() + }) + it('applies viewer state after view init when already loaded', () => { const applySpy = jest.spyOn(component as any, 'applyViewerState') ;(component as any).hasLoaded = true 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 c86294b9d..4a0478316 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 @@ -43,6 +43,7 @@ export class PngxPdfViewerComponent private readonly document = inject(DOCUMENT) @Input() src!: string + @Input() sourceRevision = 0 @Input() password?: string @Input() page?: number @Output() pageChange = new EventEmitter() @@ -93,7 +94,7 @@ export class PngxPdfViewerComponent } ngOnChanges(changes: SimpleChanges): void { - if (changes['src'] || changes['password']) { + if (changes['src'] || changes['sourceRevision'] || changes['password']) { this.resetViewerState() if (this.src) { this.loadDocument() 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 83e5b4bfb..6ee6b442a 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 @@ -472,6 +472,7 @@
{ expect(openDoc.__changedFields).toEqual([]) expect(setDirtySpy).toHaveBeenCalledWith(openDoc, false) expect(saveSpy).toHaveBeenCalled() + expect(component.previewRevision()).toBe(1) }) it('should ignore incoming update for a different document id', () => { diff --git a/src-ui/src/app/components/document-detail/document-detail.component.ts b/src-ui/src/app/components/document-detail/document-detail.component.ts index f2cc502c0..3820f9ed1 100644 --- a/src-ui/src/app/components/document-detail/document-detail.component.ts +++ b/src-ui/src/app/components/document-detail/document-detail.component.ts @@ -249,6 +249,7 @@ export class DocumentDetailComponent titleSubject: Subject = new Subject() readonly previewUrl = signal(undefined) readonly pdfSource = signal(undefined) + readonly previewRevision = signal(0) readonly pdfPassword = signal(undefined) readonly thumbUrl = signal(undefined) readonly previewText = signal(undefined) @@ -609,6 +610,9 @@ export class DocumentDetailComponent .subscribe() } this.updateComponent(useDoc) + if (forceRemote) { + this.previewRevision.update((revision) => revision + 1) + } this.titleSubject .pipe( debounceTime(1000),