From 7e1e05e72a8fca916cafb6b6319ee76b2565a485 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 3 Apr 2024 20:32:44 +0500 Subject: [PATCH] Updated on 2026-08-14 --- .../presentation/viewmodel/SendViewModel.kt | 50 +++++++++++-------- 1 file changed, 28 insertions(+), 22 deletions(-) diff --git a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/viewmodel/SendViewModel.kt b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/viewmodel/SendViewModel.kt index 67e152dae9..54b90feac1 100644 --- a/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/viewmodel/SendViewModel.kt +++ b/features/send/impl/src/main/java/com/tangem/features/send/impl/presentation/viewmodel/SendViewModel.kt @@ -32,7 +32,6 @@ import com.tangem.domain.transaction.usecase.SendTransactionUseCase import com.tangem.domain.txhistory.models.TxHistoryItem import com.tangem.domain.txhistory.usecase.GetExplorerTransactionUrlUseCase import com.tangem.domain.txhistory.usecase.GetFixedTxHistoryItemsUseCase -import com.tangem.domain.walletmanager.WalletManagersFacade import com.tangem.domain.wallets.models.UserWallet import com.tangem.domain.wallets.models.UserWalletId import com.tangem.domain.wallets.usecase.GetUserWalletUseCase @@ -75,15 +74,15 @@ internal class SendViewModel @Inject constructor( private val getNetworkCoinStatusUseCase: GetNetworkCoinStatusUseCase, private val getSelectedAppCurrencyUseCase: GetSelectedAppCurrencyUseCase, private val getWalletsUseCase: GetWalletsUseCase, - private val getCryptoCurrenciesUseCase: GetCryptoCurrenciesUseCase, private val getPrimaryCurrencyStatusUpdatesUseCase: GetPrimaryCurrencyStatusUpdatesUseCase, private val getFeePaidCryptoCurrencyStatusSyncUseCase: GetFeePaidCryptoCurrencyStatusSyncUseCase, + private val getCryptoCurrencyStatusSyncUseCase: GetCryptoCurrencyStatusSyncUseCase, + private val getCryptoCurrencyStatusesSyncUseCase: GetCryptoCurrencyStatusesSyncUseCase, private val getFixedTxHistoryItemsUseCase: GetFixedTxHistoryItemsUseCase, private val getFeeUseCase: GetFeeUseCase, private val sendTransactionUseCase: SendTransactionUseCase, private val createTransactionUseCase: CreateTransactionUseCase, private val validateWalletAddressUseCase: ValidateWalletAddressUseCase, - private val walletManagersFacade: WalletManagersFacade, private val reduxStateHolder: ReduxStateHolder, private val isAmountSubtractAvailableUseCase: IsAmountSubtractAvailableUseCase, private val getBalanceHidingSettingsUseCase: GetBalanceHidingSettingsUseCase, @@ -403,31 +402,38 @@ internal class SendViewModel @Inject constructor( .filterNot { it.walletId == userWalletId || it.isLocked } .map { wallet -> async(dispatchers.io) { - getCryptoCurrenciesUseCase.getSync(wallet.walletId) - .fold( - ifRight = { currencyItem -> - val walletCurrency = currencyItem.firstOrNull { - it.network.id == cryptoCurrency.network.id - } ?: return@fold null - val addresses = walletManagersFacade.getAddress( - userWalletId = wallet.walletId, - network = walletCurrency.network, - ) - return@fold addresses.firstOrNull()?.let { - AvailableWallet( - name = wallet.name, - address = it.value, - ) - } - }, - ifLeft = { null }, - ) + wallet.toAvailableWallet() } } }.awaitAll() } } + private suspend fun UserWallet.toAvailableWallet(): AvailableWallet? { + return if (!isMultiCurrency) { + val status = getCryptoCurrencyStatusSyncUseCase(walletId).getOrNull() + val address = status?.value?.networkAddress + address?.let { + AvailableWallet( + name = name, + address = it.defaultAddress.value, + ) + } + } else { + val statuses = getCryptoCurrencyStatusesSyncUseCase(walletId).getOrNull() + val walletCurrency = statuses?.firstOrNull { + it.currency.network.id == cryptoCurrency.network.id + } + val address = walletCurrency?.value?.networkAddress + address?.let { + AvailableWallet( + name = name, + address = it.defaultAddress.value, + ) + } + } + } + private fun getTxHistory(): Flow> { return getFixedTxHistoryItemsUseCase( userWalletId = userWalletId,