From bc896fe9fcb11f6a319329e32db35e182441d827 Mon Sep 17 00:00:00 2001 From: Piotr Matlak Date: Tue, 16 Apr 2024 16:26:48 +0200 Subject: [PATCH] add validation for initial price --- .../Inputs/SimpleInput/SimpleInput.tsx | 5 +++- .../NewPosition/PoolInit/PoolInit.tsx | 24 ++++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/components/Inputs/SimpleInput/SimpleInput.tsx b/src/components/Inputs/SimpleInput/SimpleInput.tsx index d02abf4..1153e09 100644 --- a/src/components/Inputs/SimpleInput/SimpleInput.tsx +++ b/src/components/Inputs/SimpleInput/SimpleInput.tsx @@ -11,6 +11,7 @@ interface IProps { decimal: number placeholder?: string style?: CSSProperties + onBlur?: React.FocusEventHandler } export const AmountInput: React.FC = ({ @@ -20,7 +21,8 @@ export const AmountInput: React.FC = ({ className, decimal, placeholder, - style + style, + onBlur }) => { const classes = useStyles() @@ -75,6 +77,7 @@ export const AmountInput: React.FC = ({ disableUnderline={true} placeholder={placeholder} onChange={allowOnlyDigitsAndTrimUnnecessaryZeros} + onBlur={onBlur} /> ) } diff --git a/src/components/NewPosition/PoolInit/PoolInit.tsx b/src/components/NewPosition/PoolInit/PoolInit.tsx index 0c8f622..1f72fe1 100644 --- a/src/components/NewPosition/PoolInit/PoolInit.tsx +++ b/src/components/NewPosition/PoolInit/PoolInit.tsx @@ -99,9 +99,28 @@ export const PoolInit: React.FC = ({ changeRangeHandler(leftRange, rightRange) }, [midPrice]) + const validateMidPriceInput = (midPriceInput: string) => { + const minTick = getMinTick(tickSpacing) + const maxTick = getMaxTick(tickSpacing) + + const minPrice = isXtoY + ? calcPrice(minTick, isXtoY, xDecimal, yDecimal) + : calcPrice(maxTick, isXtoY, xDecimal, yDecimal) + const maxPrice = isXtoY + ? calcPrice(maxTick, isXtoY, xDecimal, yDecimal) + : calcPrice(minTick, isXtoY, xDecimal, yDecimal) + + const numericMidPriceInput = parseFloat(midPriceInput) + const validatedMidPrice = Math.min(Math.max(numericMidPriceInput, minPrice), maxPrice) + + return toMaxNumericPlaces(validatedMidPrice, 5) + } + useEffect(() => { if (currentPairReversed !== null) { - setMidPriceInput((1 / +midPriceInput).toString()) + const validatedMidPrice = validateMidPriceInput((1 / +midPriceInput).toString()) + + setMidPriceInput(validatedMidPrice) changeRangeHandler(rightRange, leftRange) } }, [currentPairReversed]) @@ -132,6 +151,9 @@ export const PoolInit: React.FC = ({ decimal={isXtoY ? xDecimal : yDecimal} className={classes.midPrice} placeholder='0.0' + onBlur={e => { + setMidPriceInput(validateMidPriceInput(e.target.value)) + }} />