From fcc995a98a213386fb12978a97abd30f1b2b3d8a Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 20 Nov 2025 14:05:56 +0500 Subject: [PATCH] Updated on 2026-08-14 --- .../response/TangemPayTxHistoryResponse.kt | 2 +- .../utils/TangemPayTxHistoryItemConverter.kt | 2 ++ .../visa/model/TangemPayTxHistoryItem.kt | 4 ++- .../entity/TangemPayTxHistoryDetailsUM.kt | 1 + .../TangemPayTxHistoryDetailsConverter.kt | 36 ++++++++++++++++--- .../TangemPayTxHistoryItemsConverter.kt | 3 +- .../tangempay/ui/TangempayTxDetailsUi.kt | 15 ++++++++ 7 files changed, 56 insertions(+), 7 deletions(-) diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/pay/models/response/TangemPayTxHistoryResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/pay/models/response/TangemPayTxHistoryResponse.kt index 30fedbe52a..b7ccfdeb67 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/pay/models/response/TangemPayTxHistoryResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/pay/models/response/TangemPayTxHistoryResponse.kt @@ -37,7 +37,7 @@ data class TangemPayTxHistoryResponse( @Json(name = "memo") val memo: String? = null, @Json(name = "receipt") val receipt: Boolean, @Json(name = "merchant_name") val merchantName: String, - @Json(name = "merchant_category") val merchantCategory: String, + @Json(name = "merchant_category") val merchantCategory: String?, @Json(name = "merchant_category_code") val merchantCategoryCode: String, @Json(name = "merchant_id") val merchantId: String? = null, @Json(name = "enriched_merchant_icon") val enrichedMerchantIcon: String? = null, 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 9181778435..dd5e03e917 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 @@ -35,6 +35,8 @@ internal class TangemPayTxHistoryItemConverter(moshi: Moshi) : date = spend.authorizedAt.withLocalZone(), amount = spend.amount, currency = Currency.getInstance(spend.currency), + localAmount = spend.localAmount, + localCurrency = spend.localCurrency?.let(Currency::getInstance), enrichedMerchantName = spend.enrichedMerchantName, merchantName = spend.merchantName, enrichedMerchantCategory = spend.enrichedMerchantCategory, 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 750dfb2ae3..1552db31bb 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 @@ -20,10 +20,12 @@ sealed class TangemPayTxHistoryItem { override val date: SerializedDateTime, override val amount: SerializedBigDecimal, override val currency: SerializedCurrency, + val localAmount: SerializedBigDecimal?, + val localCurrency: SerializedCurrency?, val enrichedMerchantName: String?, val merchantName: String, val enrichedMerchantCategory: String?, - val merchantCategory: String, + val merchantCategory: String?, val status: Status, val enrichedMerchantIconUrl: String?, ) : TangemPayTxHistoryItem() diff --git a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/entity/TangemPayTxHistoryDetailsUM.kt b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/entity/TangemPayTxHistoryDetailsUM.kt index be9817c6f1..d6d716c254 100644 --- a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/entity/TangemPayTxHistoryDetailsUM.kt +++ b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/entity/TangemPayTxHistoryDetailsUM.kt @@ -14,6 +14,7 @@ internal data class TangemPayTxHistoryDetailsUM( val transactionSubtitle: TextReference, val transactionAmount: String, val transactionAmountColor: ColorReference, + val localTransactionText: String?, val labelState: LabelUM?, val notification: NotificationConfig?, val buttons: ImmutableList, diff --git a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/transformers/TangemPayTxHistoryDetailsConverter.kt b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/transformers/TangemPayTxHistoryDetailsConverter.kt index 149ff171fd..69fd729e59 100644 --- a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/transformers/TangemPayTxHistoryDetailsConverter.kt +++ b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/transformers/TangemPayTxHistoryDetailsConverter.kt @@ -6,6 +6,7 @@ import com.tangem.core.ui.components.notifications.NotificationConfig import com.tangem.core.ui.extensions.* import com.tangem.core.ui.format.bigdecimal.fiat import com.tangem.core.ui.format.bigdecimal.format +import com.tangem.core.ui.format.bigdecimal.price import com.tangem.core.ui.res.TangemTheme import com.tangem.core.ui.utils.DateTimeFormatters import com.tangem.domain.visa.model.TangemPayTxHistoryItem @@ -30,9 +31,10 @@ internal object TangemPayTxHistoryDetailsConverter : transactionTitle = transaction.extractTransactionTitle(), transactionSubtitle = transaction.extractTransactionSubtitle(), transactionAmount = transaction.extractAmount(), - transactionAmountColor = value.item.extractAmountColor(), - labelState = value.item.extractLabel(), - notification = value.item.extractNotification(), + transactionAmountColor = transaction.extractAmountColor(), + localTransactionText = transaction.extractLocalAmount(), + labelState = transaction.extractLabel(), + notification = transaction.extractNotification(), buttons = value.extractButtonsState(), dismiss = value.onDismiss, ) @@ -76,8 +78,11 @@ internal object TangemPayTxHistoryDetailsConverter : return when (this) { is TangemPayTxHistoryItem.Fee -> resourceReference(R.string.tangem_pay_fee_subtitle) is TangemPayTxHistoryItem.Payment -> resourceReference(R.string.common_transfer) - is TangemPayTxHistoryItem.Spend -> stringReference(this.enrichedMerchantCategory ?: this.merchantCategory) is TangemPayTxHistoryItem.Collateral -> resourceReference(R.string.common_transfer) + is TangemPayTxHistoryItem.Spend -> { + val subtitle = merchantCategory ?: enrichedMerchantCategory + subtitle?.let(::stringReference) ?: resourceReference(R.string.tangem_pay_other) + } } } @@ -130,6 +135,29 @@ internal object TangemPayTxHistoryDetailsConverter : } } + private fun TangemPayTxHistoryItem.extractLocalAmount(): String? { + return when (this) { + is TangemPayTxHistoryItem.Collateral, + is TangemPayTxHistoryItem.Fee, + is TangemPayTxHistoryItem.Payment, + -> null + is TangemPayTxHistoryItem.Spend -> { + val localCurrency = this.localCurrency + val localAmount = this.localAmount + if (localCurrency != null && localAmount != null && localCurrency != currency) { + localAmount.format { + fiat( + fiatCurrencyCode = localCurrency.currencyCode, + fiatCurrencySymbol = localCurrency.symbol, + ).price() + } + } else { + null + } + } + } + } + private fun TangemPayTxHistoryItem.extractLabel(): LabelUM? { return when (this) { is TangemPayTxHistoryItem.Fee, 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 2b005f16fb..ef6172f0c3 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 @@ -39,6 +39,7 @@ internal class TangemPayTxHistoryItemsConverter( val amount = amountPrefix + spend.amount.format { fiat(fiatCurrencyCode = spend.currency.currencyCode, fiatCurrencySymbol = spend.currency.symbol) } + val subtitle = spend.merchantCategory ?: spend.enrichedMerchantCategory return TangemPayTransactionState.Content.Spend( id = spend.id, onClick = { txHistoryUiActions.onTransactionClick(spend) }, @@ -50,7 +51,7 @@ internal class TangemPayTxHistoryItemsConverter( } }, title = stringReference(spend.enrichedMerchantName ?: spend.merchantName), - subtitle = stringReference(spend.enrichedMerchantCategory ?: spend.merchantCategory), + subtitle = subtitle?.let(::stringReference) ?: resourceReference(R.string.tangem_pay_other), time = DateTimeFormatters.formatDate(localDate, DateTimeFormatters.timeFormatter), icon = spend.enrichedMerchantIconUrl?.let(ImageReference::Url) ?: ImageReference.Res(R.drawable.ic_category_24), diff --git a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/ui/TangempayTxDetailsUi.kt b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/ui/TangempayTxDetailsUi.kt index 63922d29c0..f9534f5d05 100644 --- a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/ui/TangempayTxDetailsUi.kt +++ b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/ui/TangempayTxDetailsUi.kt @@ -32,6 +32,7 @@ import com.tangem.features.tangempay.entity.TangemPayTxHistoryDetailsUM import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf +@Suppress("LongMethod") @Composable internal fun TangemPayTxHistoryDetailsContent(state: TangemPayTxHistoryDetailsUM) { TangemModalBottomSheet( @@ -80,6 +81,14 @@ internal fun TangemPayTxHistoryDetailsContent(state: TangemPayTxHistoryDetailsUM style = TangemTheme.typography.head, color = state.transactionAmountColor.resolveReference(), ) + state.localTransactionText?.let { localTransaction -> + Text( + modifier = Modifier.padding(top = 4.dp), + text = localTransaction, + style = TangemTheme.typography.body2, + color = TangemTheme.colors.text.tertiary, + ) + } state.labelState?.let { Label(state = state.labelState, modifier = Modifier.padding(top = 12.dp)) } SpacerH32() state.notification?.let { @@ -155,6 +164,7 @@ private class TangemPayTxHistoryDetailsUMProvider : CollectionPreviewParameterPr transactionSubtitle = stringReference("Food and drinks"), transactionAmount = "-$5.86", transactionAmountColor = themedColor { TangemTheme.colors.text.primary1 }, + localTransactionText = null, labelState = LabelUM( text = resourceReference(R.string.tangem_pay_status_pending), style = LabelStyle.REGULAR, @@ -176,6 +186,7 @@ private class TangemPayTxHistoryDetailsUMProvider : CollectionPreviewParameterPr transactionSubtitle = stringReference("Food and drinks"), transactionAmount = "-$5.86", transactionAmountColor = themedColor { TangemTheme.colors.text.warning }, + localTransactionText = null, labelState = LabelUM( text = resourceReference(R.string.tangem_pay_status_declined), style = LabelStyle.WARNING, @@ -200,6 +211,7 @@ private class TangemPayTxHistoryDetailsUMProvider : CollectionPreviewParameterPr transactionSubtitle = stringReference("Food and drinks"), transactionAmount = "-$5.86", transactionAmountColor = themedColor { TangemTheme.colors.text.primary1 }, + localTransactionText = "€ 5.36", labelState = LabelUM( text = resourceReference(R.string.tangem_pay_status_completed), style = LabelStyle.ACCENT, @@ -220,6 +232,7 @@ private class TangemPayTxHistoryDetailsUMProvider : CollectionPreviewParameterPr transactionSubtitle = stringReference("Service fee"), transactionAmount = "-$5.86", transactionAmountColor = themedColor { TangemTheme.colors.text.primary1 }, + localTransactionText = null, labelState = null, notification = NotificationConfig( title = stringReference("This fee goes to cover the cost of handling your transfer."), @@ -241,6 +254,7 @@ private class TangemPayTxHistoryDetailsUMProvider : CollectionPreviewParameterPr transactionSubtitle = stringReference("Transfers"), transactionAmount = "+$20", transactionAmountColor = themedColor { TangemTheme.colors.text.accent }, + localTransactionText = null, labelState = null, notification = null, buttons = persistentListOf( @@ -258,6 +272,7 @@ private class TangemPayTxHistoryDetailsUMProvider : CollectionPreviewParameterPr transactionSubtitle = stringReference("Transfers"), transactionAmount = "-$5.86", transactionAmountColor = themedColor { TangemTheme.colors.text.primary1 }, + localTransactionText = null, labelState = null, notification = null, buttons = persistentListOf(