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

54 lines
1.5 KiB
TypeScript
Raw Normal View History

2022-12-01 15:38:41 -08:00
import Tooltip from '@components/shared/Tooltip'
import mangoStore from '@store/mangoStore'
import useMarkPrice from 'hooks/useMarkPrice'
import useSelectedMarket from 'hooks/useSelectedMarket'
import { useTranslation } from 'next-i18next'
import { useMemo } from 'react'
2022-12-08 11:58:54 -08:00
import { notify } from 'utils/notifications'
2022-12-01 15:38:41 -08:00
import { calculateSlippage } from 'utils/tradeForm'
const Slippage = () => {
const { t } = useTranslation('trade')
const markPrice = useMarkPrice()
const tradeForm = mangoStore((s) => s.tradeForm)
const { selectedMarket } = useSelectedMarket()
const slippage = useMemo(() => {
2022-12-08 11:58:54 -08:00
try {
if (tradeForm.tradeType === 'Market' && markPrice && selectedMarket) {
const orderbook = mangoStore.getState().selectedMarket.orderbook
return calculateSlippage(
orderbook,
Number(tradeForm.baseSize),
tradeForm.side,
markPrice
)
}
} catch (e) {
notify({ type: 'info', title: 'Unable to calculate slippage' })
2022-12-01 15:38:41 -08:00
}
return 0
}, [tradeForm, markPrice, selectedMarket])
return slippage ? (
2022-12-13 18:23:01 -08:00
<div className="flex justify-between text-xs">
2022-12-01 15:38:41 -08:00
<Tooltip content={t('trade:tooltip-slippage')}>
2022-12-13 18:23:01 -08:00
<p className="tooltip-underline mr-4">{t('trade:est-slippage')}</p>
2022-12-01 15:38:41 -08:00
</Tooltip>
<p
2022-12-13 18:23:01 -08:00
className={`${
2022-12-01 15:38:41 -08:00
slippage <= 1
? 'text-th-success'
: slippage <= 3
? 'text-th-warning'
: 'text-th-error'
}`}
>
{slippage.toFixed(2)}%
</p>
</div>
) : null
}
export default Slippage