import React, { useEffect, useState } from 'react'; import { getBulkEvaluations } from '../../services/api'; import { useNavigate } from 'react-router-dom'; import { useTranslation } from 'react-i18next'; import { logger } from '../../utils/logger'; interface BulkEvaluation { _id: string; status: 'pending' | 'processing' | 'completed' | 'failed'; totalEvaluations: number; completedEvaluations: number; failedEvaluations: number; createdAt: Date; } const BulkEvaluationProgressMeter: React.FC = () => { const { t } = useTranslation(); const [evaluations, setEvaluations] = useState([]); const [loading, setLoading] = useState(true); const navigate = useNavigate(); useEffect(() => { const fetchEvaluations = async () => { try { const data = await getBulkEvaluations(); setEvaluations(data); setLoading(false); // Check if all evaluations are completed const processingEval = data.find(evaluation => evaluation.status === 'processing'); if (!processingEval) { navigate('/dashboard'); } } catch (error) { logger.error('Error fetching bulk evaluations:', error); setLoading(false); } }; fetchEvaluations(); const interval = setInterval(fetchEvaluations, 60000); // Poll every 1 minute return () => clearInterval(interval); }, [navigate]); const getLatestProcessing = () => { return evaluations.find(evaluation => evaluation.status === 'processing'); }; const processingEvaluation = getLatestProcessing(); if (loading) { return (
); } if (!processingEvaluation) { return (

{t('bulkProgress.title')}

{t('bulkProgress.progress')}
0%
{t('bulkProgress.completed', { completed: 0, total: 0 })}
); } const progress = Math.round( (processingEvaluation.completedEvaluations / processingEvaluation.totalEvaluations) * 100 ); return (

{t('bulkProgress.title')}

{t('bulkProgress.progress')}
{progress}%
{t('bulkProgress.completed', { completed: processingEvaluation.completedEvaluations, total: processingEvaluation.totalEvaluations })}
{processingEvaluation.failedEvaluations > 0 && (
{t('bulkProgress.failed', { count: processingEvaluation.failedEvaluations })}
)}
); }; export default BulkEvaluationProgressMeter;