@@ -11,15 +11,16 @@ import com.flipcash.services.internal.model.thirdparty.OnRampProvider
1111import com.flipcash.services.internal.model.thirdparty.OnRampType
1212import com.flipcash.services.user.AuthState
1313import com.flipcash.services.user.UserManager
14+ import com.flipcash.shared.tokens.R
1415import com.getcode.opencode.controllers.TokenController
1516import com.getcode.opencode.exchange.Exchange
1617import com.getcode.opencode.model.financial.Fiat
1718import com.getcode.opencode.model.financial.LocalFiat
18- import com.getcode.opencode.model.financial.Token
1919import com.getcode.opencode.model.financial.TokenWithLocalizedBalance
2020import com.getcode.opencode.model.financial.sum
2121import com.getcode.opencode.model.financial.toFiat
2222import com.getcode.solana.keys.Mint
23+ import com.getcode.util.resources.ResourceHelper
2324import com.getcode.view.BaseViewModel2
2425import dagger.hilt.android.lifecycle.HiltViewModel
2526import kotlinx.coroutines.flow.combine
@@ -41,7 +42,8 @@ class SelectTokenViewModel @Inject constructor(
4142 exchange : Exchange ,
4243 analytics : FlipcashAnalyticsService ,
4344 featureFlags : FeatureFlagController ,
44- ): BaseViewModel2<SelectTokenViewModel.State, SelectTokenViewModel.Event>(
45+ resources : ResourceHelper ,
46+ ) : BaseViewModel2<SelectTokenViewModel.State, SelectTokenViewModel.Event>(
4547 initialState = State (purpose = TokenPurpose .Balance ),
4648 updateStateForEvent = updateStateForEvent
4749) {
@@ -59,18 +61,18 @@ class SelectTokenViewModel @Inject constructor(
5961
6062 sealed interface Event {
6163 data class OnPreferredOnRampProviderChanged (val provider : OnRampProvider ? ) : Event
62- data class OnReservesEnabled (val enabled : Boolean ): Event
64+ data class OnReservesEnabled (val enabled : Boolean ) : Event
6365
6466 data class OnPurposeChanged (val purpose : TokenPurpose ) : Event
6567 data class OnTokensUpdated (val tokens : List <TokenWithLocalizedBalance >) : Event
6668
67- data class OnTokenSelected (val mint : Mint , val fromUser : Boolean = true ): Event
69+ data class OnTokenSelected (val mint : Mint , val fromUser : Boolean = true ) : Event
6870
69- data object OnTokenChanged : Event
71+ data object OnTokenChanged : Event
7072
71- data object OnAddCashClicked : Event
72- data object OpenOnRampAmountModal : Event
73- data class OpenScreen (val route : AppRoute ): Event
73+ data object OnAddCashClicked : Event
74+ data object OpenOnRampAmountModal : Event
75+ data class OpenScreen (val route : AppRoute ) : Event
7476 }
7577
7678 init {
@@ -101,15 +103,25 @@ class SelectTokenViewModel @Inject constructor(
101103 TokenPurpose .Deposit -> exchange.observeEntryRate()
102104 }
103105 ) { state, balances, rate ->
104- balances.map {
105- TokenWithLocalizedBalance (
106- token = it.token,
107- balance = LocalFiat (
108- usdc = it.balance,
109- nativeAmount = it.balance.convertingTo(rate),
106+ balances
107+ .map {
108+ TokenWithLocalizedBalance (
109+ token = it.token,
110+ displayName = if (it.token.address == Mint .usdc) {
111+ resources.getString(R .string.title_cashReserves)
112+ } else {
113+ it.token.name
114+ },
115+ balance = LocalFiat (
116+ usdc = it.balance,
117+ nativeAmount = it.balance.convertingTo(rate),
118+ )
110119 )
111- )
112- }.sortedByDescending { it.balance.nativeAmount }
120+ }
121+ .sortedWith(compareByDescending<TokenWithLocalizedBalance > { item ->
122+ if (state.reservesEnabled && item.isReserves) Fiat .MIN_VALUE
123+ else item.balance.nativeAmount
124+ })
113125 .filter {
114126 val baselineAmount = 0.01 .toFiat(rate.currency)
115127 when (purpose) {
@@ -163,9 +175,11 @@ class SelectTokenViewModel @Inject constructor(
163175 is Event .OnPreferredOnRampProviderChanged -> { state ->
164176 state.copy(preferredOnRampProvider = event.provider)
165177 }
178+
166179 is Event .OnReservesEnabled -> { state ->
167180 state.copy(reservesEnabled = event.enabled)
168181 }
182+
169183 is Event .OnPurposeChanged -> { state -> state.copy(purpose = event.purpose) }
170184 is Event .OnTokensUpdated -> { state -> state.copy(tokens = event.tokens) }
171185 is Event .OnTokenSelected -> { state -> state.copy(selectedToken = event.mint) }
0 commit comments