11package com.flipcash.app.core.ui
22
33import androidx.compose.foundation.Image
4+ import androidx.compose.foundation.border
45import androidx.compose.foundation.clickable
56import androidx.compose.foundation.layout.Arrangement
67import androidx.compose.foundation.layout.PaddingValues
@@ -11,7 +12,8 @@ import androidx.compose.foundation.layout.size
1112import androidx.compose.foundation.layout.width
1213import androidx.compose.foundation.layout.wrapContentWidth
1314import androidx.compose.foundation.shape.CircleShape
14- import androidx.compose.material.Text
15+ import androidx.compose.material3.Icon
16+ import androidx.compose.material3.Text
1517import androidx.compose.runtime.Composable
1618import androidx.compose.ui.Alignment
1719import androidx.compose.ui.Modifier
@@ -20,13 +22,16 @@ import androidx.compose.ui.graphics.painter.Painter
2022import androidx.compose.ui.res.painterResource
2123import androidx.compose.ui.text.TextStyle
2224import androidx.compose.ui.unit.Dp
25+ import androidx.compose.ui.unit.dp
2326import com.flipcash.core.R
2427import com.getcode.opencode.compose.LocalExchange
2528import com.getcode.opencode.model.financial.Fiat
2629import com.getcode.opencode.model.financial.Token
2730import com.getcode.opencode.model.financial.TokenWithBalance
2831import com.getcode.opencode.model.financial.TokenWithLocalizedBalance
2932import com.getcode.theme.CodeTheme
33+ import com.getcode.theme.White20
34+ import com.getcode.theme.extraSmall
3035import com.getcode.ui.components.text.AnimatedNumberText
3136import com.getcode.ui.core.addIf
3237
@@ -37,13 +42,20 @@ data class TokenBalanceRowSizing(
3742 val flagSize : Dp ,
3843)
3944
45+ enum class TokenBalanceStyle {
46+ Large ,
47+ Pill ,
48+ ;
49+ }
50+
4051@Composable
4152fun rememberTokenBalanceRowSizing (
4253 nameTextStyle : TextStyle = CodeTheme .typography.screenTitle,
4354 balanceTextStyle : TextStyle = CodeTheme .typography.screenTitle,
4455 iconSize : Dp = CodeTheme .dimens.staticGrid.x6,
4556 flagSize : Dp = CodeTheme .dimens.staticGrid.x3,
46- ): TokenBalanceRowSizing = TokenBalanceRowSizing (nameTextStyle, balanceTextStyle, iconSize, flagSize)
57+ ): TokenBalanceRowSizing =
58+ TokenBalanceRowSizing (nameTextStyle, balanceTextStyle, iconSize, flagSize)
4759
4860@Composable
4961fun TokenBalanceRow (
@@ -54,6 +66,7 @@ fun TokenBalanceRow(
5466 showLogo : Boolean = true,
5567 isSelected : Boolean? = null,
5668 iconOverride : @Composable ((Any? ) -> Any? ) = { it },
69+ balanceStyle : TokenBalanceStyle = TokenBalanceStyle .Large ,
5770 formattedBalance : (Fiat ) -> String = { it.formatted() },
5871 horizontalArrangement : Arrangement .Horizontal = Arrangement .SpaceBetween ,
5972 sizing : TokenBalanceRowSizing = rememberTokenBalanceRowSizing(),
@@ -66,6 +79,7 @@ fun TokenBalanceRow(
6679 displayName = displayName,
6780 balance = balance.nativeAmount,
6881 iconOverride = iconOverride,
82+ balanceStyle = balanceStyle,
6983 formattedBalance = formattedBalance,
7084 isSelected = isSelected,
7185 modifier = modifier,
@@ -88,6 +102,7 @@ fun TokenBalanceRow(
88102 showFlag : Boolean = false,
89103 isSelected : Boolean? = null,
90104 iconOverride : @Composable ((Any? ) -> Any? ) = { it },
105+ balanceStyle : TokenBalanceStyle = TokenBalanceStyle .Large ,
91106 formattedBalance : (Fiat ) -> String = { it.formatted() },
92107 horizontalArrangement : Arrangement .Horizontal = Arrangement .SpaceBetween ,
93108 sizing : TokenBalanceRowSizing = rememberTokenBalanceRowSizing(),
@@ -106,6 +121,7 @@ fun TokenBalanceRow(
106121 modifier = modifier,
107122 sizing = sizing,
108123 iconOverride = iconOverride,
124+ balanceStyle = balanceStyle,
109125 formattedBalance = formattedBalance,
110126 horizontalArrangement = horizontalArrangement,
111127 contentPadding = contentPadding,
@@ -125,6 +141,7 @@ fun TokenBalanceRow(
125141 showFlag : Boolean = false,
126142 isSelected : Boolean? = null,
127143 iconOverride : @Composable ((Any? ) -> Any? ) = { it },
144+ balanceStyle : TokenBalanceStyle = TokenBalanceStyle .Large ,
128145 formattedBalance : (Fiat ) -> String = { it.formatted() },
129146 horizontalArrangement : Arrangement .Horizontal = Arrangement .SpaceBetween ,
130147 sizing : TokenBalanceRowSizing = rememberTokenBalanceRowSizing(),
@@ -164,6 +181,7 @@ fun TokenBalanceRow(
164181 contentDescription = null ,
165182 modifier = Modifier .size(sizing.iconSize),
166183 )
184+
167185 else -> TokenIcon (
168186 image = image,
169187 modifier = Modifier .size(sizing.iconSize)
@@ -199,11 +217,40 @@ fun TokenBalanceRow(
199217 }
200218 }
201219
202- AnimatedNumberText (
203- value = formattedBalance(balance),
204- style = sizing.balanceTextStyle,
205- color = CodeTheme .colors.textMain,
206- )
220+ when (balanceStyle) {
221+ TokenBalanceStyle .Large -> {
222+ AnimatedNumberText (
223+ value = formattedBalance(balance),
224+ style = sizing.balanceTextStyle,
225+ color = CodeTheme .colors.textMain,
226+ )
227+ }
228+
229+ TokenBalanceStyle .Pill -> {
230+ Text (
231+ modifier = Modifier
232+ .padding(start = CodeTheme .dimens.grid.x1)
233+ .border(
234+ width = CodeTheme .dimens.border,
235+ color = White20 ,
236+ shape = CodeTheme .shapes.extraSmall,
237+ )
238+ .padding(
239+ horizontal = 4 .dp,
240+ vertical = 3 .dp
241+ ),
242+ text = formattedBalance(balance),
243+ color = CodeTheme .colors.textSecondary,
244+ style = CodeTheme .typography.caption,
245+ )
246+ Icon (
247+ modifier = Modifier .padding(start = CodeTheme .dimens.grid.x1),
248+ painter = painterResource(R .drawable.ic_chevron_right),
249+ contentDescription = null ,
250+ tint = CodeTheme .colors.secondary,
251+ )
252+ }
253+ }
207254
208255 if (isSelected != null ) {
209256 Image (
0 commit comments