import { useEffect, useState } from 'react'; import { useBacktestList } from './hooks/useBacktest'; import { Link, useNavigate } from 'react-router-dom'; import { PlusIcon, PlayIcon, CheckCircleIcon, XCircleIcon, ClockIcon, ExclamationTriangleIcon } from '@heroicons/react/24/solid'; export function BacktestListPage() { const { backtests, isLoading, error, loadBacktests } = useBacktestList(); const navigate = useNavigate(); const [refreshInterval, setRefreshInterval] = useState(null); useEffect(() => { loadBacktests(); // Refresh every 5 seconds if there are running backtests const interval = setInterval(() => { if (backtests.some(b => b.status === 'running' || b.status === 'pending')) { loadBacktests(); } }, 5000); setRefreshInterval(interval); return () => { if (refreshInterval) { clearInterval(refreshInterval); } }; }, [loadBacktests]); const getStatusIcon = (status: string) => { switch (status) { case 'completed': return ; case 'running': return ; case 'pending': return ; case 'failed': return ; case 'cancelled': return ; default: return ; } }; const getStatusColor = (status: string) => { switch (status) { case 'completed': return 'text-success'; case 'running': return 'text-primary-400'; case 'failed': return 'text-error'; case 'cancelled': return 'text-text-muted'; default: return 'text-text-secondary'; } }; const formatDate = (dateString: string) => { return new Date(dateString).toLocaleString(); }; return (

Backtest History

View and manage your backtest runs

{error && (
{error}
)} {isLoading ? (
Loading backtests...
) : backtests.length === 0 ? (

No backtests found

) : (
{backtests.map((backtest) => ( ))}
ID Strategy Symbols Period Status Created Actions
{backtest.id.slice(0, 8)}... {backtest.strategy} {backtest.symbols.join(', ')} {new Date(backtest.startDate).toLocaleDateString()} - {new Date(backtest.endDate).toLocaleDateString()}
{getStatusIcon(backtest.status)} {backtest.status}
{formatDate(backtest.createdAt)} View
)}
); }