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 5d5e32dc6e..5711aca6ad 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 @@ -556,12 +556,15 @@ internal class SwapInteractorImpl @Inject constructor( } private suspend fun syncWalletBalanceForTokens(networkId: String, tokens: List) { - val tokensBalance = - userWalletManager.getCurrentWalletTokensBalance( - networkId = networkId, - extraTokens = tokens.map { cryptoCurrencyConverter.convert(it) }, - ) - cache.cacheBalances(tokensBalance.mapValues { SwapAmount(it.value.value, it.value.decimals) }) + val tokensToSync = tokens.filter { cache.getBalanceForToken(it.symbol) == null } + if (tokensToSync.isNotEmpty()) { + val tokensBalance = + userWalletManager.getCurrentWalletTokensBalance( + networkId = networkId, + extraTokens = tokensToSync.map { cryptoCurrencyConverter.convert(it) }, + ) + cache.cacheBalances(tokensBalance.mapValues { SwapAmount(it.value.value, it.value.decimals) }) + } } private fun isBalanceEnough(fromToken: Currency, amount: SwapAmount, fee: BigDecimal?): Boolean { 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 29065fe534..31d4ce3cb4 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 @@ -79,6 +79,8 @@ internal class StateBuilder(val actions: UiActions) { toToken: Currency, mainTokenId: String, ): SwapStateHolder { + val canSelectSendToken = mainTokenId != fromToken.id + val canSelectReceiveToken = mainTokenId != toToken.id return uiStateHolder.copy( sendCardData = SwapCardData( type = requireNotNull(uiStateHolder.sendCardData.type as? TransactionCardType.SendCard), @@ -88,8 +90,8 @@ internal class StateBuilder(val actions: UiActions) { tokenCurrency = fromToken.symbol, coinId = fromToken.id, isNotNativeToken = fromToken.isNonNative(), - canSelectAnotherToken = mainTokenId != fromToken.id, - balance = "", + canSelectAnotherToken = canSelectSendToken, + balance = if (!canSelectSendToken) uiStateHolder.sendCardData.balance else "", ), receiveCardData = SwapCardData( type = TransactionCardType.ReceiveCard(), @@ -99,8 +101,8 @@ internal class StateBuilder(val actions: UiActions) { tokenCurrency = toToken.symbol, coinId = toToken.id, isNotNativeToken = toToken.isNonNative(), - canSelectAnotherToken = mainTokenId != toToken.id, - balance = "", + canSelectAnotherToken = canSelectReceiveToken, + balance = if (!canSelectReceiveToken) uiStateHolder.receiveCardData.balance else "", ), fee = FeeState.Loading, swapButton = SwapButton(enabled = false, loading = true, onClick = {}),