import { PerpMarket } from '@blockworks-foundation/mango-v4' import { IconButton } from '@components/shared/Button' import Change from '@components/shared/Change' import { getOneDayPerpStats } from '@components/stats/PerpMarketsTable' import { ChartBarIcon } from '@heroicons/react/20/solid' import mangoStore from '@store/mangoStore' import { useCoingecko } from 'hooks/useCoingecko' import useSelectedMarket from 'hooks/useSelectedMarket' import { useTranslation } from 'next-i18next' import { useEffect, useMemo } from 'react' import { getDecimalCount } from 'utils/numbers' import MarketSelectDropdown from './MarketSelectDropdown' import PerpFundingRate from './PerpFundingRate' const AdvancedMarketHeader = ({ showChart, setShowChart, }: { showChart?: boolean setShowChart?: (x: boolean) => void }) => { const { t } = useTranslation(['common', 'trade']) const perpStats = mangoStore((s) => s.perpStats.data) const { serumOrPerpMarket, baseSymbol, price } = useSelectedMarket() const selectedMarketName = mangoStore((s) => s.selectedMarket.name) const { data: tokenPrices } = useCoingecko() useEffect(() => { if (serumOrPerpMarket instanceof PerpMarket) { const actions = mangoStore.getState().actions actions.fetchPerpStats() } }, [serumOrPerpMarket]) const changeData = useMemo(() => { if (serumOrPerpMarket instanceof PerpMarket) { return getOneDayPerpStats(perpStats, selectedMarketName) } else { return tokenPrices.find( (asset) => asset.symbol.toUpperCase() === baseSymbol?.toUpperCase() ) } }, [baseSymbol, perpStats, serumOrPerpMarket, tokenPrices]) const change = useMemo(() => { if (!changeData || !price || !serumOrPerpMarket) return 0 if (serumOrPerpMarket instanceof PerpMarket) { return changeData.length ? ((price - changeData[0].price) / changeData[0].price) * 100 : 0 } else { return ((price - changeData.prices[0][1]) / changeData.prices[0][1]) * 100 } }, [changeData, price, serumOrPerpMarket]) return (
{t('trade:oracle-price')}
{price ? ( `$${price.toFixed( getDecimalCount(serumOrPerpMarket?.tickSize || 0.01) )}` ) : ( )}
{t('rolling-change')}
{serumOrPerpMarket instanceof PerpMarket ? (
{t('trade:funding-rate')}
) : null}
{setShowChart ? ( setShowChart(!showChart)} hideBg > ) : null}
) } export default AdvancedMarketHeader