diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/WalletScreen.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/WalletScreen.kt index f2720ee831..cd3312809b 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/WalletScreen.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/ui/WalletScreen.kt @@ -22,6 +22,8 @@ import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameterProvider import androidx.paging.compose.collectAsLazyPagingItems import com.tangem.core.ui.components.PrimaryButton +import com.tangem.core.ui.components.bottomsheets.chooseaddress.ChooseAddressBottomSheet +import com.tangem.core.ui.components.bottomsheets.chooseaddress.ChooseAddressBottomSheetConfig import com.tangem.core.ui.components.bottomsheets.tokenreceive.TokenReceiveBottomSheet import com.tangem.core.ui.components.bottomsheets.tokenreceive.TokenReceiveBottomSheetConfig import com.tangem.core.ui.components.transactions.state.TxHistoryState @@ -244,6 +246,7 @@ private fun WalletBottomSheets(state: WalletState) { is WalletBottomSheetConfig -> WalletBottomSheet(config = bottomSheetConfig) is TokenReceiveBottomSheetConfig -> TokenReceiveBottomSheet(config = bottomSheetConfig) is ActionsBottomSheetConfig -> TokenActionsBottomSheet(config = bottomSheetConfig) + is ChooseAddressBottomSheetConfig -> ChooseAddressBottomSheet(config = bottomSheetConfig) } } } diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt index dc32847800..b826160bc5 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/viewmodels/WalletViewModel.kt @@ -16,6 +16,7 @@ import com.tangem.common.extensions.toMapKey import com.tangem.core.analytics.api.AnalyticsEventHandler import com.tangem.core.analytics.models.AnalyticsParam import com.tangem.core.navigation.AppScreen +import com.tangem.core.ui.components.bottomsheets.chooseaddress.ChooseAddressBottomSheetConfig import com.tangem.core.ui.components.bottomsheets.tokenreceive.AddressModel import com.tangem.core.ui.components.bottomsheets.tokenreceive.TokenReceiveBottomSheetConfig import com.tangem.core.ui.components.transactions.state.TxHistoryState @@ -43,10 +44,7 @@ import com.tangem.domain.settings.* import com.tangem.domain.tokens.* import com.tangem.domain.tokens.error.TokenListError import com.tangem.domain.tokens.legacy.TradeCryptoAction -import com.tangem.domain.tokens.model.CryptoCurrency -import com.tangem.domain.tokens.model.CryptoCurrencyStatus -import com.tangem.domain.tokens.model.NetworkGroup -import com.tangem.domain.tokens.model.TokenList +import com.tangem.domain.tokens.model.* import com.tangem.domain.tokens.models.analytics.TokenReceiveAnalyticsEvent import com.tangem.domain.tokens.models.analytics.TokenScreenAnalyticsEvent import com.tangem.domain.txhistory.usecase.GetExplorerTransactionUrlUseCase @@ -806,16 +804,59 @@ internal class WalletViewModel @Inject constructor( private fun openExplorer() { val state = uiState as? WalletState.ContentState ?: return + val currencyNetwork = singleWalletCryptoCurrencyStatus?.currency?.network ?: return viewModelScope.launch(dispatchers.main) { - val currencyStatus = singleWalletCryptoCurrencyStatus ?: return@launch + val userWalletId = getWallet(state.walletsListConfig.selectedWalletIndex).walletId + val addresses = walletManagersFacade.getAddress(userWalletId = userWalletId, network = currencyNetwork) + + if (addresses.size == 1) { + router.openUrl( + url = getExploreUrlUseCase( + userWalletId = userWalletId, + network = currencyNetwork, + addressType = AddressType.Default, + ), + ) + } else { + uiState = stateFactory.getStateWithOpenWalletBottomSheet( + ChooseAddressBottomSheetConfig( + addressModels = addresses + .map { address -> + AddressModel( + value = address.value, + type = AddressModel.Type.valueOf(address.type.name), + ) + } + .toImmutableList(), + onClick = { + onAddressTypeSelected( + userWalletId = userWalletId, + currencyNetwork = currencyNetwork, + addressModel = it, + ) + }, + ), + ) + } + } + } + + private fun onAddressTypeSelected( + userWalletId: UserWalletId, + currencyNetwork: Network, + addressModel: AddressModel, + ) { + viewModelScope.launch(dispatchers.main) { router.openUrl( url = getExploreUrlUseCase( - userWalletId = getWallet(index = state.walletsListConfig.selectedWalletIndex).walletId, - network = currencyStatus.currency.network, + userWalletId = userWalletId, + network = currencyNetwork, + addressType = AddressType.valueOf(addressModel.type.name), ), ) + uiState = stateFactory.getStateWithClosedBottomSheet() } }