Updated on 2026-08-14
This commit is contained in:
parent
4cf3d71648
commit
9127624b78
2 changed files with 24 additions and 9 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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 = "",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue