From f2c6c7be527e4184bcefe97cf29f84479d044b92 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 1 Jul 2024 19:40:54 +0100 Subject: [PATCH] Updated on 2026-08-14 --- .../models/response/ExchangeStatusResponse.kt | 29 ++++++--- core/res/src/main/res/values-ru/strings.xml | 1 + core/res/src/main/res/values/strings.xml | 1 + .../domain/models/domain/ExchangeStatus.kt | 2 + ...enDetailsSwapTransactionsStateConverter.kt | 65 +++++++++++++------ .../viewmodels/ExchangeStatusFactory.kt | 1 + 6 files changed, 68 insertions(+), 31 deletions(-) diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeStatusResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeStatusResponse.kt index a269f45c23..dc786b02de 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeStatusResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExchangeStatusResponse.kt @@ -23,34 +23,43 @@ data class ExchangeStatusResponse( enum class ExchangeStatus { @Json(name = "new") - NEW, + New, @Json(name = "waiting") - WAITING, + Waiting, @Json(name = "confirming") - CONFIRMING, + Confirming, @Json(name = "exchanging") - EXCHANGING, + Exchanging, @Json(name = "sending") - SENDING, + Sending, @Json(name = "finished") - FINISHED, + Finished, @Json(name = "failed") - FAILED, + Failed, @Json(name = "refunded") - REFUNDED, + Refunded, @Json(name = "verifying") - VERIFYING, + Verifying, @Json(name = "expired") - CANCELLED, + Cancelled, + + @Json(name = "waiting-tx-hash") + WaitingTxHash, + + @Json(name = "tx-failed") + TxFailed, + + @Json(name = "unknown") + Unknown, } data class ExchangeStatusError( diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 0c2f9e38e2..4772a93753 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -225,6 +225,7 @@ Данные провайдера. Сумма к получению может измениться в зависимости от рыночных условий. Статус обмена Требуется верификация + Ожидание хеша транзакции Список токенов в вашем кошельке Получение наилучших курсов... Плавающая ставка diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index 0e761dde1b..6a39461d9a 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -224,6 +224,7 @@ Provider-sourced data. Estimated amount subject to change due to market conditions. Exchange status Verification required + Awaiting transaction hash List of all tokens added to your wallet Fetching best rates... Floating rate diff --git a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/ExchangeStatus.kt b/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/ExchangeStatus.kt index a422c02284..c52f37ce6c 100644 --- a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/ExchangeStatus.kt +++ b/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/domain/ExchangeStatus.kt @@ -11,6 +11,7 @@ data class ExchangeStatusModel( enum class ExchangeStatus { New, Waiting, + WaitingTxHash, Confirming, Verifying, Exchanging, @@ -19,4 +20,5 @@ enum class ExchangeStatus { Finished, Refunded, Cancelled, + Unknown, } \ No newline at end of file diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/TokenDetailsSwapTransactionsStateConverter.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/TokenDetailsSwapTransactionsStateConverter.kt index 55e6cba9b0..6c1a71f7af 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/TokenDetailsSwapTransactionsStateConverter.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/state/factory/TokenDetailsSwapTransactionsStateConverter.kt @@ -162,6 +162,7 @@ internal class TokenDetailsSwapTransactionsStateConverter( private fun getStatuses(status: ExchangeStatus?, hasFailed: Boolean = false): ImmutableList { if (status == null) return persistentListOf() val isWaiting = status == ExchangeStatus.New || status == ExchangeStatus.Waiting + val isWaitingTxHash = status == ExchangeStatus.WaitingTxHash val isConfirming = status == ExchangeStatus.Confirming val isVerifying = status == ExchangeStatus.Verifying val isExchanging = status == ExchangeStatus.Exchanging @@ -174,27 +175,35 @@ internal class TokenDetailsSwapTransactionsStateConverter( val isExchangingDone = !isExchanging && isConfirmingDone val isSendingDone = !isSending && !isVerifying && !isFailed && isExchangingDone - return if (status == ExchangeStatus.Cancelled) { - listOf(cancelledStep()) - } else { - listOf( - waitStep(isWaiting, isWaitingDone), - confirmStep(isConfirming, isConfirmingDone), - exchangeStep( - isExchanging = isExchanging, - isExchangingDone = isExchangingDone, - isRefunded = isRefunded, - hasFailed = hasFailed, - isVerifying = isVerifying, - isFailed = isFailed, - ), - sendStep( - isSending = isSending, - isSendingDone = isSendingDone, - isRefunded = isRefunded, - hasFailed = hasFailed, - ), - ) + return buildList { + when { + status == ExchangeStatus.Cancelled -> add(cancelledStep()) + isWaitingTxHash -> add(waitTxStep()) + // ExchangeStatus.Unknown is temporary added for 1inch + status == ExchangeStatus.Unknown -> add(unknownStateStep()) + else -> { + add(waitStep(isWaiting, isWaitingDone)) + add(confirmStep(isConfirming, isConfirmingDone)) + add( + exchangeStep( + isExchanging = isExchanging, + isExchangingDone = isExchangingDone, + isRefunded = isRefunded, + hasFailed = hasFailed, + isVerifying = isVerifying, + isFailed = isFailed, + ), + ) + add( + sendStep( + isSending = isSending, + isSendingDone = isSendingDone, + isRefunded = isRefunded, + hasFailed = hasFailed, + ), + ) + } + } }.toPersistentList() } @@ -216,6 +225,20 @@ internal class TokenDetailsSwapTransactionsStateConverter( isDone = isNewDone, ) + private fun waitTxStep() = ExchangeStatusState( + status = ExchangeStatus.Verifying, + text = TextReference.Res(R.string.express_exchange_status_waiting_tx_hash), + isActive = false, + isDone = false, + ) + + private fun unknownStateStep() = ExchangeStatusState( + status = ExchangeStatus.Failed, + text = TextReference.Res(R.string.express_exchange_status_failed), + isActive = false, + isDone = true, + ) + private fun confirmStep(isConfirming: Boolean, isConfirmingDone: Boolean) = ExchangeStatusState( status = ExchangeStatus.Confirming, text = when { diff --git a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/viewmodels/ExchangeStatusFactory.kt b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/viewmodels/ExchangeStatusFactory.kt index 4bc8e7fb37..e77952c869 100644 --- a/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/viewmodels/ExchangeStatusFactory.kt +++ b/features/tokendetails/impl/src/main/kotlin/com/tangem/feature/tokendetails/presentation/tokendetails/viewmodels/ExchangeStatusFactory.kt @@ -163,6 +163,7 @@ internal class ExchangeStatusFactory( return when (status) { ExchangeStatus.New, ExchangeStatus.Waiting, + ExchangeStatus.WaitingTxHash, ExchangeStatus.Sending, ExchangeStatus.Confirming, ExchangeStatus.Exchanging,