Updated on 2026-08-14

This commit is contained in:
Tangem 2024-10-17 12:54:13 +03:00
parent 5c3f579271
commit 08811dffbf
10 changed files with 205 additions and 151 deletions

View file

@ -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(

View file

@ -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)

View file

@ -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
}
}