import { IconButton } from '@components/shared/Button' import { ChevronLeftIcon } from '@heroicons/react/20/solid' 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 = ({ perpMarket, setShowPerpDetails, }: { perpMarket: PerpMarket setShowPerpDetails: (x: PerpMarket | null) => void }) => { const { t } = useTranslation(['common', 'trade']) const perpStats = mangoStore((s) => s.perpStats.data) 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 [marketStats, lastStat] = useMemo(() => { if (!perpStats) return [undefined, undefined] const stats = perpStats .filter((stat) => stat.perp_market === perpMarket.name) .reverse() return [stats, stats[stats.length - 1]] }, [perpStats, perpMarket]) 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