Updated on 2026-08-14
This commit is contained in:
parent
c6fc1ab4da
commit
cb203637f5
6 changed files with 81 additions and 38 deletions
|
|
@ -1,10 +1,7 @@
|
|||
package com.tangem.features.staking.impl.presentation.state.converters
|
||||
|
||||
import com.tangem.common.extensions.isZero
|
||||
import com.tangem.core.ui.extensions.pluralReference
|
||||
import com.tangem.core.ui.extensions.resourceReference
|
||||
import com.tangem.core.ui.extensions.stringReference
|
||||
import com.tangem.core.ui.extensions.wrappedList
|
||||
import com.tangem.core.ui.extensions.*
|
||||
import com.tangem.core.ui.utils.BigDecimalFormatter
|
||||
import com.tangem.core.ui.utils.parseBigDecimal
|
||||
import com.tangem.domain.appcurrency.model.AppCurrency
|
||||
|
|
@ -18,6 +15,8 @@ import com.tangem.utils.Provider
|
|||
import com.tangem.utils.converter.Converter
|
||||
import com.tangem.utils.isNullOrZero
|
||||
import kotlinx.collections.immutable.toPersistentList
|
||||
import org.joda.time.DateTime
|
||||
import java.util.Calendar
|
||||
|
||||
internal class YieldBalancesConverter(
|
||||
private val cryptoCurrencyStatusProvider: Provider<CryptoCurrencyStatus>,
|
||||
|
|
@ -88,7 +87,7 @@ internal class YieldBalancesConverter(
|
|||
}
|
||||
val cryptoAmount = balance.amount
|
||||
val fiatAmount = cryptoCurrencyStatus.value.fiatRate?.times(cryptoAmount)
|
||||
val unbondingPeriod = yield.metadata.cooldownPeriod.days
|
||||
val unbonding = getUnbondingDate(balance.date)
|
||||
validator?.let {
|
||||
BalanceState(
|
||||
validator = validator,
|
||||
|
|
@ -108,11 +107,7 @@ internal class YieldBalancesConverter(
|
|||
),
|
||||
),
|
||||
rawCurrencyId = balance.rawCurrencyId,
|
||||
unbondingPeriod = pluralReference(
|
||||
id = R.plurals.common_days,
|
||||
count = unbondingPeriod,
|
||||
formatArgs = wrappedList(unbondingPeriod),
|
||||
),
|
||||
unbondingPeriod = unbonding,
|
||||
pendingActions = balance.pendingActions.toPersistentList(),
|
||||
)
|
||||
}
|
||||
|
|
@ -153,4 +148,32 @@ internal class YieldBalancesConverter(
|
|||
BalanceType.UNKNOWN,
|
||||
-> false
|
||||
}
|
||||
|
||||
private fun getUnbondingDate(date: DateTime?): TextReference {
|
||||
val now = DateTime.now().millis
|
||||
val nowCalendar = Calendar.getInstance()
|
||||
nowCalendar.resetHours()
|
||||
|
||||
val endDate = Calendar.getInstance()
|
||||
endDate.timeInMillis = date?.millis ?: now
|
||||
endDate.resetHours()
|
||||
|
||||
val days = ((endDate.timeInMillis - nowCalendar.timeInMillis) / DAY_IN_MILLIS).toInt()
|
||||
return if (days > 0) {
|
||||
pluralReference(R.plurals.common_in_days, days, wrappedList(days))
|
||||
} else {
|
||||
resourceReference(R.string.common_today)
|
||||
}
|
||||
}
|
||||
|
||||
private fun Calendar.resetHours() {
|
||||
this[Calendar.HOUR_OF_DAY] = 0
|
||||
this[Calendar.MINUTE] = 0
|
||||
this[Calendar.SECOND] = 0
|
||||
this[Calendar.MILLISECOND] = 0
|
||||
}
|
||||
|
||||
private companion object {
|
||||
const val DAY_IN_MILLIS = 24 * 60 * 60 * 1000
|
||||
}
|
||||
}
|
||||
|
|
@ -232,31 +232,37 @@ private fun ActiveStakingBlock(groups: ImmutableList<BalanceGroupedState>, onCli
|
|||
|
||||
@Composable
|
||||
private fun getCaption(balanceType: BalanceType, balance: BalanceState): TextReference {
|
||||
return if (balanceType == BalanceType.UNSTAKING) {
|
||||
combinedReference(
|
||||
resourceReference(R.string.staking_details_unbonding_period),
|
||||
annotatedReference {
|
||||
appendSpace()
|
||||
appendColored(
|
||||
text = balance.unbondingPeriod.resolveReference(),
|
||||
color = TangemTheme.colors.text.accent,
|
||||
)
|
||||
},
|
||||
)
|
||||
} else {
|
||||
combinedReference(
|
||||
resourceReference(R.string.app_name),
|
||||
annotatedReference {
|
||||
appendSpace()
|
||||
appendColored(
|
||||
text = BigDecimalFormatter.formatPercent(
|
||||
percent = balance.validator.apr.orZero(),
|
||||
useAbsoluteValue = true,
|
||||
),
|
||||
color = TangemTheme.colors.text.accent,
|
||||
)
|
||||
},
|
||||
)
|
||||
return when (balanceType) {
|
||||
BalanceType.UNSTAKING -> {
|
||||
combinedReference(
|
||||
resourceReference(R.string.staking_unbonding),
|
||||
annotatedReference {
|
||||
appendSpace()
|
||||
appendColored(
|
||||
text = balance.unbondingPeriod.resolveReference(),
|
||||
color = TangemTheme.colors.text.accent,
|
||||
)
|
||||
},
|
||||
)
|
||||
}
|
||||
BalanceType.UNSTAKED -> {
|
||||
resourceReference(R.string.staking_ready_to_withdraw)
|
||||
}
|
||||
else -> {
|
||||
combinedReference(
|
||||
resourceReference(R.string.staking_details_apr),
|
||||
annotatedReference {
|
||||
appendSpace()
|
||||
appendColored(
|
||||
text = BigDecimalFormatter.formatPercent(
|
||||
percent = balance.validator.apr.orZero(),
|
||||
useAbsoluteValue = true,
|
||||
),
|
||||
color = TangemTheme.colors.text.accent,
|
||||
)
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue