Updated on 2026-08-14

This commit is contained in:
Tangem 2025-05-21 15:26:56 +03:00
parent 78ca5446a8
commit f8d3893b63
2 changed files with 19 additions and 5 deletions

View file

@ -3,6 +3,7 @@ package com.tangem.domain.staking
import arrow.core.Either
import com.tangem.domain.staking.model.stakekit.*
import com.tangem.domain.staking.model.stakekit.action.StakingAction
import com.tangem.domain.staking.model.stakekit.action.StakingActionStatus
import com.tangem.domain.staking.model.stakekit.action.StakingActionType
import com.tangem.domain.staking.repositories.StakingErrorResolver
import com.tangem.utils.extensions.isEqualTo
@ -15,13 +16,13 @@ class InvalidatePendingTransactionsUseCase(
operator fun invoke(
balanceItems: List<BalanceItem>,
processingActions: List<StakingAction>,
stakingActions: List<StakingAction>,
token: Token,
): Either<StakingError, List<BalanceItem>> {
return Either.catch {
val balancesToDisplay = mergeBalancesAndProcessingActions(
realBalances = balanceItems,
processingActions = processingActions,
processingActions = stakingActions.filter { it.status == StakingActionStatus.PROCESSING },
token = token,
)
balancesToDisplay
@ -68,6 +69,8 @@ class InvalidatePendingTransactionsUseCase(
// intentionally do nothing
}
}
doPostProcessing(balances, action, token)
}
return balances
@ -149,4 +152,15 @@ class InvalidatePendingTransactionsUseCase(
}
return index to action.amount
}
private fun doPostProcessing(balances: MutableList<BalanceItem>, action: StakingAction, token: Token) {
val validatorAddress = action.validatorAddress ?: action.validatorAddresses?.firstOrNull()
if (token.network == NetworkType.TON && validatorAddress != null) {
for (index in balances.indices) {
if (balances[index].validatorAddress == validatorAddress) {
balances[index] = balances[index].copy(isPending = true)
}
}
}
}
}

View file

@ -145,7 +145,7 @@ internal class StakingModel @Inject constructor(
}
private var cryptoCurrencyStatus: CryptoCurrencyStatus by Delegates.notNull()
private var processingActions: List<StakingAction> = emptyList()
private var stakingActions: List<StakingAction> = emptyList()
private var feeCryptoCurrencyStatus: CryptoCurrencyStatus? = null
private var minimumTransactionAmount: EnterAmountBoundary? = null
@ -157,7 +157,7 @@ internal class StakingModel @Inject constructor(
val yieldBalance = cryptoCurrencyStatus.value.yieldBalance as? YieldBalance.Data
return invalidatePendingTransactionsUseCase(
balanceItems = yieldBalance?.balance?.items ?: emptyList(),
processingActions = processingActions,
stakingActions = stakingActions,
token = yield.token,
).getOrElse { emptyList() }
}
@ -1028,7 +1028,7 @@ internal class StakingModel @Inject constructor(
.distinctUntilChanged()
.onEach { result ->
result.getOrNull()?.let { actions ->
processingActions = actions
stakingActions = actions
if (isInitState()) {
updateInitialData(status)
}