Updated on 2026-08-14

This commit is contained in:
Tangem 2024-10-03 16:58:30 +05:00
parent 7467c8336b
commit 7228c72553
11 changed files with 141 additions and 67 deletions

View file

@ -97,6 +97,10 @@
<item quantity="one">%d tag</item>
<item quantity="other">%d tage</item>
</plurals>
<plurals name="common_days_no_param">
<item quantity="one">Tag</item>
<item quantity="other">Tage</item>
</plurals>
<string name="common_delete">Entfernen</string>
<string name="common_disabled">Deaktiviert</string>
<string name="common_done">Erledigt</string>
@ -143,6 +147,7 @@
<string name="common_save_changes">Änderungen speichern</string>
<string name="common_search">Suchen</string>
<string name="common_search_tokens">Token suchen</string>
<string name="common_second_no_param">sek.</string>
<string name="common_seed_phrase">Seed phrase</string>
<string name="common_select_action">Aktion auswählen</string>
<string name="common_sell">Verkaufen</string>
@ -343,7 +348,7 @@
<string name="manage_tokens_unavailable_vote">Hochstimmen</string>
<string name="manage_tokens_wallet_selector_title">Wallet auswählen</string>
<string name="manage_tokens_wallet_support_only_one_network_title">Das Wallet unterstützt nicht mehr als ein Netzwerk</string>
<string name="markets_add_to_my_portfolio_description">Um mit dem Kauf, Tausch oder Erhalt dieses Vermögenswerts zu beginnen, füge diesen Token zu mindestens 1 Netzwerk hinzu</string>
<string name="markets_add_to_my_portfolio_description">Um dieses Asset zu kaufen, zu tauschen oder zu erhalten, füge diesen Deinem Portfolio hinzu</string>
<string name="markets_add_to_my_portfolio_unavailable_description">Dieses Asset ist nicht verfügbar</string>
<string name="markets_add_to_my_portfolio_unavailable_for_wallet_description">Dieses Asset ist für dieses Wallet nicht verfügbar</string>
<string name="markets_add_to_portfolio_button">Zum Portfolio hinzufügen</string>
@ -378,6 +383,10 @@
<string name="markets_sort_by_top_losers_title">Top-Verlierer</string>
<string name="markets_sort_by_trending_title">Beliebt</string>
<string name="markets_token_details_about_token_title">Über %s</string>
<plurals name="markets_token_details_amount_exchanges">
<item quantity="one">%d Börse</item>
<item quantity="other">%d Börsen</item>
</plurals>
<plurals name="markets_token_details_based_on_ratings">
<item quantity="one">Bewertung, basierend auf %d</item>
<item quantity="other">Bewertungen, basierend auf %d</item>
@ -389,6 +398,12 @@
<string name="markets_token_details_circulating_supply">Umlaufmenge</string>
<string name="markets_token_details_circulating_supply_description">Die Gesamtzahl der Coins, die für den Handel verfügbar sind und auf dem Markt zirkulieren</string>
<string name="markets_token_details_circulating_supply_full">Umlaufmenge</string>
<string name="markets_token_details_empty_exchanges">Keine Börsen gefunden</string>
<string name="markets_token_details_exchange">Umtausch</string>
<string name="markets_token_details_exchange_trust_score_caution">Vorsicht</string>
<string name="markets_token_details_exchange_trust_score_risky">Riskant</string>
<string name="markets_token_details_exchange_trust_score_trusted">Vertrauenswürdig</string>
<string name="markets_token_details_exchanges_title">Börsen</string>
<string name="markets_token_details_experienced_buyers">Erfahrene Käufer</string>
<string name="markets_token_details_experienced_buyers_description">Nettokäufer mit der zusätzlichen Anforderung, mindestens 100 ausgehende Transaktionen zu haben</string>
<string name="markets_token_details_experienced_buyers_full">Erfahrene Käufer</string>
@ -407,6 +422,7 @@
<string name="markets_token_details_liquidity_full">Liquidität</string>
<string name="markets_token_details_liquidity_index">Liquiditätsindex</string>
<string name="markets_token_details_liquidity_index_description">Leer</string>
<string name="markets_token_details_listed_on">Gelistet auf</string>
<string name="markets_token_details_low">Niedrig</string>
<string name="markets_token_details_market_capitalization">MarketCap</string>
<string name="markets_token_details_market_capitalization_description">Der Gesamtmarktwert einer Kryptowährung, berechnet sich durch Multiplikation des aktuellen Preises des Coins mit der Gesamtzahl der im Umlauf befindlichen Coins</string>
@ -429,6 +445,7 @@
<string name="markets_token_details_trading_volume">Handelsvolumen (24h)</string>
<string name="markets_token_details_trading_volume_24h_description">Der Gesamtbetrag einer Kryptowährung, der innerhalb der letzten 24 Stunden gehandelt wurde, wobei das Aktivitäts- und Liquiditätsniveau auf dem Markt angegeben wird</string>
<string name="markets_token_details_trading_volume_full">Handelsvolumen (24h)</string>
<string name="markets_token_details_volume">Volumen</string>
<string name="markets_tooltip_message">Rufe dies auf oder tippe auf die Suchleiste, um Token direkt vom Markt hinzuzufügen</string>
<string name="markets_tooltip_title">Token hinzufügen</string>
<string name="nfc_error_unavailable">NFC ist auf deinem Gerät nicht verfügbar</string>
@ -721,8 +738,8 @@
<string name="staking_reward_claiming_manual">Händisch</string>
<string name="staking_reward_schedule_block">Pro Block</string>
<string name="staking_reward_schedule_day">Täglich</string>
<string name="staking_reward_schedule_each">Alle %s</string>
<string name="staking_reward_schedule_each_day">Täglich</string>
<string name="staking_reward_schedule_each_sec">Alle %1$s Sek.</string>
<string name="staking_reward_schedule_epoch">Pro Epoche</string>
<string name="staking_reward_schedule_era">Pro Ära</string>
<string name="staking_reward_schedule_hour">Stündlich</string>
@ -733,6 +750,7 @@
<string name="staking_stake_more">Mehr staken</string>
<string name="staking_summary_description_text">Du setzt %1$s ein und erhältst jährlich %2$s</string>
<string name="staking_tap_to_unlock">Zum Entsperren antippen</string>
<string name="staking_tap_to_unlock_or_vote">Tippe zum Entsperren oder Abstimmen</string>
<string name="staking_tap_to_withdraw">Zum abheben antippen</string>
<string name="staking_title_stake">Stake %s</string>
<string name="staking_title_unstake">Staking beenden%s</string>
@ -747,7 +765,7 @@
<string name="staking_validators">Validatoren</string>
<string name="staking_validators_label">Strategischer Partner</string>
<string name="staking_vote">Abstimmung</string>
<string name="staking_vote_locked">Abstimmung gesperrt</string>
<string name="staking_vote_locked">Abstimmung</string>
<string name="staking_withdraw">Zurückziehen</string>
<string name="staking_your_stakes">Deine Einsätze</string>
<string name="story_awe_description">Bewahre deine Krypto-Assets sicher auf, während die privaten Schlüssel auf deiner Karte bleiben</string>

View file

@ -343,7 +343,7 @@
<string name="manage_tokens_unavailable_vote">Votar a favor</string>
<string name="manage_tokens_wallet_selector_title">Elegir wallet</string>
<string name="manage_tokens_wallet_support_only_one_network_title">La billetera no admite más de una red</string>
<string name="markets_add_to_my_portfolio_description">Para comprar, intercambiar o recibir este activo, agréguelo a su cartera</string>
<string name="markets_add_to_my_portfolio_description">Para comprar, intercambiar o recibir este activo, agréguelo a su portafolio</string>
<string name="markets_add_to_my_portfolio_unavailable_description">Este activo no está disponible</string>
<string name="markets_add_to_portfolio_button">Añadir al portafolio</string>
<string name="markets_add_token">Agregue un token</string>
@ -720,7 +720,6 @@
<string name="staking_reward_schedule_block">Bloquear</string>
<string name="staking_reward_schedule_day">Día</string>
<string name="staking_reward_schedule_each_day">Cada día</string>
<string name="staking_reward_schedule_each_sec">Cada %1$s segundo(s)</string>
<string name="staking_reward_schedule_epoch">Época</string>
<string name="staking_reward_schedule_era">Era</string>
<string name="staking_reward_schedule_hour">Hora</string>

View file

@ -343,7 +343,7 @@
<string name="manage_tokens_unavailable_vote">Vote positif</string>
<string name="manage_tokens_wallet_selector_title">Choisissez un portefeuille</string>
<string name="manage_tokens_wallet_support_only_one_network_title">Le portefeuille ne prend pas en charge plus d\'un réseau</string>
<string name="markets_add_to_my_portfolio_description">Pour commencer à acheter, échanger ou recevoir cet actif, ajoutez ce jeton à au moins 1 réseau</string>
<string name="markets_add_to_my_portfolio_description">Pour acheter, échanger ou recevoir cet actif, ajoutez-le à votre portefeuille</string>
<string name="markets_add_to_my_portfolio_unavailable_description">Cet actif n\'est pas disponible</string>
<string name="markets_add_to_portfolio_button">Ajouter au portfolio</string>
<string name="markets_add_token">Ajoutez un jeton</string>
@ -720,7 +720,6 @@
<string name="staking_reward_schedule_block">Bloquer</string>
<string name="staking_reward_schedule_day">Jour</string>
<string name="staking_reward_schedule_each_day">Chaque jour</string>
<string name="staking_reward_schedule_each_sec">Toute(s) les %1$s seconde(s)</string>
<string name="staking_reward_schedule_epoch">Époque</string>
<string name="staking_reward_schedule_era">Ère</string>
<string name="staking_reward_schedule_hour">Heure</string>

View file

@ -728,8 +728,6 @@
<string name="staking_reward_schedule_day">毎日</string>
<string name="staking_reward_schedule_each">%sごと</string>
<string name="staking_reward_schedule_each_day">毎日</string>
<string name="staking_reward_schedule_each_days">%1$s日ごとに</string>
<string name="staking_reward_schedule_each_sec">%1$s秒毎</string>
<string name="staking_reward_schedule_epoch">エポック毎</string>
<string name="staking_reward_schedule_era">時代毎</string>
<string name="staking_reward_schedule_hour">毎時間</string>

View file

@ -153,6 +153,7 @@
<string name="common_save_changes">Сохранить изменения</string>
<string name="common_search">Поиск</string>
<string name="common_search_tokens">Поиск токенов</string>
<string name="common_second_no_param">сек</string>
<string name="common_seed_phrase">Seed-фраза</string>
<string name="common_select_action">Выберите действие</string>
<string name="common_sell">Продать</string>
@ -296,6 +297,7 @@
<string name="feedback_subject_support">Обращение в поддержку</string>
<string name="feedback_subject_support_tangem">Обращение в поддержку Tangem</string>
<string name="feedback_subject_tx_failed">Не могу отправить транзакцию</string>
<string name="feedback_token_description_error">Ошибка в описании монеты</string>
<string name="give_permission_current_transaction">Транзакция</string>
<string name="give_permission_fee_footer">Комиссия сети за одобрение токена будет взиматься за подтверждение того, что именно вы разрешаете использовать ваш токен для обмена.</string>
<string name="give_permission_policy_type_footer">Укажите лимит доступа к выбранному токену</string>
@ -754,8 +756,6 @@
<string name="staking_reward_schedule_block">За блок</string>
<string name="staking_reward_schedule_day">Ежедневно</string>
<string name="staking_reward_schedule_each_day">Каждый день</string>
<string name="staking_reward_schedule_each_days">Каждые %1$s дня</string>
<string name="staking_reward_schedule_each_sec">Каждые %1$s сек</string>
<string name="staking_reward_schedule_epoch">За эпоху</string>
<string name="staking_reward_schedule_era">За эру</string>
<string name="staking_reward_schedule_hour">Ежечасно</string>
@ -766,7 +766,7 @@
<string name="staking_stake_more">Застейкать еще</string>
<string name="staking_summary_description_text">Вы стейкаете %1$s и будете получать %2$s ежегодно</string>
<string name="staking_tap_to_unlock">Нажмите для разблокировки</string>
<string name="staking_tap_to_unlock_or_vote">Нажмите для разблокировки или голосования</string>
<string name="staking_tap_to_unlock_or_vote">Нажмите для разблокировки</string>
<string name="staking_tap_to_withdraw">Нажмите для вывода</string>
<string name="staking_title_stake">Застейкать %s</string>
<string name="staking_title_unstake">Вывести %s</string>
@ -797,7 +797,7 @@
<string name="story_web3_title">Поддержка Web 3.0</string>
<string name="swap_promo_text">Обменивайте больше токенов по лучшим курсам прямо в вашем кошельке.</string>
<string name="swap_promo_title">Новый провайдер обмена!</string>
<string name="swapping_alert_cex_description">В сумму включено: \n• комиссия провайдера сервиса\n• комиссия сети за отправку %s от биржи обратно на адрес пользователя</string>
<string name="swapping_alert_cex_description">В сумму включено: \n• комиссия провайдера сервиса\n• комиссия сети за отправку %s от биржи обратно на адрес пользователя.</string>
<string name="swapping_alert_dex_description">В сумму включена комиссия провайдера сервиса.</string>
<string name="swapping_alert_title">Комиссии</string>
<string name="swapping_approve_information_text">Подтверждения считаются отраслевым стандартом для всех децентрализованных бирж и защищают ваш кошелек от доступа со стороны смарт-контракта без вашего разрешения. По замыслу смарт-контракты не могут получить доступ к вашим токенам, если вы не одобрите доступ со своей стороны. «Разблокируя» свои токены, вы даете смарт-контракту 1inch разрешение тратить ваши активы. Майнеры сети получают компенсацию за газ (оплачиваемый вами) за запись этого действия в блокчейне. Как только разрешение будет предоставлено, вы сможете обменять свой токен.</string>

View file

@ -737,7 +737,6 @@
<string name="staking_reward_schedule_block">Блок</string>
<string name="staking_reward_schedule_day">День</string>
<string name="staking_reward_schedule_each_day">Щодня</string>
<string name="staking_reward_schedule_each_sec">Кожні %1$s сек</string>
<string name="staking_reward_schedule_epoch">Епоха</string>
<string name="staking_reward_schedule_era">Ера</string>
<string name="staking_reward_schedule_hour">Година</string>

View file

@ -119,12 +119,14 @@
<string name="common_generate_addresses">Get addresses</string>
<string name="common_go_to_provider">Go to provider</string>
<string name="common_go_to_token">Go to token</string>
<string name="common_hour">hour</string>
<string name="common_import">Import</string>
<string name="common_in_progress">In progress</string>
<string name="common_later">Later</string>
<string name="common_left">%1$s left</string>
<string name="common_locked">Locked</string>
<string name="common_main_network">Main network</string>
<string name="common_month">month</string>
<string name="common_network_fee_title">Network fee</string>
<string name="common_network_fee_warning_content">Amount sent will be reduced by %1$s (%2$s) to cover the selected fee level</string>
<string name="common_next">Next</string>
@ -147,6 +149,7 @@
<string name="common_save_changes">Save changes</string>
<string name="common_search">Search</string>
<string name="common_search_tokens">Search tokens</string>
<string name="common_second_no_param">sec</string>
<string name="common_seed_phrase">Seed phrase</string>
<string name="common_select_action">Select action</string>
<string name="common_sell">Sell</string>
@ -172,6 +175,7 @@
<string name="common_unknown_error">There was an error. Please try again.</string>
<string name="common_unreachable">Unreachable</string>
<string name="common_unstake">Unstake</string>
<string name="common_week">week</string>
<string name="common_yes">Yes</string>
<string name="contract_address_copied_message">Contract address copied!</string>
<string name="currency_subtitle_expanded">Available networks</string>
@ -290,6 +294,7 @@
<string name="feedback_subject_support">Feedback</string>
<string name="feedback_subject_support_tangem">Tangem feedback</string>
<string name="feedback_subject_tx_failed">Can\'t send a transaction</string>
<string name="feedback_token_description_error">Coin description error</string>
<string name="give_permission_current_transaction">Transaction</string>
<string name="give_permission_fee_footer">The network will charge a token approval fee to verify that you are authorizing the use of your token for the swap.</string>
<string name="give_permission_policy_type_footer">Specify the approve limit for the selected token</string>
@ -738,8 +743,6 @@
<string name="staking_reward_schedule_day">Daily</string>
<string name="staking_reward_schedule_each">Each %s</string>
<string name="staking_reward_schedule_each_day">Each day</string>
<string name="staking_reward_schedule_each_days">Each %1$s days</string>
<string name="staking_reward_schedule_each_sec">Each %1$s sec</string>
<string name="staking_reward_schedule_epoch">Per Epoch</string>
<string name="staking_reward_schedule_era">Per Era</string>
<string name="staking_reward_schedule_hour">Hourly</string>
@ -748,7 +751,7 @@
<string name="staking_rewards">Rewards</string>
<string name="staking_stake_locked">Stake locked</string>
<string name="staking_stake_more">Stake more</string>
<string name="staking_summary_description_text">You stake %1$s and will be receiving %2$s yearly</string>
<string name="staking_summary_description_text">You stake %1$s and will be receiving your reward each %2$s</string>
<string name="staking_tap_to_unlock">Tap to unlock</string>
<string name="staking_tap_to_unlock_or_vote">Tap to unlock or vote</string>
<string name="staking_tap_to_withdraw">Tap to withdraw</string>

View file

@ -8,15 +8,17 @@ import com.tangem.core.ui.utils.BigDecimalFormatter
import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.domain.staking.model.stakekit.Yield
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.utils.extensions.orZero
import com.tangem.features.staking.impl.presentation.state.utils.getRewardSchedule
import com.tangem.utils.transformer.Transformer
import kotlinx.collections.immutable.persistentListOf
internal class SetConfirmationStateLoadingTransformer(
private val yield: Yield,
private val appCurrency: AppCurrency,
private val cryptoCurrency: CryptoCurrency,
) : Transformer<StakingUiState> {
override fun transform(prevState: StakingUiState): StakingUiState {
@ -38,7 +40,7 @@ internal class SetConfirmationStateLoadingTransformer(
availableValidators = filteredValidators,
),
notifications = persistentListOf(),
footerText = getFooter(prevState, chosenValidator),
footerText = getFooter(prevState),
transactionDoneState = TransactionDoneState.Empty,
pendingAction = possibleConfirmationState?.pendingAction,
pendingActions = possibleConfirmationState?.pendingActions,
@ -49,30 +51,25 @@ internal class SetConfirmationStateLoadingTransformer(
)
}
private fun getFooter(state: StakingUiState, validator: Yield.Validator): TextReference {
private fun getFooter(state: StakingUiState): TextReference {
val amountState = state.amountState as? AmountState.Data
val isEnterAction = state.actionType == StakingActionCommonType.ENTER
val apr = validator.apr.orZero()
val amountDecimal = amountState?.amountTextField?.fiatAmount?.value
val potentialReward = amountDecimal?.multiply(apr)
val amountValue = BigDecimalFormatter.formatFiatAmount(
fiatAmount = amountDecimal,
fiatCurrencyCode = appCurrency.code,
fiatCurrencySymbol = appCurrency.symbol,
)
val potentialRewardValue = BigDecimalFormatter.formatFiatAmount(
fiatAmount = potentialReward,
fiatCurrencyCode = appCurrency.code,
fiatCurrencySymbol = appCurrency.symbol,
withApproximateSign = true,
val rewardSchedule = getRewardSchedule(
yield.metadata.rewardSchedule,
cryptoCurrency.network.id.value,
)
return if (isEnterAction && amountDecimal != null && potentialReward != null) {
return if (isEnterAction && amountDecimal != null && rewardSchedule != null) {
resourceReference(
id = R.string.staking_summary_description_text,
formatArgs = wrappedList(amountValue, potentialRewardValue),
formatArgs = wrappedList(amountValue, rewardSchedule),
)
} else {
TextReference.EMPTY

View file

@ -9,7 +9,6 @@ import com.tangem.core.ui.extensions.*
import com.tangem.core.ui.pullToRefresh.PullToRefreshConfig
import com.tangem.core.ui.utils.BigDecimalFormatter
import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.domain.core.serialization.SerializedBigDecimal
import com.tangem.domain.staking.model.stakekit.BalanceItem
import com.tangem.domain.staking.model.stakekit.Yield
import com.tangem.domain.tokens.model.CryptoCurrencyStatus
@ -19,6 +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.viewmodel.StakingClickIntents
import com.tangem.lib.crypto.BlockchainUtils.isPolkadot
import com.tangem.utils.Provider
@ -102,20 +102,18 @@ internal class SetInitialDataStateTransformer(
val cryptoCurrencyStatus = cryptoCurrencyStatusProvider()
return listOfNotNull(
createAnnualPercentageRateItem(yield.validators),
createAnnualPercentageRateItem(),
createAvailableItem(cryptoCurrencyStatus),
createUnbondingPeriodItem(yield.metadata.cooldownPeriod?.days),
createMinimumRequirementItem(
cryptoCurrencyStatus = cryptoCurrencyStatus,
minimumCryptoAmount = yield.args.enter.args[Yield.Args.ArgType.AMOUNT]?.minimum,
),
createRewardClaimingItem(yield.metadata.rewardClaiming),
createWarmupPeriodItem(yield.metadata.warmupPeriod.days),
createRewardScheduleItem(yield.metadata.rewardSchedule),
createUnbondingPeriodItem(),
createMinimumRequirementItem(cryptoCurrencyStatus),
createRewardClaimingItem(),
createWarmupPeriodItem(),
createRewardScheduleItem(),
).toPersistentList()
}
private fun createAnnualPercentageRateItem(validators: List<Yield.Validator>): RoundedListWithDividersItemData {
private fun createAnnualPercentageRateItem(): RoundedListWithDividersItemData {
val validators = yield.validators
return RoundedListWithDividersItemData(
id = R.string.staking_details_annual_percentage_rate,
startText = TextReference.Res(R.string.staking_details_annual_percentage_rate),
@ -140,8 +138,8 @@ internal class SetInitialDataStateTransformer(
)
}
private fun createUnbondingPeriodItem(cooldownPeriodDays: Int?): RoundedListWithDividersItemData? {
cooldownPeriodDays ?: return null
private fun createUnbondingPeriodItem(): RoundedListWithDividersItemData? {
val cooldownPeriodDays = yield.metadata.cooldownPeriod?.days ?: return null
return RoundedListWithDividersItemData(
id = R.string.staking_details_unbonding_period,
startText = TextReference.Res(R.string.staking_details_unbonding_period),
@ -156,9 +154,8 @@ internal class SetInitialDataStateTransformer(
private fun createMinimumRequirementItem(
cryptoCurrencyStatus: CryptoCurrencyStatus,
minimumCryptoAmount: SerializedBigDecimal?,
): RoundedListWithDividersItemData? {
if (minimumCryptoAmount == null) return null
val minimumCryptoAmount = yield.args.enter.args[Yield.Args.ArgType.AMOUNT]?.minimum ?: return null
if (!isPolkadot(cryptoCurrencyStatus.currency.network.id.value)) return null
val formattedAmount = BigDecimalFormatter.formatCryptoAmount(
@ -174,9 +171,8 @@ internal class SetInitialDataStateTransformer(
)
}
private fun createRewardClaimingItem(
rewardClaiming: Yield.Metadata.RewardClaiming,
): RoundedListWithDividersItemData? {
private fun createRewardClaimingItem(): RoundedListWithDividersItemData? {
val rewardClaiming = yield.metadata.rewardClaiming
val endTextId = rewardClaimingResources[rewardClaiming] ?: return null
return RoundedListWithDividersItemData(
@ -187,7 +183,8 @@ internal class SetInitialDataStateTransformer(
)
}
private fun createWarmupPeriodItem(warmupPeriodDays: Int): RoundedListWithDividersItemData? {
private fun createWarmupPeriodItem(): RoundedListWithDividersItemData? {
val warmupPeriodDays = yield.metadata.warmupPeriod.days
if (warmupPeriodDays == 0) return null
return RoundedListWithDividersItemData(
@ -202,10 +199,8 @@ internal class SetInitialDataStateTransformer(
)
}
private fun createRewardScheduleItem(
rewardSchedule: Yield.Metadata.RewardSchedule,
): RoundedListWithDividersItemData? {
val endTextReference = getRewardScheduleText(rewardSchedule) ?: return null
private fun createRewardScheduleItem(): RoundedListWithDividersItemData? {
val endTextReference = getRewardScheduleText() ?: return null
return RoundedListWithDividersItemData(
id = R.string.staking_details_reward_schedule,
@ -257,17 +252,16 @@ internal class SetInitialDataStateTransformer(
return resourceReference(R.string.common_range, wrappedList(formattedMinApr, formattedMaxApr))
}
private fun getRewardScheduleText(rewardSchedule: Yield.Metadata.RewardSchedule): TextReference? {
return when (rewardSchedule) {
Yield.Metadata.RewardSchedule.BLOCK -> resourceReference(R.string.staking_reward_schedule_block)
Yield.Metadata.RewardSchedule.WEEK -> resourceReference(R.string.staking_reward_schedule_week)
Yield.Metadata.RewardSchedule.HOUR -> resourceReference(R.string.staking_reward_schedule_hour)
Yield.Metadata.RewardSchedule.DAY -> resourceReference(R.string.staking_reward_schedule_each_day)
Yield.Metadata.RewardSchedule.MONTH -> resourceReference(R.string.staking_reward_schedule_month)
Yield.Metadata.RewardSchedule.ERA -> resourceReference(R.string.staking_reward_schedule_era)
Yield.Metadata.RewardSchedule.EPOCH -> resourceReference(R.string.staking_reward_schedule_epoch)
Yield.Metadata.RewardSchedule.UNKNOWN -> null
}
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 {

View file

@ -0,0 +1,52 @@
package com.tangem.features.staking.impl.presentation.state.utils
import com.tangem.core.ui.extensions.*
import com.tangem.domain.staking.model.stakekit.Yield
import com.tangem.features.staking.impl.R
import com.tangem.features.staking.impl.presentation.state.utils.StakingRewardSchedule.COSMOS_SCHEDULE
import com.tangem.features.staking.impl.presentation.state.utils.StakingRewardSchedule.SOLANA_SCHEDULE
import com.tangem.lib.crypto.BlockchainUtils.isCosmos
import com.tangem.lib.crypto.BlockchainUtils.isSolana
import com.tangem.lib.crypto.BlockchainUtils.isTron
import com.tangem.utils.StringsSigns.MINUS
import com.tangem.utils.StringsSigns.NON_BREAKING_SPACE
private data object StakingRewardSchedule {
val COSMOS_SCHEDULE = 5 to 12
val SOLANA_SCHEDULE = 2 to 3
}
internal fun getRewardSchedule(schedule: Yield.Metadata.RewardSchedule, networkId: String): TextReference? =
when (schedule) {
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
}
private fun getCustomRewardSchedule(networkId: String): TextReference? {
return when {
isSolana(networkId) -> {
combinedReference(
stringReference("${SOLANA_SCHEDULE.first}$MINUS${SOLANA_SCHEDULE.second}$NON_BREAKING_SPACE"),
pluralReference(
id = R.plurals.common_days_no_param,
count = SOLANA_SCHEDULE.second,
),
)
}
isCosmos(networkId) -> {
combinedReference(
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)
else -> null
}
}

View file

@ -37,7 +37,10 @@ import com.tangem.domain.tokens.*
import com.tangem.domain.tokens.model.CryptoCurrency
import com.tangem.domain.tokens.model.CryptoCurrencyStatus
import com.tangem.domain.transaction.error.GetFeeError
import com.tangem.domain.transaction.usecase.*
import com.tangem.domain.transaction.usecase.CreateApprovalTransactionUseCase
import com.tangem.domain.transaction.usecase.GetAllowanceUseCase
import com.tangem.domain.transaction.usecase.SendTransactionUseCase
import com.tangem.domain.transaction.usecase.ValidateTransactionUseCase
import com.tangem.domain.utils.convertToSdkAmount
import com.tangem.domain.wallets.models.UserWallet
import com.tangem.domain.wallets.models.UserWalletId
@ -219,7 +222,13 @@ internal class StakingViewModel @Inject constructor(
when {
isInitState() -> {
stateController.update(SetConfirmationStateResetAssentTransformer)
stateController.update(SetConfirmationStateLoadingTransformer(yield, appCurrency))
stateController.update(
SetConfirmationStateLoadingTransformer(
yield = yield,
appCurrency = appCurrency,
cryptoCurrency = cryptoCurrencyStatus.currency,
),
)
if (balanceState != null) {
stateController.update(SetPossiblePendingTransactionTransformer(balanceState, cryptoCurrencyStatus))
}
@ -260,7 +269,13 @@ internal class StakingViewModel @Inject constructor(
}
override fun getFee(pendingAction: PendingAction?, pendingActions: ImmutableList<PendingAction>?) {
stateController.update(SetConfirmationStateLoadingTransformer(yield, appCurrency))
stateController.update(
SetConfirmationStateLoadingTransformer(
yield = yield,
appCurrency = appCurrency,
cryptoCurrency = cryptoCurrencyStatus.currency,
),
)
viewModelScope.launch {
feeLoader.getFee(
pendingAction = pendingAction,