diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml
index 868f58f4a9..145dac2a4c 100644
--- a/core/res/src/main/res/values/strings.xml
+++ b/core/res/src/main/res/values/strings.xml
@@ -784,6 +784,8 @@
The period you must wait after requesting to withdraw funds from staking before the tokens become available.
Warmup period
The allocated time for activating participation in staking.
+ No available validators at the moment. Please try again later.
+ Staking Unavailable
The network will charge a token approval fee to verify that you are authorizing the use of your token for the staking.
By using staking functionality, you agree with provider’s %1$s and %2$s
Locked
diff --git a/domain/staking/models/src/main/kotlin/com/tangem/domain/staking/model/stakekit/Yield.kt b/domain/staking/models/src/main/kotlin/com/tangem/domain/staking/model/stakekit/Yield.kt
index 3cfeb74f0b..d3ba1253c2 100644
--- a/domain/staking/models/src/main/kotlin/com/tangem/domain/staking/model/stakekit/Yield.kt
+++ b/domain/staking/models/src/main/kotlin/com/tangem/domain/staking/model/stakekit/Yield.kt
@@ -18,6 +18,8 @@ data class Yield(
val isAvailable: Boolean,
) {
+ val allValidatorsFull: Boolean = validators.all { it.status == Validator.ValidatorStatus.FULL }
+
val preferredValidators: List
get() = validators.filter { it.preferred }
diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/events/StakingAlertUM.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/events/StakingAlertUM.kt
index 3d384541bd..b2c2a93ed7 100644
--- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/events/StakingAlertUM.kt
+++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/events/StakingAlertUM.kt
@@ -41,4 +41,11 @@ internal sealed class StakingAlertUM : AlertUM {
override val message: TextReference = resourceReference(id = R.string.send_notification_high_fee_title)
override val confirmButtonText: TextReference = resourceReference(id = R.string.common_ok)
}
+
+ data object ValidatorsUnavailable : StakingAlertUM() {
+ override val onConfirmClick: (() -> Unit)? = null
+ override val title: TextReference = resourceReference(id = R.string.staking_error_no_validators_title)
+ override val message: TextReference = resourceReference(id = R.string.staking_error_no_validators_message)
+ override val confirmButtonText: TextReference = resourceReference(id = R.string.common_ok)
+ }
}
\ No newline at end of file
diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/events/StakingEventFactory.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/events/StakingEventFactory.kt
index 75bcbd3efd..6d54195e71 100644
--- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/events/StakingEventFactory.kt
+++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/events/StakingEventFactory.kt
@@ -41,4 +41,9 @@ internal class StakingEventFactory(
)
stateController.updateEvent(alert)
}
+
+ fun createStakingValidatorsUnavailableAlert() {
+ val alert = StakingEvent.ShowAlert(alert = StakingAlertUM.ValidatorsUnavailable)
+ stateController.updateEvent(alert)
+ }
}
\ No newline at end of file
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 7696a8b1c0..1dc4ce0e48 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
@@ -232,18 +232,28 @@ internal class StakingViewModel @Inject constructor(
}
override fun onNextClick(balanceState: BalanceState?) {
- if (value.currentStep == StakingStep.InitialInfo && balanceState == null) {
- stateController.update(
- SetConfirmationStateInitTransformer(
- isEnter = true,
- isExplicitExit = false,
- balanceState = null,
- cryptoCurrencyStatus = cryptoCurrencyStatus,
- stakingApproval = stakingApproval,
- stakingAllowance = stakingAllowance,
- yieldArgs = yield.args,
- ),
- )
+ val isInitialInfoStep = value.currentStep == StakingStep.InitialInfo
+ val noBalanceState = balanceState == null
+ val noYieldBalanceData = cryptoCurrencyStatus.value.yieldBalance !is YieldBalance.Data
+
+ when {
+ isInitialInfoStep && noBalanceState && yield.allValidatorsFull && noYieldBalanceData -> {
+ stakingEventFactory.createStakingValidatorsUnavailableAlert()
+ return
+ }
+ isInitialInfoStep && noBalanceState -> {
+ stateController.update(
+ SetConfirmationStateInitTransformer(
+ isEnter = true,
+ isExplicitExit = false,
+ balanceState = null,
+ cryptoCurrencyStatus = cryptoCurrencyStatus,
+ stakingApproval = stakingApproval,
+ stakingAllowance = stakingAllowance,
+ yieldArgs = yield.args,
+ ),
+ )
+ }
}
stakingStateRouter.onNextClick()
}