Updated on 2026-08-14

This commit is contained in:
Tangem 2024-02-13 17:16:17 +03:00
parent 894c5664b3
commit 61bbf0fd67
16 changed files with 105 additions and 29 deletions

View file

@ -1,5 +1,6 @@
package com.tangem.managetokens.presentation.managetokens.state
import com.tangem.core.ui.components.marketprice.PriceChangeType
import kotlinx.collections.immutable.ImmutableList
internal sealed class QuotesState {
@ -10,8 +11,4 @@ internal sealed class QuotesState {
val changeType: PriceChangeType,
val chartData: ImmutableList<Float>,
) : QuotesState()
}
enum class PriceChangeType {
UP, DOWN
}

View file

@ -1,8 +1,9 @@
package com.tangem.managetokens.presentation.managetokens.state.factory
import com.tangem.core.ui.components.marketprice.PriceChangeType
import com.tangem.core.ui.components.marketprice.utils.PriceChangeConverter
import com.tangem.core.ui.utils.BigDecimalFormatter
import com.tangem.domain.tokens.model.Quote
import com.tangem.managetokens.presentation.managetokens.state.PriceChangeType
import com.tangem.managetokens.presentation.managetokens.state.QuotesState
import com.tangem.utils.converter.Converter
import kotlinx.collections.immutable.persistentListOf
@ -16,19 +17,18 @@ internal class QuotesToQuotesStateConverter : Converter<Quote, QuotesState> {
priceChange = BigDecimalFormatter.formatPercent(
percent = priceChange.movePointLeft(2),
useAbsoluteValue = true,
maxFractionDigits = 1,
minFractionDigits = 1,
),
changeType = priceChange.getPriceChangeType(),
chartData = // TODO (in [REDACTED_TASK_KEY] when endpoint is ready)
when (priceChange.getPriceChangeType()) {
PriceChangeType.UP -> persistentListOf(0f, 5f, 10f, 30f)
PriceChangeType.DOWN -> persistentListOf(15f, 12f, 13f, 18f, 10f, 3f)
PriceChangeType.NEUTRAL -> persistentListOf(0f, 0f, 0f, 0f)
},
)
}
private fun BigDecimal.getPriceChangeType(): PriceChangeType {
return if (this >= BigDecimal.ZERO) PriceChangeType.UP else PriceChangeType.DOWN
return PriceChangeConverter.fromBigDecimal(value = this)
}
}

View file

@ -32,6 +32,7 @@ internal object ManageTokensStatePreviewData {
get() = listOf(
TokenItemStatePreviewData.loadedPriceDown,
TokenItemStatePreviewData.loadedPriceUp,
TokenItemStatePreviewData.loadedPriceNeutral,
)
private val searchState: SearchBarState

View file

@ -2,7 +2,11 @@ package com.tangem.managetokens.presentation.managetokens.state.previewdata
import androidx.compose.runtime.mutableStateOf
import androidx.compose.ui.graphics.Color
import com.tangem.managetokens.presentation.managetokens.state.*
import com.tangem.core.ui.components.marketprice.PriceChangeType
import com.tangem.managetokens.presentation.managetokens.state.QuotesState
import com.tangem.managetokens.presentation.managetokens.state.TokenButtonType
import com.tangem.managetokens.presentation.managetokens.state.TokenIconState
import com.tangem.managetokens.presentation.managetokens.state.TokenItemState
import kotlinx.collections.immutable.persistentListOf
internal object TokenItemStatePreviewData {
@ -46,6 +50,24 @@ internal object TokenItemStatePreviewData {
chooseNetworkState = ChooseNetworkStatePreviewData.state,
)
val loadedPriceNeutral: TokenItemState
get() = TokenItemState.Loaded(
id = "BTC",
name = "Bitcoin Bitcoin Bitcoin Bitcoin Bitcoin Bitcoin Bitcoin Bitcoin",
tokenId = "BTC",
currencySymbol = "BTC",
tokenIcon = tokenIconState,
quotes = QuotesState.Content(
priceChange = "0.00%",
changeType = PriceChangeType.NEUTRAL,
chartData = persistentListOf(10f, 2f, 5f, 3f, 4f, 8f, 9f, 7f, 10f),
),
rate = "31 285.72$",
availableAction = mutableStateOf(TokenButtonType.ADD),
onButtonClick = {},
chooseNetworkState = ChooseNetworkStatePreviewData.state,
)
private val tokenIconState: TokenIconState
get() = TokenIconState(
iconReference = null,

View file

@ -120,4 +120,14 @@ private fun Chart_Negative_Preview() {
persistentListOf(10f, 2f, 4f, 1f, 5f),
)
}
}
@Preview(widthDp = 150, heightDp = 150, showBackground = true)
@Composable
private fun Chart_Neutral_Preview() {
TangemTheme(isDark = true) {
PriceChangesChart(
persistentListOf(5f, 2f, 4f, 1f, 5f),
)
}
}

View file

@ -11,9 +11,9 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.style.TextOverflow
import com.tangem.core.ui.components.SpacerW4
import com.tangem.core.ui.components.marketprice.PriceChangeType
import com.tangem.core.ui.res.TangemTheme
import com.tangem.features.managetokens.impl.R
import com.tangem.managetokens.presentation.managetokens.state.PriceChangeType
import com.tangem.managetokens.presentation.managetokens.state.QuotesState
@Composable
@ -48,11 +48,13 @@ private fun PriceChangeIcon(type: PriceChangeType?) {
id = when (animatedType) {
PriceChangeType.UP -> R.drawable.ic_arrow_up_8
PriceChangeType.DOWN -> R.drawable.ic_arrow_down_8
PriceChangeType.NEUTRAL -> R.drawable.ic_elipse_8
},
),
tint = when (animatedType) {
PriceChangeType.UP -> TangemTheme.colors.icon.accent
PriceChangeType.DOWN -> TangemTheme.colors.icon.warning
PriceChangeType.NEUTRAL -> TangemTheme.colors.icon.inactive
},
contentDescription = null,
)
@ -69,6 +71,7 @@ private fun PriceChangeText(type: PriceChangeType?, text: String?) {
color = when (type) {
PriceChangeType.UP -> TangemTheme.colors.text.accent
PriceChangeType.DOWN -> TangemTheme.colors.text.warning
PriceChangeType.NEUTRAL -> TangemTheme.colors.text.disabled
null -> TangemTheme.colors.text.primary1
},
overflow = TextOverflow.Ellipsis,

View file

@ -180,7 +180,8 @@ private fun BaseSurface(modifier: Modifier = Modifier, content: @Composable () -
}
}
@Preview()
// region Preview
@Preview(showBackground = true, widthDp = 360)
@Composable
private fun Preview_Tokens_LightTheme(@PreviewParameter(TokenConfigProvider::class) state: TokenItemState) {
TangemTheme(isDark = false) {
@ -188,7 +189,7 @@ private fun Preview_Tokens_LightTheme(@PreviewParameter(TokenConfigProvider::cla
}
}
@Preview
@Preview(showBackground = true, widthDp = 360)
@Composable
private fun Preview_Tokens_DarkTheme(@PreviewParameter(TokenConfigProvider::class) state: TokenItemState) {
TangemTheme(isDark = true) {
@ -201,5 +202,7 @@ private class TokenConfigProvider : CollectionPreviewParameterProvider<TokenItem
TokenItemStatePreviewData.tokenLoading,
TokenItemStatePreviewData.loadedPriceDown,
TokenItemStatePreviewData.loadedPriceUp,
TokenItemStatePreviewData.loadedPriceNeutral,
),
)
)
// endregion Preview