Updated on 2026-08-14
This commit is contained in:
parent
5c3f579271
commit
08811dffbf
10 changed files with 205 additions and 151 deletions
|
|
@ -11,7 +11,7 @@ import com.tangem.domain.staking.model.stakekit.action.StakingActionCommonType
|
|||
import com.tangem.domain.tokens.model.CryptoCurrency
|
||||
import com.tangem.features.staking.impl.R
|
||||
import com.tangem.features.staking.impl.presentation.state.*
|
||||
import com.tangem.features.staking.impl.presentation.state.utils.getRewardSchedule
|
||||
import com.tangem.features.staking.impl.presentation.state.utils.getRewardScheduleText
|
||||
import com.tangem.utils.transformer.Transformer
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
|
||||
|
|
@ -62,9 +62,10 @@ internal class SetConfirmationStateLoadingTransformer(
|
|||
fiatCurrencyCode = appCurrency.code,
|
||||
fiatCurrencySymbol = appCurrency.symbol,
|
||||
)
|
||||
val rewardSchedule = getRewardSchedule(
|
||||
yield.metadata.rewardSchedule,
|
||||
cryptoCurrency.network.id.value,
|
||||
val rewardSchedule = getRewardScheduleText(
|
||||
rewardSchedule = yield.metadata.rewardSchedule,
|
||||
networkId = cryptoCurrency.network.id.value,
|
||||
decapitalize = true,
|
||||
)
|
||||
return if (isEnterAction && amountDecimal != null && rewardSchedule != null) {
|
||||
resourceReference(
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ import com.tangem.features.staking.impl.presentation.state.*
|
|||
import com.tangem.features.staking.impl.presentation.state.bottomsheet.InfoType
|
||||
import com.tangem.features.staking.impl.presentation.state.converters.RewardsValidatorStateConverter
|
||||
import com.tangem.features.staking.impl.presentation.state.converters.YieldBalancesConverter
|
||||
import com.tangem.features.staking.impl.presentation.state.utils.getRewardSchedule
|
||||
import com.tangem.features.staking.impl.presentation.state.utils.getRewardScheduleText
|
||||
import com.tangem.features.staking.impl.presentation.viewmodel.StakingClickIntents
|
||||
import com.tangem.lib.crypto.BlockchainUtils.isPolkadot
|
||||
import com.tangem.utils.Provider
|
||||
|
|
@ -200,7 +200,11 @@ internal class SetInitialDataStateTransformer(
|
|||
}
|
||||
|
||||
private fun createRewardScheduleItem(): RoundedListWithDividersItemData? {
|
||||
val endTextReference = getRewardScheduleText() ?: return null
|
||||
val endTextReference = getRewardScheduleText(
|
||||
rewardSchedule = yield.metadata.rewardSchedule,
|
||||
networkId = cryptoCurrencyStatusProvider().currency.network.id.value,
|
||||
decapitalize = false,
|
||||
) ?: return null
|
||||
|
||||
return RoundedListWithDividersItemData(
|
||||
id = R.string.staking_details_reward_schedule,
|
||||
|
|
@ -252,18 +256,6 @@ internal class SetInitialDataStateTransformer(
|
|||
return resourceReference(R.string.common_range, wrappedList(formattedMinApr, formattedMaxApr))
|
||||
}
|
||||
|
||||
private fun getRewardScheduleText(): TextReference? {
|
||||
val rewardSchedule = getRewardSchedule(
|
||||
yield.metadata.rewardSchedule,
|
||||
cryptoCurrencyStatusProvider().currency.network.id.value,
|
||||
) ?: return null
|
||||
|
||||
return resourceReference(
|
||||
R.string.staking_reward_schedule_each,
|
||||
wrappedList(rewardSchedule),
|
||||
)
|
||||
}
|
||||
|
||||
private companion object {
|
||||
val EQUALITY_THRESHOLD = BigDecimal(1E-10)
|
||||
|
||||
|
|
|
|||
|
|
@ -16,23 +16,45 @@ private data object StakingRewardSchedule {
|
|||
val SOLANA_SCHEDULE = 2 to 3
|
||||
}
|
||||
|
||||
internal fun getRewardSchedule(schedule: Yield.Metadata.RewardSchedule, networkId: String): TextReference? =
|
||||
when (schedule) {
|
||||
internal fun getRewardScheduleText(
|
||||
rewardSchedule: Yield.Metadata.RewardSchedule,
|
||||
networkId: String,
|
||||
decapitalize: Boolean,
|
||||
): TextReference? {
|
||||
return when (rewardSchedule) {
|
||||
Yield.Metadata.RewardSchedule.WEEK -> resourceReference(
|
||||
id = R.string.staking_reward_schedule_week,
|
||||
decapitalize = decapitalize,
|
||||
)
|
||||
Yield.Metadata.RewardSchedule.HOUR -> resourceReference(
|
||||
id = R.string.staking_reward_schedule_hour,
|
||||
decapitalize = decapitalize,
|
||||
)
|
||||
Yield.Metadata.RewardSchedule.DAY -> resourceReference(
|
||||
id = R.string.staking_reward_schedule_day,
|
||||
decapitalize = decapitalize,
|
||||
)
|
||||
Yield.Metadata.RewardSchedule.MONTH -> resourceReference(
|
||||
id = R.string.staking_reward_schedule_month,
|
||||
decapitalize = decapitalize,
|
||||
)
|
||||
Yield.Metadata.RewardSchedule.BLOCK,
|
||||
Yield.Metadata.RewardSchedule.EPOCH,
|
||||
Yield.Metadata.RewardSchedule.ERA,
|
||||
-> getCustomRewardSchedule(networkId)
|
||||
Yield.Metadata.RewardSchedule.WEEK -> resourceReference(R.string.common_week)
|
||||
Yield.Metadata.RewardSchedule.HOUR -> resourceReference(R.string.common_hour)
|
||||
Yield.Metadata.RewardSchedule.DAY -> pluralReference(R.plurals.common_days_no_param, count = 1)
|
||||
Yield.Metadata.RewardSchedule.MONTH -> resourceReference(R.string.common_month)
|
||||
Yield.Metadata.RewardSchedule.UNKNOWN -> null
|
||||
-> getCustomRewardSchedule(
|
||||
networkId = networkId,
|
||||
decapitalize = decapitalize,
|
||||
)
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
private fun getCustomRewardSchedule(networkId: String): TextReference? {
|
||||
private fun getCustomRewardSchedule(networkId: String, decapitalize: Boolean = false): TextReference? {
|
||||
return when {
|
||||
isSolana(networkId) -> {
|
||||
combinedReference(
|
||||
resourceReference(id = R.string.staking_reward_schedule_each_plural, decapitalize = decapitalize),
|
||||
stringReference(NON_BREAKING_SPACE.toString()),
|
||||
stringReference("${SOLANA_SCHEDULE.first}$MINUS${SOLANA_SCHEDULE.second}$NON_BREAKING_SPACE"),
|
||||
pluralReference(
|
||||
id = R.plurals.common_days_no_param,
|
||||
|
|
@ -42,11 +64,13 @@ private fun getCustomRewardSchedule(networkId: String): TextReference? {
|
|||
}
|
||||
isCosmos(networkId) -> {
|
||||
combinedReference(
|
||||
resourceReference(id = R.string.staking_reward_schedule_each_plural, decapitalize = decapitalize),
|
||||
stringReference(NON_BREAKING_SPACE.toString()),
|
||||
stringReference("${COSMOS_SCHEDULE.first}$MINUS${COSMOS_SCHEDULE.second}$NON_BREAKING_SPACE"),
|
||||
resourceReference(R.string.common_second_no_param),
|
||||
)
|
||||
}
|
||||
isTron(networkId) -> pluralReference(R.plurals.common_days_no_param, count = 1)
|
||||
isTron(networkId) -> resourceReference(id = R.string.staking_reward_schedule_day, decapitalize = decapitalize)
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue