Merge pull request #1895 from siiky/fix/lam-1457/commitssion-profit-percentages
LAM-1457 refactor: commission profit data
This commit is contained in:
commit
4b9d101233
2 changed files with 26 additions and 35 deletions
|
|
@ -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()
|
||||||
|
|
|
||||||
|
|
@ -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>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue