Updated on 2026-08-14

This commit is contained in:
Tangem 2023-10-24 17:11:40 +05:00
parent 14135be555
commit 2d6bce9eb3
4 changed files with 70 additions and 25 deletions

View file

@ -16,6 +16,7 @@ import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase
import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.domain.balancehiding.IsBalanceHiddenUseCase
import com.tangem.domain.balancehiding.ListenToFlipsUseCase
import com.tangem.domain.common.util.cardTypesResolver
import com.tangem.domain.demo.IsDemoCardUseCase
import com.tangem.domain.redux.ReduxStateHolder
import com.tangem.domain.tokens.*
@ -28,7 +29,6 @@ import com.tangem.domain.txhistory.usecase.GetExplorerTransactionUrlUseCase
import com.tangem.domain.txhistory.usecase.GetTxHistoryItemsCountUseCase
import com.tangem.domain.txhistory.usecase.GetTxHistoryItemsUseCase
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.GetExploreUrlUseCase
import com.tangem.domain.wallets.usecase.GetUserWalletUseCase
@ -131,8 +131,14 @@ internal class TokenDetailsViewModel @Inject constructor(
}
}
private fun updateButtons(userWalletId: UserWalletId, currencyStatus: CryptoCurrencyStatus) {
getCryptoCurrencyActionsUseCase(userWalletId = userWalletId, cryptoCurrencyStatus = currencyStatus)
private suspend fun updateButtons(userWalletId: UserWalletId, currencyStatus: CryptoCurrencyStatus) {
val userWallet = getUserWalletUseCase(userWalletId).getOrElse { return }
getCryptoCurrencyActionsUseCase(
userWalletId = userWallet.walletId,
cryptoCurrencyStatus = currencyStatus,
isSingleWalletWithTokens = userWallet.scanResponse.cardTypesResolver.isSingleWalletWithToken(),
)
.conflate()
.distinctUntilChanged()
.onEach { uiState = stateFactory.getManageButtonsState(actions = it.states) }
.flowOn(dispatchers.io)
@ -146,7 +152,7 @@ internal class TokenDetailsViewModel @Inject constructor(
userWalletId = userWalletId,
currencyStatus = cryptoCurrencyStatus,
derivationPath = cryptoCurrency.network.derivationPath,
isSingleWalletWithTokens = isSingleWalletWithTokens(wallet),
isSingleWalletWithTokens = wallet.scanResponse.cardTypesResolver.isSingleWalletWithToken(),
)
.distinctUntilChanged()
.onEach { uiState = stateFactory.getStateWithNotifications(it) }
@ -162,7 +168,7 @@ internal class TokenDetailsViewModel @Inject constructor(
userWalletId = userWalletId,
currencyId = cryptoCurrency.id,
derivationPath = cryptoCurrency.network.derivationPath,
isSingleWalletWithTokens = isSingleWalletWithTokens(wallet),
isSingleWalletWithTokens = wallet.scanResponse.cardTypesResolver.isSingleWalletWithToken(),
)
.distinctUntilChanged()
.onEach { either ->
@ -179,10 +185,6 @@ internal class TokenDetailsViewModel @Inject constructor(
}
}
private fun isSingleWalletWithTokens(userWallet: UserWallet): Boolean {
return userWallet.scanResponse.walletData?.token != null && !userWallet.isMultiCurrency
}
/**
* @param refresh - invalidate cache and get data from remote
* @param showItemsLoading - show loading items placeholder.
@ -283,7 +285,7 @@ internal class TokenDetailsViewModel @Inject constructor(
userWalletId = userWalletId,
networkId = status.currency.network.id,
derivationPath = status.currency.network.derivationPath,
isSingleWalletWithTokens = isSingleWalletWithTokens(wallet),
isSingleWalletWithTokens = wallet.scanResponse.cardTypesResolver.isSingleWalletWithToken(),
).firstOrNull()
maybeCoinStatus?.onRight { coinStatus ->

View file

@ -882,10 +882,13 @@ internal class WalletViewModel @Inject constructor(
}
override fun onTokenItemLongClick(cryptoCurrencyStatus: CryptoCurrencyStatus) {
val state = uiState as? WalletState.ContentState ?: return
val userWallet = getWallet(state.walletsListConfig.selectedWalletIndex)
val userWallet = getSelectedWallet()
viewModelScope.launch(dispatchers.io) {
getCryptoCurrencyActionsUseCase(userWallet.walletId, cryptoCurrencyStatus)
getCryptoCurrencyActionsUseCase(
userWalletId = userWallet.walletId,
cryptoCurrencyStatus = cryptoCurrencyStatus,
isSingleWalletWithTokens = userWallet.scanResponse.cardTypesResolver.isSingleWalletWithToken(),
)
.take(count = 1)
.collectLatest {
uiState = stateFactory.getStateWithTokenActionBottomSheet(it)
@ -1262,8 +1265,13 @@ internal class WalletViewModel @Inject constructor(
}
}
private fun updateButtons(userWalletId: UserWalletId, currencyStatus: CryptoCurrencyStatus) {
getCryptoCurrencyActionsUseCase(userWalletId = userWalletId, cryptoCurrencyStatus = currencyStatus)
private suspend fun updateButtons(userWalletId: UserWalletId, currencyStatus: CryptoCurrencyStatus) {
val userWallet = getSelectedWallet()
getCryptoCurrencyActionsUseCase(
userWalletId = userWalletId,
cryptoCurrencyStatus = currencyStatus,
isSingleWalletWithTokens = userWallet.scanResponse.cardTypesResolver.isSingleWalletWithToken(),
)
.conflate()
.distinctUntilChanged()
.onEach { uiState = stateFactory.getSingleCurrencyManageButtonsState(actionsState = it) }