add useOraclePrice hook and show in market header
This commit is contained in:
parent
c90efd5b63
commit
b67f676383
|
@ -1,14 +1,14 @@
|
||||||
import React, { useCallback, useMemo, useState } from 'react'
|
import React, { useCallback, useMemo, useState } from 'react'
|
||||||
import useMangoStore from '../stores/useMangoStore'
|
import useMangoStore from '../stores/useMangoStore'
|
||||||
import useMarkPrice from '../hooks/useMarkPrice'
|
|
||||||
import usePrevious from '../hooks/usePrevious'
|
import usePrevious from '../hooks/usePrevious'
|
||||||
import useInterval from '../hooks/useInterval'
|
import useInterval from '../hooks/useInterval'
|
||||||
import ChartApi from '../utils/chartDataConnector'
|
import ChartApi from '../utils/chartDataConnector'
|
||||||
import UiLock from './UiLock'
|
import UiLock from './UiLock'
|
||||||
import ManualRefresh from './ManualRefresh'
|
import ManualRefresh from './ManualRefresh'
|
||||||
|
import useOraclePrice from '../hooks/useOraclePrice'
|
||||||
|
|
||||||
const MarketHeader = () => {
|
const MarketHeader = () => {
|
||||||
const markPrice = useMarkPrice()
|
const oraclePrice = useOraclePrice()
|
||||||
const selectedMarketName = useMangoStore((s) => s.selectedMarket.name)
|
const selectedMarketName = useMangoStore((s) => s.selectedMarket.name)
|
||||||
const previousMarketName: string = usePrevious(selectedMarketName)
|
const previousMarketName: string = usePrevious(selectedMarketName)
|
||||||
const marginAccount = useMangoStore((s) => s.selectedMarginAccount.current)
|
const marginAccount = useMangoStore((s) => s.selectedMarginAccount.current)
|
||||||
|
@ -91,9 +91,9 @@ const MarketHeader = () => {
|
||||||
</div>
|
</div>
|
||||||
<div className="flex items-center">
|
<div className="flex items-center">
|
||||||
<div className="pr-4 sm:pr-0 sm:w-24">
|
<div className="pr-4 sm:pr-0 sm:w-24">
|
||||||
<div className="text-th-fgd-4 text-xs">Mark price</div>
|
<div className="text-th-fgd-4 text-xs">Oracle price</div>
|
||||||
<div className="font-semibold mt-0.5">
|
<div className="font-semibold mt-0.5">
|
||||||
{markPrice ? markPrice.toFixed(2) : '--'}
|
{oraclePrice ? oraclePrice.toFixed(2) : '--'}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="pr-4 sm:pr-0 sm:w-24">
|
<div className="pr-4 sm:pr-0 sm:w-24">
|
||||||
|
|
|
@ -37,11 +37,17 @@ const useMarketList = () => {
|
||||||
[symbolsForMangoGroup]
|
[symbolsForMangoGroup]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const getMarketIndex = useCallback(
|
||||||
|
(address) => Object.entries(spotMarkets).findIndex((x) => x[1] === address),
|
||||||
|
[symbolsForMangoGroup]
|
||||||
|
)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
programId,
|
programId,
|
||||||
marketList,
|
marketList,
|
||||||
spotMarkets,
|
spotMarkets,
|
||||||
symbols: symbolsForMangoGroup,
|
symbols: symbolsForMangoGroup,
|
||||||
|
getMarketIndex,
|
||||||
getTokenIndex,
|
getTokenIndex,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
import { useEffect, useState } from 'react'
|
||||||
|
import useMangoStore from '../stores/useMangoStore'
|
||||||
|
import useConnection from './useConnection'
|
||||||
|
import useMarket from './useMarket'
|
||||||
|
import useMarketList from './useMarketList'
|
||||||
|
|
||||||
|
export default function useOraclePrice() {
|
||||||
|
const selectedMangoGroup = useMangoStore((s) => s.selectedMangoGroup.current)
|
||||||
|
const { connection } = useConnection()
|
||||||
|
const { marketAddress } = useMarket()
|
||||||
|
const { getMarketIndex } = useMarketList()
|
||||||
|
const [oraclePrice, setOraclePrice] = useState(null)
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
if (selectedMangoGroup) {
|
||||||
|
const marketIndex = getMarketIndex(marketAddress)
|
||||||
|
selectedMangoGroup.getPrices(connection).then((prices) => {
|
||||||
|
const oraclePriceForMarket = prices[marketIndex]
|
||||||
|
setOraclePrice(oraclePriceForMarket)
|
||||||
|
console.log('yoooo', marketAddress, marketIndex, oraclePriceForMarket)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}, [selectedMangoGroup, marketAddress])
|
||||||
|
console.log('oracle prices', oraclePrice)
|
||||||
|
|
||||||
|
return oraclePrice
|
||||||
|
}
|
|
@ -32,7 +32,8 @@ export const ENDPOINTS: EndpointInfo[] = [
|
||||||
|
|
||||||
type ClusterType = 'mainnet-beta' | 'devnet'
|
type ClusterType = 'mainnet-beta' | 'devnet'
|
||||||
|
|
||||||
const CLUSTER = (process.env.NEXT_PUBLIC_CLUSTER as ClusterType) || 'devnet'
|
const CLUSTER =
|
||||||
|
(process.env.NEXT_PUBLIC_CLUSTER as ClusterType) || 'mainnet-beta'
|
||||||
const ENDPOINT = ENDPOINTS.find((e) => e.name === CLUSTER)
|
const ENDPOINT = ENDPOINTS.find((e) => e.name === CLUSTER)
|
||||||
const DEFAULT_CONNECTION = new Connection(ENDPOINT.url, 'recent')
|
const DEFAULT_CONNECTION = new Connection(ENDPOINT.url, 'recent')
|
||||||
const WEBSOCKET_CONNECTION = new Connection(ENDPOINT.websocket, 'recent')
|
const WEBSOCKET_CONNECTION = new Connection(ENDPOINT.websocket, 'recent')
|
||||||
|
|
Loading…
Reference in New Issue