Skip to content

Commit 7b34614

Browse files
committed
style(token/discovery): add scroll gradient and stubbed create bottomBar
Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent 87257f1 commit 7b34614

5 files changed

Lines changed: 78 additions & 12 deletions

File tree

apps/flipcash/core/src/main/res/values/strings.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -453,5 +453,8 @@
453453
<string name="error_discoverFailedToLoad">Check your connection and try again</string>
454454
<string name="subtitle_discoverEmptyNew">Check back soon for new currencies</string>
455455
<string name="subtitle_discoverEmptyPopular">No popular currencies right now</string>
456+
<string name="action_createYourOwnCurrency">Create Your Own Currency</string>
457+
<string name="prompt_title_notYetAvailable">Not Yet Available</string>
458+
<string name="prompt_message_currencyCreateNotYetAvailable">Check back soon</string>
456459

457460
</resources>

apps/flipcash/features/discovery/src/main/kotlin/com/flipcash/app/discovery/internal/TokenDiscoveryScreenContent.kt

Lines changed: 64 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,13 @@ import androidx.compose.animation.core.tween
55
import androidx.compose.animation.fadeIn
66
import androidx.compose.animation.fadeOut
77
import androidx.compose.animation.togetherWith
8+
import androidx.compose.foundation.layout.Box
89
import androidx.compose.foundation.layout.fillMaxSize
910
import androidx.compose.foundation.layout.fillMaxWidth
11+
import androidx.compose.foundation.layout.height
12+
import androidx.compose.foundation.layout.navigationBarsPadding
1013
import androidx.compose.foundation.layout.padding
14+
import androidx.compose.foundation.lazy.rememberLazyListState
1115
import androidx.compose.material3.Text
1216
import androidx.compose.material3.pulltorefresh.PullToRefreshBox
1317
import androidx.compose.runtime.Composable
@@ -19,12 +23,15 @@ import androidx.compose.runtime.setValue
1923
import androidx.compose.ui.Modifier
2024
import androidx.compose.ui.res.stringResource
2125
import androidx.compose.ui.tooling.preview.Preview
26+
import androidx.compose.ui.unit.dp
2227
import androidx.lifecycle.compose.collectAsStateWithLifecycle
2328
import com.flipcash.app.core.data.Loadable
2429
import com.flipcash.app.core.data.isLoading
2530
import com.flipcash.app.discovery.internal.components.TokenLeaderboard
2631
import com.flipcash.app.theme.FlipcashPreview
2732
import com.flipcash.features.discovery.R
33+
import com.getcode.manager.BottomBarAction
34+
import com.getcode.manager.BottomBarManager
2835
import com.getcode.opencode.model.financial.HolderMetrics
2936
import com.getcode.opencode.model.financial.MintMetadata
3037
import com.getcode.opencode.model.financial.Token
@@ -34,8 +41,13 @@ import com.getcode.opencode.model.ui.WindowedRange
3441
import com.getcode.solana.keys.Mint
3542
import com.getcode.solana.keys.PublicKey
3643
import com.getcode.theme.CodeTheme
44+
import com.getcode.ui.core.drawWithGradient
45+
import com.getcode.ui.core.measured
46+
import com.getcode.ui.core.verticalScrollStateGradient
47+
import com.getcode.ui.theme.CodeButton
3748
import com.getcode.ui.theme.CodeScaffold
3849
import com.getcode.ui.theme.CodeSegmentedControl
50+
import com.getcode.util.resources.LocalResources
3951
import kotlinx.coroutines.delay
4052

4153
@Composable
@@ -49,7 +61,7 @@ private fun TokenDiscoveryScreenContent(
4961
state: TokenDiscoveryViewModel.State,
5062
dispatch: (TokenDiscoveryViewModel.Event) -> Unit
5163
) {
52-
64+
val listState = rememberLazyListState()
5365
CodeScaffold(
5466
topBar = {
5567
CodeSegmentedControl(
@@ -74,7 +86,41 @@ private fun TokenDiscoveryScreenContent(
7486
)
7587
},
7688
bottomBar = {
77-
// TODO: add create button when ready
89+
val resources = LocalResources.current
90+
if (state.createEnabled) {
91+
Box {
92+
var buttonHeight by remember { mutableStateOf(0.dp) }
93+
Box(
94+
modifier = Modifier
95+
.fillMaxWidth()
96+
.height(buttonHeight)
97+
.drawWithGradient(
98+
color = CodeTheme.colors.background,
99+
startY = { 0f },
100+
endY = { size.height * 0.38f }
101+
)
102+
)
103+
CodeButton(
104+
modifier = Modifier
105+
.fillMaxWidth()
106+
.measured { buttonHeight = it.height }
107+
.navigationBarsPadding()
108+
.padding(horizontal = CodeTheme.dimens.inset)
109+
.padding(
110+
top = CodeTheme.dimens.grid.x9,
111+
bottom = CodeTheme.dimens.grid.x3
112+
),
113+
text = stringResource(R.string.action_createYourOwnCurrency),
114+
) {
115+
BottomBarManager.showMessage(
116+
title = resources.getString(R.string.prompt_title_notYetAvailable),
117+
subtitle = resources.getString(R.string.prompt_message_currencyCreateNotYetAvailable),
118+
type = BottomBarManager.BottomBarMessageType.INFO,
119+
actions = listOf(BottomBarAction.Ok)
120+
)
121+
}
122+
}
123+
}
78124
},
79125
) { padding ->
80126
PullToRefreshBox(
@@ -90,12 +136,22 @@ private fun TokenDiscoveryScreenContent(
90136
transitionSpec = { fadeIn(tween()) togetherWith fadeOut(tween()) },
91137
contentKey = { it::class }, // only crossfade on type change, not data updates
92138
) { tokens ->
93-
TokenLeaderboard(
94-
category = state.category,
95-
tokens = tokens,
96-
padding = padding,
97-
dispatch = dispatch
98-
)
139+
Box(
140+
modifier = Modifier.verticalScrollStateGradient(
141+
listState,
142+
color = CodeTheme.colors.background,
143+
isLongGradient = true,
144+
showAtEnd = !state.createEnabled,
145+
)
146+
) {
147+
TokenLeaderboard(
148+
category = state.category,
149+
state = listState,
150+
tokens = tokens,
151+
padding = padding,
152+
dispatch = dispatch
153+
)
154+
}
99155
}
100156
}
101157
}

apps/flipcash/features/discovery/src/main/kotlin/com/flipcash/app/discovery/internal/TokenDiscoveryViewModel.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ import javax.inject.Inject
2525
@HiltViewModel
2626
internal class TokenDiscoveryViewModel @Inject constructor(
2727
private val currencyController: CurrencyController,
28-
private val featureFlags: FeatureFlagController,
2928
private val resources: ResourceHelper,
29+
featureFlags: FeatureFlagController,
3030
) : BaseViewModel2<TokenDiscoveryViewModel.State, TokenDiscoveryViewModel.Event>(
3131
initialState = State(),
3232
updateStateForEvent = updateStateForEvent,
@@ -40,12 +40,16 @@ internal class TokenDiscoveryViewModel @Inject constructor(
4040

4141
sealed interface Event {
4242
data class OnCreateAllowed(val enabled: Boolean) : Event
43-
data class OnCategorySelected(val category: DiscoverCategory, val fromUser: Boolean = false) : Event
43+
data class OnCategorySelected(
44+
val category: DiscoverCategory,
45+
val fromUser: Boolean = false
46+
) : Event
47+
4448
data class OnTokensUpdated(val loadable: Loadable<List<Token>>) : Event
4549

4650
data class LoadTokensForCategory(val category: DiscoverCategory) : Event
4751
data object Refresh : Event
48-
data class OpenTokenInfo(val mint: Mint): Event
52+
data class OpenTokenInfo(val mint: Mint) : Event
4953
}
5054

5155
init {

apps/flipcash/features/discovery/src/main/kotlin/com/flipcash/app/discovery/internal/components/TokenLeaderboard.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import androidx.compose.foundation.layout.fillMaxSize
77
import androidx.compose.foundation.layout.fillMaxWidth
88
import androidx.compose.foundation.layout.padding
99
import androidx.compose.foundation.lazy.LazyColumn
10+
import androidx.compose.foundation.lazy.LazyListState
1011
import androidx.compose.foundation.lazy.itemsIndexed
1112
import androidx.compose.foundation.shape.CircleShape
1213
import androidx.compose.material3.HorizontalDivider
@@ -30,10 +31,12 @@ internal fun TokenLeaderboard(
3031
category: DiscoverCategory?,
3132
tokens: Loadable<List<Token>>,
3233
padding: PaddingValues,
34+
state: LazyListState,
3335
dispatch: (TokenDiscoveryViewModel.Event) -> Unit
3436
) {
3537
LazyColumn(
3638
modifier = Modifier.fillMaxSize(),
39+
state = state,
3740
contentPadding = PaddingValues(
3841
start = CodeTheme.dimens.inset,
3942
end = CodeTheme.dimens.inset,

apps/flipcash/shared/featureflags/src/main/kotlin/com/flipcash/app/featureflags/FeatureFlag.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ sealed interface FeatureFlag {
123123
override val key: String = "token_create_enabled"
124124
override val default: Boolean = false
125125
override val launched: Boolean = false
126-
override val visible: Boolean = false
126+
override val visible: Boolean = true
127127
override val persistLogOut: Boolean = false
128128
}
129129

0 commit comments

Comments
 (0)