import mangoStore from '@store/mangoStore' import dayjs from 'dayjs' import { useTranslation } from 'next-i18next' import dynamic from 'next/dynamic' import { useMemo, useState } from 'react' import { formatYAxis } from 'utils/formatting' import { formatNumericValue } from 'utils/numbers' import { usePerpFundingRate } from '@components/trade/PerpFundingRate' import { PerpStatsItem } from 'types' import { PerpMarket } from '@blockworks-foundation/mango-v4' const DetailedAreaChart = dynamic( () => import('@components/shared/DetailedAreaChart'), { ssr: false } ) const PerpMarketDetails = ({ marketStats, perpMarket, }: { marketStats: PerpStatsItem[] perpMarket: PerpMarket }) => { const { t } = useTranslation(['common', 'trade']) const loadingPerpStats = mangoStore((s) => s.perpStats.loading) const [priceDaysToShow, setPriceDaysToShow] = useState('30') const [oiDaysToShow, setOiDaysToShow] = useState('30') const [hourlyFundingeDaysToShow, setHourlyFundingDaysToShow] = useState('30') const [instantFundingDaysToShow, setInstantFundingDaysToShow] = useState('30') const rate = usePerpFundingRate() const lastStat = useMemo(() => { if (!marketStats.length) return undefined return marketStats[marketStats.length - 1] }, [marketStats]) const fundingRate = useMemo(() => { if (!lastStat) return 0 if (rate?.isSuccess) { const marketRate = rate?.data?.find( (r) => r.market_index === perpMarket?.perpMarketIndex ) return marketRate?.funding_rate_hourly } return lastStat.instantaneous_funding_rate }, [rate, lastStat]) const perpHourlyStats = useMemo(() => { const latestStat = { ...lastStat } as PerpStatsItem latestStat.instantaneous_funding_rate = fundingRate ? fundingRate : 0 latestStat.date_hour = dayjs().toISOString() if (marketStats) { const perpHourly = marketStats.concat([latestStat]) return perpHourly.map((stat) => ({ ...stat, funding_rate_hourly: stat.funding_rate_hourly * 100, })) } }, [marketStats, fundingRate]) const instantFundingRateStats = useMemo(() => { if (marketStats) { return marketStats.map((stat) => ({ ...stat, instantaneous_funding_rate: stat.instantaneous_funding_rate * 100, })) } return [] }, [marketStats]) return (
{/*
setShowPerpDetails(null)} size="small" >

{`${perpMarket.name} ${t('stats')}`}

*/} {marketStats?.length && lastStat ? ( <>
formatYAxis(x)} title={t('price')} xKey="date_hour" yKey={'price'} />
formatYAxis(x)} title={t('trade:open-interest')} xKey="date_hour" yKey={'open_interest'} />
formatNumericValue(x, 4)} title={t('trade:hourly-funding')} xKey="date_hour" yKey={'funding_rate_hourly'} yDecimals={5} />
formatNumericValue(x, 4)} title={t('trade:instantaneous-funding')} xKey="date_hour" yKey={'instantaneous_funding_rate'} yDecimals={5} />
) : null}
) } export default PerpMarketDetails