From 6e8e784dc88a2a38258486a482cdf64fea107f59 Mon Sep 17 00:00:00 2001 From: siiky Date: Wed, 25 Jun 2025 11:52:21 +0100 Subject: [PATCH] refactor: use BN arithmetic inside sum Converting to BN after summing all the floats gives no advantage, the damage is done. --- .../SystemPerformance/Graphs/RefLineChart.jsx | 2 +- .../SystemPerformance/SystemPerformance.jsx | 27 +++++++++---------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/packages/admin-ui/src/pages/Dashboard/SystemPerformance/Graphs/RefLineChart.jsx b/packages/admin-ui/src/pages/Dashboard/SystemPerformance/Graphs/RefLineChart.jsx index 1d5808e7..b3790db1 100644 --- a/packages/admin-ui/src/pages/Dashboard/SystemPerformance/Graphs/RefLineChart.jsx +++ b/packages/admin-ui/src/pages/Dashboard/SystemPerformance/Graphs/RefLineChart.jsx @@ -2,7 +2,7 @@ import * as d3 from 'd3' import * as R from 'ramda' import React, { useEffect, useRef, useCallback } from 'react' -const transactionProfit = R.prop('profit') +const transactionProfit = tx => tx.profit.toNumber() const mockPoint = (tx, offsetMs, profit) => { const date = new Date(new Date(tx.created).getTime() + offsetMs).toISOString() diff --git a/packages/admin-ui/src/pages/Dashboard/SystemPerformance/SystemPerformance.jsx b/packages/admin-ui/src/pages/Dashboard/SystemPerformance/SystemPerformance.jsx index a1f4ad4f..18d714e3 100644 --- a/packages/admin-ui/src/pages/Dashboard/SystemPerformance/SystemPerformance.jsx +++ b/packages/admin-ui/src/pages/Dashboard/SystemPerformance/SystemPerformance.jsx @@ -22,7 +22,10 @@ import Nav from './Nav' BigNumber.config({ ROUNDING_MODE: BigNumber.ROUND_HALF_UP }) -const getFiats = R.map(R.prop('fiat')) +const sumBNBy = by => + R.reduce((acc, value) => acc.plus(by(value)), new BigNumber(0)) + +const getProfit = sumBNBy(tx => tx.profit) const GET_DATA = gql` query getData($excludeTestingCustomers: Boolean, $from: DateTimeISO) { @@ -95,16 +98,16 @@ const SystemPerformance = () => { if (item.fiatCode === fiatLocale) return { ...item, - fiat: parseFloat(item.fiat), - profit: parseFloat(item.profit), + fiat: new BigNumber(item.fiat), + profit: new BigNumber(item.profit), } const itemRate = R.find(R.propEq(item.fiatCode, 'code'))(data.fiatRates) const localeRate = R.find(R.propEq(fiatLocale, 'code'))(data.fiatRates) const multiplier = localeRate.rate / itemRate.rate return { ...item, - fiat: parseFloat(item.fiat) * multiplier, - profit: parseFloat(item.profit) * multiplier, + fiat: new BigNumber(item.fiat).times(multiplier), + profit: new BigNumber(item.profit).times(multiplier), } } @@ -120,15 +123,7 @@ const SystemPerformance = () => { } const getFiatVolume = () => - new BigNumber(R.sum(getFiats(transactionsToShow))).toFormat(2) - - const getProfit = transactions => { - return R.reduce( - (acc, value) => acc.plus(value.profit), - new BigNumber(0), - transactions, - ) - } + sumBNBy(tx => tx.fiat)(transactionsToShow).toFormat(2) const getPercentChange = () => { const thisTimePeriodProfit = getProfit(transactionsToShow) @@ -251,7 +246,9 @@ const SystemPerformance = () => { timeFrame={selectedRange} data={transactionsToShow} previousTimeData={transactionsLastTimePeriod} - previousProfit={getProfit(transactionsLastTimePeriod)} + previousProfit={getProfit( + transactionsLastTimePeriod, + ).toNumber()} />