Updated on 2026-08-14

This commit is contained in:
Tangem 2024-09-11 18:53:55 +03:00
parent c21f0374da
commit 16e32259c6
3 changed files with 18 additions and 14 deletions

View file

@ -8,7 +8,6 @@ import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.update
import timber.log.Timber
import javax.inject.Inject
import javax.inject.Singleton
internal typealias WalletsWithNetworks = Map<UserWalletId, Set<TokenMarketInfo.Network>>
@ -17,7 +16,6 @@ internal typealias WalletsWithNetworks = Map<UserWalletId, Set<TokenMarketInfo.N
*
[REDACTED_AUTHOR]
*/
@Singleton
internal class AddToPortfolioManager @Inject constructor() {
private val availableNetworks = MutableStateFlow<Set<TokenMarketInfo.Network>?>(value = null)

View file

@ -6,6 +6,7 @@ import com.tangem.domain.tokens.model.CryptoCurrencyStatus
import com.tangem.domain.wallets.models.UserWallet
import com.tangem.features.markets.portfolio.impl.loader.PortfolioData
import com.tangem.features.markets.portfolio.impl.ui.state.MyPortfolioUM
import com.tangem.features.markets.portfolio.impl.ui.state.MyPortfolioUM.Tokens.AddButtonState
import com.tangem.features.markets.portfolio.impl.ui.state.PortfolioTokenUM
import com.tangem.utils.Provider
import kotlinx.collections.immutable.ImmutableList
@ -29,12 +30,13 @@ internal class MyPortfolioUMFactory(
fun create(portfolioData: PortfolioData, portfolioUIData: PortfolioUIData): MyPortfolioUM {
val addToPortfolioData = portfolioUIData.addToPortfolioData
if (addToPortfolioData.availableNetworks == null) return MyPortfolioUM.Loading
if (addToPortfolioData.availableNetworks?.isEmpty() == true) return MyPortfolioUM.Unavailable
if (addToPortfolioData.availableNetworks.isEmpty()) return MyPortfolioUM.Unavailable
val walletsWithCurrencies = portfolioData.walletsWithCurrencies
.filterAvailableNetworks(networks = addToPortfolioData.availableNetworks)
val walletsWithCurrencies = if (addToPortfolioData.availableNetworks == null) {
portfolioData.walletsWithCurrencies
} else {
portfolioData.walletsWithCurrencies.filterAvailableNetworks(networks = addToPortfolioData.availableNetworks)
}
val isPortfolioEmpty = walletsWithCurrencies.flatMap { it.value }.isEmpty()
if (isPortfolioEmpty) {
@ -56,7 +58,7 @@ internal class MyPortfolioUMFactory(
return TokensPortfolioUMConverter(
appCurrency = portfolioData.appCurrency,
isBalanceHidden = portfolioData.isBalanceHidden,
isAllAvailableNetworksAdded = walletsWithCurrencies.isAllAvailableNetworksAdded(
addButtonState = walletsWithCurrencies.getAddButtonState(
availableNetworks = addToPortfolioData.availableNetworks,
),
bsConfig = createAddToPortfolioBSConfig(portfolioData = portfolioData, portfolioUIData = portfolioUIData),
@ -94,17 +96,21 @@ internal class MyPortfolioUMFactory(
)
}
private fun Map<UserWallet, List<PortfolioData.CryptoCurrencyData>>.isAllAvailableNetworksAdded(
availableNetworks: Set<TokenMarketInfo.Network>,
): Boolean {
private fun Map<UserWallet, List<PortfolioData.CryptoCurrencyData>>.getAddButtonState(
availableNetworks: Set<TokenMarketInfo.Network>?,
): AddButtonState {
if (availableNetworks == null) return AddButtonState.Loading
val networkIds = availableNetworks.map { it.networkId }
return this
val isAllAvailableNetworksAdded = this
// User can add currencies only in multi-currency wallets
.filterKeys(UserWallet::isMultiCurrency)
.mapValues { entry -> entry.value.map { it.status.currency.network.backendId } }
// Each wallets contains all available networks?
.all { it.value.containsAll(networkIds) }
return if (isAllAvailableNetworksAdded) AddButtonState.Unavailable else AddButtonState.Available
}
/** Filter map values by available networks [networks] */

View file

@ -23,7 +23,7 @@ import kotlinx.collections.immutable.toImmutableList
internal class TokensPortfolioUMConverter(
private val appCurrency: AppCurrency,
private val isBalanceHidden: Boolean,
private val isAllAvailableNetworksAdded: Boolean,
private val addButtonState: AddButtonState,
private val bsConfig: TangemBottomSheetConfig,
private val onAddClick: () -> Unit,
private val quickActionsIntents: TokenActionsHandler,
@ -47,7 +47,7 @@ internal class TokensPortfolioUMConverter(
}
.setQuickActionsVisibility(currentState = currentTokensState)
.toImmutableList(),
buttonState = if (isAllAvailableNetworksAdded) AddButtonState.Unavailable else AddButtonState.Available,
buttonState = addButtonState,
addToPortfolioBSConfig = bsConfig,
onAddClick = onAddClick,
tokenReceiveBSConfig = (currentState() as? MyPortfolioUM.Tokens)