Updated on 2026-08-14

This commit is contained in:
Tangem 2024-02-14 16:10:42 +03:00
parent 8319af3a47
commit 98b7073af3
4 changed files with 34 additions and 9 deletions

View file

@ -1,7 +1,9 @@
package com.tangem.feature.swap.models.states
import androidx.compose.runtime.Immutable
import com.tangem.core.ui.extensions.TextReference
@Immutable
sealed class ProviderState {
abstract val onProviderClick: ((String) -> Unit)?
@ -25,6 +27,7 @@ sealed class ProviderState {
val subtitle: TextReference,
val selectionType: SelectionType,
val additionalBadge: AdditionalBadge,
val namePrefix: PrefixType,
val percentLowerThenBest: PercentLowerThanBest = PercentLowerThanBest.Empty,
override val onProviderClick: (String) -> Unit,
) : ProviderState()
@ -39,17 +42,25 @@ sealed class ProviderState {
override val onProviderClick: ((String) -> Unit)? = null,
) : ProviderState()
@Immutable
sealed class AdditionalBadge {
object BestTrade : AdditionalBadge()
object Empty : AdditionalBadge()
object PermissionRequired : AdditionalBadge()
}
@Immutable
enum class SelectionType {
NONE, CLICK, SELECT
}
@Immutable
enum class PrefixType {
NONE, PROVIDED_BY
}
}
@Immutable
sealed class PercentLowerThanBest {
data class Value(val value: Float) : PercentLowerThanBest()
object Empty : PercentLowerThanBest()

View file

@ -116,6 +116,7 @@ private fun ChooseProviderBottomSheet_Preview() {
additionalBadge = ProviderState.AdditionalBadge.BestTrade,
percentLowerThenBest = PercentLowerThanBest.Value(-1.0f),
selectionType = ProviderState.SelectionType.SELECT,
namePrefix = ProviderState.PrefixType.NONE,
onProviderClick = {},
),
ProviderState.Unavailable(

View file

@ -17,11 +17,12 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameterProvider
import coil.compose.SubcomposeAsyncImage
import coil.request.ImageRequest
import com.tangem.core.ui.R
import com.tangem.core.ui.components.RectangleShimmer
import com.tangem.core.ui.components.SpacerH24
import com.tangem.core.ui.extensions.resolveReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.res.TangemTheme
@ -113,12 +114,14 @@ private fun ProviderContentState(
modifier = Modifier.padding(start = TangemTheme.dimens.spacing12),
) {
Row {
Text(
text = stringResource(id = R.string.express_by_provider),
style = TangemTheme.typography.caption2,
color = TangemTheme.colors.text.tertiary,
modifier = Modifier.padding(end = TangemTheme.dimens.spacing4),
)
if (state.namePrefix == ProviderState.PrefixType.PROVIDED_BY) {
Text(
text = stringResource(id = R.string.express_by_provider),
style = TangemTheme.typography.caption2,
color = TangemTheme.colors.text.tertiary,
modifier = Modifier.padding(end = TangemTheme.dimens.spacing4),
)
}
AnimatedContent(targetState = state.name, label = "") {
Text(
text = it,
@ -427,13 +430,16 @@ private class ProviderItemParameterProvider : CollectionPreviewParameterProvider
name = "1inch",
type = "DEX",
iconUrl = "",
subtitle = stringReference(value = "1 132,46 MATIC"),
additionalBadge = ProviderState.AdditionalBadge.PermissionRequired,
subtitle = stringReference(value = "0,64554846 DAI ≈ 1 MATIC"),
additionalBadge = ProviderState.AdditionalBadge.Empty,
percentLowerThenBest = PercentLowerThanBest.Empty,
selectionType = ProviderState.SelectionType.SELECT,
namePrefix = ProviderState.PrefixType.PROVIDED_BY,
onProviderClick = {},
)
val contentState2 = contentState.copy(
subtitle = stringReference(value = "1 132,46 MATIC"),
additionalBadge = ProviderState.AdditionalBadge.PermissionRequired,
percentLowerThenBest = PercentLowerThanBest.Value(value = 5f),
)
val unavailableState = ProviderState.Unavailable(

View file

@ -1229,6 +1229,7 @@ internal class StateBuilder(
additionalBadge = badge,
selectionType = selectionType,
percentLowerThenBest = PercentLowerThanBest.Empty,
namePrefix = ProviderState.PrefixType.PROVIDED_BY,
onProviderClick = onProviderClick,
)
}
@ -1260,6 +1261,7 @@ internal class StateBuilder(
percentLowerThenBest = pricesLowerBest[this.providerId]?.let { percent ->
PercentLowerThanBest.Value(percent)
} ?: PercentLowerThanBest.Value(0f),
namePrefix = ProviderState.PrefixType.NONE,
onProviderClick = onProviderClick,
)
}
@ -1294,6 +1296,11 @@ internal class StateBuilder(
subtitle = alertText,
additionalBadge = ProviderState.AdditionalBadge.Empty,
percentLowerThenBest = PercentLowerThanBest.Empty,
namePrefix = if (selectionType != ProviderState.SelectionType.SELECT) {
ProviderState.PrefixType.PROVIDED_BY
} else {
ProviderState.PrefixType.NONE
},
onProviderClick = onProviderClick,
)
}