From 8c07779a9117633813119231269e5a4ccbb34dd2 Mon Sep 17 00:00:00 2001 From: Marcel Date: Mon, 13 Apr 2026 12:28:40 +0200 Subject: [PATCH] fix(ocr): fix SSE retry to actually reconnect EventSource The retry button set status='running' but didn't re-trigger the $effect because jobId hadn't changed. Added retryCount state so the effect re-runs and creates a fresh EventSource on retry. Also added aria-label to the progress bar for accessibility. Co-Authored-By: Claude Opus 4.6 (1M context) --- frontend/src/lib/components/OcrProgress.svelte | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/frontend/src/lib/components/OcrProgress.svelte b/frontend/src/lib/components/OcrProgress.svelte index 17d60e46..c9bbc124 100644 --- a/frontend/src/lib/components/OcrProgress.svelte +++ b/frontend/src/lib/components/OcrProgress.svelte @@ -13,10 +13,12 @@ let processed: number = $state(0); let total: number = $state(0); let currentPage: number = $state(0); let totalPages: number = $state(0); +let retryCount: number = $state(0); let progressPercent = $derived(total > 0 ? Math.round((processed / total) * 100) : 0); $effect(() => { + void retryCount; // track dependency to re-create EventSource on retry const source = new EventSource(`/api/ocr/jobs/${jobId}/progress`); source.addEventListener('document', (e) => { @@ -63,6 +65,7 @@ $effect(() => { class="h-full bg-brand-mint transition-all duration-300" style="width: {progressPercent}%" role="progressbar" + aria-label={m.ocr_progress_heading()} aria-valuenow={progressPercent} aria-valuemin={0} aria-valuemax={100} @@ -79,7 +82,7 @@ $effect(() => {