Updated on 2026-08-14
This commit is contained in:
parent
9de7841edd
commit
88021b8169
13 changed files with 61 additions and 39 deletions
|
|
@ -70,6 +70,7 @@
|
|||
<string name="common_access_denied">Zugang verweigert</string>
|
||||
<string name="common_all">Alle</string>
|
||||
<string name="common_allow">Erlauben</string>
|
||||
<string name="common_analytics">Analysen</string>
|
||||
<string name="common_apply">Anwenden</string>
|
||||
<string name="common_approval">Genehmigung</string>
|
||||
<string name="common_approve">Genehmigen</string>
|
||||
|
|
@ -82,6 +83,7 @@
|
|||
<string name="common_buy_currency">Gehe zu %1$s</string>
|
||||
<string name="common_camera_denied_alert_message">D hast keinen Zugang zur Kamera erteilt, bitte passe deine Datenschutzeinstellungen an</string>
|
||||
<string name="common_cancel">Abbrechen</string>
|
||||
<string name="common_choose_action">Aktion wählen</string>
|
||||
<string name="common_claim_rewards">Stakingbelohnungen beanstpruchen</string>
|
||||
<string name="common_close">Schließen</string>
|
||||
<string name="common_continue">Weiter</string>
|
||||
|
|
@ -354,7 +356,7 @@
|
|||
<string name="markets_loading_no_data_title">Keine Daten</string>
|
||||
<string name="markets_quick_actions">Schnelle Aktionen</string>
|
||||
<string name="markets_search_result_title">Ergebnis</string>
|
||||
<string name="markets_search_see_tokens_under_100k">Token unter 100k Marktkapitalisierung anzeigen</string>
|
||||
<string name="markets_search_see_tokens_under_100k">Token unter 100k USD Marktkapitalisierung anzeigen</string>
|
||||
<string name="markets_search_show_tokens">Token anzeigen</string>
|
||||
<string name="markets_search_token_no_result_title">Kein Ergebnis</string>
|
||||
<string name="markets_select_network">Netzwerk auswählen</string>
|
||||
|
|
@ -646,6 +648,7 @@
|
|||
<string name="staking_details_annual_percentage_rate">Jährliche prozentuale Rendite</string>
|
||||
<string name="staking_details_annual_percentage_rate_info">Die jährliche prozentuale Rendite, die du durch die Teilnahme am Staking erzielen kannst.</string>
|
||||
<string name="staking_details_apr">Effektiver Jahreszins</string>
|
||||
<string name="staking_details_auto_claiming_rewards_daily_text">Belohnungen sammeln sich täglich automatisch in deinem Staking-Konto an.</string>
|
||||
<string name="staking_details_available">Verfügbar</string>
|
||||
<string name="staking_details_average_reward_rate">Durchschnittliche Belohnungsquote</string>
|
||||
<string name="staking_details_banner_text">Was sit Staking?</string>
|
||||
|
|
@ -664,6 +667,7 @@
|
|||
<string name="staking_details_unbonding_period_info">Der Zeitraum, den du nach der Beantragung der Abhebung von Geldern aus dem Staking warten musst, bevor die Token verfügbar werden.</string>
|
||||
<string name="staking_details_warmup_period">Aufwärmphase</string>
|
||||
<string name="staking_details_warmup_period_info">Die zugewiesene Zeit für die Aktivierung der Teilnahme am Staking.</string>
|
||||
<string name="staking_locked">Gesperrt</string>
|
||||
<string name="staking_migrate">Migrieren</string>
|
||||
<string name="staking_native">Natives Staking</string>
|
||||
<string name="staking_notification_earn_rewards_text_period_day">Mit dem Staking kannst Du %1$s verdienen. Deine Staking-Belohnungen erhältst Du jeden tag.</string>
|
||||
|
|
@ -672,6 +676,8 @@
|
|||
<string name="staking_notification_earn_rewards_text_period_week">Mit dem Staking kannst Du %1$s verdienen. Deine Staking-Belohnungen erhältst Du jede Woche.</string>
|
||||
<string name="staking_notification_earn_rewards_title">Verdiene Staking-Belohnungen</string>
|
||||
<string name="staking_notification_unstake_text">Die Belohnungen werden sofort nach dem unstaken gestoppt. Der unstakingprozess dauert %s.</string>
|
||||
<string name="staking_notification_withdraw_text">Dein Guthaben wurde freigegeben. Du kannst es jetzt zusammen mit deinen verdienten Prämien auszahlen.</string>
|
||||
<string name="staking_preparing">Vorbereitung</string>
|
||||
<string name="staking_ready_to_withdraw">Bereit zum Abheben</string>
|
||||
<string name="staking_rebond">Erneut binden</string>
|
||||
<string name="staking_restake">Erneut staken</string>
|
||||
|
|
|
|||
|
|
@ -357,7 +357,7 @@
|
|||
<string name="markets_loading_no_data_title">Нет данных</string>
|
||||
<string name="markets_quick_actions">Быстрые действия</string>
|
||||
<string name="markets_search_result_title">Результат</string>
|
||||
<string name="markets_search_see_tokens_under_100k">Токены с капитализацией меньше 100к</string>
|
||||
<string name="markets_search_see_tokens_under_100k">Токены с капитализацией меньше 100к USD</string>
|
||||
<string name="markets_search_show_tokens">Показать токены</string>
|
||||
<string name="markets_search_token_no_result_title">Нет результата</string>
|
||||
<string name="markets_select_network">Выберите сеть</string>
|
||||
|
|
@ -666,7 +666,7 @@
|
|||
<string name="staking_details_reward_schedule_info">Это период, определяющий, когда участники стейкинга получат свои вознаграждения.</string>
|
||||
<string name="staking_details_rewards_to_claim">Вознаграждение для получения: %s</string>
|
||||
<string name="staking_details_title">Стейкинг %s</string>
|
||||
<string name="staking_details_unbonding_period">Период вывода</string>
|
||||
<string name="staking_details_unbonding_period">Период отзыва</string>
|
||||
<string name="staking_details_unbonding_period_info">Период, который необходимо подождать после запроса на вывод средств из стейкинга, прежде чем токены станут доступны.</string>
|
||||
<string name="staking_details_warmup_period">Период прогрева</string>
|
||||
<string name="staking_details_warmup_period_info">Время, необходимое для начала процесса стейкинга и активации процесса начисления наград</string>
|
||||
|
|
@ -698,10 +698,12 @@
|
|||
<string name="staking_stake_more">Застейкать еще</string>
|
||||
<string name="staking_title_stake">Застейкать %s</string>
|
||||
<string name="staking_title_unstake">Вывести %s</string>
|
||||
<string name="staking_unbonding">Отзыв</string>
|
||||
<string name="staking_unlocked_locked">Разблокировать</string>
|
||||
<string name="staking_unstaked">Вывод из стейкинга</string>
|
||||
<string name="staking_unstaked_footer">Проверьте процесс завершения стейкинга, чтобы вывести свои средства.</string>
|
||||
<string name="staking_unstaking">Завершение стейкинга</string>
|
||||
<string name="staking_unstaking_item_name">Завершение стейкинга %s</string>
|
||||
<string name="staking_validator">Валидатор</string>
|
||||
<string name="staking_validators">Валидаторы</string>
|
||||
<string name="staking_vote">Проголосовать</string>
|
||||
|
|
|
|||
|
|
@ -351,7 +351,7 @@
|
|||
<string name="markets_loading_error_title">Не вдалося завантажити дані...</string>
|
||||
<string name="markets_quick_actions">Швидкі дії</string>
|
||||
<string name="markets_search_result_title">Результат</string>
|
||||
<string name="markets_search_see_tokens_under_100k">Переглянути токени до 100к ринкової капіталізації</string>
|
||||
<string name="markets_search_see_tokens_under_100k">Переглянути токени до 100к USD ринкової капіталізації</string>
|
||||
<string name="markets_search_show_tokens">Показати токени</string>
|
||||
<string name="markets_search_token_no_result_title">Жодного результату</string>
|
||||
<string name="markets_select_network">Виберіть мережу</string>
|
||||
|
|
@ -674,7 +674,7 @@
|
|||
<string name="staking_notification_earn_rewards_text_period_month">Стейкінг дозволяє заробляти %1$s. Ваші винагороди за стейкінг зараховуються щомісяця.</string>
|
||||
<string name="staking_notification_earn_rewards_text_period_week">Стейкінг дозволяє заробляти %1$s. Ваші винагороди за стейкінг зараховуються щотиждня.</string>
|
||||
<string name="staking_notification_earn_rewards_title">Отримуйте винагороду за стейкінг</string>
|
||||
<string name="staking_notification_unstake_text">Винагороди припиняють нараховуватися одразу після того, як ви знімаєте ставку. Процес зняття займає %s.</string>
|
||||
<string name="staking_notification_unstake_text">Винагорода припиняє нараховуватися одразу після того, як ви почнете процес завершення стейкінгу. Процес завершення триває %s.</string>
|
||||
<string name="staking_rebond">Зʼєднати ще раз</string>
|
||||
<string name="staking_restake">Повторно застейкати</string>
|
||||
<string name="staking_restake_rewards">Застейкати винагороди</string>
|
||||
|
|
@ -695,7 +695,7 @@
|
|||
<string name="staking_title_stake">Застейкати %s</string>
|
||||
<string name="staking_title_unstake">Зняти зі стейкінгу %s</string>
|
||||
<string name="staking_unlocked_locked">Розблокувати</string>
|
||||
<string name="staking_unstaked">Скасовано зі стейкінгу</string>
|
||||
<string name="staking_unstaked">Вивід зі стейкінгу</string>
|
||||
<string name="staking_unstaked_footer">Перевірити незастейкані, щоб отримати свої активи</string>
|
||||
<string name="staking_unstaking">Зняти зі стейкінгу</string>
|
||||
<string name="staking_validator">Валідатор</string>
|
||||
|
|
@ -871,6 +871,7 @@
|
|||
<string name="warning_low_signatures_message">На цій картці залишається лише %s підписів. Ви повинні вивести всі свої кошти.</string>
|
||||
<string name="warning_low_signatures_title">Низька кількість підписів</string>
|
||||
<string name="warning_manage_tokens_legacy_derivation_message">Токени в різних мережах можуть мати різні адреси. Переконайтеся, що ваша адреса відповідає мережі, коли переказуєте кошти.</string>
|
||||
<string name="warning_matic_migration_message">Токен MATIC мігрує до POL. Однак кінцевого терміну не встановлено і MATIC ще не застарілий. Ви можете безпечно продовжувати використовувати токен MATIC або скористатися біржами, щоб обміняти його на POL.</string>
|
||||
<plurals name="warning_missing_derivation_message">
|
||||
<item quantity="one">Використовуйте вашу картку, щоб отримати адресу для %d мережі</item>
|
||||
<item quantity="few">Використовуйте вашу картку, щоб отримати адреси для %d мереж</item>
|
||||
|
|
|
|||
|
|
@ -356,7 +356,7 @@
|
|||
<string name="markets_loading_no_data_title">No data</string>
|
||||
<string name="markets_quick_actions">Quick actions</string>
|
||||
<string name="markets_search_result_title">Result</string>
|
||||
<string name="markets_search_see_tokens_under_100k">See tokens under 100k market cap</string>
|
||||
<string name="markets_search_see_tokens_under_100k">See tokens under 100k USD market cap</string>
|
||||
<string name="markets_search_show_tokens">Show tokens</string>
|
||||
<string name="markets_search_token_no_result_title">No result</string>
|
||||
<string name="markets_select_network">Select network</string>
|
||||
|
|
@ -644,6 +644,7 @@
|
|||
<string name="staking_details_annual_percentage_rate">Annual percentage rate</string>
|
||||
<string name="staking_details_annual_percentage_rate_info">The annual percentage return you can earn from participating in staking.</string>
|
||||
<string name="staking_details_apr">APR</string>
|
||||
<string name="staking_details_auto_claiming_rewards_daily_text">Rewards automatically accumulate in your staking balance daily.</string>
|
||||
<string name="staking_details_available">Available</string>
|
||||
<string name="staking_details_average_reward_rate">Average Reward Rate</string>
|
||||
<string name="staking_details_banner_text">What is Staking?</string>
|
||||
|
|
@ -671,6 +672,7 @@
|
|||
<string name="staking_notification_earn_rewards_text_period_week">Staking allows you to earn %1$s. Your staking rewards arrive every week.</string>
|
||||
<string name="staking_notification_earn_rewards_title">Earn staking rewards</string>
|
||||
<string name="staking_notification_unstake_text">Rewards stop accruing immediately after you start unstaking. The unstaking process takes %s.</string>
|
||||
<string name="staking_notification_withdraw_text">Your funds have been unstaked. You can now withdraw them along with your earned rewards.</string>
|
||||
<string name="staking_preparing">Preparing</string>
|
||||
<string name="staking_ready_to_withdraw">Ready to withdraw</string>
|
||||
<string name="staking_rebond">Rebond</string>
|
||||
|
|
@ -698,6 +700,7 @@
|
|||
<string name="staking_unstaked">Unstaked</string>
|
||||
<string name="staking_unstaked_footer">Check unstaked to claim your assets</string>
|
||||
<string name="staking_unstaking">Unstaking</string>
|
||||
<string name="staking_unstaking_item_name">Unstaking assets %s</string>
|
||||
<string name="staking_validator">Validator</string>
|
||||
<string name="staking_validators">Validators</string>
|
||||
<string name="staking_vote">Vote</string>
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ import com.tangem.core.ui.res.TangemThemePreview
|
|||
@Composable
|
||||
internal fun InputRowImageBase(
|
||||
subtitle: TextReference,
|
||||
imageUrl: String,
|
||||
imageUrl: String?,
|
||||
modifier: Modifier = Modifier,
|
||||
caption: TextReference? = null,
|
||||
subtitleColor: Color = TangemTheme.colors.text.primary1,
|
||||
|
|
@ -55,14 +55,16 @@ internal fun InputRowImageBase(
|
|||
verticalAlignment = Alignment.CenterVertically,
|
||||
modifier = modifier,
|
||||
) {
|
||||
InputRowAsyncImage(
|
||||
imageUrl = imageUrl,
|
||||
isGrayscale = isGrayscaleImage,
|
||||
modifier = Modifier
|
||||
.size(TangemTheme.dimens.spacing36)
|
||||
.clip(TangemTheme.shapes.roundedCornersXLarge),
|
||||
)
|
||||
SpacerW12()
|
||||
if (imageUrl != null) {
|
||||
InputRowAsyncImage(
|
||||
imageUrl = imageUrl,
|
||||
isGrayscale = isGrayscaleImage,
|
||||
modifier = Modifier
|
||||
.size(TangemTheme.dimens.spacing36)
|
||||
.clip(TangemTheme.shapes.roundedCornersXLarge),
|
||||
)
|
||||
SpacerW12()
|
||||
}
|
||||
Column {
|
||||
Text(
|
||||
text = subtitle.resolveReference(),
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ import com.tangem.core.ui.res.TangemThemePreview
|
|||
fun InputRowImageInfo(
|
||||
subtitle: TextReference,
|
||||
infoTitle: TextReference,
|
||||
imageUrl: String,
|
||||
imageUrl: String?,
|
||||
modifier: Modifier = Modifier,
|
||||
title: TextReference? = null,
|
||||
caption: TextReference? = null,
|
||||
|
|
|
|||
|
|
@ -32,7 +32,8 @@ data class BalanceGroupedState(
|
|||
|
||||
@Immutable
|
||||
data class BalanceState(
|
||||
val validator: Yield.Validator,
|
||||
val validator: Yield.Validator?,
|
||||
val title: TextReference,
|
||||
val cryptoValue: String,
|
||||
val cryptoDecimal: BigDecimal,
|
||||
val cryptoAmount: TextReference,
|
||||
|
|
|
|||
|
|
@ -87,6 +87,7 @@ internal class RewardsValidatorStateConverter(
|
|||
|
||||
return BalanceState(
|
||||
validator = this,
|
||||
title = stringReference(this.name),
|
||||
cryptoValue = cryptoValue.parseBigDecimal(cryptoCurrency.decimals),
|
||||
cryptoDecimal = cryptoValue,
|
||||
cryptoAmount = cryptoAmount,
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ internal class YieldBalancesConverter(
|
|||
val isClickable = item.key.isClickable()
|
||||
title?.let {
|
||||
BalanceGroupedState(
|
||||
items = item.value.mapBalances().toPersistentList(),
|
||||
items = item.value.mapBalances(item.key).toPersistentList(),
|
||||
footer = footer,
|
||||
title = it,
|
||||
type = item.key,
|
||||
|
|
@ -76,23 +76,33 @@ internal class YieldBalancesConverter(
|
|||
.filterNot { it.items.isEmpty() }
|
||||
.toPersistentList()
|
||||
|
||||
private fun List<BalanceItem>.mapBalances(): List<BalanceState> {
|
||||
private fun List<BalanceItem>.mapBalances(balanceType: BalanceType): List<BalanceState> {
|
||||
val cryptoCurrencyStatus = cryptoCurrencyStatusProvider()
|
||||
val appCurrency = appCurrencyProvider()
|
||||
val cryptoCurrency = cryptoCurrencyStatus.currency
|
||||
var incrementingIndex = 1
|
||||
return this
|
||||
.filterNot { it.amount.isZero() }
|
||||
.mapNotNull { balance ->
|
||||
val validator = yield.validators.firstOrNull {
|
||||
balance.validatorAddress?.contains(it.address, ignoreCase = true) == true
|
||||
} ?: mockedValidator
|
||||
}
|
||||
|
||||
val cryptoAmount = balance.amount
|
||||
val fiatAmount = cryptoCurrencyStatus.value.fiatRate?.times(cryptoAmount)
|
||||
val unbonding = getUnbondingDate(balance.date)
|
||||
val warmupPeriod = yield.metadata.warmupPeriod.days
|
||||
validator?.let {
|
||||
val title = when {
|
||||
validator != null -> stringReference(validator.name)
|
||||
balanceType == BalanceType.UNSTAKING -> {
|
||||
resourceReference(R.string.staking_unstaking_item_name, wrappedList(incrementingIndex++))
|
||||
}
|
||||
else -> null
|
||||
}
|
||||
title?.let {
|
||||
BalanceState(
|
||||
validator = validator,
|
||||
title = title,
|
||||
cryptoValue = cryptoAmount.parseBigDecimal(cryptoCurrency.decimals),
|
||||
cryptoDecimal = cryptoAmount,
|
||||
cryptoAmount = stringReference(
|
||||
|
|
@ -164,12 +174,5 @@ internal class YieldBalancesConverter(
|
|||
|
||||
private companion object {
|
||||
const val DAY_IN_MILLIS = 24 * 60 * 60 * 1000
|
||||
|
||||
private val mockedValidator = Yield.Validator(
|
||||
address = "",
|
||||
status = "",
|
||||
name = "Mocked validator",
|
||||
preferred = true,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -71,6 +71,7 @@ internal object InitialStakingStatePreview {
|
|||
isClickable = true,
|
||||
items = persistentListOf(
|
||||
BalanceState(
|
||||
title = stringReference("Binance"),
|
||||
cryptoValue = "100",
|
||||
cryptoAmount = stringReference("100 SOL"),
|
||||
cryptoDecimal = "100".toBigDecimal(),
|
||||
|
|
|
|||
|
|
@ -7,10 +7,12 @@ import com.tangem.features.staking.impl.presentation.state.ValidatorState
|
|||
import com.tangem.utils.transformer.Transformer
|
||||
|
||||
internal class ValidatorSelectChangeTransformer(
|
||||
private val selectedValidator: Yield.Validator,
|
||||
private val selectedValidator: Yield.Validator?,
|
||||
) : Transformer<StakingUiState> {
|
||||
|
||||
override fun transform(prevState: StakingUiState): StakingUiState {
|
||||
val confirmationState = prevState.confirmationState as? StakingStates.ConfirmationState.Data ?: return prevState
|
||||
selectedValidator ?: return prevState
|
||||
val validatorState = (confirmationState.validatorState as? ValidatorState.Content)?.copy(
|
||||
chosenValidator = selectedValidator,
|
||||
) ?: ValidatorState.Content(
|
||||
|
|
|
|||
|
|
@ -33,16 +33,16 @@ internal fun StakingClaimRewardsValidatorContent(
|
|||
.verticalScroll(rememberScrollState()),
|
||||
) {
|
||||
state.rewards.forEachIndexed { index, item ->
|
||||
key(item.validator.address) {
|
||||
key(item.title.resolveReference() + index) {
|
||||
InputRowImageInfo(
|
||||
subtitle = stringReference(item.validator.name),
|
||||
subtitle = item.title,
|
||||
caption = combinedReference(
|
||||
resourceReference(R.string.staking_details_apr),
|
||||
annotatedReference {
|
||||
appendSpace()
|
||||
appendColored(
|
||||
text = BigDecimalFormatter.formatPercent(
|
||||
percent = item.validator.apr.orZero(),
|
||||
percent = item.validator?.apr.orZero(),
|
||||
useAbsoluteValue = true,
|
||||
),
|
||||
color = TangemTheme.colors.text.accent,
|
||||
|
|
@ -51,7 +51,7 @@ internal fun StakingClaimRewardsValidatorContent(
|
|||
),
|
||||
infoTitle = item.fiatAmount,
|
||||
infoSubtitle = item.cryptoAmount,
|
||||
imageUrl = item.validator.image.orEmpty(),
|
||||
imageUrl = item.validator?.image.orEmpty(),
|
||||
modifier = modifier
|
||||
.roundedShapeItemDecoration(index, state.rewards.lastIndex, false)
|
||||
.background(TangemTheme.colors.background.action)
|
||||
|
|
|
|||
|
|
@ -204,15 +204,15 @@ private fun ActiveStakingBlock(groups: ImmutableList<BalanceGroupedState>, onCli
|
|||
end = TangemTheme.dimens.spacing12,
|
||||
),
|
||||
)
|
||||
group.items.forEach { balance ->
|
||||
key(balance.validator.address) {
|
||||
group.items.forEachIndexed { index, balance ->
|
||||
key(balance.title.resolveReference() + index) {
|
||||
InputRowImageInfo(
|
||||
subtitle = stringReference(balance.validator.name),
|
||||
subtitle = balance.title,
|
||||
caption = getCaption(group.type, balance),
|
||||
isGrayscaleImage = !group.isClickable,
|
||||
infoTitle = balance.fiatAmount,
|
||||
infoSubtitle = balance.cryptoAmount,
|
||||
imageUrl = balance.validator.image.orEmpty(),
|
||||
imageUrl = balance.validator?.image,
|
||||
iconEndRes = R.drawable.ic_chevron_right_24.takeIf { group.isClickable },
|
||||
modifier = Modifier.clickable(
|
||||
interactionSource = remember { MutableInteractionSource() },
|
||||
|
|
@ -267,7 +267,7 @@ private fun getCaption(balanceType: BalanceType, balance: BalanceState): TextRef
|
|||
appendSpace()
|
||||
appendColored(
|
||||
text = BigDecimalFormatter.formatPercent(
|
||||
percent = balance.validator.apr.orZero(),
|
||||
percent = balance.validator?.apr.orZero(),
|
||||
useAbsoluteValue = true,
|
||||
),
|
||||
color = TangemTheme.colors.text.accent,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue