From 30f7113a81bb6c14066b89a2fc1b99f26252b678 Mon Sep 17 00:00:00 2001 From: tinkle-community Date: Mon, 8 Dec 2025 18:08:01 +0800 Subject: [PATCH] fix: calculate pnl_pct in frontend when backend doesn't return it Frontend now calculates total_pnl_pct from equity values if the backend doesn't return this field. This ensures the performance chart displays correctly regardless of backend version. --- web/src/components/ComparisonChart.tsx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/web/src/components/ComparisonChart.tsx b/web/src/components/ComparisonChart.tsx index c888fc6e..f2077e93 100644 --- a/web/src/components/ComparisonChart.tsx +++ b/web/src/components/ComparisonChart.tsx @@ -38,7 +38,19 @@ export function ComparisonChart({ traders }: ComparisonChartProps) { const traderIds = traders.map((trader) => trader.trader_id) const batchData = await api.getEquityHistoryBatch(traderIds) return traders.map((trader) => { - return batchData.histories[trader.trader_id] || [] + const history = batchData.histories?.[trader.trader_id] || [] + + // If backend doesn't return total_pnl_pct, calculate it from equity + if (history.length > 0 && history[0].total_pnl_pct === undefined) { + const initialEquity = history[0].total_equity + history.forEach((point: any) => { + point.total_pnl_pct = initialEquity > 0 + ? ((point.total_equity - initialEquity) / initialEquity) * 100 + : 0 + }) + } + + return history }) }, {