@@ -7,7 +7,6 @@ import com.flipcash.app.core.ui.CurrencyHolder
77import com.flipcash.app.onramp.ConfirmationEvent
88import com.flipcash.app.onramp.OnRampAmount
99import com.flipcash.app.onramp.OnRampAmountController
10- import com.flipcash.features.cash.BuildConfig
1110import com.flipcash.features.cash.R
1211import com.flipcash.services.analytics.AnalyticsEvent
1312import com.flipcash.services.analytics.FlipcashAnalyticsService
@@ -27,7 +26,6 @@ import com.getcode.opencode.model.financial.Rate
2726import com.getcode.opencode.model.financial.SendLimit
2827import com.getcode.opencode.model.financial.TokenWithLocalizedBalance
2928import com.getcode.opencode.model.financial.minus
30- import com.getcode.opencode.utils.roundTo
3129import com.getcode.solana.keys.Mint
3230import com.getcode.ui.components.text.AmountAnimatedInputUiModel
3331import com.getcode.ui.components.text.NumberInputHelper
@@ -81,12 +79,17 @@ internal class CashScreenViewModel @Inject constructor(
8179 val maxAvailableForGive: String
8280 get() = maxForGive?.let { Fiat (it.first, it.second).formatted() }.orEmpty()
8381
82+
8483 val isError: Boolean
8584 get() {
8685 if (amountAnimatedModel.amountData.amount.isEmpty()) return false
87- val enteredAmount = Fiat (amountAnimatedModel.amountData.amount.toDoubleOrNull() ? : 0.0 )
8886 if (maxForGive != null ) {
89- if (enteredAmount.doubleValue <= maxForGive.first.roundTo(2 )) {
87+ val enteredAmount = Fiat (
88+ fiat = amountAnimatedModel.amountData.amount.toDoubleOrNull() ? : 0.0 ,
89+ currencyCode = maxForGive.second
90+ )
91+ val limit = Fiat (maxForGive.first, maxForGive.second)
92+ if (enteredAmount.valueLessThanOrEqualTo(limit)) {
9093 return false
9194 }
9295 }
@@ -120,18 +123,17 @@ internal class CashScreenViewModel @Inject constructor(
120123 }
121124
122125 val checkBalanceLimit: () -> Boolean = {
126+ // this balance check differs from withdrawal due to the fact this is a localized check
127+ // whereas withdrawal is USD locked
123128 val amount = stateFlow.value.amountAnimatedModel.amountData.amount.toDoubleOrNull() ? : 0.0
124- val conversionRate =
125- exchange.rateToUsd(stateFlow.value.currencyModel.code ? : CurrencyCode .USD )
126- ? : Rate .ignore
127- val enteredInUsdc = Fiat (
129+ val enteredAmount = Fiat (
128130 fiat = amount,
129131 currencyCode = stateFlow.value.currencyModel.code ? : CurrencyCode .USD
130- ).convertingTo(conversionRate)
131- val tokenBalance = stateFlow.value.token?.balance?.underlyingTokenAmount ? : Fiat .Zero
132+ )
133+ val tokenBalance = stateFlow.value.token?.balance?.nativeAmount ? : Fiat .Zero
132134
133- val isOverBalance = enteredInUsdc > tokenBalance.rounded( )
134- if (isOverBalance || conversionRate == Rate .ignore ) {
135+ val isOverBalance = enteredAmount.valueGreaterThan(tokenBalance )
136+ if (isOverBalance) {
135137 BottomBarManager .showMessage(
136138 resources.getString(R .string.error_title_youNeedMoreCash),
137139 resources.getString(R .string.error_description_youNeedMoreCash),
0 commit comments