Updated on 2026-08-14

This commit is contained in:
Tangem 2024-07-01 19:40:54 +01:00
parent 26d0b1c624
commit f2c6c7be52
6 changed files with 68 additions and 31 deletions

View file

@ -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(

View file

@ -225,6 +225,7 @@
<string name="express_exchange_status_subtitle">Данные провайдера. Сумма к получению может измениться в зависимости от рыночных условий.</string>
<string name="express_exchange_status_title">Статус обмена</string>
<string name="express_exchange_status_verifying">Требуется верификация</string>
<string name="express_exchange_status_waiting_tx_hash">Ожидание хеша транзакции</string>
<string name="express_exchange_token_list_subtitle">Список токенов в вашем кошельке</string>
<string name="express_fetch_best_rates">Получение наилучших курсов...</string>
<string name="express_floating_rate">Плавающая ставка</string>

View file

@ -224,6 +224,7 @@
<string name="express_exchange_status_subtitle">Provider-sourced data. Estimated amount subject to change due to market conditions.</string>
<string name="express_exchange_status_title">Exchange status</string>
<string name="express_exchange_status_verifying">Verification required</string>
<string name="express_exchange_status_waiting_tx_hash">Awaiting transaction hash</string>
<string name="express_exchange_token_list_subtitle">List of all tokens added to your wallet</string>
<string name="express_fetch_best_rates">Fetching best rates...</string>
<string name="express_floating_rate">Floating rate</string>

View file

@ -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,
}

View file

@ -162,6 +162,7 @@ internal class TokenDetailsSwapTransactionsStateConverter(
private fun getStatuses(status: ExchangeStatus?, hasFailed: Boolean = false): ImmutableList<ExchangeStatusState> {
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 {

View file

@ -163,6 +163,7 @@ internal class ExchangeStatusFactory(
return when (status) {
ExchangeStatus.New,
ExchangeStatus.Waiting,
ExchangeStatus.WaitingTxHash,
ExchangeStatus.Sending,
ExchangeStatus.Confirming,
ExchangeStatus.Exchanging,