Skip to content

Commit

Permalink
SOV-2785: Fix max withdrawal logic in D1 Lend page (#2566)
Browse files Browse the repository at this point in the history
* SOV-2785: Fix max withdrawal logic in D1 Lend page

* chore: fix disable button for withdraw button
  • Loading branch information
pietro-maximoff authored Jul 28, 2023
1 parent 7606c0e commit cfdb41f
Showing 1 changed file with 35 additions and 7 deletions.
42 changes: 35 additions & 7 deletions src/app/pages/LendingPage/components/LendingDialog/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import {
import { TxFeeCalculator } from 'app/pages/MarginTradePage/components/TxFeeCalculator';
import { LendingPoolDictionary } from 'utils/dictionaries/lending-pool-dictionary';
import { TransactionDialog } from 'app/components/TransactionDialog';
import { useCacheCallWithValue } from 'app/hooks/useCacheCallWithValue';

interface ILendingDialogProps {
currency: Asset;
Expand All @@ -56,6 +57,12 @@ export const LendingDialog: React.FC<ILendingDialogProps> = ({
type === DialogType.ADD ? 'deposit' : 'withdraw'
];
const [amount, setAmount] = useState<string>('');
const lendingContract = getLendingContractName(currency);
const { value: marketLiquidity } = useCacheCallWithValue(
lendingContract,
'marketLiquidity',
'0',
);

const weiAmount = useWeiAmount(amount);

Expand Down Expand Up @@ -94,15 +101,38 @@ export const LendingDialog: React.FC<ILendingDialogProps> = ({
if (isTotalClicked) {
withdrawAmount = depositedAssetBalance;
}
if (bignumber(marketLiquidity).lessThanOrEqualTo(withdrawAmount)) {
withdrawAmount = marketLiquidity;
}

return bignumber(withdrawAmount)
.mul(bignumber(depositedBalance).div(depositedAssetBalance))
.toFixed(0);
}, [depositedAssetBalance, depositedBalance, isTotalClicked, weiAmount]);
}, [
depositedAssetBalance,
depositedBalance,
isTotalClicked,
weiAmount,
marketLiquidity,
]);

const [withdrawAmount, setWithdrawAmount] = useState(
calculateWithdrawAmount(),
);

const maxWithdrawAmount = useMemo(() => {
if (bignumber(depositedAssetBalance).greaterThan(marketLiquidity)) {
return marketLiquidity;
} else {
return depositedAssetBalance;
}
}, [depositedAssetBalance, marketLiquidity]);

const validateRedeem = useMemo(
() => bignumber(depositedAssetBalance).lessThan(marketLiquidity),
[depositedAssetBalance, marketLiquidity],
);

useEffect(() => {
setWithdrawAmount(calculateWithdrawAmount());
}, [calculateWithdrawAmount]);
Expand Down Expand Up @@ -133,11 +163,9 @@ export const LendingDialog: React.FC<ILendingDialogProps> = ({
maxAmount !== '0' ? maxAmount : undefined,
) && validate;

const isValidRedeem = useIsAmountWithinLimits(
weiAmount,
'1',
depositedAssetBalance,
);
const isValidRedeem =
useIsAmountWithinLimits(weiAmount, '1', depositedAssetBalance) &&
validateRedeem;

// reset amount to if currency was changed
useEffect(() => {
Expand Down Expand Up @@ -213,7 +241,7 @@ export const LendingDialog: React.FC<ILendingDialogProps> = ({
maxAmount={
type === DialogType.ADD
? maxMinusFee(userBalance, currency, gasLimit)
: depositedAssetBalance
: maxWithdrawAmount
}
dataActionId={`lend-${
type === DialogType.ADD ? 'deposit' : 'withdraw'
Expand Down

0 comments on commit cfdb41f

Please sign in to comment.