Updated on 2026-08-14

This commit is contained in:
Tangem 2025-07-25 15:23:03 +05:00
parent 59b02e2e7a
commit 485430f6f4
20 changed files with 259 additions and 45 deletions

View file

@ -40,6 +40,7 @@ internal class SendEntryPointModel @Inject constructor(
AppRoute.ChooseManagedTokens(
userWalletId = params.userWalletId,
initialCurrency = params.cryptoCurrency,
selectedCurrency = null,
source = AppRoute.ChooseManagedTokens.Source.SendViaSwap,
),
)

View file

@ -230,6 +230,23 @@ internal class SendModel @Inject constructor(
params.callback?.onConvertToAnotherToken(lastAmount = lastAmount)
}
override fun resetSendNavigation() {
uiState.update {
it.copy(
destinationUM = SendDestinationInitialStateTransformer(
cryptoCurrency = cryptoCurrency,
isRedesignEnabled = sendFeatureToggles.isSendRedesignEnabled,
).transform(DestinationUM.Empty()),
feeUM = FeeUM.Empty(),
feeSelectorUM = FeeSelectorUM.Loading,
confirmUM = ConfirmUM.Empty,
confirmData = null,
navigationUM = NavigationUM.Empty,
)
}
router.popTo(Amount(isEditMode = false))
}
override fun onError(error: GetUserWalletError) {
Timber.w(error.toString())
showAlertError()

View file

@ -41,6 +41,7 @@ internal class SendAmountComponent(
interface ModelCallback : NavigationModelCallback {
fun onAmountResult(amountUM: AmountState, isResetPredefined: Boolean)
fun onConvertToAnotherToken(lastAmount: String)
fun resetSendNavigation()
fun onError(error: GetUserWalletError)
}
}

View file

@ -0,0 +1,37 @@
package com.tangem.features.send.v2.subcomponents.amount.model
import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.ui.UiMessageSender
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.message.DialogMessage
import com.tangem.core.ui.message.EventMessageAction
import javax.inject.Inject
@ModelScoped
internal class SendAmountAlertFactory @Inject constructor(
private val uiMessageSender: UiMessageSender,
) {
fun showResetSendingAlert(onConfirm: () -> Unit) {
// todo fix localization [REDACTED_TASK_KEY]
uiMessageSender.send(
DialogMessage(
title = stringReference("Confirm Convert"),
message = stringReference("Proceed with conversion? Previous data will be reset."),
firstActionBuilder = {
EventMessageAction(
title = stringReference("Confirm"),
onClick = onConfirm,
)
},
secondActionBuilder = {
EventMessageAction(
title = stringReference("Not Now"),
onClick = onDismissRequest,
)
},
dismissOnFirstAction = true,
),
)
}
}

View file

@ -22,11 +22,11 @@ import com.tangem.core.ui.extensions.resourceReference
import com.tangem.domain.appcurrency.GetSelectedAppCurrencyUseCase
import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.domain.exchange.RampStateManager
import com.tangem.domain.models.wallet.UserWallet
import com.tangem.domain.models.wallet.isMultiCurrency
import com.tangem.domain.tokens.GetMinimumTransactionAmountSyncUseCase
import com.tangem.domain.tokens.model.CryptoCurrencyStatus
import com.tangem.domain.tokens.model.ScenarioUnavailabilityReason
import com.tangem.domain.models.wallet.UserWallet
import com.tangem.domain.models.wallet.isMultiCurrency
import com.tangem.domain.wallets.usecase.GetUserWalletUseCase
import com.tangem.features.send.v2.api.SendFeatureToggles
import com.tangem.features.send.v2.api.entity.PredefinedValues
@ -65,6 +65,7 @@ internal class SendAmountModel @Inject constructor(
private val feeSelectorReloadTrigger: FeeSelectorReloadTrigger,
private val getUserWalletUseCase: GetUserWalletUseCase,
private val rampStateManager: RampStateManager,
private val sendAmountAlertFactory: SendAmountAlertFactory,
) : Model(), SendAmountClickIntents {
private val params: SendAmountComponentParams = paramsContainer.require()
@ -242,9 +243,21 @@ internal class SendAmountModel @Inject constructor(
}
override fun onConvertToAnotherToken() {
val amountParams = params as? SendAmountComponentParams.AmountParams ?: return
if (amountParams.currentRoute.value.isEditMode) {
sendAmountAlertFactory.showResetSendingAlert {
params.callback.resetSendNavigation()
confirmConvertToToken()
}
} else {
confirmConvertToToken()
}
}
private fun confirmConvertToToken() {
val amountParams = params as? SendAmountComponentParams.AmountParams ?: return
val amountFieldData = uiState.value as? AmountState.Data
val amountParams = params as? SendAmountComponentParams.AmountParams
amountParams?.callback?.onConvertToAnotherToken(amountFieldData?.amountTextField?.value.orEmpty())
amountParams.callback.onConvertToAnotherToken(amountFieldData?.amountTextField?.value.orEmpty())
}
private fun subscribeOnAmountReduceToTriggerUpdates() {