fix: useMemo vor Early Returns verschieben (Rules of Hooks)
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 31s
CI / test-go-edu-search (push) Successful in 31s
CI / test-python-klausur (push) Failing after 2m0s
CI / test-python-agent-core (push) Successful in 20s
CI / test-nodejs-website (push) Successful in 28s
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 31s
CI / test-go-edu-search (push) Successful in 31s
CI / test-python-klausur (push) Failing after 2m0s
CI / test-python-agent-core (push) Successful in 20s
CI / test-nodejs-website (push) Successful in 28s
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -263,6 +263,18 @@ export function OverlayReconstruction({ sessionId, onNext }: OverlayReconstructi
|
|||||||
? `${KLAUSUR_API}/api/v1/ocr-pipeline/sessions/${sessionId}/image/cropped`
|
? `${KLAUSUR_API}/api/v1/ocr-pipeline/sessions/${sessionId}/image/cropped`
|
||||||
: ''
|
: ''
|
||||||
|
|
||||||
|
// Compute median cell height (in px) for consistent font sizing
|
||||||
|
// Must be before early returns (Rules of Hooks)
|
||||||
|
const medianCellHeightPx = useMemo(() => {
|
||||||
|
const imgWVal = imageNaturalSize?.w || 1
|
||||||
|
const imgHVal = imageNaturalSize?.h || 1
|
||||||
|
const cH = reconWidth * (imgHVal / imgWVal)
|
||||||
|
if (cells.length === 0 || cH === 0) return 40
|
||||||
|
const heights = cells.map(c => cH * (c.bboxPct.h / 100)).sort((a, b) => a - b)
|
||||||
|
const mid = Math.floor(heights.length / 2)
|
||||||
|
return heights.length % 2 === 0 ? (heights[mid - 1] + heights[mid]) / 2 : heights[mid]
|
||||||
|
}, [cells, reconWidth, imageNaturalSize])
|
||||||
|
|
||||||
if (!sessionId) {
|
if (!sessionId) {
|
||||||
return <div className="text-center py-12 text-gray-400">Bitte zuerst eine Session auswaehlen.</div>
|
return <div className="text-center py-12 text-gray-400">Bitte zuerst eine Session auswaehlen.</div>
|
||||||
}
|
}
|
||||||
@@ -316,14 +328,6 @@ export function OverlayReconstruction({ sessionId, onNext }: OverlayReconstructi
|
|||||||
const imgH = imageNaturalSize?.h || 1
|
const imgH = imageNaturalSize?.h || 1
|
||||||
const containerH = reconWidth * (imgH / imgW)
|
const containerH = reconWidth * (imgH / imgW)
|
||||||
|
|
||||||
// Compute median cell height (in px) for consistent font sizing
|
|
||||||
const medianCellHeightPx = useMemo(() => {
|
|
||||||
if (cells.length === 0) return 40
|
|
||||||
const heights = cells.map(c => containerH * (c.bboxPct.h / 100)).sort((a, b) => a - b)
|
|
||||||
const mid = Math.floor(heights.length / 2)
|
|
||||||
return heights.length % 2 === 0 ? (heights[mid - 1] + heights[mid]) / 2 : heights[mid]
|
|
||||||
}, [cells, containerH])
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="space-y-3">
|
<div className="space-y-3">
|
||||||
{/* Toolbar */}
|
{/* Toolbar */}
|
||||||
|
|||||||
Reference in New Issue
Block a user