'use client' import { useState, useEffect } from 'react' import type { TrumpPost, BotTrade, BotPerformance, Candle } from '@/types' import { useDashboardStore } from '@/store/dashboard' import { usePriceSocket } from '@/lib/useRealtimeData' import { getPrices } from '@/lib/api' import KpiRow from '@/components/dashboard/KpiRow' import ChartPanel from '@/components/dashboard/ChartPanel' import BotPanel from '@/components/dashboard/BotPanel' import TradesTable from '@/components/trades/TradesTable' interface Props { initialPosts: TrumpPost[] initialPerformance?: BotPerformance initialTrades: BotTrade[] } export default function DashboardClient({ initialPosts, initialPerformance, initialTrades }: Props) { const { asset, timeframe, setLivePrice } = useDashboardStore() const [posts, setPosts] = useState(initialPosts) const [candles, setCandles] = useState([]) const [candlesLoading, setCandlesLoading] = useState(false) usePriceSocket({ onPrice: (a, price) => setLivePrice(a, price), onNewPost: (post) => setPosts((prev) => [post as TrumpPost, ...prev].slice(0, 50)), }) useEffect(() => { setCandles([]) setCandlesLoading(true) getPrices(asset, timeframe) .then(setCandles) .catch(() => {}) .finally(() => setCandlesLoading(false)) }, [asset, timeframe]) return (
{/* KPI 行 */} {/* 主内容区:图表 + Bot 面板 */}
{candlesLoading && (
Loading...
)}
{/* 交易记录 */}
) }