'use client'; import { useState, useEffect } from 'react'; const GREEN = '#16A34A'; const RED = '#DC2626'; const BLUE = '#2563EB'; export default function PaperDashboard() { const [data, setData] = useState(null); const [trades, setTrades] = useState({}); const [loading, setLoading] = useState(true); const [activeStrat, setActiveStrat] = useState(null); const [resetting, setResetting] = useState(false); useEffect(() => { const fetchState = async () => { try { const res = await fetch('/api/state'); const json = await res.json(); setData(json); if (!activeStrat && json.strategies?.length) { setActiveStrat(json.strategies[0].name); } setLoading(false); } catch (e) { console.error('State fetch error:', e); } }; fetchState(); const interval = setInterval(fetchState, 2000); return () => clearInterval(interval); }, [activeStrat]); useEffect(() => { if (!activeStrat) return; const fetchTrades = async () => { try { const res = await fetch(`/api/trades?strategy=${encodeURIComponent(activeStrat)}`); const json = await res.json(); setTrades(prev => ({ ...prev, [activeStrat]: json.trades || [] })); } catch (e) { console.error('Trades fetch error:', e); } }; fetchTrades(); const interval = setInterval(fetchTrades, 10000); return () => clearInterval(interval); }, [activeStrat]); const handleReset = async () => { if (!confirm('Reset ALL paper trading data? This clears all history, stats, and open positions for every strategy.')) return; setResetting(true); try { await fetch('/api/reset', { method: 'POST' }); setTrades({}); } catch (e) { console.error('Reset error:', e); } setTimeout(() => setResetting(false), 2000); }; if (loading) { return (
No active market โ waiting...
15 min
No settled trades yet.
) : ( trades.map((t, i) =>{label}
{value}