Updated on 2026-08-14

This commit is contained in:
Tangem 2025-04-22 12:37:48 +05:00
parent 9b7bbe2564
commit a1970699cc
8 changed files with 70 additions and 26 deletions

View file

@ -91,4 +91,10 @@ enum class Status {
@Json(name = "paused")
Paused,
@Json(name = "refund-in-progress")
RefundInProgress,
@Json(name = "refunded")
Refunded,
}

View file

@ -31,6 +31,8 @@ data class OnrampStatus(
Paid(order = 8),
Sending(order = 9),
Finished(order = 10),
RefundInProgress(order = 11),
Refunded(order = 12),
;
val isTerminal: Boolean
@ -39,6 +41,7 @@ data class OnrampStatus(
Failed,
Paused,
Finished,
Refunded,
-> true
Created,
WaitingForPayment,
@ -46,6 +49,7 @@ data class OnrampStatus(
Verifying,
Paid,
Sending,
RefundInProgress,
-> false
}
@ -62,6 +66,8 @@ data class OnrampStatus(
Verifying,
Paid,
Sending,
RefundInProgress,
Refunded,
-> false
}
@ -78,6 +84,8 @@ data class OnrampStatus(
Paid,
Sending,
Finished,
RefundInProgress,
Refunded,
-> false
}
}

View file

@ -42,16 +42,13 @@ internal fun OnrampAmountContent(state: OnrampAmountBlockUM, modifier: Modifier
horizontalAlignment = Alignment.CenterHorizontally,
) {
OnrampCurrencyIcon(currencyUM = state.currencyUM)
OnrampAmountField(
amountField = state.amountFieldModel,
isLoading = state.secondaryFieldModel is OnrampAmountSecondaryFieldUM.Loading,
)
OnrampAmountField(amountField = state.amountFieldModel)
OnrampAmountSecondary(state = state.secondaryFieldModel)
}
}
@Composable
private fun OnrampAmountField(amountField: AmountFieldModel, isLoading: Boolean) {
private fun OnrampAmountField(amountField: AmountFieldModel) {
val decimalFormat = rememberDecimalFormat()
val requester = remember { FocusRequester() }
AmountTextField(
@ -70,7 +67,7 @@ private fun OnrampAmountField(amountField: AmountFieldModel, isLoading: Boolean)
color = TangemTheme.colors.text.primary1,
textAlign = TextAlign.Center,
),
isEnabled = !amountField.isError && !isLoading,
isEnabled = !amountField.isError,
isAutoResize = true,
isValuePasted = amountField.isValuePasted,
onValuePastedTriggerDismiss = amountField.onValuePastedTriggerDismiss,

View file

@ -148,6 +148,10 @@ internal class SetOnrampSuccessContentConverter(
this == OnrampStatus.Status.Paid -> {
resourceReference(R.string.express_status_buying_active, wrappedList(cryptoCurrency.name))
}
this == OnrampStatus.Status.RefundInProgress ||
this == OnrampStatus.Status.Refunded -> {
resourceReference(R.string.express_exchange_status_failed)
}
else -> {
resourceReference(R.string.express_status_bought, wrappedList(cryptoCurrency.name))
}
@ -166,6 +170,12 @@ internal class SetOnrampSuccessContentConverter(
wrappedList(cryptoCurrency.name),
)
}
this == OnrampStatus.Status.RefundInProgress -> {
resourceReference(R.string.express_exchange_status_refunding)
}
this == OnrampStatus.Status.Refunded -> {
resourceReference(R.string.express_exchange_status_refunded)
}
else -> {
resourceReference(R.string.express_exchange_status_sent, wrappedList(cryptoCurrency.name))
}

View file

@ -1,9 +1,6 @@
package com.tangem.feature.tokendetails.presentation.tokendetails.state.factory
import com.tangem.common.ui.expressStatus.state.ExpressLinkUM
import com.tangem.common.ui.expressStatus.state.ExpressStatusItemState
import com.tangem.common.ui.expressStatus.state.ExpressStatusItemUM
import com.tangem.common.ui.expressStatus.state.ExpressStatusUM
import com.tangem.common.ui.expressStatus.state.*
import com.tangem.common.ui.notifications.ExpressNotificationsUM
import com.tangem.common.ui.notifications.NotificationUM
import com.tangem.core.analytics.api.AnalyticsEventHandler
@ -23,9 +20,6 @@ import com.tangem.domain.onramp.model.cache.OnrampTransaction
import com.tangem.domain.tokens.model.CryptoCurrency
import com.tangem.domain.tokens.model.CryptoCurrencyStatus
import com.tangem.domain.tokens.model.analytics.TokenOnrampAnalyticsEvent
import com.tangem.common.ui.expressStatus.state.ExpressTransactionStateIconUM
import com.tangem.common.ui.expressStatus.state.ExpressTransactionStateInfoUM
import com.tangem.common.ui.expressStatus.state.ExpressTransactionStateUM
import com.tangem.feature.tokendetails.presentation.tokendetails.model.TokenDetailsClickIntents
import com.tangem.features.tokendetails.impl.R
import com.tangem.utils.Provider
@ -129,8 +123,12 @@ internal class TokenDetailsOnrampTransactionStateConverter(
private fun getIconState(status: OnrampStatus.Status): ExpressTransactionStateIconUM {
return when (status) {
OnrampStatus.Status.Verifying -> ExpressTransactionStateIconUM.Warning
OnrampStatus.Status.Failed -> ExpressTransactionStateIconUM.Error
OnrampStatus.Status.RefundInProgress,
OnrampStatus.Status.Verifying,
-> ExpressTransactionStateIconUM.Warning
OnrampStatus.Status.Refunded,
OnrampStatus.Status.Failed,
-> ExpressTransactionStateIconUM.Error
else -> ExpressTransactionStateIconUM.None
}
}
@ -213,6 +211,10 @@ internal class TokenDetailsOnrampTransactionStateConverter(
wrappedList(cryptoCurrency.name),
)
}
this == OnrampStatus.Status.RefundInProgress ||
this == OnrampStatus.Status.Refunded -> {
resourceReference(R.string.express_exchange_status_failed)
}
else -> {
resourceReference(R.string.express_status_bought, wrappedList(cryptoCurrency.name))
}
@ -234,6 +236,12 @@ internal class TokenDetailsOnrampTransactionStateConverter(
wrappedList(cryptoCurrency.name),
)
}
this == OnrampStatus.Status.RefundInProgress -> {
resourceReference(R.string.express_exchange_status_refunding)
}
this == OnrampStatus.Status.Refunded -> {
resourceReference(R.string.express_exchange_status_refunded)
}
else -> {
resourceReference(
R.string.express_exchange_status_sent,
@ -241,7 +249,11 @@ internal class TokenDetailsOnrampTransactionStateConverter(
)
}
},
state = getStatusState(OnrampStatus.Status.Sending),
state = when {
this == OnrampStatus.Status.RefundInProgress -> ExpressStatusItemState.Active
this == OnrampStatus.Status.Refunded -> ExpressStatusItemState.Error
else -> getStatusState(OnrampStatus.Status.Sending)
},
)
private fun getStatusLink(status: OnrampStatus.Status, externalTxUrl: String?): ExpressLinkUM {

View file

@ -134,10 +134,12 @@ internal class OnrampStatusFactory @AssistedInject constructor(
PaymentProcessing,
Paid,
Sending,
RefundInProgress,
-> ExpressAnalyticsStatus.InProgress
Verifying -> ExpressAnalyticsStatus.KYC
Failed -> ExpressAnalyticsStatus.Fail
Finished -> ExpressAnalyticsStatus.Done
Refunded -> ExpressAnalyticsStatus.Refunded
null -> null
}
}

View file

@ -94,10 +94,12 @@ internal class OnrampStatusFactory @Inject constructor(
PaymentProcessing,
Paid,
Sending,
RefundInProgress,
-> ExpressAnalyticsStatus.InProgress
Verifying -> ExpressAnalyticsStatus.KYC
Failed -> ExpressAnalyticsStatus.Fail
Finished -> ExpressAnalyticsStatus.Done
Refunded -> ExpressAnalyticsStatus.Refunded
null -> null
}
}

View file

@ -1,9 +1,6 @@
package com.tangem.feature.wallet.presentation.wallet.state.transformers.converter
import com.tangem.common.ui.expressStatus.state.ExpressLinkUM
import com.tangem.common.ui.expressStatus.state.ExpressStatusItemState
import com.tangem.common.ui.expressStatus.state.ExpressStatusItemUM
import com.tangem.common.ui.expressStatus.state.ExpressStatusUM
import com.tangem.common.ui.expressStatus.state.*
import com.tangem.common.ui.notifications.ExpressNotificationsUM
import com.tangem.common.ui.notifications.NotificationUM
import com.tangem.core.analytics.api.AnalyticsEventHandler
@ -22,11 +19,8 @@ import com.tangem.domain.onramp.model.OnrampStatus
import com.tangem.domain.onramp.model.cache.OnrampTransaction
import com.tangem.domain.tokens.model.CryptoCurrencyStatus
import com.tangem.domain.tokens.model.analytics.TokenOnrampAnalyticsEvent
import com.tangem.feature.wallet.impl.R
import com.tangem.common.ui.expressStatus.state.ExpressTransactionStateIconUM
import com.tangem.common.ui.expressStatus.state.ExpressTransactionStateInfoUM
import com.tangem.common.ui.expressStatus.state.ExpressTransactionStateUM
import com.tangem.feature.wallet.child.wallet.model.intents.WalletClickIntents
import com.tangem.feature.wallet.impl.R
import com.tangem.utils.converter.Converter
import kotlinx.collections.immutable.persistentListOf
@ -142,8 +136,11 @@ internal class SingleWalletOnrampTransactionConverter(
private fun getIconState(status: OnrampStatus.Status): ExpressTransactionStateIconUM {
return when (status) {
OnrampStatus.Status.Verifying -> ExpressTransactionStateIconUM.Warning
OnrampStatus.Status.Failed -> ExpressTransactionStateIconUM.Error
OnrampStatus.Status.Verifying,
-> ExpressTransactionStateIconUM.Warning
OnrampStatus.Status.Refunded,
OnrampStatus.Status.Failed,
-> ExpressTransactionStateIconUM.Error
else -> ExpressTransactionStateIconUM.None
}
}
@ -226,6 +223,10 @@ internal class SingleWalletOnrampTransactionConverter(
wrappedList(currency.name),
)
}
this == OnrampStatus.Status.RefundInProgress ||
this == OnrampStatus.Status.Refunded -> {
resourceReference(R.string.express_exchange_status_failed)
}
else -> {
resourceReference(R.string.express_status_bought, wrappedList(currency.name))
}
@ -247,6 +248,12 @@ internal class SingleWalletOnrampTransactionConverter(
wrappedList(currency.name),
)
}
this == OnrampStatus.Status.RefundInProgress -> {
resourceReference(R.string.express_exchange_status_refunding)
}
this == OnrampStatus.Status.Refunded -> {
resourceReference(R.string.express_exchange_status_refunded)
}
else -> {
resourceReference(
R.string.express_exchange_status_sent,