Updated on 2026-08-14

This commit is contained in:
Tangem 2025-12-18 11:53:39 +05:00
parent 4cf3d71648
commit 9127624b78
2 changed files with 24 additions and 9 deletions

View file

@ -93,6 +93,7 @@ import com.tangem.utils.extensions.isSingleItem
import com.tangem.utils.extensions.orZero
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toImmutableList
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.launch
@ -601,10 +602,20 @@ internal class StakingModel @Inject constructor(
override fun onActiveStake(activeStake: BalanceState) {
val networkId = cryptoCurrencyStatus.currency.network.rawId
if (isSingleAction(networkId, activeStake)) {
val preferredValidators = yield.validators.filter { it.preferred }
val pendingActions = activeStake.pendingActions.mapNotNull { action ->
if (action.type in listOf(StakingActionType.RESTAKE, StakingActionType.STAKE) &&
preferredValidators.isSingleItem()
) {
null
} else {
action
}
}.toImmutableList()
if (isSingleAction(networkId, pendingActions)) {
prepareForConfirmation(
balanceType = activeStake.type,
pendingActions = activeStake.pendingActions,
pendingActions = pendingActions,
balanceState = activeStake,
validator = activeStake.validator,
amountValue = activeStake.cryptoValue,
@ -613,7 +624,7 @@ internal class StakingModel @Inject constructor(
} else {
stateController.update(
ShowActionSelectorBottomSheetTransformer(
pendingActions = withStubUnstakeAction(networkId, activeStake),
pendingActions = withStubUnstakeAction(networkId, pendingActions, activeStake),
onActionSelect = { action ->
prepareForConfirmation(
balanceType = activeStake.type,

View file

@ -37,17 +37,21 @@ internal fun StakingActionType?.getPendingActionTitle(): TextReference = when (t
null -> TextReference.EMPTY
}
internal fun isSingleAction(networkId: String, activeStake: BalanceState): Boolean {
val isSingleAction = activeStake.pendingActions.size <= 1 // Either single or none pending actions
val isCompositePendingActions = isCompositePendingActions(networkId, activeStake.pendingActions)
val isRestake = activeStake.pendingActions.any { it.type.isRestake }
internal fun isSingleAction(networkId: String, pendingActions: List<PendingAction>): Boolean {
val isSingleAction = pendingActions.size <= 1 // Either single or none pending actions
val isCompositePendingActions = isCompositePendingActions(networkId, pendingActions.toPersistentList())
val isRestake = pendingActions.any { it.type.isRestake }
return isSingleAction && !isRestake || isCompositePendingActions
}
internal fun withStubUnstakeAction(networkId: String, activeStake: BalanceState): ImmutableList<PendingAction> {
internal fun withStubUnstakeAction(
networkId: String,
pendingActions: List<PendingAction>,
activeStake: BalanceState,
): ImmutableList<PendingAction> {
return if (isStubUnstakeAction(networkId) && activeStake.type != BalanceType.REWARDS) {
activeStake.pendingActions.plus(
pendingActions.plus(
PendingAction(
type = StakingActionType.UNSTAKE,
passthrough = "",