diff --git a/admin-lehrer/components/grid-editor/useGridEditor.ts b/admin-lehrer/components/grid-editor/useGridEditor.ts index 9308dc5..188357d 100644 --- a/admin-lehrer/components/grid-editor/useGridEditor.ts +++ b/admin-lehrer/components/grid-editor/useGridEditor.ts @@ -81,8 +81,19 @@ export function useGridEditor(sessionId: string | null) { `${KLAUSUR_API}/api/v1/ocr-pipeline/sessions/${sessionId}/grid-editor`, ) if (res.status === 404) { - // No grid yet — build it - await buildGrid() + // No grid yet — build it with current modes + const params = new URLSearchParams() + params.set('ipa_mode', ipaMode) + params.set('syllable_mode', syllableMode) + const buildRes = await fetch( + `${KLAUSUR_API}/api/v1/ocr-pipeline/sessions/${sessionId}/build-grid?${params}`, + { method: 'POST' }, + ) + if (buildRes.ok) { + const data: StructuredGrid = await buildRes.json() + setGrid(data) + setDirty(false) + } return } if (!res.ok) { @@ -99,7 +110,10 @@ export function useGridEditor(sessionId: string | null) { } finally { setLoading(false) } - }, [sessionId, buildGrid]) + // Only depends on sessionId — mode changes are handled by the + // separate useEffect below, not by re-triggering loadGrid. + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [sessionId]) // Auto-rebuild when IPA or syllable mode changes (skip initial mount). // We call the API directly with the new values instead of going through