From 9b5ad39c51686e1c16cfba42b0d45b035d17808b Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 13 Oct 2025 14:59:13 +0500 Subject: [PATCH] Updated on 2026-08-14 --- .../utils/TangemPayTxHistoryItemConverter.kt | 2 +- .../TangemPayTxHistoryItemStatusConverter.kt | 16 +++++++++++++ .../visa/model/TangemPayTxHistoryItem.kt | 10 +++++++- .../PreviewTangemPayTxHistoryComponent.kt | 24 +++++++++++++++++++ .../TangemPayTxHistoryItemsConverter.kt | 19 +++++++++++---- 5 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 data/visa/src/main/kotlin/com/tangem/data/visa/utils/TangemPayTxHistoryItemStatusConverter.kt diff --git a/data/visa/src/main/kotlin/com/tangem/data/visa/utils/TangemPayTxHistoryItemConverter.kt b/data/visa/src/main/kotlin/com/tangem/data/visa/utils/TangemPayTxHistoryItemConverter.kt index defb6559b9..e8bead6d27 100644 --- a/data/visa/src/main/kotlin/com/tangem/data/visa/utils/TangemPayTxHistoryItemConverter.kt +++ b/data/visa/src/main/kotlin/com/tangem/data/visa/utils/TangemPayTxHistoryItemConverter.kt @@ -30,7 +30,7 @@ internal object TangemPayTxHistoryItemConverter : merchantName = spend.merchantName, enrichedMerchantCategory = spend.enrichedMerchantCategory, merchantCategory = spend.merchantCategory, - status = spend.status, + status = TangemPayTxHistoryItemStatusConverter.convert(spend.status), enrichedMerchantIconUrl = spend.enrichedMerchantIcon, ) } diff --git a/data/visa/src/main/kotlin/com/tangem/data/visa/utils/TangemPayTxHistoryItemStatusConverter.kt b/data/visa/src/main/kotlin/com/tangem/data/visa/utils/TangemPayTxHistoryItemStatusConverter.kt new file mode 100644 index 0000000000..775b3843a9 --- /dev/null +++ b/data/visa/src/main/kotlin/com/tangem/data/visa/utils/TangemPayTxHistoryItemStatusConverter.kt @@ -0,0 +1,16 @@ +package com.tangem.data.visa.utils + +import com.tangem.domain.visa.model.TangemPayTxHistoryItem +import com.tangem.utils.converter.Converter + +internal object TangemPayTxHistoryItemStatusConverter : Converter { + override fun convert(value: String): TangemPayTxHistoryItem.Status { + return when (value.uppercase()) { + "PENDING" -> TangemPayTxHistoryItem.Status.PENDING + "RESERVED" -> TangemPayTxHistoryItem.Status.RESERVED + "COMPLETED" -> TangemPayTxHistoryItem.Status.COMPLETED + "DECLINED" -> TangemPayTxHistoryItem.Status.DECLINED + else -> TangemPayTxHistoryItem.Status.UNKNOWN + } + } +} \ No newline at end of file diff --git a/domain/visa/models/src/main/kotlin/com/tangem/domain/visa/model/TangemPayTxHistoryItem.kt b/domain/visa/models/src/main/kotlin/com/tangem/domain/visa/model/TangemPayTxHistoryItem.kt index 65d960d01c..6793255df3 100644 --- a/domain/visa/models/src/main/kotlin/com/tangem/domain/visa/model/TangemPayTxHistoryItem.kt +++ b/domain/visa/models/src/main/kotlin/com/tangem/domain/visa/model/TangemPayTxHistoryItem.kt @@ -19,7 +19,7 @@ sealed class TangemPayTxHistoryItem { val merchantName: String, val enrichedMerchantCategory: String?, val merchantCategory: String, - val status: String, + val status: Status, val enrichedMerchantIconUrl: String?, ) : TangemPayTxHistoryItem() @@ -36,4 +36,12 @@ sealed class TangemPayTxHistoryItem { override val amount: BigDecimal, override val currency: Currency, ) : TangemPayTxHistoryItem() + + enum class Status { + PENDING, + RESERVED, + COMPLETED, + DECLINED, + UNKNOWN, + } } \ No newline at end of file diff --git a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/components/txHistory/PreviewTangemPayTxHistoryComponent.kt b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/components/txHistory/PreviewTangemPayTxHistoryComponent.kt index eae34d3741..49dccbf15e 100644 --- a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/components/txHistory/PreviewTangemPayTxHistoryComponent.kt +++ b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/components/txHistory/PreviewTangemPayTxHistoryComponent.kt @@ -40,6 +40,30 @@ internal class PreviewTangemPayTxHistoryComponent(txHistoryUM: TangemPayTxHistor iconUrl = null, ), ), + TangemPayTxHistoryUM.TangemPayTxHistoryItemUM.Transaction( + transaction = TangemPayTransactionState.Content.Payment( + id = "signiferumque", + amount = "-126.20 USD", + amountColor = { TangemTheme.colors.text.primary1 }, + time = "12:04", + onClick = {}, + title = stringReference("Wallmart"), + subtitle = stringReference("Supermarket"), + isIncome = false, + ), + ), + TangemPayTxHistoryUM.TangemPayTxHistoryItemUM.Transaction( + transaction = TangemPayTransactionState.Content.Payment( + id = "signiferumque", + amount = "+126.20 USD", + amountColor = { TangemTheme.colors.text.accent }, + time = "12:04", + onClick = {}, + title = stringReference("Wallmart"), + subtitle = stringReference("Supermarket"), + isIncome = true, + ), + ), TangemPayTxHistoryUM.TangemPayTxHistoryItemUM.Transaction( transaction = TangemPayTransactionState.Content.Spend( id = "signiferumque", diff --git a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/transformers/TangemPayTxHistoryItemsConverter.kt b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/transformers/TangemPayTxHistoryItemsConverter.kt index 9184fac026..efd45df7b3 100644 --- a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/transformers/TangemPayTxHistoryItemsConverter.kt +++ b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/transformers/TangemPayTxHistoryItemsConverter.kt @@ -8,6 +8,7 @@ import com.tangem.core.ui.utils.DateTimeFormatters import com.tangem.domain.visa.model.TangemPayTxHistoryItem import com.tangem.features.tangempay.entity.TangemPayTransactionState import com.tangem.features.tangempay.utils.TangemPayTxHistoryUiActions +import com.tangem.utils.StringsSigns import com.tangem.utils.converter.Converter import com.tangem.utils.extensions.isPositive import org.joda.time.DateTimeZone @@ -25,14 +26,23 @@ internal class TangemPayTxHistoryItemsConverter( private fun convertSpend(spend: TangemPayTxHistoryItem.Spend): TangemPayTransactionState.Content.Spend { val localDate = spend.date.withZone(DateTimeZone.getDefault()) - val amount = spend.amount.format { + val amountPrefix = when (spend.status) { + TangemPayTxHistoryItem.Status.DECLINED -> "" + else -> StringsSigns.MINUS + } + val amount = amountPrefix + spend.amount.format { fiat(fiatCurrencyCode = spend.currency.currencyCode, fiatCurrencySymbol = spend.currency.symbol) } return TangemPayTransactionState.Content.Spend( id = spend.id, onClick = { txHistoryUiActions.onTransactionClick(spend) }, amount = amount, - amountColor = { TangemTheme.colors.text.primary1 }, + amountColor = { + when (spend.status) { + TangemPayTxHistoryItem.Status.DECLINED -> TangemTheme.colors.text.warning + else -> TangemTheme.colors.text.primary1 + } + }, title = stringReference(spend.enrichedMerchantName ?: spend.merchantName), subtitle = stringReference(spend.enrichedMerchantCategory ?: spend.merchantCategory), time = DateTimeFormatters.formatDate(localDate, DateTimeFormatters.timeFormatter), @@ -41,7 +51,8 @@ internal class TangemPayTxHistoryItemsConverter( } private fun convertPayment(payment: TangemPayTxHistoryItem.Payment): TangemPayTransactionState.Content.Payment { - val amount = payment.amount.format { + val amountPrefix = if (payment.amount.isPositive()) StringsSigns.PLUS else StringsSigns.MINUS + val amount = amountPrefix + payment.amount.format { fiat(fiatCurrencyCode = payment.currency.currencyCode, fiatCurrencySymbol = payment.currency.symbol) } val title = if (payment.amount.isPositive()) "Deposit" else "Withdrawal" @@ -64,7 +75,7 @@ internal class TangemPayTxHistoryItemsConverter( } private fun convertFee(fee: TangemPayTxHistoryItem.Fee): TangemPayTransactionState.Content.Fee { - val amount = fee.amount.format { + val amount = StringsSigns.MINUS + fee.amount.format { fiat(fiatCurrencyCode = fee.currency.currencyCode, fiatCurrencySymbol = fee.currency.symbol) } return TangemPayTransactionState.Content.Fee(