@@ -24,6 +24,7 @@ import com.getcode.opencode.model.financial.CurrencyCode
2424import com.getcode.opencode.model.financial.Fiat
2525import com.getcode.opencode.model.financial.LocalFiat
2626import com.getcode.opencode.model.financial.Rate
27+ import com.getcode.opencode.model.financial.TokenWithBalance
2728import com.getcode.opencode.model.financial.TokenWithLocalizedBalance
2829import com.getcode.opencode.model.financial.minus
2930import com.getcode.opencode.model.transactions.WithdrawalAvailability
@@ -85,7 +86,7 @@ internal class WithdrawalViewModel @Inject constructor(
8586
8687 internal data class State (
8788 val selectedTokenAddress : Mint ? = null ,
88- val token : TokenWithLocalizedBalance ? = null ,
89+ val token : TokenWithBalance ? = null ,
8990 val amountEntryState : AmountEntryState = AmountEntryState (),
9091 val destinationState : DestinationState = DestinationState (),
9192 val withdrawalState : LoadingSuccessState = LoadingSuccessState (),
@@ -95,7 +96,7 @@ internal class WithdrawalViewModel @Inject constructor(
9596 ? : 0.0 ) > 0.00
9697
9798 val tokenBalance: Fiat
98- get() = token?.balance?.nativeAmount ? : Fiat .Zero
99+ get() = token?.balance ? : Fiat .Zero
99100
100101 val isError: Boolean
101102 get() {
@@ -115,7 +116,7 @@ internal class WithdrawalViewModel @Inject constructor(
115116 internal sealed interface Event {
116117 // common
117118 data class OnMintSelected (val mint : Mint ) : Event
118- data class OnTokenUpdated (val token : TokenWithLocalizedBalance ) : Event
119+ data class OnTokenUpdated (val token : TokenWithBalance ) : Event
119120
120121 // amount
121122 data class OnNumberPressed (val number : Int ) : Event
@@ -169,7 +170,7 @@ internal class WithdrawalViewModel @Inject constructor(
169170 fiat = amount,
170171 currencyCode = stateFlow.value.amountEntryState.currencyModel.code ? : CurrencyCode .USD
171172 ).convertingTo(conversionRate)
172- val tokenBalance = stateFlow.value.token?.balance?.nativeAmount ? : Fiat .Zero
173+ val tokenBalance = stateFlow.value.token?.balance ? : Fiat .Zero
173174
174175 val isOverBalance = enteredInUsdc > tokenBalance
175176 if (isOverBalance || conversionRate == Rate .ignore) {
@@ -194,22 +195,18 @@ internal class WithdrawalViewModel @Inject constructor(
194195 combine(
195196 tokenController.tokens,
196197 tokenController.balanceForToken(tokenAddress),
197- exchange.observeEntryRate(),
198- ) { tokens, balance, rate ->
198+ ) { tokens, balance ->
199199 val token = tokens.find { it.address == tokenAddress } ? : return @combine null
200- TokenWithLocalizedBalance (
200+ TokenWithBalance (
201201 token = token,
202- balance = LocalFiat (
203- usdc = balance,
204- nativeAmount = balance.convertingTo(rate),
205- )
202+ balance = balance
206203 )
207204 }
208205 }.filterNotNull()
209206 .onEach {
210207 dispatchEvent(Event .OnTokenUpdated (it))
211208 }.mapNotNull { (token, balance) ->
212- exchange.getCurrency(balance.rate.currency .name)
209+ exchange.getCurrency(balance.currencyCode .name)
213210 }.onEach {
214211 dispatchEvent(Event .OnCurrencyChanged (it))
215212 }.launchIn(viewModelScope)
@@ -277,12 +274,7 @@ internal class WithdrawalViewModel @Inject constructor(
277274 .filterNot { checkBalanceLimit() }
278275 .onEach { data ->
279276 dispatchEvent(Event .UpdateConfirmingAmountState (loading = true ))
280- val rate = exchange.entryRate
281- // if we are USD we can skip the rate fetch since its 1:1
282- if (rate.currency != CurrencyCode .USD ) {
283- exchange.fetchRatesIfNeeded()
284- }
285-
277+ val rate = exchange.rateForUsd()
286278 val token = stateFlow.value.token!! .token
287279 val amountFiat = LocalFiat .valueExchangeIn(
288280 amount = Fiat (data.amountData.amount, rate.currency),
0 commit comments