Updated on 2026-08-14

This commit is contained in:
Tangem 2025-09-02 16:52:50 +05:00
parent b623a457d9
commit 3af4539567
12 changed files with 56 additions and 35 deletions

View file

@ -16,6 +16,6 @@ interface SendWithSwapComponent : ComposableContentComponent {
interface Factory : ComponentFactory<Params, SendWithSwapComponent>
interface ModelCallback {
fun onCloseSwap(lastAmount: String)
fun onCloseSwap(lastAmount: String, isEnterInFiatSelected: Boolean)
}
}

View file

@ -5,7 +5,7 @@ package com.tangem.features.swap.v2.api.subcomponents
* Different from another triggers because it takes raw string instead of BigDecimal
*/
interface SwapAmountUpdateTrigger {
suspend fun triggerUpdateAmount(amountValue: String)
suspend fun triggerUpdateAmount(amountValue: String, isEnterInFiatSelected: Boolean)
suspend fun triggerQuoteReload()
}

View file

@ -14,7 +14,7 @@ import javax.inject.Singleton
* Different from another triggers because it takes raw string instead of BigDecimal
*/
interface SwapAmountUpdateListener {
val updateAmountTriggerFlow: Flow<String>
val updateAmountTriggerFlow: Flow<Pair<String, Boolean>>
val reloadQuotesTriggerFlow: Flow<Unit>
}
@ -44,8 +44,8 @@ internal class DefaultSwapAmountUpdateTrigger @Inject constructor() :
SwapAmountReduceTrigger,
SwapAmountReduceListener {
override val updateAmountTriggerFlow: SharedFlow<String>
field = MutableSharedFlow<String>()
override val updateAmountTriggerFlow: SharedFlow<Pair<String, Boolean>>
field = MutableSharedFlow<Pair<String, Boolean>>()
override val reduceToTriggerFlow: SharedFlow<BigDecimal>
field = MutableSharedFlow<BigDecimal>()
@ -59,8 +59,8 @@ internal class DefaultSwapAmountUpdateTrigger @Inject constructor() :
override val reloadQuotesTriggerFlow: Flow<Unit>
field = MutableSharedFlow<Unit>()
override suspend fun triggerUpdateAmount(amountValue: String) {
updateAmountTriggerFlow.emit(amountValue)
override suspend fun triggerUpdateAmount(amountValue: String, isEnterInFiatSelected: Boolean) {
updateAmountTriggerFlow.emit(amountValue to isEnterInFiatSelected)
}
override suspend fun triggerQuoteReload() {

View file

@ -46,7 +46,7 @@ internal class SwapAmountComponent @AssistedInject constructor(
interface ModelCallback : NavigationModelCallback {
fun onAmountResult(amountUM: SwapAmountUM)
fun onSeparatorClick(lastAmount: String)
fun onSeparatorClick(lastAmount: String, isEnterInFiatSelected: Boolean)
fun resetSendWithSwapNavigation(resetNavigation: Boolean)
}
}

View file

@ -348,7 +348,10 @@ internal class SwapAmountModel @Inject constructor(
private fun confirmSendWithSwapClose() {
val amountParams = params as? SwapAmountComponentParams.AmountParams ?: return
val amountFieldData = uiState.value.primaryAmount.amountField as? AmountState.Data
val amountField = uiState.value.swapDirection.withSwapDirection(
onDirect = { uiState.value.primaryAmount },
onReverse = { uiState.value.secondaryAmount },
).amountField as? AmountState.Data
val primaryCryptoCurrencyStatus = (uiState.value as? SwapAmountUM.Content)?.primaryCryptoCurrencyStatus
if (primaryCryptoCurrencyStatus != null) {
@ -367,7 +370,16 @@ internal class SwapAmountModel @Inject constructor(
)
}
amountParams.callback.onSeparatorClick(lastAmount = amountFieldData?.amountTextField?.value.orEmpty())
val isEnterInFiatSelected = amountField?.amountTextField?.isFiatValue == true
val lastAmount = if (isEnterInFiatSelected) {
amountField.amountTextField.fiatValue
} else {
amountField?.amountTextField?.value
}
amountParams.callback.onSeparatorClick(
lastAmount = lastAmount.orEmpty(),
isEnterInFiatSelected = isEnterInFiatSelected,
)
}
private fun subscribeOnCryptoCurrencyStatusFlow() {
@ -407,9 +419,10 @@ internal class SwapAmountModel @Inject constructor(
private fun subscribeOnAmountUpdateTriggerUpdates() {
swapAmountUpdateListener.updateAmountTriggerFlow
.onEach {
.onEach { (amount, isEnterInFiat) ->
if (uiState.value is SwapAmountUM.Content) {
onAmountValueChange(it)
onCurrencyChangeClick(isEnterInFiat)
onAmountValueChange(amount)
saveResult()
}
}

View file

@ -110,8 +110,8 @@ internal class SendWithSwapModel @Inject constructor(
uiState.update { it.copy(navigationUM = navigationUM) }
}
override fun onSeparatorClick(lastAmount: String) {
params.callback?.onCloseSwap(lastAmount)
override fun onSeparatorClick(lastAmount: String, isEnterInFiatSelected: Boolean) {
params.callback?.onCloseSwap(lastAmount, isEnterInFiatSelected)
router.popTo(initialRoute)
}