From 08a91ba2be93a820a75f50e896faa0d933839acc Mon Sep 17 00:00:00 2001 From: Benjamin Admin Date: Tue, 24 Mar 2026 12:04:23 +0100 Subject: [PATCH] Fix sub-session tab switching: reset step state on sessionId change Step components (Deskew, Dewarp, Crop, Orientation) had local state guards that prevented reloading when sessionId changed via sub-session tab clicks. Added useEffect reset hooks that clear all local state when sessionId changes, allowing the component to properly reload the new session's data. Also renamed "Box N" to "Seite N" in BoxSessionTabs per user feedback. Co-Authored-By: Claude Opus 4.6 --- admin-lehrer/components/ocr-pipeline/BoxSessionTabs.tsx | 2 +- admin-lehrer/components/ocr-pipeline/StepCrop.tsx | 7 +++++++ admin-lehrer/components/ocr-pipeline/StepDeskew.tsx | 8 ++++++++ admin-lehrer/components/ocr-pipeline/StepDewarp.tsx | 7 +++++++ admin-lehrer/components/ocr-pipeline/StepOrientation.tsx | 8 ++++++++ 5 files changed, 31 insertions(+), 1 deletion(-) diff --git a/admin-lehrer/components/ocr-pipeline/BoxSessionTabs.tsx b/admin-lehrer/components/ocr-pipeline/BoxSessionTabs.tsx index aa25048..f4322e3 100644 --- a/admin-lehrer/components/ocr-pipeline/BoxSessionTabs.tsx +++ b/admin-lehrer/components/ocr-pipeline/BoxSessionTabs.tsx @@ -59,7 +59,7 @@ export function BoxSessionTabs({ parentSessionId, subSessions, activeSessionId, title={sub.name} > {icon} - Box {sub.box_index + 1} + Seite {sub.box_index + 1} ) })} diff --git a/admin-lehrer/components/ocr-pipeline/StepCrop.tsx b/admin-lehrer/components/ocr-pipeline/StepCrop.tsx index e578e3c..484a692 100644 --- a/admin-lehrer/components/ocr-pipeline/StepCrop.tsx +++ b/admin-lehrer/components/ocr-pipeline/StepCrop.tsx @@ -17,6 +17,13 @@ export function StepCrop({ sessionId, onNext }: StepCropProps) { const [error, setError] = useState(null) const [hasRun, setHasRun] = useState(false) + // Reset state when sessionId changes (e.g. switching sub-sessions) + useEffect(() => { + setCropResult(null) + setHasRun(false) + setError(null) + }, [sessionId]) + // Auto-trigger crop on mount useEffect(() => { if (!sessionId || hasRun) return diff --git a/admin-lehrer/components/ocr-pipeline/StepDeskew.tsx b/admin-lehrer/components/ocr-pipeline/StepDeskew.tsx index 73a1682..9ea6dbb 100644 --- a/admin-lehrer/components/ocr-pipeline/StepDeskew.tsx +++ b/admin-lehrer/components/ocr-pipeline/StepDeskew.tsx @@ -22,6 +22,14 @@ export function StepDeskew({ sessionId, onNext }: StepDeskewProps) { const [error, setError] = useState(null) const [hasAutoRun, setHasAutoRun] = useState(false) + // Reset state when sessionId changes (e.g. switching sub-sessions) + useEffect(() => { + setSession(null) + setDeskewResult(null) + setHasAutoRun(false) + setError(null) + }, [sessionId]) + // Load session and auto-trigger deskew useEffect(() => { if (!sessionId || session) return diff --git a/admin-lehrer/components/ocr-pipeline/StepDewarp.tsx b/admin-lehrer/components/ocr-pipeline/StepDewarp.tsx index 98f8514..9bcd43c 100644 --- a/admin-lehrer/components/ocr-pipeline/StepDewarp.tsx +++ b/admin-lehrer/components/ocr-pipeline/StepDewarp.tsx @@ -20,6 +20,13 @@ export function StepDewarp({ sessionId, onNext }: StepDewarpProps) { const [showGrid, setShowGrid] = useState(true) const [error, setError] = useState(null) + // Reset state when sessionId changes (e.g. switching sub-sessions) + useEffect(() => { + setDewarpResult(null) + setDeskewResult(null) + setError(null) + }, [sessionId]) + // Load session info to get deskew_result (for fine-tuning init values) useEffect(() => { if (!sessionId) return diff --git a/admin-lehrer/components/ocr-pipeline/StepOrientation.tsx b/admin-lehrer/components/ocr-pipeline/StepOrientation.tsx index 9bf0515..a77bb9b 100644 --- a/admin-lehrer/components/ocr-pipeline/StepOrientation.tsx +++ b/admin-lehrer/components/ocr-pipeline/StepOrientation.tsx @@ -30,6 +30,14 @@ export function StepOrientation({ sessionId: existingSessionId, onNext, onSubSes const [dragOver, setDragOver] = useState(false) const [sessionName, setSessionName] = useState('') + // Reset state when sessionId changes + useEffect(() => { + setSession(null) + setOrientationResult(null) + setPageSplitResult(null) + setError(null) + }, [existingSessionId]) + // Reload session data when navigating back useEffect(() => { if (!existingSessionId || session) return