Updated on 2026-08-14

This commit is contained in:
Tangem 2024-07-15 17:27:27 +03:00
parent ec7dcde2d3
commit 75f8a45cd4
23 changed files with 569 additions and 65 deletions

View file

@ -19,6 +19,7 @@ import com.tangem.domain.card.NetworkHasDerivationUseCase
import com.tangem.domain.common.CardTypesResolver
import com.tangem.domain.staking.model.StakingAvailability
import com.tangem.domain.staking.model.StakingEntryInfo
import com.tangem.domain.staking.model.StakingError
import com.tangem.domain.tokens.error.CurrencyStatusError
import com.tangem.domain.tokens.model.*
import com.tangem.domain.tokens.model.warnings.CryptoCurrencyWarning
@ -239,7 +240,7 @@ internal class TokenDetailsStateFactory(
)
}
fun getStateWithStaking(stakingEither: Either<Throwable, StakingEntryInfo>): TokenDetailsState {
fun getStateWithStaking(stakingEither: Either<StakingError, StakingEntryInfo>): TokenDetailsState {
return currentStateProvider().copy(
stakingBlocksState = stakingStateConverter.convert(stakingEither),
)

View file

@ -3,6 +3,7 @@ package com.tangem.feature.tokendetails.presentation.tokendetails.state.factory
import arrow.core.Either
import com.tangem.core.ui.utils.BigDecimalFormatter
import com.tangem.domain.staking.model.StakingEntryInfo
import com.tangem.domain.staking.model.StakingError
import com.tangem.feature.tokendetails.presentation.tokendetails.state.StakingBlockUM
import com.tangem.feature.tokendetails.presentation.tokendetails.state.TokenDetailsState
import com.tangem.feature.tokendetails.presentation.tokendetails.viewmodels.TokenDetailsClickIntents
@ -12,9 +13,9 @@ import com.tangem.utils.converter.Converter
internal class TokenStakingStateConverter(
private val clickIntents: TokenDetailsClickIntents,
private val currentStateProvider: Provider<TokenDetailsState>,
) : Converter<Either<Throwable, StakingEntryInfo>, StakingBlockUM> {
) : Converter<Either<StakingError, StakingEntryInfo>, StakingBlockUM> {
override fun convert(value: Either<Throwable, StakingEntryInfo>): StakingBlockUM {
override fun convert(value: Either<StakingError, StakingEntryInfo>): StakingBlockUM {
val state = currentStateProvider()
if (state.stakingBlocksState is StakingBlockUM.Staked) return state.stakingBlocksState

View file

@ -389,7 +389,8 @@ internal class TokenDetailsViewModel @Inject constructor(
val stakingAvailability = getStakingAvailabilityUseCase(
cryptoCurrencyId = cryptoCurrency.id,
symbol = cryptoCurrency.symbol,
)
).getOrElse { StakingAvailability.Unavailable }
internalUiState.value = stateFactory.getStateWithUpdatedStakingAvailability(stakingAvailability)
if (stakingAvailability is StakingAvailability.Available) {
val stakingInfo = getStakingEntryInfoUseCase(stakingAvailability.integrationId)