Fix sub-session tab switching: reset step state on sessionId change
Some checks failed
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-school (push) Successful in 25s
CI / test-go-edu-search (push) Successful in 25s
CI / test-python-klausur (push) Failing after 1m53s
CI / test-python-agent-core (push) Successful in 15s
CI / test-nodejs-website (push) Successful in 17s

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 <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-03-24 12:04:23 +01:00
parent 49a36364a8
commit 08a91ba2be
5 changed files with 31 additions and 1 deletions

View File

@@ -59,7 +59,7 @@ export function BoxSessionTabs({ parentSessionId, subSessions, activeSessionId,
title={sub.name} title={sub.name}
> >
<span className="mr-1">{icon}</span> <span className="mr-1">{icon}</span>
Box {sub.box_index + 1} Seite {sub.box_index + 1}
</button> </button>
) )
})} })}

View File

@@ -17,6 +17,13 @@ export function StepCrop({ sessionId, onNext }: StepCropProps) {
const [error, setError] = useState<string | null>(null) const [error, setError] = useState<string | null>(null)
const [hasRun, setHasRun] = useState(false) 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 // Auto-trigger crop on mount
useEffect(() => { useEffect(() => {
if (!sessionId || hasRun) return if (!sessionId || hasRun) return

View File

@@ -22,6 +22,14 @@ export function StepDeskew({ sessionId, onNext }: StepDeskewProps) {
const [error, setError] = useState<string | null>(null) const [error, setError] = useState<string | null>(null)
const [hasAutoRun, setHasAutoRun] = useState(false) 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 // Load session and auto-trigger deskew
useEffect(() => { useEffect(() => {
if (!sessionId || session) return if (!sessionId || session) return

View File

@@ -20,6 +20,13 @@ export function StepDewarp({ sessionId, onNext }: StepDewarpProps) {
const [showGrid, setShowGrid] = useState(true) const [showGrid, setShowGrid] = useState(true)
const [error, setError] = useState<string | null>(null) const [error, setError] = useState<string | null>(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) // Load session info to get deskew_result (for fine-tuning init values)
useEffect(() => { useEffect(() => {
if (!sessionId) return if (!sessionId) return

View File

@@ -30,6 +30,14 @@ export function StepOrientation({ sessionId: existingSessionId, onNext, onSubSes
const [dragOver, setDragOver] = useState(false) const [dragOver, setDragOver] = useState(false)
const [sessionName, setSessionName] = useState('') 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 // Reload session data when navigating back
useEffect(() => { useEffect(() => {
if (!existingSessionId || session) return if (!existingSessionId || session) return