'use client'; import { useMemo } from 'react'; import { Box, Text } from '@chakra-ui/react'; import { Chart, useChart } from '@chakra-ui/charts'; import { CartesianGrid, Line, LineChart, ResponsiveContainer, Tooltip, YAxis, } from 'recharts'; import type { SimpleOrderLogData, StrategyChartOrder } from '@tradejs/types'; import { formatTimeSeriesTooltipTimestamp } from '#app/lib/timeSeriesChart'; import { TimeSeriesXAxis } from '#shared/Charts/TimeSeriesXAxis'; import { buildEquityTradeOutcomePoints, buildSnapshotTradeOutcomePoints, TradeOutcomeMarkers, } from '#shared/Charts/TradeOutcomeMarkers'; export const StrategySnapshotChart = ({ orderLog, orders, mode, height = '350px', emptyText = 'No chart data for the selected run.', }: { orderLog: SimpleOrderLogData; orders: StrategyChartOrder[]; mode: 'replay' | 'ai'; height?: string | number; emptyText?: string; }) => { const chartData = useMemo( () => ({ data: orderLog.map(([timestamp, amount]) => ({ timestamp, equity: amount, })), series: [ { name: 'equity', color: 'teal.solid', }, ], }), [orderLog], ); const tradeOutcomePoints = useMemo( () => mode === 'ai' ? buildEquityTradeOutcomePoints(orderLog) : buildSnapshotTradeOutcomePoints(orders), [mode, orderLog, orders], ); const chart = useChart(chartData as any); if (!orderLog.length) { return ( {emptyText} ); } const values = orderLog.map(([, amount]) => amount); const minValue = Math.min(...values); const startTimestamp = orderLog[0][0]; const endTimestamp = orderLog[orderLog.length - 1][0]; return ( } /> {chart.series.map((item) => ( ))} ); };