Updated on 2026-08-14

This commit is contained in:
Tangem 2023-09-26 12:23:07 +03:00
parent 223a558f90
commit 0bbb95db97
10 changed files with 144 additions and 8 deletions

View file

@ -5,6 +5,7 @@ import arrow.core.Either
import com.tangem.blockchain.common.address.Address
import com.tangem.common.Provider
import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfig
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.domain.appcurrency.model.AppCurrency
@ -164,6 +165,27 @@ internal class TokenDetailsStateFactory(
)
}
fun getStateWithChooseAddressBottomSheet(
addresses: List<Address>,
onAddressTypeClick: (AddressModel) -> Unit,
): TokenDetailsState {
return currentStateProvider().copy(
bottomSheetConfig = TangemBottomSheetConfig(
isShow = true,
onDismissRequest = clickIntents::onDismissBottomSheet,
content = ChooseAddressBottomSheetConfig(
addressModels = addresses.map {
AddressModel(
value = it.value,
type = AddressModel.Type.valueOf(it.type.name),
)
},
onClick = onAddressTypeClick,
),
),
)
}
fun getStateWithClosedBottomSheet(): TokenDetailsState {
val state = currentStateProvider()
return state.copy(

View file

@ -17,7 +17,10 @@ import androidx.compose.ui.draw.clip
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.util.fastForEach
import androidx.paging.compose.collectAsLazyPagingItems
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.marketprice.MarketPriceBlock
import com.tangem.core.ui.components.marketprice.MarketPriceBlockState
import com.tangem.core.ui.components.notifications.Notification
@ -109,9 +112,16 @@ internal fun TokenDetailsScreen(state: TokenDetailsState) {
TokenDetailsDialogs(state = state)
state.bottomSheetConfig?.let { config ->
TokenReceiveBottomSheet(
config = config,
)
if (config.isShow) {
when (config.content) {
is TokenReceiveBottomSheetConfig -> {
TokenReceiveBottomSheet(config = config)
}
is ChooseAddressBottomSheetConfig -> {
ChooseAddressBottomSheet(config = config)
}
}
}
}
}
}

View file

@ -6,6 +6,7 @@ import androidx.compose.runtime.setValue
import androidx.lifecycle.*
import androidx.paging.cachedIn
import arrow.core.getOrElse
import com.tangem.blockchain.common.address.AddressType
import com.tangem.common.Provider
import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase
import com.tangem.domain.appcurrency.model.AppCurrency
@ -299,11 +300,33 @@ internal class TokenDetailsViewModel @Inject constructor(
}
override fun onExploreClick() {
viewModelScope.launch(dispatchers.io) {
val addresses = walletManagersFacade.getAddress(
userWalletId = wallet.walletId,
network = cryptoCurrency.network,
)
if (addresses.size == 1) {
openUrl(AddressType.Default)
} else {
uiState = stateFactory.getStateWithChooseAddressBottomSheet(
addresses = addresses,
onAddressTypeClick = {
openUrl(AddressType.valueOf(it.type.name))
uiState = stateFactory.getStateWithClosedBottomSheet()
},
)
}
}
}
private fun openUrl(addressType: AddressType) {
viewModelScope.launch {
router.openUrl(
url = getExploreUrlUseCase(
userWalletId = wallet.walletId,
network = cryptoCurrency.network,
addressType = addressType,
),
)
}