"use client";
import { useTradingData } from "@/hooks/use-trading-data";
import { useStaggerEntry } from "@/hooks/use-stagger-entry";
import {
Header,
PriceCard,
AccountCard,
SessionCard,
RiskCard,
SignalCard,
RegimeCard,
PositionsCard,
LogCard,
PriceChart,
EquityChart,
BotStatusCard,
EntryFilterCard,
PerformanceCard,
ModelCard,
} from "@/components/dashboard";
import { Skeleton } from "@/components/ui/skeleton";
import { TooltipProvider } from "@/components/ui/tooltip";
import { cn } from "@/lib/utils";
function LoadingSkeleton() {
return (
{[...Array(4)].map((_, i) => (
))}
{[...Array(4)].map((_, i) => (
))}
{[...Array(4)].map((_, i) => (
))}
);
}
function ErrorDisplay({ message }: { message: string }) {
return (
!
Connection Error
{message}
Make sure the API server is running on port 8000
);
}
export default function Dashboard() {
const { data, loading, error, dataAge } = useTradingData();
const visible = useStaggerEntry(17, 40);
const now = new Date();
const wibTime = now.toLocaleTimeString("en-US", {
timeZone: "Asia/Jakarta",
hour12: false,
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
});
if (loading && !data) {
return (
);
}
if (error && !data) {
return (
);
}
if (!data) return null;
return (
{/* Main grid — fills remaining height, NO scroll */}
{/* Row 1: Market Overview */}
{/* Row 2: AI Signals */}
{/* Row 3: Charts */}
{/* Row 4: Trading + Log */}
);
}