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,