From a1970699ccfdc2cc6a1d9f8b9f8abebc087d9adb Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 22 Apr 2025 12:37:48 +0500 Subject: [PATCH] Updated on 2026-08-14 --- .../models/response/OnrampStatusResponse.kt | 6 ++++ .../domain/onramp/model/OnrampStatus.kt | 8 +++++ .../onramp/main/ui/OnrampAmountContent.kt | 9 ++---- .../SetOnrampSuccessContentConverter.kt | 10 ++++++ ...nDetailsOnrampTransactionStateConverter.kt | 32 +++++++++++++------ .../factory/express/OnrampStatusFactory.kt | 2 ++ .../wallet/domain/OnrampStatusFactory.kt | 2 ++ .../SingleWalletOnrampTransactionConverter.kt | 27 ++++++++++------ 8 files changed, 70 insertions(+), 26 deletions(-) diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampStatusResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampStatusResponse.kt index c701137912..6f5ec14d6a 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampStatusResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/onramp/models/response/OnrampStatusResponse.kt @@ -91,4 +91,10 @@ enum class Status { @Json(name = "paused") Paused, + + @Json(name = "refund-in-progress") + RefundInProgress, + + @Json(name = "refunded") + Refunded, } \ No newline at end of file diff --git a/domain/onramp/models/src/main/kotlin/com/tangem/domain/onramp/model/OnrampStatus.kt b/domain/onramp/models/src/main/kotlin/com/tangem/domain/onramp/model/OnrampStatus.kt index e116c0c085..1b7952e042 100644 --- a/domain/onramp/models/src/main/kotlin/com/tangem/domain/onramp/model/OnrampStatus.kt +++ b/domain/onramp/models/src/main/kotlin/com/tangem/domain/onramp/model/OnrampStatus.kt @@ -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 } } diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/ui/OnrampAmountContent.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/ui/OnrampAmountContent.kt index eec3a23193..608587c822 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/ui/OnrampAmountContent.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/main/ui/OnrampAmountContent.kt @@ -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, diff --git a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/success/entity/conterter/SetOnrampSuccessContentConverter.kt b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/success/entity/conterter/SetOnrampSuccessContentConverter.kt index 834e4fb850..424213fc4b 100644 --- a/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/success/entity/conterter/SetOnrampSuccessContentConverter.kt +++ b/features/onramp/impl/src/main/kotlin/com/tangem/features/onramp/success/entity/conterter/SetOnrampSuccessContentConverter.kt @@ -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)) } diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/TokenDetailsOnrampTransactionStateConverter.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/TokenDetailsOnrampTransactionStateConverter.kt index c585e6e3cd..93ae9d4370 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/TokenDetailsOnrampTransactionStateConverter.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/TokenDetailsOnrampTransactionStateConverter.kt @@ -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 { diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/express/OnrampStatusFactory.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/express/OnrampStatusFactory.kt index b790b61b5d..cea16cfd27 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/express/OnrampStatusFactory.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/express/OnrampStatusFactory.kt @@ -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 } } diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/OnrampStatusFactory.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/OnrampStatusFactory.kt index e60f42ad67..9874d658bc 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/OnrampStatusFactory.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/OnrampStatusFactory.kt @@ -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 } } diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/converter/SingleWalletOnrampTransactionConverter.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/converter/SingleWalletOnrampTransactionConverter.kt index c506948924..ce57d2ac3a 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/converter/SingleWalletOnrampTransactionConverter.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/converter/SingleWalletOnrampTransactionConverter.kt @@ -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,