Updated on 2026-08-14

This commit is contained in:
Tangem 2025-06-25 17:31:17 +05:00
parent 62e4838d2f
commit d77c682e67
11 changed files with 700 additions and 53 deletions

View file

@ -54,7 +54,7 @@ fun ProviderChooseCrypto(providerChooseUM: ProviderChooseUM, onClick: () -> Unit
.fillMaxWidth()
.padding(all = 12.dp),
) {
val (iconRef, titleRef, badgeRef, infoRef, labelRef) = createRefs()
val (iconRef, titleRef, extraRef, infoRef, labelRef) = createRefs()
val titleEndRef = createStartBarrier(infoRef, labelRef)
IconContent(
@ -72,19 +72,19 @@ fun ProviderChooseCrypto(providerChooseUM: ProviderChooseUM, onClick: () -> Unit
start.linkTo(iconRef.end, 12.dp)
end.linkTo(titleEndRef, 4.dp)
top.linkTo(parent.top)
bottom.linkTo(badgeRef.top)
bottom.linkTo(extraRef.top)
width = Dimension.fillToConstraints
},
)
BadgeContent(
ExtraContent(
providerChooseUM = providerChooseUM,
modifier = Modifier.constrainAs(badgeRef) {
modifier = Modifier.constrainAs(extraRef) {
start.linkTo(iconRef.end, 12.dp)
end.linkTo(labelRef.start, 4.dp)
top.linkTo(titleRef.bottom, 4.dp)
top.linkTo(titleRef.bottom)
bottom.linkTo(parent.bottom)
width = Dimension.fillToConstraints
visibility = if (providerChooseUM.badgeList.isEmpty()) {
visibility = if (providerChooseUM.extraUM is ProviderChooseUM.ExtraUM.Empty) {
Visibility.Gone
} else {
Visibility.Visible
@ -165,16 +165,36 @@ private fun InfoContent(text: TextReference, modifier: Modifier = Modifier) {
}
@Composable
private fun BadgeContent(providerChooseUM: ProviderChooseUM, modifier: Modifier = Modifier) {
private fun ExtraContent(providerChooseUM: ProviderChooseUM, modifier: Modifier = Modifier) {
Row(
horizontalArrangement = Arrangement.spacedBy(4.dp),
modifier = modifier,
) {
providerChooseUM.badgeList.fastForEach { badge ->
Badge(
iconRes = badge.iconRes,
text = badge.text,
when (val extraUM = providerChooseUM.extraUM) {
is ProviderChooseUM.ExtraUM.Action -> Text(
text = extraUM.text.resolveReference(),
style = TangemTheme.typography.caption1,
color = TangemTheme.colors.text.tertiary,
modifier = Modifier
.padding(top = 4.dp)
.clip(RoundedCornerShape(4.dp))
.background(TangemTheme.colors.button.secondary)
.padding(horizontal = 6.dp, vertical = 1.dp),
)
is ProviderChooseUM.ExtraUM.Badges -> extraUM.badgeList.fastForEach { badge ->
Badge(
iconRes = badge.iconRes,
text = badge.text,
modifier = Modifier.padding(top = 4.dp),
)
}
is ProviderChooseUM.ExtraUM.Error -> Text(
text = extraUM.text.resolveReference(),
style = TangemTheme.typography.caption2,
color = TangemTheme.colors.text.tertiary,
modifier = Modifier.padding(top = 6.dp),
)
else -> Unit
}
}
}
@ -219,18 +239,20 @@ private class ProviderChooseCryptoPreviewProvider : PreviewParameterProvider<Pro
subtitle = stringReference("CEX"),
infoText = stringReference("1 800,00 POL"),
iconUrl = "",
badgeList = persistentListOf(
BadgeUM(
text = stringReference("4.9"),
iconRes = R.drawable.ic_star_outline_24,
),
BadgeUM(
text = stringReference("5 mins"),
iconRes = R.drawable.ic_speed_24,
),
BadgeUM(
text = stringReference("$3.45"),
iconRes = R.drawable.ic_gas_24,
extraUM = ProviderChooseUM.ExtraUM.Badges(
persistentListOf(
BadgeUM(
text = stringReference("4.9"),
iconRes = R.drawable.ic_star_outline_24,
),
BadgeUM(
text = stringReference("5 mins"),
iconRes = R.drawable.ic_speed_24,
),
BadgeUM(
text = stringReference("$3.45"),
iconRes = R.drawable.ic_gas_24,
),
),
),
isSelected = true,
@ -246,19 +268,8 @@ private class ProviderChooseCryptoPreviewProvider : PreviewParameterProvider<Pro
subtitle = stringReference("CEX"),
infoText = stringReference("1 799,12 POL"),
iconUrl = "",
badgeList = persistentListOf(
BadgeUM(
text = stringReference("4.9"),
iconRes = R.drawable.ic_star_outline_24,
),
BadgeUM(
text = stringReference("5 mins"),
iconRes = R.drawable.ic_speed_24,
),
BadgeUM(
text = stringReference("$3.45"),
iconRes = R.drawable.ic_gas_24,
),
extraUM = ProviderChooseUM.ExtraUM.Action(
text = resourceReference(R.string.express_provider_permission_needed),
),
isSelected = false,
labelUM = ProviderChooseUM.LabelUM.Text(
@ -270,7 +281,9 @@ private class ProviderChooseCryptoPreviewProvider : PreviewParameterProvider<Pro
subtitle = stringReference("CEX"),
infoText = stringReference("1 799,12 POL"),
iconUrl = "",
badgeList = persistentListOf(),
extraUM = ProviderChooseUM.ExtraUM.Error(
text = resourceReference(R.string.express_provider_min_amount, wrappedList("1 POL")),
),
isSelected = false,
labelUM = ProviderChooseUM.LabelUM.Text(
text = stringReference("0.2%"),
@ -281,7 +294,7 @@ private class ProviderChooseCryptoPreviewProvider : PreviewParameterProvider<Pro
subtitle = stringReference("CEX"),
infoText = stringReference("1 POL"),
iconUrl = "",
badgeList = persistentListOf(),
extraUM = ProviderChooseUM.ExtraUM.Empty,
isSelected = false,
labelUM = ProviderChooseUM.LabelUM.Text(
text = stringReference("0.2%"),
@ -292,7 +305,7 @@ private class ProviderChooseCryptoPreviewProvider : PreviewParameterProvider<Pro
subtitle = stringReference("CEX"),
infoText = stringReference("1 POL"),
iconUrl = "",
badgeList = persistentListOf(),
extraUM = ProviderChooseUM.ExtraUM.Empty,
isSelected = false,
labelUM = null,
),
@ -301,18 +314,20 @@ private class ProviderChooseCryptoPreviewProvider : PreviewParameterProvider<Pro
subtitle = stringReference("CEX"),
infoText = stringReference("1 POL"),
iconUrl = "",
badgeList = persistentListOf(
BadgeUM(
text = stringReference("4.9"),
iconRes = R.drawable.ic_star_outline_24,
),
BadgeUM(
text = stringReference("5 mins"),
iconRes = R.drawable.ic_speed_24,
),
BadgeUM(
text = stringReference("$3.45"),
iconRes = R.drawable.ic_gas_24,
extraUM = ProviderChooseUM.ExtraUM.Badges(
persistentListOf(
BadgeUM(
text = stringReference("4.9"),
iconRes = R.drawable.ic_star_outline_24,
),
BadgeUM(
text = stringReference("5 mins"),
iconRes = R.drawable.ic_speed_24,
),
BadgeUM(
text = stringReference("$3.45"),
iconRes = R.drawable.ic_gas_24,
),
),
),
isSelected = false,

View file

@ -14,7 +14,7 @@ import kotlinx.collections.immutable.ImmutableList
* @property infoText info text
* @property iconUrl icon url
* @property isSelected indicated whether component is selected (border outline)
* @property badgeList list of badge components
* @property extraUM list of extra components
* @property labelUM label component (whether AuditLabel or text)
*/
data class ProviderChooseUM(
@ -23,7 +23,7 @@ data class ProviderChooseUM(
val infoText: TextReference,
val iconUrl: String,
val isSelected: Boolean,
val badgeList: ImmutableList<BadgeUM>,
val extraUM: ExtraUM,
val labelUM: LabelUM?,
) {
@Immutable
@ -36,4 +36,20 @@ data class ProviderChooseUM(
val text: TextReference,
) : LabelUM()
}
@Immutable
sealed class ExtraUM {
data object Empty : ExtraUM()
data class Badges(
val badgeList: ImmutableList<BadgeUM>,
) : ExtraUM()
data class Action(
val text: TextReference,
) : ExtraUM()
data class Error(
val text: TextReference,
) : ExtraUM()
}
}