Skip to content

Commit 2878b03

Browse files
Copilot0xrinegade
andcommitted
Fix decimal precision in protocol overview percentage changes to 2 decimal places
Co-authored-by: 0xrinegade <[email protected]>
1 parent b3a1c37 commit 2878b03

File tree

2 files changed

+37
-9
lines changed

2 files changed

+37
-9
lines changed

src/components/analytics/OverviewPanel.js

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ export default function OverviewPanel({ data, network, timeframe }) {
2323
return `${percent.toFixed(1)}%`;
2424
};
2525

26+
const formatPercentageChange = (percent) => {
27+
return `${percent >= 0 ? '+' : ''}${percent.toFixed(2)}%`;
28+
};
29+
2630
return (
2731
<div className="overview-panel">
2832
<div className="panel-header">
@@ -39,7 +43,7 @@ export default function OverviewPanel({ data, network, timeframe }) {
3943
<div className="kpi-content">
4044
<div className="kpi-value">{data.totalTrades?.toLocaleString() || 0}</div>
4145
<div className="kpi-label">Total Trades ({timeframe})</div>
42-
<div className="kpi-change positive">+{data.tradesChange || 0}%</div>
46+
<div className={`kpi-change ${data.tradesChange >= 0 ? 'positive' : 'negative'}`}>{formatPercentageChange(data.tradesChange || 0)}</div>
4347
</div>
4448
</div>
4549

@@ -48,7 +52,7 @@ export default function OverviewPanel({ data, network, timeframe }) {
4852
<div className="kpi-content">
4953
<div className="kpi-value">{formatVolume(data.protocolVolume)}</div>
5054
<div className="kpi-label">Protocol Volume ({timeframe})</div>
51-
<div className="kpi-change positive">+{data.volumeChange || 0}%</div>
55+
<div className={`kpi-change ${data.volumeChange >= 0 ? 'positive' : 'negative'}`}>{formatPercentageChange(data.volumeChange || 0)}</div>
5256
</div>
5357
</div>
5458

@@ -57,7 +61,7 @@ export default function OverviewPanel({ data, network, timeframe }) {
5761
<div className="kpi-content">
5862
<div className="kpi-value">{formatNumber(data.totalFees)}</div>
5963
<div className="kpi-label">Total Fees Collected</div>
60-
<div className="kpi-change positive">+{data.feesChange || 0}%</div>
64+
<div className={`kpi-change ${data.feesChange >= 0 ? 'positive' : 'negative'}`}>{formatPercentageChange(data.feesChange || 0)}</div>
6165
</div>
6266
</div>
6367

@@ -66,7 +70,7 @@ export default function OverviewPanel({ data, network, timeframe }) {
6670
<div className="kpi-content">
6771
<div className="kpi-value">{formatPercentage(data.completionRate)}</div>
6872
<div className="kpi-label">Trade Completion Rate</div>
69-
<div className="kpi-change positive">+{data.completionChange || 0}%</div>
73+
<div className={`kpi-change ${data.completionChange >= 0 ? 'positive' : 'negative'}`}>{formatPercentageChange(data.completionChange || 0)}</div>
7074
</div>
7175
</div>
7276
</div>

src/tests/OverviewPanel.test.js

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ describe('OverviewPanel', () => {
3333
expect(screen.getByText('Protocol Trading Overview')).toBeInTheDocument();
3434

3535
// Check live indicator
36-
expect(screen.getByText('Live')).toBeInTheDocument();
36+
expect(screen.getByText('[LIVE]')).toBeInTheDocument();
3737

3838
// Check KPI values
3939
expect(screen.getByText('1,250')).toBeInTheDocument(); // Total trades
@@ -155,6 +155,7 @@ describe('OverviewPanel', () => {
155155
expect(screen.getByText('0.00 SOL')).toBeInTheDocument(); // Volume
156156
expect(screen.getByText('$0.00')).toBeInTheDocument(); // Fees
157157
expect(screen.getByText('0.0%')).toBeInTheDocument(); // Completion rate
158+
expect(screen.getAllByText('+0.00%')).toHaveLength(4); // All change percentages should be +0.00%
158159
});
159160

160161
test('displays change percentages correctly', () => {
@@ -166,9 +167,32 @@ describe('OverviewPanel', () => {
166167
/>
167168
);
168169

169-
expect(screen.getByText('+8%')).toBeInTheDocument(); // Trades change
170-
expect(screen.getByText('+15%')).toBeInTheDocument(); // Volume change
171-
expect(screen.getByText('+12%')).toBeInTheDocument(); // Fees change
172-
expect(screen.getByText('+2%')).toBeInTheDocument(); // Completion change
170+
expect(screen.getByText('+8.20%')).toBeInTheDocument(); // Trades change
171+
expect(screen.getByText('+15.30%')).toBeInTheDocument(); // Volume change
172+
expect(screen.getByText('+12.10%')).toBeInTheDocument(); // Fees change
173+
expect(screen.getByText('+1.80%')).toBeInTheDocument(); // Completion change
174+
});
175+
176+
test('displays negative change percentages correctly', () => {
177+
const negativeChangeData = {
178+
...mockData,
179+
tradesChange: -5.25,
180+
volumeChange: -8.75,
181+
feesChange: -2.5,
182+
completionChange: -1.15
183+
};
184+
185+
render(
186+
<OverviewPanel
187+
data={negativeChangeData}
188+
network={mockNetwork}
189+
timeframe="24h"
190+
/>
191+
);
192+
193+
expect(screen.getByText('-5.25%')).toBeInTheDocument(); // Trades change
194+
expect(screen.getByText('-8.75%')).toBeInTheDocument(); // Volume change
195+
expect(screen.getByText('-2.50%')).toBeInTheDocument(); // Fees change
196+
expect(screen.getByText('-1.15%')).toBeInTheDocument(); // Completion change
173197
});
174198
});

0 commit comments

Comments
 (0)