diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/model/AddToPortfolioBSContentUMFactory.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/model/AddToPortfolioBSContentUMFactory.kt index e0bd92cbdf..a337b02336 100644 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/model/AddToPortfolioBSContentUMFactory.kt +++ b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/model/AddToPortfolioBSContentUMFactory.kt @@ -3,6 +3,7 @@ package com.tangem.features.markets.portfolio.impl.model import com.tangem.common.ui.userwallet.converter.UserWalletItemUMConverter import com.tangem.common.ui.userwallet.state.UserWalletItemUM import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfig +import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfigContent import com.tangem.core.ui.components.rows.model.BlockchainRowUM import com.tangem.domain.markets.TokenMarketInfo import com.tangem.domain.markets.TokenMarketParams @@ -45,47 +46,51 @@ internal class AddToPortfolioBSContentUMFactory( fun create( portfolioData: PortfolioData, portfolioUIData: PortfolioUIData, - selectedWallet: UserWallet, - alreadyAddedNetworks: Set, + selectedWallet: UserWallet?, + alreadyAddedNetworks: Set?, ): TangemBottomSheetConfig { return TangemBottomSheetConfig( isShow = portfolioUIData.portfolioBSVisibilityModel.addToPortfolioBSVisibility, onDismissRequest = { onAddToPortfolioVisibilityChange(false) }, - content = AddToPortfolioBSContentUM( - selectedWallet = selectedWallet.toSelectedUserWalletItemUM(), - selectNetworkUM = SelectNetworkUMConverter( - networksWithToggle = portfolioUIData.addToPortfolioData.associateWithToggle( - userWalletId = selectedWallet.walletId, - alreadyAddedNetworkIds = alreadyAddedNetworks, - ), - alreadyAddedNetworks = alreadyAddedNetworks, - onNetworkSwitchClick = onNetworkSwitchClick, - ).convert(value = token), - isScanCardNotificationVisible = portfolioUIData.hasMissedDerivations, - continueButtonEnabled = portfolioUIData.addToPortfolioData.isUserAddedNetworks( - userWalletId = selectedWallet.walletId, - ), - onContinueButtonClick = { - val alreadyAddedNetworkIds = portfolioData.walletsWithCurrencies[selectedWallet].orEmpty() - .map { it.status.currency.network.backendId } - .toSet() - - onContinueClick( - selectedWallet.walletId, - portfolioUIData.addToPortfolioData.getAddedNetworks( + content = if (selectedWallet != null && alreadyAddedNetworks != null) { + AddToPortfolioBSContentUM( + selectedWallet = selectedWallet.toSelectedUserWalletItemUM(), + selectNetworkUM = SelectNetworkUMConverter( + networksWithToggle = portfolioUIData.addToPortfolioData.associateWithToggle( userWalletId = selectedWallet.walletId, - alreadyAddedNetworkIds = alreadyAddedNetworkIds, + alreadyAddedNetworkIds = alreadyAddedNetworks, ), - ) - }, - walletSelectorConfig = crateWalletSelectorBSConfig( - isShow = portfolioUIData.portfolioBSVisibilityModel.walletSelectorBSVisibility, - portfolioData = portfolioData, - selectedWalletId = selectedWallet.walletId, - ), - isWalletBlockVisible = portfolioData.walletsWithCurrencies - .filterKeys(UserWallet::isMultiCurrency).size > 1, - ), + alreadyAddedNetworks = alreadyAddedNetworks, + onNetworkSwitchClick = onNetworkSwitchClick, + ).convert(value = token), + isScanCardNotificationVisible = portfolioUIData.hasMissedDerivations, + continueButtonEnabled = portfolioUIData.addToPortfolioData.isUserAddedNetworks( + userWalletId = selectedWallet.walletId, + ), + onContinueButtonClick = { + val alreadyAddedNetworkIds = portfolioData.walletsWithCurrencies[selectedWallet].orEmpty() + .map { it.status.currency.network.backendId } + .toSet() + + onContinueClick( + selectedWallet.walletId, + portfolioUIData.addToPortfolioData.getAddedNetworks( + userWalletId = selectedWallet.walletId, + alreadyAddedNetworkIds = alreadyAddedNetworkIds, + ), + ) + }, + walletSelectorConfig = crateWalletSelectorBSConfig( + isShow = portfolioUIData.portfolioBSVisibilityModel.walletSelectorBSVisibility, + portfolioData = portfolioData, + selectedWalletId = selectedWallet.walletId, + ), + isWalletBlockVisible = portfolioData.walletsWithCurrencies + .filterKeys(UserWallet::isMultiCurrency).size > 1, + ) + } else { + TangemBottomSheetConfigContent.Empty + }, ) } diff --git a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/model/MyPortfolioUMFactory.kt b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/model/MyPortfolioUMFactory.kt index 83af1ca3c2..3fbf58975e 100644 --- a/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/model/MyPortfolioUMFactory.kt +++ b/features/markets/impl/src/main/kotlin/com/tangem/features/markets/portfolio/impl/model/MyPortfolioUMFactory.kt @@ -30,9 +30,8 @@ internal class MyPortfolioUMFactory( fun create(portfolioData: PortfolioData, portfolioUIData: PortfolioUIData): MyPortfolioUM { val addToPortfolioData = portfolioUIData.addToPortfolioData - val hasAvailableNetworks = addToPortfolioData.availableNetworks?.isEmpty() == true - val isOnlySingleWalletsAdded = portfolioData.walletsWithCurrencies.keys.all { !it.isMultiCurrency } - if (hasAvailableNetworks || isOnlySingleWalletsAdded) return MyPortfolioUM.Unavailable + val isOnlyUnavailableNetworks = addToPortfolioData.availableNetworks?.isEmpty() == true + if (isOnlyUnavailableNetworks) return MyPortfolioUM.Unavailable val walletsWithCurrencies = if (addToPortfolioData.availableNetworks == null) { portfolioData.walletsWithCurrencies @@ -79,16 +78,13 @@ internal class MyPortfolioUMFactory( val selectedWallet = portfolioData.walletsWithCurrencies.keys .firstOrNull { it.walletId == portfolioUIData.selectedWalletId } ?: portfolioData.walletsWithCurrencies.keys.firstOrNull { it.isMultiCurrency } - ?: error("walletsWithCurrencies don't contain selected wallet or any multi-currency wallet") val availableNetworks = portfolioUIData.addToPortfolioData.availableNetworks.orEmpty() - val alreadyAddedNetworks = requireNotNull( - value = portfolioData.walletsWithCurrencies.filterAvailableNetworks(availableNetworks)[selectedWallet], - lazyMessage = { "walletsWithCurrencies don't contain ${selectedWallet.walletId}" }, - ) - .map { it.status.currency.network.backendId } - .toSet() + val alreadyAddedNetworks = portfolioData.walletsWithCurrencies + .filterAvailableNetworks(availableNetworks)[selectedWallet] + ?.map { it.status.currency.network.backendId } + ?.toSet() return addToPortfolioBSContentUMFactory.create( portfolioData = portfolioData,