'use client'; import { useState, useEffect, useCallback } from 'react'; import { Table } from '@/components/ui/Table'; import { Button } from '@/components/ui/Button'; import { listOCRResults, type OCRResultResponse } from '@/lib/ocr'; import type { PaginatedResponse } from '@/lib/api'; interface OCRResultsProps { vehicleId?: string; onSelectResult?: (result: OCRResultResponse) => void; } const STATUS_COLORS: Record = { pending: 'bg-yellow-100 text-yellow-800', processing: 'bg-blue-100 text-blue-800', completed: 'bg-green-100 text-green-800', failed: 'bg-red-100 text-red-800', manual_review: 'bg-orange-100 text-orange-800', }; export function OCRResults({ vehicleId, onSelectResult }: OCRResultsProps) { const [results, setResults] = useState([]); const [total, setTotal] = useState(0); const [page, setPage] = useState(1); const [pageSize] = useState(20); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const fetchResults = useCallback(async () => { setLoading(true); setError(null); try { const data: PaginatedResponse = await listOCRResults(vehicleId, page, pageSize); setResults(data.items); setTotal(data.total); } catch (err: unknown) { const apiErr = err as { error?: { message?: string } }; setError(apiErr?.error?.message || 'Failed to load OCR results'); } finally { setLoading(false); } }, [vehicleId, page, pageSize]); useEffect(() => { fetchResults(); }, [fetchResults]); const columns = [ { key: 'file_name', label: 'File', render: (row: OCRResultResponse) => ( ), }, { key: 'status', label: 'Status', render: (row: OCRResultResponse) => ( {row.status} )}, { key: 'confidence_score', label: 'Confidence', render: (row: OCRResultResponse) => row.confidence_score != null ? `${(row.confidence_score * 100).toFixed(1)}%` : '-' }, { key: 'created_at', label: 'Created', render: (row: OCRResultResponse) => row.created_at ? new Date(row.created_at).toLocaleDateString('de-DE') : '-' }, ]; const totalPages = Math.ceil(total / pageSize); return (

OCR Results

{error && (
{error}
)} {loading ? (
Loading OCR results...
) : ( row.id} /> )} {totalPages > 1 && (
Page {page} of {totalPages} ({total} total)
)} ); }