Skip to content

Commit 07f1e92

Browse files
committed
chore: allow token selection screen be used in all user flows
Signed-off-by: Brandon McAnsh <[email protected]>
1 parent 9c77a92 commit 07f1e92

File tree

16 files changed

+73
-43
lines changed

16 files changed

+73
-43
lines changed

apps/flipcash/app/src/main/kotlin/com/flipcash/app/internal/ui/navigation/AppScreenContent.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,11 @@ internal fun AppScreenContent(content: @Composable () -> Unit) {
7474
}
7575

7676
register<AppRoute.Main.Give> {
77-
CashScreen(it.tokenAddress)
77+
CashScreen(it.mint)
7878
}
7979

8080
register<AppRoute.Sheets.TokenSelection> {
81-
SelectTokenScreen()
81+
SelectTokenScreen(it.purpose)
8282
}
8383

8484
register<AppRoute.Sheets.Wallet> {
@@ -158,7 +158,7 @@ internal fun AppScreenContent(content: @Composable () -> Unit) {
158158

159159
register<AppRoute.Transfers.Withdrawal.Amount> {
160160
WithdrawalFlow.start()
161-
WithdrawalEntryScreen()
161+
WithdrawalEntryScreen(it.mint)
162162
}
163163

164164
register<AppRoute.Transfers.Withdrawal.Destination> {

apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/AppRoute.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@ import android.os.Parcelable
44
import cafe.adriel.voyager.core.registry.ScreenProvider
55
import com.flipcash.app.core.money.RegionSelectionKind
66
import com.flipcash.app.core.navigation.DeeplinkType
7+
import com.flipcash.app.core.tokens.TokenPurpose
78
import com.flipcash.app.core.transfers.TransferDirection
89
import com.getcode.ed25519.Ed25519
910
import com.getcode.opencode.model.core.ID
1011
import com.getcode.opencode.model.financial.Fiat
11-
import com.getcode.solana.keys.PublicKey
12+
import com.getcode.solana.keys.Mint
1213
import com.getcode.ui.core.RestrictionType
1314
import kotlinx.parcelize.Parcelize
1415

@@ -38,7 +39,7 @@ sealed interface AppRoute : ScreenProvider, Parcelable {
3839
data class RegionSelection(val kind: RegionSelectionKind) : Main
3940

4041

41-
data class Give(val tokenAddress: PublicKey?) : Main
42+
data class Give(val mint: Mint) : Main
4243
}
4344

4445
@Parcelize
@@ -53,7 +54,7 @@ sealed interface AppRoute : ScreenProvider, Parcelable {
5354

5455
@Parcelize
5556
sealed interface Sheets: AppRoute {
56-
data object TokenSelection: Sheets
57+
data class TokenSelection(val purpose: TokenPurpose): Sheets
5758
data object Wallet : Sheets
5859
data object Menu : Sheets
5960
data object Lab: Sheets
@@ -92,7 +93,7 @@ sealed interface AppRoute : ScreenProvider, Parcelable {
9293
data class Learn(val direction: TransferDirection) : Transfers
9394

9495
sealed interface Withdrawal {
95-
data object Amount : Transfers
96+
data class Amount(val mint: Mint) : Transfers
9697
data object Destination : Transfers
9798
data object Confirmation : Transfers
9899
}

apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/onramp/deeplinks/WalletDeeplinkConnectionResult.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import android.os.Parcelable
44
import com.flipcash.app.core.AppRoute
55
import com.getcode.ed25519.Ed25519
66
import com.getcode.opencode.model.core.ID
7-
import com.getcode.opencode.model.financial.Token
87
import com.getcode.opencode.utils.base64
98
import com.getcode.solana.keys.PublicKey
109
import com.getcode.solana.keys.base58
@@ -36,7 +35,7 @@ sealed class OnRampDeeplinkOrigin: Parcelable {
3635
data object Menu : OnRampDeeplinkOrigin()
3736

3837
@Parcelize
39-
data class Give(val tokenAddress: PublicKey?) : OnRampDeeplinkOrigin()
38+
data class Give(val tokenAddress: PublicKey) : OnRampDeeplinkOrigin()
4039

4140
@Parcelize
4241
data object Wallet: OnRampDeeplinkOrigin()
@@ -61,7 +60,7 @@ sealed class OnRampDeeplinkOrigin: Parcelable {
6160
fun fromRoute(route: AppRoute?): OnRampDeeplinkOrigin? {
6261
return when (route) {
6362
is AppRoute.Sheets.Menu -> Menu
64-
is AppRoute.Main.Give -> Give(route.tokenAddress)
63+
is AppRoute.Main.Give -> Give(route.mint)
6564
is AppRoute.Pool.Details -> {
6665
route.rendezvous?.let { keyPair -> PoolWithRendezvous(keyPair) }
6766
route.poolId?.let { id -> PoolWithId(id) }
@@ -77,9 +76,10 @@ sealed class OnRampDeeplinkOrigin: Parcelable {
7776
value == "menu" -> Menu
7877
value?.startsWith("give-") == true -> {
7978
val tokenAddress = value.removePrefix("give-")
80-
Give(tokenAddress = runCatching {
79+
val mint = runCatching {
8180
PublicKey.fromBase58(tokenAddress)
82-
}.getOrNull())
81+
}.getOrNull() ?: return null
82+
Give(mint)
8383
}
8484
value == "wallet" -> Wallet
8585
value?.startsWith("pool-") == true -> {
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.flipcash.app.core.tokens
2+
3+
import android.os.Parcelable
4+
import kotlinx.parcelize.Parcelize
5+
6+
@Parcelize
7+
sealed interface TokenPurpose: Parcelable {
8+
data object Send : TokenPurpose
9+
data object Withdraw: TokenPurpose
10+
data object Balance : TokenPurpose
11+
}

apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/transfers/TransferDirection.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import androidx.compose.runtime.Composable
55
import androidx.compose.ui.res.stringResource
66
import com.flipcash.app.core.AppRoute
77
import com.flipcash.core.R
8+
import com.getcode.solana.keys.Mint
89
import kotlinx.parcelize.IgnoredOnParcel
910
import kotlinx.parcelize.Parcelize
1011

@@ -40,7 +41,7 @@ sealed interface TransferDirection : Parcelable {
4041

4142
data object Outgoing : TransferDirection {
4243
@IgnoredOnParcel
43-
override val nextScreen: AppRoute = AppRoute.Transfers.Withdrawal.Amount
44+
override val nextScreen: AppRoute = AppRoute.Transfers.Withdrawal.Amount(Mint.usdc)
4445
override val title: String
4546
@Composable get() = stringResource(R.string.title_withdrawUsdc)
4647
override val description: String

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ import com.flipcash.app.balance.internal.BalanceScreen
1616
import com.flipcash.app.balance.internal.BalanceViewModel
1717
import com.flipcash.app.core.AppRoute
1818
import com.flipcash.app.core.money.RegionSelectionKind
19+
import com.flipcash.app.core.tokens.TokenPurpose
1920
import com.flipcash.app.tokens.SelectTokenViewModel
20-
import com.flipcash.app.tokens.TokenPurpose
2121
import com.flipcash.core.R
2222
import com.getcode.navigation.core.LocalCodeNavigator
2323
import com.getcode.navigation.extensions.getActivityScopedViewModel

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,11 @@ import androidx.compose.ui.res.stringResource
1919
import androidx.compose.ui.text.style.TextAlign
2020
import androidx.compose.ui.tooling.preview.Preview
2121
import com.flipcash.app.balance.internal.components.BalanceHeader
22+
import com.flipcash.app.core.tokens.TokenPurpose
2223
import com.flipcash.app.onramp.AddCashRow
2324
import com.flipcash.app.theme.FlipcashDesignSystem
2425
import com.flipcash.app.tokens.SelectTokenViewModel
2526
import com.flipcash.app.tokens.TokenList
26-
import com.flipcash.app.tokens.TokenPurpose
2727
import com.flipcash.features.balance.R
2828
import com.getcode.opencode.compose.ExchangeStub
2929
import com.getcode.opencode.compose.LocalExchange

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

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

33
import androidx.lifecycle.viewModelScope
44
import com.flipcash.app.core.AppRoute
5+
import com.flipcash.app.core.tokens.TokenPurpose
56
import com.flipcash.app.core.transfers.TransferDirection
67
import com.flipcash.app.onramp.ConfirmationEvent
78
import com.flipcash.app.onramp.OnRampAmount
@@ -78,7 +79,7 @@ internal class BalanceViewModel @Inject constructor(
7879
.onEach {
7980
dispatchEvent(
8081
Event.OpenScreen(
81-
AppRoute.Transfers.Learn(TransferDirection.Outgoing)
82+
AppRoute.Sheets.TokenSelection(TokenPurpose.Withdraw)
8283
)
8384
)
8485
}.launchIn(viewModelScope)

apps/flipcash/features/cash/src/main/kotlin/com/flipcash/app/cash/CashScreen.kt

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import kotlinx.parcelize.Parcelize
3030

3131
@Parcelize
3232
class CashScreen(
33-
private val selectedTokenAddress: Mint?
33+
private val selectedMint: Mint
3434
): ModalScreen, Parcelable {
3535

3636
@IgnoredOnParcel
@@ -67,10 +67,8 @@ class CashScreen(
6767
GiveScreenContent(viewModel)
6868
}
6969

70-
LaunchedEffect(viewModel, selectedTokenAddress) {
71-
if (selectedTokenAddress != null) {
72-
viewModel.dispatchEvent(CashScreenViewModel.Event.OnTokenSelected(selectedTokenAddress))
73-
}
70+
LaunchedEffect(viewModel, selectedMint) {
71+
viewModel.dispatchEvent(CashScreenViewModel.Event.OnTokenSelected(selectedMint))
7472
}
7573

7674
LaunchedEffect(viewModel) {

apps/flipcash/features/cash/src/main/kotlin/com/flipcash/app/cash/internal/CashScreenViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ internal class CashScreenViewModel @Inject constructor(
350350
dispatchEvent(
351351
Event.OpenScreen(
352352
AppRoute.OnRamp.ProviderList(
353-
AppRoute.Main.Give(tokenAddress = stateFlow.value.token?.token?.address),
353+
AppRoute.Main.Give(mint = stateFlow.value.selectedTokenAddress!!),
354354
amount
355355
)
356356
)

0 commit comments

Comments
 (0)