Merge pull request #1895 from siiky/fix/lam-1457/commitssion-profit-percentages

LAM-1457 refactor: commission profit data
This commit is contained in:
Rafael Taranto 2025-06-26 18:16:47 +01:00 committed by GitHub
commit 4b9d101233
2 changed files with 26 additions and 35 deletions

View file

@ -2,7 +2,7 @@ import * as d3 from 'd3'
import * as R from 'ramda' import * as R from 'ramda'
import React, { useEffect, useRef, useCallback } from 'react' import React, { useEffect, useRef, useCallback } from 'react'
const transactionProfit = R.prop('profit') const transactionProfit = tx => tx.profit.toNumber()
const mockPoint = (tx, offsetMs, profit) => { const mockPoint = (tx, offsetMs, profit) => {
const date = new Date(new Date(tx.created).getTime() + offsetMs).toISOString() const date = new Date(new Date(tx.created).getTime() + offsetMs).toISOString()

View file

@ -22,7 +22,10 @@ import Nav from './Nav'
BigNumber.config({ ROUNDING_MODE: BigNumber.ROUND_HALF_UP }) 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` const GET_DATA = gql`
query getData($excludeTestingCustomers: Boolean, $from: DateTimeISO) { query getData($excludeTestingCustomers: Boolean, $from: DateTimeISO) {
@ -62,6 +65,7 @@ const SystemPerformance = () => {
}) })
const fiatLocale = fromNamespace('locale')(data?.config).fiatCurrency const fiatLocale = fromNamespace('locale')(data?.config).fiatCurrency
const timezone = fromNamespace('locale')(data?.config).timezone const timezone = fromNamespace('locale')(data?.config).timezone
const allTransactions = data?.transactions ?? []
const NOW = Date.now() const NOW = Date.now()
@ -82,57 +86,45 @@ const SystemPerformance = () => {
if (getLastTimePeriod) { if (getLastTimePeriod) {
const duration = rangeEnd - rangeStart const duration = rangeEnd - rangeStart
return ( return (
t.error === null &&
createdTimestamp >= rangeStart - duration && createdTimestamp >= rangeStart - duration &&
createdTimestamp < rangeStart createdTimestamp < rangeStart
) )
} }
return ( return createdTimestamp >= rangeStart && createdTimestamp <= rangeEnd
t.error === null &&
createdTimestamp >= rangeStart &&
createdTimestamp <= rangeEnd
)
} }
const convertFiatToLocale = item => { const convertFiatToLocale = item => {
if (item.fiatCode === fiatLocale) if (item.fiatCode === fiatLocale)
return { return {
...item, ...item,
fiat: parseFloat(item.fiat), fiat: new BigNumber(item.fiat),
profit: parseFloat(item.profit), profit: new BigNumber(item.profit),
} }
const itemRate = R.find(R.propEq(item.fiatCode, 'code'))(data.fiatRates) const itemRate = R.find(R.propEq(item.fiatCode, 'code'))(data.fiatRates)
const localeRate = R.find(R.propEq(fiatLocale, 'code'))(data.fiatRates) const localeRate = R.find(R.propEq(fiatLocale, 'code'))(data.fiatRates)
const multiplier = localeRate.rate / itemRate.rate const multiplier = localeRate.rate / itemRate.rate
return { return {
...item, ...item,
fiat: parseFloat(item.fiat) * multiplier, fiat: new BigNumber(item.fiat).times(multiplier),
profit: parseFloat(item.profit) * multiplier, profit: new BigNumber(item.profit).times(multiplier),
} }
} }
const transactionsToShow = R.map(convertFiatToLocale)( const prepareTransactions = getLastTimePeriod =>
R.filter(isInRangeAndNoError(false), data?.transactions ?? []), allTransactions
) .filter(isInRangeAndNoError(getLastTimePeriod))
const transactionsLastTimePeriod = R.map(convertFiatToLocale)( .map(convertFiatToLocale)
R.filter(isInRangeAndNoError(true), data?.transactions ?? []),
) const transactionsToShow = prepareTransactions(false)
const transactionsLastTimePeriod = prepareTransactions(true)
const getNumTransactions = () => { const getNumTransactions = () => {
return R.length(transactionsToShow) return R.length(transactionsToShow)
} }
const getFiatVolume = () => const getFiatVolume = () =>
new BigNumber(R.sum(getFiats(transactionsToShow))).toFormat(2) sumBNBy(tx => tx.fiat)(transactionsToShow).toFormat(2)
const getProfit = transactions => {
return R.reduce(
(acc, value) => acc.plus(value.profit),
new BigNumber(0),
transactions,
)
}
const getPercentChange = () => { const getPercentChange = () => {
const thisTimePeriodProfit = getProfit(transactionsToShow) const thisTimePeriodProfit = getProfit(transactionsToShow)
@ -182,16 +174,16 @@ const SystemPerformance = () => {
return ( return (
<> <>
<Nav <Nav
showPicker={!loading && !R.isEmpty(data.transactions)} showPicker={!loading && !R.isEmpty(allTransactions)}
handleSetRange={setSelectedRange} handleSetRange={setSelectedRange}
/> />
{!loading && R.isEmpty(data.transactions) && ( {!loading && R.isEmpty(allTransactions) && (
<EmptyTable <EmptyTable
className="pt-10" className="pt-10"
message="No transactions during the last month" message="No transactions during the last month"
/> />
)} )}
{!loading && !R.isEmpty(data.transactions) && ( {!loading && !R.isEmpty(allTransactions) && (
<div className="flex flex-col gap-12"> <div className="flex flex-col gap-12">
<div className="flex gap-16"> <div className="flex gap-16">
<InfoWithLabel info={getNumTransactions()} label={'transactions'} /> <InfoWithLabel info={getNumTransactions()} label={'transactions'} />
@ -255,7 +247,9 @@ const SystemPerformance = () => {
timeFrame={selectedRange} timeFrame={selectedRange}
data={transactionsToShow} data={transactionsToShow}
previousTimeData={transactionsLastTimePeriod} previousTimeData={transactionsLastTimePeriod}
previousProfit={getProfit(transactionsLastTimePeriod)} previousProfit={getProfit(
transactionsLastTimePeriod,
).toNumber()}
/> />
</div> </div>
<div className="flex-1"> <div className="flex-1">
@ -280,10 +274,7 @@ const SystemPerformance = () => {
</div> </div>
</div> </div>
</div> </div>
<PercentageChart <PercentageChart {...getDirectionPercent()} />
cashIn={getDirectionPercent().cashIn}
cashOut={getDirectionPercent().cashOut}
/>
</div> </div>
</div> </div>
</div> </div>