diff --git a/frontend/src/lib/components/PdfViewer.svelte b/frontend/src/lib/components/PdfViewer.svelte index f2b45011..e3984d7f 100644 --- a/frontend/src/lib/components/PdfViewer.svelte +++ b/frontend/src/lib/components/PdfViewer.svelte @@ -218,9 +218,16 @@ $effect(() => { }); // Scroll-sync: when activeAnnotationId changes, navigate to its page +let prevActiveAnnotationId: string | null = null; $effect(() => { - if (!activeAnnotationId || !pdfDoc) return; - const ann = annotations.find((a) => a.id === activeAnnotationId); + const id = activeAnnotationId; + if (!id || id === prevActiveAnnotationId || !pdfDoc) { + prevActiveAnnotationId = id; + return; + } + prevActiveAnnotationId = id; + + const ann = annotations.find((a) => a.id === id); if (!ann) return; if (ann.pageNumber !== currentPage) { @@ -228,10 +235,9 @@ $effect(() => { } // After page renders, scroll the annotation into view (double-rAF for async render) - const targetId = activeAnnotationId; requestAnimationFrame(() => { requestAnimationFrame(() => { - const el = document.querySelector(`[data-testid="annotation-${targetId}"]`); + const el = document.querySelector(`[data-testid="annotation-${id}"]`); el?.scrollIntoView({ behavior: 'smooth', block: 'center' }); }); });