From fe5379f60aeebf4a2d28c78290cc4e2bf0f017fa Mon Sep 17 00:00:00 2001 From: saml33 Date: Wed, 31 May 2023 10:05:02 +1000 Subject: [PATCH] add spot market volume to trade header --- components/trade/AdvancedMarketHeader.tsx | 69 ++++++++++++++++++++++- public/locales/en/trade.json | 1 + public/locales/es/trade.json | 1 + public/locales/ru/trade.json | 1 + public/locales/zh/trade.json | 1 + public/locales/zh_tw/trade.json | 1 + 6 files changed, 72 insertions(+), 2 deletions(-) diff --git a/components/trade/AdvancedMarketHeader.tsx b/components/trade/AdvancedMarketHeader.tsx index be7bce94..d3c58f87 100644 --- a/components/trade/AdvancedMarketHeader.tsx +++ b/components/trade/AdvancedMarketHeader.tsx @@ -1,4 +1,4 @@ -import { PerpMarket } from '@blockworks-foundation/mango-v4' +import { PerpMarket, Serum3Market } from '@blockworks-foundation/mango-v4' import { IconButton, LinkButton } from '@components/shared/Button' import Change from '@components/shared/Change' import { getOneDayPerpStats } from '@components/stats/PerpMarketsOverviewTable' @@ -17,6 +17,30 @@ import PerpMarketDetailsModal from '@components/modals/PerpMarketDetailsModal' import useMangoGroup from 'hooks/useMangoGroup' import OraclePrice from './OraclePrice' import SpotMarketDetailsModal from '@components/modals/SpotMarketDetailsModal' +import { useQuery } from '@tanstack/react-query' + +type TickerData = { + base_currency: string + base_volume: string + high: string + last_price: string + low: string + target_currency: string + target_volume: string + ticker_id: string +} + +const fetchSpotVolume = async () => { + try { + const data = await fetch( + 'https://api.mngo.cloud/openbook/v1/coingecko/tickers' + ) + const res = await data.json() + return res + } catch (e) { + console.log('Failed to fetch spot volume data', e) + } +} const AdvancedMarketHeader = ({ showChart, @@ -41,6 +65,25 @@ const AdvancedMarketHeader = ({ const [showMarketDetails, setShowMarketDetails] = useState(false) const { group } = useMangoGroup() + const { + data: spotVolumeData, + isLoading: loadingSpotVolume, + isFetching: fetchingSpotVolume, + } = useQuery(['spot-volume', selectedMarketName], () => fetchSpotVolume(), { + cacheTime: 1000 * 60 * 10, + staleTime: 1000 * 60, + retry: 3, + refetchOnWindowFocus: false, + enabled: selectedMarket instanceof Serum3Market, + }) + + const spotMarketVolume = useMemo(() => { + if (!spotVolumeData || !spotVolumeData.length) return + return spotVolumeData.find( + (mkt: TickerData) => mkt.ticker_id === selectedMarketName + ) + }, [selectedMarketName, spotVolumeData]) + useEffect(() => { if (group) { const actions = mangoStore.getState().actions @@ -138,7 +181,29 @@ const AdvancedMarketHeader = ({ - ) : null} + ) : ( +
+
+ {t('trade:24h-volume')} +
+ {!loadingSpotVolume && !fetchingSpotVolume ? ( + spotMarketVolume ? ( + + {numberCompacter.format(spotMarketVolume.target_volume)}{' '} + + {selectedMarketName.split('/')[1]} + + + ) : ( + '-' + ) + ) : ( + +
+ + )} +
+ )}