From 3134496a6d2a8bc3cc91dca88352f4f74c6033e8 Mon Sep 17 00:00:00 2001 From: Neil <4138956+nwparker@users.noreply.github.com> Date: Tue, 26 May 2026 20:13:34 -0700 Subject: [PATCH] fix: clean up PDF scale event listener (#2875) --- src/renderer/src/components/editor/PdfViewer.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/renderer/src/components/editor/PdfViewer.tsx b/src/renderer/src/components/editor/PdfViewer.tsx index 908bb093fab..d64d9cb587a 100644 --- a/src/renderer/src/components/editor/PdfViewer.tsx +++ b/src/renderer/src/components/editor/PdfViewer.tsx @@ -86,11 +86,12 @@ export default function PdfViewer({ content, filePath }: PdfViewerProps): JSX.El linkService.setViewer(viewer) - eventBus.on('scalechanging', (evt: { scale: number }) => { + const handleScaleChanging = (evt: { scale: number }): void => { if (!cancelled) { setScale(evt.scale) } - }) + } + eventBus.on('scalechanging', handleScaleChanging) const loadingTask = pdfjsLib.getDocument({ data: bytes }) @@ -128,6 +129,9 @@ export default function PdfViewer({ content, filePath }: PdfViewerProps): JSX.El // renders, clears the find controller, and dispatches pagesdestroy. // The runtime accepts null but the types only declare PDFDocumentProxy. viewer.setDocument(null as unknown as pdfjsLib.PDFDocumentProxy) + // Why: pdf.js EventBus retains callbacks by event name; unregister the + // scale listener so repeated PDF opens do not retain stale component state. + eventBus.off('scalechanging', handleScaleChanging) eventBusRef.current = null findControllerRef.current = null pdfViewerRef.current = null