diff --git a/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/amount/model/transformers/SwapAmountSelectQuoteTransformer.kt b/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/amount/model/transformers/SwapAmountSelectQuoteTransformer.kt index 19a5e22946..7588c150a5 100644 --- a/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/amount/model/transformers/SwapAmountSelectQuoteTransformer.kt +++ b/features/swap-v2/impl/src/main/java/com/tangem/features/swap/v2/impl/amount/model/transformers/SwapAmountSelectQuoteTransformer.kt @@ -62,7 +62,8 @@ internal class SwapAmountSelectQuoteTransformer( ) return prevState.copy( - isPrimaryButtonEnabled = quoteUM is SwapQuoteUM.Content, + isPrimaryButtonEnabled = quoteUM is SwapQuoteUM.Content && + !hasInsufficientBalance(prevState, quoteContent, newPrimaryAmount), selectedQuote = quoteUM, isShowFCAWarning = isNeedApplyFCARestrictions && quoteUM.provider?.isRestrictedByFCA() == true, primaryAmount = newPrimaryAmount, @@ -202,4 +203,22 @@ internal class SwapAmountSelectQuoteTransformer( prevState.secondaryAmount } } + + private fun hasInsufficientBalance( + prevState: SwapAmountUM.Content, + quoteContent: SwapQuoteUM.Content?, + newPrimaryAmount: SwapAmountFieldUM, + ): Boolean { + if (quoteContent == null) return false + + val primaryBalance = prevState.primaryCryptoCurrencyStatus.value.amount ?: return false + val fromAmount = if (prevState.selectedAmountType == SwapAmountType.To) { + quoteContent.fromAmount + } else { + val amountData = (newPrimaryAmount as? SwapAmountFieldUM.Content)?.amountField as? AmountState.Data + amountData?.amountTextField?.cryptoAmount?.value + } + + return fromAmount != null && fromAmount > primaryBalance + } } \ No newline at end of file