mango-v4-ui/pages/trade.tsx

94 lines
2.4 KiB
TypeScript
Raw Normal View History

import {
Group,
PerpMarket,
Serum3Market,
} from '@blockworks-foundation/mango-v4'
2022-09-12 08:53:57 -07:00
import TradeAdvancedPage from '@components/trade/TradeAdvancedPage'
import mangoStore, { DEFAULT_TRADE_FORM } from '@store/mangoStore'
2022-07-14 16:36:31 -07:00
import type { NextPage } from 'next'
import { serverSideTranslations } from 'next-i18next/serverSideTranslations'
2022-11-21 19:56:56 -08:00
import { useRouter } from 'next/router'
import { useEffect } from 'react'
2022-12-15 21:12:10 -08:00
import { getDecimalCount } from 'utils/numbers'
2022-07-14 16:36:31 -07:00
export async function getStaticProps({ locale }: { locale: string }) {
return {
props: {
...(await serverSideTranslations(locale, [
'common',
2022-11-12 02:26:43 -08:00
'onboarding',
'onboarding-tours',
'profile',
2023-01-10 18:46:18 -08:00
'search',
2022-12-16 03:26:42 -08:00
'settings',
'trade',
2023-01-12 05:23:16 -08:00
'close-account',
2023-02-08 01:58:03 -08:00
'tv-chart',
])),
2022-07-14 16:36:31 -07:00
},
}
}
const getOraclePriceForMarket = (
group: Group,
mkt: Serum3Market | PerpMarket
): number => {
let price: number
if (mkt instanceof Serum3Market) {
const baseBank = group.getFirstBankByTokenIndex(mkt.baseTokenIndex)
price = baseBank.uiPrice
} else if (mkt) {
price = mkt._uiPrice
} else {
price = 0
}
return price
}
2022-07-18 20:58:21 -07:00
const Trade: NextPage = () => {
2022-11-21 19:56:56 -08:00
const router = useRouter()
const { name: marketName } = router.query
useEffect(() => {
const set = mangoStore.getState().set
const group = mangoStore.getState().group
const serumMarkets = mangoStore.getState().serumMarkets
const perpMarkets = mangoStore.getState().perpMarkets
if (group && marketName && typeof marketName === 'string') {
const mkt =
serumMarkets.find((m) => m.name === marketName) ||
perpMarkets.find((m) => m.name === marketName)
2022-11-21 19:56:56 -08:00
if (mkt) {
2022-12-15 21:12:10 -08:00
let tickSize = 4
if (mkt instanceof Serum3Market) {
const market = group.getSerum3ExternalMarket(mkt.serumMarketExternal)
tickSize = market.tickSize
} else {
tickSize = mkt.tickSize
}
2022-11-21 19:56:56 -08:00
set((s) => {
s.selectedMarket.name = marketName
s.selectedMarket.current = mkt
s.tradeForm = {
...DEFAULT_TRADE_FORM,
2022-12-15 21:12:10 -08:00
price: getOraclePriceForMarket(group, mkt).toFixed(
getDecimalCount(tickSize)
),
}
2022-11-21 19:56:56 -08:00
})
}
}
}, [marketName])
2022-11-14 02:18:38 -08:00
return (
<div className="pb-16 md:pb-0">
<TradeAdvancedPage />
</div>
)
2022-07-14 16:36:31 -07:00
}
2022-07-18 20:58:21 -07:00
export default Trade