Skip to content

Commit 341d45c

Browse files
committed
feat: implement TokenBalanceStyle.Pill rendering and default includeReserves to true
Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent cc76237 commit 341d45c

6 files changed

Lines changed: 61 additions & 15 deletions

File tree

apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/ui/TokenBalanceRow.kt

Lines changed: 54 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.flipcash.app.core.ui
22

33
import androidx.compose.foundation.Image
4+
import androidx.compose.foundation.border
45
import androidx.compose.foundation.clickable
56
import androidx.compose.foundation.layout.Arrangement
67
import androidx.compose.foundation.layout.PaddingValues
@@ -11,7 +12,8 @@ import androidx.compose.foundation.layout.size
1112
import androidx.compose.foundation.layout.width
1213
import androidx.compose.foundation.layout.wrapContentWidth
1314
import androidx.compose.foundation.shape.CircleShape
14-
import androidx.compose.material.Text
15+
import androidx.compose.material3.Icon
16+
import androidx.compose.material3.Text
1517
import androidx.compose.runtime.Composable
1618
import androidx.compose.ui.Alignment
1719
import androidx.compose.ui.Modifier
@@ -20,13 +22,16 @@ import androidx.compose.ui.graphics.painter.Painter
2022
import androidx.compose.ui.res.painterResource
2123
import androidx.compose.ui.text.TextStyle
2224
import androidx.compose.ui.unit.Dp
25+
import androidx.compose.ui.unit.dp
2326
import com.flipcash.core.R
2427
import com.getcode.opencode.compose.LocalExchange
2528
import com.getcode.opencode.model.financial.Fiat
2629
import com.getcode.opencode.model.financial.Token
2730
import com.getcode.opencode.model.financial.TokenWithBalance
2831
import com.getcode.opencode.model.financial.TokenWithLocalizedBalance
2932
import com.getcode.theme.CodeTheme
33+
import com.getcode.theme.White20
34+
import com.getcode.theme.extraSmall
3035
import com.getcode.ui.components.text.AnimatedNumberText
3136
import 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
4152
fun 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
4961
fun 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(

apps/flipcash/features/balance/src/main/kotlin/com/flipcash/app/balance/internal/BalanceScreenContent.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.flipcash.app.balance.internal
22

3-
import androidx.compose.animation.animateBounds
43
import androidx.compose.foundation.background
54
import androidx.compose.foundation.layout.Arrangement
65
import androidx.compose.foundation.layout.Box
@@ -24,19 +23,18 @@ import androidx.compose.ui.text.style.TextAlign
2423
import androidx.compose.ui.tooling.preview.Preview
2524
import androidx.lifecycle.compose.collectAsStateWithLifecycle
2625
import com.flipcash.app.balance.internal.components.BalanceHeader
27-
import com.flipcash.app.balance.internal.components.CashReservesRow
2826
import com.flipcash.app.core.AppRoute
2927
import com.flipcash.app.core.tokens.TokenPurpose
3028
import com.flipcash.app.theme.FlipcashPreview
3129
import com.flipcash.app.tokens.ui.SelectTokenViewModel
30+
import com.flipcash.app.core.ui.TokenBalanceStyle
3231
import com.flipcash.app.tokens.ui.TokenList
3332
import com.flipcash.features.balance.R
3433
import com.getcode.opencode.compose.ExchangeStub
3534
import com.getcode.opencode.compose.LocalExchange
3635
import com.getcode.opencode.model.financial.CurrencyCode
3736
import com.getcode.opencode.model.financial.Rate
3837
import com.getcode.theme.CodeTheme
39-
import com.getcode.ui.core.addIf
4038
import com.getcode.ui.theme.ButtonState
4139
import com.getcode.ui.theme.CodeButton
4240

@@ -63,7 +61,7 @@ private fun BalanceScreenContent(
6361
TokenList(
6462
modifier = Modifier.weight(1f),
6563
itemModifier = { Modifier.animateItem(fadeInSpec = null) },
66-
includeReserves = true,
64+
balanceStyle = TokenBalanceStyle.Large,
6765
header = {
6866
BalanceHeader(
6967
modifier = Modifier

apps/flipcash/features/deposit/src/main/kotlin/com/flipcash/app/deposit/DepositFlowScreen.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,6 @@ private fun DepositSelectTokenScreen() {
119119
tokens = state.tokens,
120120
selectedToken = state.selectedToken,
121121
showFlags = true,
122-
includeReserves = true,
123122
onTokenSelected = { viewModel.dispatchEvent(SelectTokenViewModel.Event.OnTokenSelected(it.address)) },
124123
)
125124
}

apps/flipcash/features/tokens/src/main/kotlin/com/flipcash/app/tokens/internal/TokenSelectScreen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ private fun SelectTokenScreenContent(
4545
selectedToken = state.selectedToken,
4646
showSelections = state.purpose is TokenPurpose.Select,
4747
showFlags = state.purpose !is TokenPurpose.Select,
48-
includeReserves = state.purpose is TokenPurpose.Deposit || state.purpose is TokenPurpose.Withdraw,
48+
includeReserves = state.purpose !is TokenPurpose.Select,
4949
emptyState = {
5050
Box(
5151
modifier = Modifier

apps/flipcash/features/withdrawal/src/main/kotlin/com/flipcash/app/withdrawal/WithdrawalFlowScreen.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,6 @@ private fun WithdrawalSelectTokenScreen() {
124124
tokens = state.tokens,
125125
selectedToken = state.selectedToken,
126126
showFlags = true,
127-
includeReserves = true,
128127
onTokenSelected = { viewModel.dispatchEvent(SelectTokenViewModel.Event.OnTokenSelected(it.address)) },
129128
)
130129
}

apps/flipcash/shared/tokens/src/main/kotlin/com/flipcash/app/tokens/ui/TokenList.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import androidx.compose.ui.draw.alpha
2020
import androidx.compose.ui.graphics.Brush
2121
import androidx.compose.ui.graphics.Color
2222
import com.flipcash.app.core.ui.TokenBalanceRow
23+
import com.flipcash.app.core.ui.TokenBalanceStyle
2324
import com.getcode.opencode.model.financial.Fiat
2425
import com.getcode.opencode.model.financial.LocalFiat
2526
import com.getcode.opencode.model.financial.Token
@@ -37,9 +38,10 @@ fun TokenList(
3738
modifier: Modifier = Modifier,
3839
itemModifier: LazyItemScope.() -> Modifier = { Modifier },
3940
showFlags: Boolean = false,
41+
balanceStyle: TokenBalanceStyle = TokenBalanceStyle.Pill,
4042
selectedToken: Mint? = null,
4143
showSelections: Boolean = false,
42-
includeReserves: Boolean = false,
44+
includeReserves: Boolean = true,
4345
pinFooter: Boolean = false,
4446
emptyState: (@Composable LazyItemScope.() -> Unit)? = null,
4547
reserves: (@Composable LazyItemScope.(mint: Mint, cashReserves: LocalFiat) -> Unit)? = null,
@@ -97,6 +99,7 @@ fun TokenList(
9799
.then(itemModifier()),
98100
tokenWithBalance = item,
99101
showFlag = showFlags,
102+
balanceStyle = balanceStyle,
100103
isSelected = (selectedToken == item.token.address).takeIf { showSelections },
101104
) { onTokenSelected(item.token) }
102105

0 commit comments

Comments
 (0)