mango-v4-ui/components/trade/PerpFundingRate.tsx

71 lines
2.1 KiB
TypeScript
Raw Normal View History

import { PerpMarket } from '@blockworks-foundation/mango-v4'
// import { BookSide, PerpMarket } from '@blockworks-foundation/mango-v4'
// import mangoStore from '@store/mangoStore'
2022-12-05 18:54:11 -08:00
import { useQuery } from '@tanstack/react-query'
import useMangoGroup from 'hooks/useMangoGroup'
2022-11-30 07:46:20 -08:00
import useSelectedMarket from 'hooks/useSelectedMarket'
2022-12-05 18:54:11 -08:00
import { useMemo } from 'react'
import { MANGO_DATA_API_URL } from 'utils/constants'
2022-12-05 18:54:11 -08:00
const fetchFundingRate = async (groupPk: string | undefined) => {
const res = await fetch(
`${MANGO_DATA_API_URL}/one-hour-funding-rate?mango-group=${groupPk}`
2022-12-05 18:54:11 -08:00
)
return await res.json()
}
export const usePerpFundingRate = () => {
const { group } = useMangoGroup()
const res = useQuery<any[], Error>(
['funding-rate'],
() => fetchFundingRate(group?.publicKey?.toString()),
{
2023-01-20 08:13:03 -08:00
cacheTime: 1000 * 60 * 10,
2022-12-05 18:54:11 -08:00
staleTime: 1000 * 60,
2023-01-20 08:13:03 -08:00
retry: 3,
2022-12-05 18:54:11 -08:00
enabled: !!group,
}
)
2022-12-09 13:37:44 -08:00
return Array.isArray(res?.data) ? res : { isSuccess: false, data: null }
2022-12-05 18:54:11 -08:00
}
2022-11-30 07:46:20 -08:00
const PerpFundingRate = () => {
const { selectedMarket } = useSelectedMarket()
2022-12-05 18:54:11 -08:00
const rate = usePerpFundingRate()
2022-12-09 13:37:44 -08:00
// const bids = mangoStore((s) => s.selectedMarket.bidsAccount)
// const asks = mangoStore((s) => s.selectedMarket.asksAccount)
2022-11-30 07:46:20 -08:00
2022-12-05 18:54:11 -08:00
const fundingRate = useMemo(() => {
if (rate.isSuccess && selectedMarket instanceof PerpMarket) {
2022-12-09 13:37:44 -08:00
const marketRate = rate?.data?.find(
2022-12-05 18:54:11 -08:00
(r) => r.market_index === selectedMarket.perpMarketIndex
)
return marketRate?.funding_rate_hourly
2022-12-05 18:54:11 -08:00
}
2022-12-09 13:37:44 -08:00
}, [rate, selectedMarket])
2022-12-05 18:54:11 -08:00
2022-11-30 07:46:20 -08:00
return (
2022-12-05 18:54:11 -08:00
<>
<div className="font-mono text-xs text-th-fgd-2">
2022-12-11 20:38:52 -08:00
{selectedMarket instanceof PerpMarket && fundingRate ? (
`${fundingRate.toFixed(4)}%`
) : (
<span className="text-th-fgd-4">-</span>
)}
2022-12-05 18:54:11 -08:00
</div>
{/* <div className="font-mono text-xs text-th-fgd-2">
{selectedMarket instanceof PerpMarket &&
bids instanceof BookSide &&
asks instanceof BookSide
? selectedMarket.getCurrentFundingRate(bids, asks)
: '-'}
</div> */}
2022-12-05 18:54:11 -08:00
</>
2022-11-30 07:46:20 -08:00
)
}
export default PerpFundingRate