Updated on 2026-08-14
This commit is contained in:
parent
cf79fa950b
commit
b6608d8378
4 changed files with 63 additions and 36 deletions
|
|
@ -22,11 +22,11 @@ import com.tangem.domain.appcurrency.model.AppCurrency
|
|||
import com.tangem.domain.express.models.ExpressError
|
||||
import com.tangem.domain.models.currency.CryptoCurrency
|
||||
import com.tangem.domain.models.currency.CryptoCurrencyStatus
|
||||
import com.tangem.domain.notifications.ShouldShowNotificationUseCase
|
||||
import com.tangem.domain.settings.usercountry.GetUserCountryUseCase
|
||||
import com.tangem.domain.settings.usercountry.models.UserCountry
|
||||
import com.tangem.domain.swap.models.SwapCurrencies
|
||||
import com.tangem.domain.notifications.ShouldShowNotificationUseCase
|
||||
import com.tangem.domain.settings.usercountry.models.needApplyFCARestrictions
|
||||
import com.tangem.domain.swap.models.SwapCurrencies
|
||||
import com.tangem.domain.swap.models.SwapDirection
|
||||
import com.tangem.domain.swap.models.SwapDirection.Companion.withSwapDirection
|
||||
import com.tangem.domain.swap.models.SwapQuoteModel
|
||||
|
|
@ -56,8 +56,8 @@ import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
|||
import com.tangem.utils.coroutines.Debouncer
|
||||
import com.tangem.utils.coroutines.PeriodicTask
|
||||
import com.tangem.utils.coroutines.SingleTaskScheduler
|
||||
import com.tangem.utils.extensions.isZero
|
||||
import com.tangem.utils.extensions.orZero
|
||||
import com.tangem.utils.isNullOrZero
|
||||
import com.tangem.utils.transformer.update
|
||||
import kotlinx.coroutines.async
|
||||
import kotlinx.coroutines.awaitAll
|
||||
|
|
@ -199,8 +199,6 @@ internal class SwapAmountModel @Inject constructor(
|
|||
)
|
||||
amountDebouncer.debounce(
|
||||
coroutineScope = modelScope,
|
||||
waitMs = DEBOUNCE_AMOUNT_DELAY,
|
||||
forceUpdate = true,
|
||||
destinationFunction = {
|
||||
startLoadingQuotesTask(isSilentReload = false)
|
||||
},
|
||||
|
|
@ -532,11 +530,12 @@ internal class SwapAmountModel @Inject constructor(
|
|||
SwapDirection.Reverse -> state.secondaryAmount.amountField
|
||||
} as? AmountState.Data
|
||||
|
||||
if (fromAmount?.amountTextField?.isError == true) return
|
||||
val fromAmountValue = fromAmount?.amountTextField?.cryptoAmount?.value.orZero()
|
||||
|
||||
val fromAmountValue = fromAmount?.amountTextField?.cryptoAmount?.value ?: return
|
||||
|
||||
if (fromAmountValue.isZero()) return
|
||||
if (fromAmount?.amountTextField?.isError == true || fromAmountValue.isNullOrZero()) {
|
||||
uiState.transformerUpdate(SwapQuoteEmptyStateTransformer)
|
||||
return
|
||||
}
|
||||
|
||||
val swapGroups = state.swapCurrencies.getGroupWithDirection(state.swapDirection)
|
||||
|
||||
|
|
|
|||
|
|
@ -56,15 +56,20 @@ internal object SwapAmountQuoteUtils {
|
|||
): SwapAmountUM {
|
||||
if (this !is SwapAmountUM.Content) return this
|
||||
|
||||
return if (
|
||||
val updatedAmountField = if (
|
||||
selectedAmountType == SwapAmountType.From && swapDirection == SwapDirection.Direct
|
||||
) {
|
||||
val amountFieldUM = primaryAmount as? SwapAmountFieldUM.Content ?: return this
|
||||
copy(primaryAmount = amountFieldUM.onPrimaryAmount(primaryCryptoCurrencyStatus))
|
||||
amountFieldUM.onPrimaryAmount(primaryCryptoCurrencyStatus)
|
||||
} else {
|
||||
if (secondaryCryptoCurrencyStatus == null) return this
|
||||
val amountFieldUM = secondaryAmount as? SwapAmountFieldUM.Content ?: return this
|
||||
copy(secondaryAmount = amountFieldUM.onSecondaryAmount(secondaryCryptoCurrencyStatus))
|
||||
amountFieldUM.onSecondaryAmount(secondaryCryptoCurrencyStatus)
|
||||
}
|
||||
|
||||
return copy(
|
||||
isPrimaryButtonEnabled = updatedAmountField.amountField.isPrimaryButtonEnabled,
|
||||
primaryAmount = updatedAmountField,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -17,33 +17,39 @@ internal class SwapAmountValueChangeTransformer(
|
|||
override fun transform(prevState: SwapAmountUM): SwapAmountUM {
|
||||
if (prevState !is SwapAmountUM.Content) return prevState
|
||||
|
||||
return prevState
|
||||
.copy(selectedQuote = SwapQuoteUM.Loading)
|
||||
.updateAmount(
|
||||
onPrimaryAmount = { primaryStatus ->
|
||||
val updatedState = prevState.updateAmount(
|
||||
onPrimaryAmount = { primaryStatus ->
|
||||
copy(
|
||||
amountField = AmountFieldChangeTransformer(
|
||||
cryptoCurrencyStatus = primaryStatus,
|
||||
maxEnterAmount = primaryMaximumAmountBoundary,
|
||||
minimumTransactionAmount = primaryMinimumAmountBoundary,
|
||||
value = value,
|
||||
).transform(prevState.primaryAmount.amountField),
|
||||
)
|
||||
},
|
||||
onSecondaryAmount = { secondaryStatus ->
|
||||
if (secondaryMaximumAmountBoundary != null) {
|
||||
copy(
|
||||
amountField = AmountFieldChangeTransformer(
|
||||
cryptoCurrencyStatus = primaryStatus,
|
||||
maxEnterAmount = primaryMaximumAmountBoundary,
|
||||
minimumTransactionAmount = primaryMinimumAmountBoundary,
|
||||
cryptoCurrencyStatus = secondaryStatus,
|
||||
maxEnterAmount = secondaryMaximumAmountBoundary,
|
||||
minimumTransactionAmount = secondaryMinimumAmountBoundary,
|
||||
value = value,
|
||||
).transform(prevState.primaryAmount.amountField),
|
||||
).transform(prevState.secondaryAmount.amountField),
|
||||
)
|
||||
},
|
||||
onSecondaryAmount = { secondaryStatus ->
|
||||
if (secondaryMaximumAmountBoundary != null) {
|
||||
copy(
|
||||
amountField = AmountFieldChangeTransformer(
|
||||
cryptoCurrencyStatus = secondaryStatus,
|
||||
maxEnterAmount = secondaryMaximumAmountBoundary,
|
||||
minimumTransactionAmount = secondaryMinimumAmountBoundary,
|
||||
value = value,
|
||||
).transform(prevState.secondaryAmount.amountField),
|
||||
)
|
||||
} else {
|
||||
this
|
||||
}
|
||||
},
|
||||
)
|
||||
} else {
|
||||
this
|
||||
}
|
||||
},
|
||||
)
|
||||
|
||||
return (updatedState as? SwapAmountUM.Content)?.copy(
|
||||
selectedQuote = if (updatedState.isPrimaryButtonEnabled) {
|
||||
SwapQuoteUM.Empty
|
||||
} else {
|
||||
SwapQuoteUM.Loading
|
||||
},
|
||||
) ?: updatedState
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
package com.tangem.features.swap.v2.impl.amount.model.transformers
|
||||
|
||||
import com.tangem.features.swap.v2.impl.amount.entity.SwapAmountUM
|
||||
import com.tangem.features.swap.v2.impl.common.entity.SwapQuoteUM
|
||||
import com.tangem.utils.transformer.Transformer
|
||||
|
||||
internal object SwapQuoteEmptyStateTransformer : Transformer<SwapAmountUM> {
|
||||
|
||||
override fun transform(prevState: SwapAmountUM): SwapAmountUM {
|
||||
if (prevState !is SwapAmountUM.Content) return prevState
|
||||
|
||||
return prevState.copy(
|
||||
selectedQuote = SwapQuoteUM.Empty,
|
||||
isPrimaryButtonEnabled = false,
|
||||
)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue