'use client' import { PipelineStep, DocumentTypeResult } from '@/app/(admin)/ai/ocr-pipeline/types' const DOC_TYPE_LABELS: Record = { vocab_table: 'Vokabeltabelle', full_text: 'Volltext', generic_table: 'Tabelle', } interface PipelineStepperProps { steps: PipelineStep[] currentStep: number onStepClick: (index: number) => void onReprocess?: (index: number) => void docTypeResult?: DocumentTypeResult | null onDocTypeChange?: (docType: DocumentTypeResult['doc_type']) => void } export function PipelineStepper({ steps, currentStep, onStepClick, onReprocess, docTypeResult, onDocTypeChange, }: PipelineStepperProps) { return (
{steps.map((step, index) => { const isActive = index === currentStep const isCompleted = step.status === 'completed' const isFailed = step.status === 'failed' const isSkipped = step.status === 'skipped' const isClickable = (index <= currentStep || isCompleted) && !isSkipped return (
{index > 0 && (
)}
{/* Reprocess button — shown on completed steps on hover */} {isCompleted && onReprocess && ( )}
) })}
{/* Document type badge */} {docTypeResult && (
Dokumenttyp: {onDocTypeChange ? ( ) : ( {DOC_TYPE_LABELS[docTypeResult.doc_type] || docTypeResult.doc_type} )} ({Math.round(docTypeResult.confidence * 100)}% Konfidenz)
)}
) }