add more trade form validation

This commit is contained in:
saml33 2023-12-08 14:52:18 +11:00
parent dfcc9a5a30
commit d204b980d7
2 changed files with 28 additions and 5 deletions

View File

@ -52,6 +52,7 @@ import useSelectedMarket from 'hooks/useSelectedMarket'
import { import {
floorToDecimal, floorToDecimal,
formatCurrencyValue, formatCurrencyValue,
formatNumericValue,
getDecimalCount, getDecimalCount,
} from 'utils/numbers' } from 'utils/numbers'
import LogoWithFallback from '@components/shared/LogoWithFallback' import LogoWithFallback from '@components/shared/LogoWithFallback'
@ -134,6 +135,7 @@ const AdvancedTradeForm = () => {
quoteLogoURI, quoteLogoURI,
quoteSymbol, quoteSymbol,
serumOrPerpMarket, serumOrPerpMarket,
marketAddress,
} = useSelectedMarket() } = useSelectedMarket()
const { remainingBorrowsInPeriod, timeToNextPeriod } = const { remainingBorrowsInPeriod, timeToNextPeriod } =
useRemainingBorrowsInPeriod() useRemainingBorrowsInPeriod()
@ -215,7 +217,6 @@ const AdvancedTradeForm = () => {
s.tradeForm.quoteSize = '' s.tradeForm.quoteSize = ''
} }
}) })
setFormErrors({})
}, },
[oraclePrice], [oraclePrice],
) )
@ -236,7 +237,6 @@ const AdvancedTradeForm = () => {
s.tradeForm.baseSize = '' s.tradeForm.baseSize = ''
} }
}) })
setFormErrors({})
}, },
[oraclePrice], [oraclePrice],
) )
@ -398,6 +398,13 @@ const AdvancedTradeForm = () => {
} }
}, [baseBank, quoteBank, selectedMarket]) }, [baseBank, quoteBank, selectedMarket])
// clear form errors on base size change or new market
useEffect(() => {
if (Object.keys(formErrors).length) {
setFormErrors({})
}
}, [tradeForm.baseSize, marketAddress])
/* /*
* Updates the limit price on page load * Updates the limit price on page load
*/ */
@ -506,7 +513,15 @@ const AdvancedTradeForm = () => {
tradeForm.side, tradeForm.side,
) )
} }
const invalidFields = isFormValid({
baseSize: baseSize,
price: tradeForm.price,
orderType: tradeForm.tradeType,
side: tradeForm.side,
})
if (Object.keys(invalidFields).length) {
return
}
if (selectedMarket instanceof Serum3Market) { if (selectedMarket instanceof Serum3Market) {
const spotOrderType = tradeForm.ioc const spotOrderType = tradeForm.ioc
? Serum3OrderType.immediateOrCancel ? Serum3OrderType.immediateOrCancel
@ -732,7 +747,7 @@ const AdvancedTradeForm = () => {
} }
if (baseSize < minOrderSize) { if (baseSize < minOrderSize) {
invalidFields.baseSize = t('trade:min-order-size-error', { invalidFields.baseSize = t('trade:min-order-size-error', {
minSize: minOrderSize, minSize: formatNumericValue(minOrderSize, minOrderDecimals),
symbol: baseSymbol, symbol: baseSymbol,
}) })
} }
@ -741,7 +756,14 @@ const AdvancedTradeForm = () => {
} }
return invalidFields return invalidFields
}, },
[baseBank, isTriggerOrder, minOrderSize, oraclePrice, setFormErrors], [
baseBank,
isTriggerOrder,
minOrderDecimals,
minOrderSize,
oraclePrice,
setFormErrors,
],
) )
const tooMuchSize = useMemo(() => { const tooMuchSize = useMemo(() => {

View File

@ -112,5 +112,6 @@ export default function useSelectedMarket() {
quoteSymbol, quoteSymbol,
baseLogoURI, baseLogoURI,
quoteLogoURI, quoteLogoURI,
marketAddress,
} }
} }