import { useTranslation } from 'react-i18next'; import { Loader2, CheckCircle2, AlertCircle, Clock } from 'lucide-react'; interface ProgressBarProps { /** Current task state */ state?: 'PENDING' | 'PROCESSING' | 'SUCCESS' | 'FAILURE' | string; status?: string; // Alternative to state (for compatibility) /** Progress message */ message?: string; /** Progress percentage (0-100) */ progress?: number; /** Show detailed steps */ steps?: Array<{ name: string; status: 'pending' | 'active' | 'complete' | 'error'; message?: string; }>; /** Show a simple indeterminate progress bar */ indeterminate?: boolean; } export default function ProgressBar({ state, status, message, progress, steps, indeterminate = true, }: ProgressBarProps) { const { t } = useTranslation(); const taskState = state || status || 'PROCESSING'; const isActive = taskState === 'PENDING' || taskState === 'PROCESSING'; const isComplete = taskState === 'SUCCESS'; const isError = taskState === 'FAILURE'; return (
{/* Main Progress Card */}
{isActive && ( )} {isComplete && ( )} {isError && ( )} {!isActive && !isComplete && !isError && ( )}

{message || t('common.processing', { defaultValue: 'Processing...' })}

{progress !== undefined && (

{progress}%

)}
{/* Progress Bar */} {indeterminate && isActive && (
)} {/* Determinate Progress Bar */} {!indeterminate && progress !== undefined && (
)}
{/* Step-by-Step Progress */} {steps && steps.length > 0 && (

{t('common.processingSteps', { defaultValue: 'Processing Steps' })}

{steps.map((step, idx) => (
{step.status === 'complete' && ( )} {step.status === 'active' && ( )} {step.status === 'error' && ( )} {step.status === 'pending' && (
)}

{step.name}

{step.message && (

{step.message}

)}
))}
)}
); }