diff --git a/src/hooks/useRepayTransaction.ts b/src/hooks/useRepayTransaction.ts index f8802614..5539c7b0 100644 --- a/src/hooks/useRepayTransaction.ts +++ b/src/hooks/useRepayTransaction.ts @@ -377,7 +377,7 @@ export function useRepayTransaction({ amount: repayAssets, marketId: market.uniqueKey, }, - 'signing', + usePermit2Setting ? 'signing' : 'repaying', ); await executeRepayTransaction(); diff --git a/src/modals/borrow/components/withdraw-collateral-and-repay.tsx b/src/modals/borrow/components/withdraw-collateral-and-repay.tsx index 9b5f9cfd..857de08c 100644 --- a/src/modals/borrow/components/withdraw-collateral-and-repay.tsx +++ b/src/modals/borrow/components/withdraw-collateral-and-repay.tsx @@ -58,12 +58,27 @@ export function WithdrawCollateralAndRepay({ }); const handleRepay = useCallback(() => { - if (!permit2Authorized || (!usePermit2Setting && !isApproved)) { + const needsRepay = repayAssets > 0n || repayShares > 0n; + if (needsRepay && (!permit2Authorized || (!usePermit2Setting && !isApproved))) { void approveAndRepay(); } else { void signAndRepay(); } - }, [permit2Authorized, usePermit2Setting, isApproved, approveAndRepay, signAndRepay]); + }, [repayAssets, repayShares, permit2Authorized, usePermit2Setting, isApproved, approveAndRepay, signAndRepay]); + + const buttonLabel = useMemo(() => { + const needsRepay = repayAssets > 0n || repayShares > 0n; + if (needsRepay && !isApproved && !permit2Authorized) { + return 'Approve & Repay'; + } + if (withdrawAmount > 0n && needsRepay) { + return 'Withdraw & Repay'; + } + if (withdrawAmount > 0n) { + return 'Withdraw'; + } + return 'Repay'; + }, [repayAssets, repayShares, isApproved, permit2Authorized, withdrawAmount]); // if max is clicked, set the repayShares to max shares const setShareToMax = useCallback(() => { @@ -301,7 +316,7 @@ export function WithdrawCollateralAndRepay({ variant="primary" className="min-w-32" > - {!isApproved && !permit2Authorized ? 'Approve & Repay' : withdrawAmount > 0 ? 'Withdraw & Repay' : 'Repay'} + {buttonLabel} {(withdrawAmount > 0n || repayAssets > 0n) && (