Updated on 2026-08-14
This commit is contained in:
parent
211507774f
commit
60d2ba7a38
6 changed files with 72 additions and 12 deletions
|
|
@ -1,11 +1,9 @@
|
|||
package com.tangem.domain.account.status.di
|
||||
|
||||
import com.tangem.domain.account.repository.AccountsCRUDRepository
|
||||
import com.tangem.domain.account.status.supplier.MultiAccountStatusListSupplier
|
||||
import com.tangem.domain.account.status.supplier.SingleAccountStatusListSupplier
|
||||
import com.tangem.domain.account.status.usecase.GetAccountCurrencyByAddressUseCase
|
||||
import com.tangem.domain.account.status.usecase.GetAccountCurrencyStatusUseCase
|
||||
import com.tangem.domain.account.status.usecase.GetCryptoCurrencyActionsUseCaseV2
|
||||
import com.tangem.domain.account.status.usecase.ManageCryptoCurrenciesUseCase
|
||||
import com.tangem.domain.account.status.usecase.*
|
||||
import com.tangem.domain.account.status.utils.CryptoCurrencyBalanceFetcher
|
||||
import com.tangem.domain.account.supplier.SingleAccountListSupplier
|
||||
import com.tangem.domain.common.wallets.UserWalletsListRepository
|
||||
|
|
@ -61,6 +59,16 @@ internal object AccountStatusUseCaseModule {
|
|||
)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideGetWalletTotalBalanceUseCaseV2(
|
||||
multiAccountStatusListSupplier: MultiAccountStatusListSupplier,
|
||||
): GetWalletTotalBalanceUseCaseV2 {
|
||||
return GetWalletTotalBalanceUseCaseV2(
|
||||
multiAccountStatusListSupplier = multiAccountStatusListSupplier,
|
||||
)
|
||||
}
|
||||
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideGetAccountCurrencyStatusUseCase(
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.tangem.domain.account.status.supplier
|
|||
import com.tangem.domain.account.models.AccountStatusList
|
||||
import com.tangem.domain.account.status.producer.MultiAccountStatusListProducer
|
||||
import com.tangem.domain.core.flow.FlowCachingSupplier
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
|
||||
/**
|
||||
* Supplier that provides a list of [AccountStatusList]s for all user wallets.
|
||||
|
|
@ -12,4 +13,9 @@ import com.tangem.domain.core.flow.FlowCachingSupplier
|
|||
abstract class MultiAccountStatusListSupplier(
|
||||
override val factory: MultiAccountStatusListProducer.Factory,
|
||||
override val keyCreator: (Unit) -> String,
|
||||
) : FlowCachingSupplier<MultiAccountStatusListProducer, Unit, List<AccountStatusList>>()
|
||||
) : FlowCachingSupplier<MultiAccountStatusListProducer, Unit, List<AccountStatusList>>() {
|
||||
|
||||
operator fun invoke(): Flow<List<AccountStatusList>> {
|
||||
return super.invoke(params = Unit)
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
package com.tangem.domain.account.status.usecase
|
||||
|
||||
import com.tangem.domain.account.status.supplier.MultiAccountStatusListSupplier
|
||||
import com.tangem.domain.core.lce.LceFlow
|
||||
import com.tangem.domain.core.utils.lceContent
|
||||
import com.tangem.domain.models.TotalFiatBalance
|
||||
import com.tangem.domain.models.wallet.UserWalletId
|
||||
import com.tangem.domain.tokens.error.TokenListError
|
||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||
import kotlinx.coroutines.flow.map
|
||||
|
||||
/**
|
||||
* Use case to get total fiat balances for multiple user wallets.
|
||||
* It's second version of the use case that will replace the previous one after accounts feature released.
|
||||
*
|
||||
* @param multiAccountStatusListSupplier Supplier that provides the status list for multiple accounts.
|
||||
*/
|
||||
class GetWalletTotalBalanceUseCaseV2(
|
||||
private val multiAccountStatusListSupplier: MultiAccountStatusListSupplier,
|
||||
) {
|
||||
|
||||
operator fun invoke(
|
||||
userWalletIds: Collection<UserWalletId>,
|
||||
): LceFlow<TokenListError, Map<UserWalletId, TotalFiatBalance>> {
|
||||
return multiAccountStatusListSupplier()
|
||||
.map { accountStatusLists ->
|
||||
accountStatusLists
|
||||
.filter { it.userWalletId in userWalletIds }
|
||||
.associate {
|
||||
it.userWalletId to it.totalFiatBalance
|
||||
}
|
||||
.lceContent()
|
||||
}
|
||||
.distinctUntilChanged()
|
||||
}
|
||||
}
|
||||
|
|
@ -35,17 +35,19 @@ import dagger.assisted.AssistedFactory
|
|||
import dagger.assisted.AssistedInject
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.channels.BufferOverflow
|
||||
import kotlinx.coroutines.flow.*
|
||||
|
||||
@OptIn(ExperimentalCoroutinesApi::class)
|
||||
@Suppress("LongParameterList")
|
||||
internal class NewMarketsPortfolioDelegate @AssistedInject constructor(
|
||||
private val getSelectedAppCurrencyUseCase: GetSelectedAppCurrencyUseCase,
|
||||
private val getBalanceHidingSettingsUseCase: GetBalanceHidingSettingsUseCase,
|
||||
getSelectedAppCurrencyUseCase: GetSelectedAppCurrencyUseCase,
|
||||
getBalanceHidingSettingsUseCase: GetBalanceHidingSettingsUseCase,
|
||||
private val allAccountSupplier: MultiAccountStatusListSupplier,
|
||||
private val getCryptoCurrencyActionsUseCase: GetCryptoCurrencyActionsUseCaseV2,
|
||||
private val getUserWalletUseCase: GetUserWalletUseCase,
|
||||
private val isAccountsModeEnabledUseCase: IsAccountsModeEnabledUseCase,
|
||||
isAccountsModeEnabledUseCase: IsAccountsModeEnabledUseCase,
|
||||
@Assisted private val scope: CoroutineScope,
|
||||
@Assisted private val token: TokenMarketParams,
|
||||
@Assisted private val tokenActionsHandler: TokenActionsHandler,
|
||||
|
|
@ -163,7 +165,7 @@ internal class NewMarketsPortfolioDelegate @AssistedInject constructor(
|
|||
}
|
||||
|
||||
private fun portfolioWithThisCurrencyFLow(): Flow<PortfoliosWithThisCurrency> =
|
||||
allAccountSupplier(Unit).map { list -> list.map { it.addedAccountsFlow() } }.flatMapLatest { flows ->
|
||||
allAccountSupplier().map { list -> list.map { it.addedAccountsFlow() } }.flatMapLatest { flows ->
|
||||
combine(flows) {
|
||||
PortfoliosWithThisCurrency(
|
||||
currencyRawId = currencyRawId,
|
||||
|
|
@ -204,7 +206,7 @@ internal class NewMarketsPortfolioDelegate @AssistedInject constructor(
|
|||
val appCurrency = settings.appCurrency
|
||||
val isBalanceHidden = settings.isBalanceHidden
|
||||
val isAccountMode = settings.isAccountMode
|
||||
val uiItems: MutableList<PortfolioListItem> = mutableListOf<PortfolioListItem>()
|
||||
val uiItems: MutableList<PortfolioListItem> = mutableListOf()
|
||||
|
||||
fun toggleQuickActions(key: Pair<UserWalletId, CryptoCurrency.ID>) = expandedHolder?.update { expanded ->
|
||||
val isExpand = expanded.contains(key)
|
||||
|
|
|
|||
|
|
@ -270,7 +270,7 @@ internal class SendDestinationModel @Inject constructor(
|
|||
private fun getAddedAddresses(): Flow<List<DestinationWalletUM>> {
|
||||
return combine(
|
||||
flow = getWalletsUseCase().conflate(),
|
||||
flow2 = multiAccountStatusListSupplier(Unit).conflate(),
|
||||
flow2 = multiAccountStatusListSupplier().conflate(),
|
||||
) { wallets, accountList ->
|
||||
val cryptoCurrencyNetwork = cryptoCurrency.network
|
||||
|
||||
|
|
|
|||
|
|
@ -6,6 +6,8 @@ import com.tangem.common.ui.userwallet.state.UserWalletItemUM
|
|||
import com.tangem.core.decompose.ui.UiMessageSender
|
||||
import com.tangem.core.ui.extensions.resourceReference
|
||||
import com.tangem.core.ui.message.SnackbarMessage
|
||||
import com.tangem.domain.account.featuretoggle.AccountsFeatureToggles
|
||||
import com.tangem.domain.account.status.usecase.GetWalletTotalBalanceUseCaseV2
|
||||
import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase
|
||||
import com.tangem.domain.appcurrency.error.SelectedAppCurrencyError
|
||||
import com.tangem.domain.appcurrency.model.AppCurrency
|
||||
|
|
@ -37,7 +39,9 @@ import kotlinx.coroutines.flow.*
|
|||
@Suppress("LongParameterList")
|
||||
internal class DefaultUserWalletsFetcher @AssistedInject constructor(
|
||||
getWalletsUseCase: GetWalletsUseCase,
|
||||
private val accountsFeatureToggles: AccountsFeatureToggles,
|
||||
private val getWalletTotalBalanceUseCase: GetWalletTotalBalanceUseCase,
|
||||
private val getWalletTotalBalanceUseCaseV2: GetWalletTotalBalanceUseCaseV2,
|
||||
private val getSelectedAppCurrencyUseCase: GetSelectedAppCurrencyUseCase,
|
||||
private val getBalanceHidingSettingsUseCase: GetBalanceHidingSettingsUseCase,
|
||||
@Assisted private val onWalletClick: (UserWalletId) -> Unit,
|
||||
|
|
@ -97,7 +101,11 @@ internal class DefaultUserWalletsFetcher @AssistedInject constructor(
|
|||
// We should not load balances in auth mode
|
||||
flowOf(Lce.Loading(walletIds.associateWith { TotalFiatBalance.Loading }))
|
||||
} else {
|
||||
getWalletTotalBalanceUseCase(walletIds).distinctUntilChanged()
|
||||
if (accountsFeatureToggles.isFeatureEnabled) {
|
||||
getWalletTotalBalanceUseCaseV2(userWalletIds = walletIds)
|
||||
} else {
|
||||
getWalletTotalBalanceUseCase(walletIds).distinctUntilChanged()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue