diff --git a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractor.kt b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractor.kt index ce2b8786a6..26d332d53b 100644 --- a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractor.kt +++ b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractor.kt @@ -55,6 +55,7 @@ interface SwapInteractor { * @param fromToken [Currency] from which want to swap * @param toToken [Currency] that receive after swap * @param amountToSwap amount you want to swap + * @param selectedFee selected fee to swap * @return */ @Throws(IllegalStateException::class) @@ -63,6 +64,7 @@ interface SwapInteractor { fromToken: Currency, toToken: Currency, amountToSwap: String, + selectedFee: FeeType = FeeType.NORMAL, ): SwapState /** diff --git a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt index 08ccd867c4..7801531e8d 100644 --- a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt +++ b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt @@ -167,6 +167,7 @@ internal class SwapInteractorImpl @Inject constructor( fromToken: Currency, toToken: Currency, amountToSwap: String, + selectedFee: FeeType, ): SwapState { syncWalletBalanceForTokens(networkId, listOf(fromToken, toToken)) val amountDecimal = toBigDecimalOrNull(amountToSwap) @@ -190,6 +191,7 @@ internal class SwapInteractorImpl @Inject constructor( fromToken = fromToken, toToken = toToken, amount = amount, + selectedFee = selectedFee, ) } else { loadQuoteData( @@ -454,6 +456,7 @@ internal class SwapInteractorImpl @Inject constructor( fromToken: Currency, toToken: Currency, amount: SwapAmount, + selectedFee: FeeType, ): SwapState { repository.prepareSwapTransaction( networkId = networkId, @@ -475,10 +478,14 @@ internal class SwapInteractorImpl @Inject constructor( derivationPath = derivationPath, ) val txFeeState = proxyFeesToFeeState(networkId, feeData) + val feeByPriority = when (selectedFee) { + FeeType.NORMAL -> txFeeState.normalFee.feeValue + FeeType.PRIORITY -> txFeeState.priorityFee.feeValue + } val isBalanceIncludeFeeEnough = - isBalanceEnough(networkId, fromToken, amount, txFeeState.priorityFee.feeValue) + isBalanceEnough(networkId, fromToken, amount, feeByPriority) val isFeeEnough = checkFeeIsEnough( - fee = txFeeState.normalFee.feeValue, + fee = feeByPriority, spendAmount = amount, networkId = networkId, fromToken = fromToken, diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt index c62cff9622..75b0e2b05f 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt @@ -312,7 +312,7 @@ internal class StateBuilder(val actions: UiActions, val isBalanceHiddenProvider: } else { permissionState } - return when (val fee = uiState.fee) { + val updateState = when (val fee = uiState.fee) { is FeeState.Loaded -> { getUpdatedFeeStateForEnoughFee(uiState, fee, item, newSelectedItem, newPermissionState, isFeeEnough) } @@ -321,6 +321,15 @@ internal class StateBuilder(val actions: UiActions, val isBalanceHiddenProvider: } else -> uiState } + return if (isFeeEnough) { + updateState.copy( + warnings = uiState.warnings.filterNot { it is SwapWarning.InsufficientFunds }, + ) + } else { + updateState.copy( + warnings = uiState.warnings.plus(SwapWarning.InsufficientFunds), + ) + } } @Suppress("LongParameterList") @@ -348,6 +357,9 @@ internal class StateBuilder(val actions: UiActions, val isBalanceHiddenProvider: return uiState.copy( fee = newFeeState, permissionState = newPermissionState, + swapButton = uiState.swapButton.copy( + enabled = isFeeEnough, + ), ) } @@ -376,6 +388,9 @@ internal class StateBuilder(val actions: UiActions, val isBalanceHiddenProvider: return uiState.copy( fee = newFeeState, permissionState = newPermissionState, + swapButton = uiState.swapButton.copy( + enabled = isFeeEnough, + ), ) } diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt index fbe4d1b64e..b1be139f19 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/viewmodels/SwapViewModel.kt @@ -205,6 +205,7 @@ internal class SwapViewModel @Inject constructor( fromToken = fromToken, toToken = toToken, amountToSwap = amount, + selectedFee = dataState.selectedFee?.feeType ?: FeeType.NORMAL, ) } },