diff --git a/data/staking/src/main/java/com/tangem/data/staking/converters/YieldConverter.kt b/data/staking/src/main/java/com/tangem/data/staking/converters/YieldConverter.kt index 7499cb4a34..8489a8772d 100644 --- a/data/staking/src/main/java/com/tangem/data/staking/converters/YieldConverter.kt +++ b/data/staking/src/main/java/com/tangem/data/staking/converters/YieldConverter.kt @@ -29,8 +29,9 @@ class YieldConverter( validators = value.validators .asSequence() .filter { it.status == ValidatorStatusDTO.ACTIVE } - .sortedByDescending { it.apr } .map { convertValidator(it) } + .sortedByDescending { it.isStrategicPartner } + .sortedByDescending { it.apr } .toImmutableList(), isAvailable = value.isAvailable, ) diff --git a/domain/staking/src/main/java/com/tangem/domain/staking/InvalidatePendingTransactionsUseCase.kt b/domain/staking/src/main/java/com/tangem/domain/staking/InvalidatePendingTransactionsUseCase.kt index b7c4c597ef..3ed9de1336 100644 --- a/domain/staking/src/main/java/com/tangem/domain/staking/InvalidatePendingTransactionsUseCase.kt +++ b/domain/staking/src/main/java/com/tangem/domain/staking/InvalidatePendingTransactionsUseCase.kt @@ -8,6 +8,7 @@ import com.tangem.domain.staking.model.stakekit.StakingError import com.tangem.domain.staking.repositories.StakingErrorResolver import com.tangem.domain.staking.repositories.StakingPendingTransactionRepository import com.tangem.domain.wallets.models.UserWalletId +import org.joda.time.DateTime import java.util.UUID class InvalidatePendingTransactionsUseCase( @@ -40,12 +41,12 @@ class InvalidatePendingTransactionsUseCase( newBalancesId: Int, pendingData: List>, ): Pair, List> { - val balances = realData.associateBy { Triple(it.groupId, it.type, it.amount) }.toMutableMap() + val balances = realData.associateBy { Pair(it.groupId to it.type, it.amount to it.date) }.toMutableMap() val transactionsToRemove = mutableListOf() pendingData.forEach { (pendingTransaction, balanceItem) -> - val key = Triple(balanceItem.groupId, balanceItem.type, balanceItem.amount) + val key = Pair(balanceItem.groupId to balanceItem.type, balanceItem.amount to balanceItem.date) val oldBalancesId = pendingTransaction.balancesId when { @@ -57,7 +58,8 @@ class InvalidatePendingTransactionsUseCase( } else -> { val groupId = UUID.randomUUID().toString() - balances[Triple(groupId, BalanceType.STAKED, pendingTransaction.amount)] = BalanceItem( + val now = DateTime.now() + balances[Pair(groupId to BalanceType.STAKED, pendingTransaction.amount to now)] = BalanceItem( groupId = groupId, type = pendingTransaction.type, amount = pendingTransaction.amount, diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/InnerYieldBalanceState.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/InnerYieldBalanceState.kt index 92c74bd946..bb73ad83b6 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/InnerYieldBalanceState.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/InnerYieldBalanceState.kt @@ -7,6 +7,7 @@ import com.tangem.domain.staking.model.stakekit.PendingAction import com.tangem.domain.staking.model.stakekit.RewardBlockType import com.tangem.domain.staking.model.stakekit.Yield import kotlinx.collections.immutable.ImmutableList +import org.joda.time.DateTime import java.math.BigDecimal internal sealed class InnerYieldBalanceState { @@ -35,4 +36,5 @@ internal data class BalanceState( val validator: Yield.Validator?, val pendingActions: ImmutableList, val isPending: Boolean, + val date: DateTime, ) \ No newline at end of file diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/converters/BalanceItemConverter.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/converters/BalanceItemConverter.kt index 045baf45e0..e08e0a26d1 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/converters/BalanceItemConverter.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/converters/BalanceItemConverter.kt @@ -63,6 +63,7 @@ internal class BalanceItemConverter( pendingActions = value.pendingActions.toPersistentList(), isClickable = value.type.isClickable() && !value.isPending, isPending = value.isPending, + date = value.date ?: DateTime.now(), ) } } diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/converters/RewardsValidatorStateConverter.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/converters/RewardsValidatorStateConverter.kt index 295f07c032..aca5b46db7 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/converters/RewardsValidatorStateConverter.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/converters/RewardsValidatorStateConverter.kt @@ -14,6 +14,7 @@ import com.tangem.features.staking.impl.presentation.state.StakingStates import com.tangem.utils.Provider import com.tangem.utils.converter.Converter import kotlinx.collections.immutable.toPersistentList +import org.joda.time.DateTime import java.math.BigDecimal internal class RewardsValidatorStateConverter( @@ -91,6 +92,7 @@ internal class RewardsValidatorStateConverter( isClickable = true, type = balance.type, isPending = balance.isPending, + date = balance.date ?: DateTime.now(), ) } } \ No newline at end of file diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/previewdata/InitialStakingStatePreview.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/previewdata/InitialStakingStatePreview.kt index d3890582f5..9273a2bea2 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/previewdata/InitialStakingStatePreview.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/previewdata/InitialStakingStatePreview.kt @@ -12,6 +12,7 @@ import com.tangem.features.staking.impl.presentation.state.BalanceState import com.tangem.features.staking.impl.presentation.state.InnerYieldBalanceState import com.tangem.features.staking.impl.presentation.state.StakingStates import kotlinx.collections.immutable.persistentListOf +import org.joda.time.DateTime internal object InitialStakingStatePreview { val defaultState = StakingStates.InitialInfoState.Data( @@ -93,6 +94,7 @@ internal object InitialStakingStatePreview { type = BalanceType.STAKED, subtitle = null, isPending = false, + date = DateTime.now(), ), ), ), diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/stub/StakingClickIntentsStub.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/stub/StakingClickIntentsStub.kt index 66ec803e8a..6c4009304a 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/stub/StakingClickIntentsStub.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/stub/StakingClickIntentsStub.kt @@ -33,6 +33,8 @@ internal object StakingClickIntentsStub : StakingClickIntents { override fun onInfoClick(infoType: InfoType) {} + override fun onEnterClick() {} + override fun onAmountValueChange(value: String) {} override fun onAmountPasteTriggerDismiss() {} diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetButtonsStateTransformer.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetButtonsStateTransformer.kt index ea4406d986..52251d7408 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetButtonsStateTransformer.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetButtonsStateTransformer.kt @@ -140,10 +140,7 @@ internal class SetButtonsStateTransformer( private fun StakingUiState.onPrimaryClick() { when (currentStep) { - StakingStep.InitialInfo -> { - clickIntents.onAmountValueChange("") // reset amount state - clickIntents.onNextClick(StakingActionCommonType.ENTER) - } + StakingStep.InitialInfo -> clickIntents.onEnterClick() StakingStep.Validators -> { if (confirmationState is StakingStates.ConfirmationState.Data) { clickIntents.onNextClick( @@ -154,9 +151,7 @@ internal class SetButtonsStateTransformer( clickIntents.onNextClick() } } - StakingStep.Amount -> { - clickIntents.onNextClick() - } + StakingStep.Amount -> clickIntents.onNextClick() StakingStep.Confirmation -> onConfirmationClick() StakingStep.RewardsValidators -> Unit } diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetConfirmationStateResetAssentTransformer.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetConfirmationStateResetAssentTransformer.kt index a3b203d9eb..ee866db72c 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetConfirmationStateResetAssentTransformer.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/SetConfirmationStateResetAssentTransformer.kt @@ -3,7 +3,6 @@ package com.tangem.features.staking.impl.presentation.state.transformers import com.tangem.features.staking.impl.presentation.state.InnerConfirmationStakingState import com.tangem.features.staking.impl.presentation.state.StakingStates import com.tangem.features.staking.impl.presentation.state.StakingUiState -import com.tangem.features.staking.impl.presentation.state.ValidatorState import com.tangem.utils.transformer.Transformer internal object SetConfirmationStateResetAssentTransformer : Transformer { @@ -14,7 +13,7 @@ internal object SetConfirmationStateResetAssentTransformer : Transformer?) override fun onAmountNext() = onNextClick(actionTypeToOverwrite = null) diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/viewmodel/StakingViewModel.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/viewmodel/StakingViewModel.kt index 2c0c1833ed..244b8b108d 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/viewmodel/StakingViewModel.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/viewmodel/StakingViewModel.kt @@ -388,6 +388,27 @@ internal class StakingViewModel @Inject constructor( ) } + override fun onEnterClick() { + onAmountValueChange("") // reset amount state + + // TODO refactor in [REDACTED_JIRA] + val confirmationState = value.confirmationState as? StakingStates.ConfirmationState.Data + val filteredValidator = yield.validators.filter { it.preferred } + stateController.update { + value.copy( + confirmationState = confirmationState?.copy( + validatorState = ValidatorState.Content( + isClickable = true, + chosenValidator = filteredValidator[0], + availableValidators = filteredValidator, + ), + ) as StakingStates.ConfirmationState, + ) + } + + onNextClick(StakingActionCommonType.ENTER) + } + override fun onAmountValueChange(value: String) { stateController.update(AmountChangeStateTransformer(cryptoCurrencyStatus, value, yield)) }