mirror of
https://github.com/oceanprotocol/market.git
synced 2024-12-02 05:57:29 +01:00
* added N/A for negative values as well as missing data * added N/A in teaser for negative orders count * added N/A to profile and asset teaser * change typing on Conversion and PriceUnit * remove log * removed unnecessary check on price value
65 lines
1.8 KiB
TypeScript
65 lines
1.8 KiB
TypeScript
import { LoggerInstance } from '@oceanprotocol/lib'
|
|
import React, { useEffect, useState, ReactElement } from 'react'
|
|
import { useUserPreferences } from '@context/UserPreferences'
|
|
import Conversion from '@shared/Price/Conversion'
|
|
import NumberUnit from './NumberUnit'
|
|
import styles from './Stats.module.css'
|
|
import { useProfile } from '@context/Profile'
|
|
import { getAccessDetailsForAssets } from '@utils/accessDetailsAndPricing'
|
|
|
|
export default function Stats({
|
|
accountId
|
|
}: {
|
|
accountId: string
|
|
}): ReactElement {
|
|
const { chainIds } = useUserPreferences()
|
|
const { assets, assetsTotal, sales } = useProfile()
|
|
|
|
const [totalSales, setTotalSales] = useState(0)
|
|
|
|
useEffect(() => {
|
|
if (!assets || !accountId || !chainIds) return
|
|
|
|
async function getPublisherTotalSales() {
|
|
try {
|
|
const assetsPrices = await getAccessDetailsForAssets(assets)
|
|
let count = 0
|
|
for (const priceInfo of assetsPrices) {
|
|
if (priceInfo?.accessDetails?.price && priceInfo.stats.orders > 0) {
|
|
count +=
|
|
parseInt(priceInfo.accessDetails.price) * priceInfo.stats.orders
|
|
}
|
|
}
|
|
setTotalSales(count)
|
|
} catch (error) {
|
|
LoggerInstance.error(error.message)
|
|
}
|
|
}
|
|
getPublisherTotalSales()
|
|
}, [assets, accountId, chainIds])
|
|
|
|
return (
|
|
<div className={styles.stats}>
|
|
<NumberUnit
|
|
label="Total Sales"
|
|
value={
|
|
totalSales > 0 ? (
|
|
<Conversion
|
|
price={totalSales}
|
|
symbol={'ocean'}
|
|
hideApproximateSymbol
|
|
/>
|
|
) : (
|
|
'0'
|
|
)
|
|
}
|
|
/>
|
|
<NumberUnit
|
|
label={`Sale${sales === 1 ? '' : 's'}`}
|
|
value={sales < 0 ? 0 : sales}
|
|
/>
|
|
<NumberUnit label="Published" value={assetsTotal} />
|
|
</div>
|
|
)
|
|
}
|