"use client"; import { useMemo } from "react"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { AreaChart, Area, XAxis, YAxis, ResponsiveContainer, Tooltip, CartesianGrid } from "recharts"; import { Wallet } from "lucide-react"; interface EquityChartProps { equityData: number[]; balanceData: number[]; } function formatTime(date: Date): string { return date.toLocaleTimeString("en-US", { timeZone: "Asia/Jakarta", hour12: false, hour: "2-digit", minute: "2-digit", }); } export function EquityChart({ equityData, balanceData }: EquityChartProps) { const chartData = useMemo(() => { if (equityData.length === 0) return []; const now = Date.now(); const totalMs = 2 * 60 * 60 * 1000; const step = equityData.length > 1 ? totalMs / (equityData.length - 1) : 0; return equityData.map((equity, i) => { const ts = new Date(now - totalMs + i * step); return { time: formatTime(ts), timestamp: ts.getTime(), equity, balance: balanceData[i] || equity, }; }); }, [equityData, balanceData]); const tickIndices = useMemo(() => { if (chartData.length <= 6) return chartData.map((d) => d.timestamp); const step = Math.floor(chartData.length / 5); const ticks: number[] = []; for (let i = 0; i < chartData.length; i += step) { ticks.push(chartData[i].timestamp); } if (ticks[ticks.length - 1] !== chartData[chartData.length - 1].timestamp) { ticks.push(chartData[chartData.length - 1].timestamp); } return ticks; }, [chartData]); return ( Equity (2H) {equityData.length > 0 && ( ${equityData[equityData.length - 1]?.toFixed(2)} )}
{chartData.length > 1 ? ( formatTime(new Date(ts))} tick={{ fontSize: 11, fill: "#86868b", fontFamily: "var(--font-mono)" }} axisLine={{ stroke: "rgba(0,0,0,0.08)" }} tickLine={false} interval="preserveStartEnd" /> `$${v.toFixed(0)}`} /> formatTime(new Date(ts))} formatter={(value: number, name: string) => [ `$${value.toFixed(2)}`, name === "equity" ? "Equity" : "Balance", ]} cursor={{ stroke: "#34C759", strokeDasharray: "3 3" }} /> ) : (

Collecting data...

)}
); }