Updated on 2026-08-14
This commit is contained in:
parent
3ea0fbb8a3
commit
fcc995a98a
7 changed files with 56 additions and 7 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
|
|
@ -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<ButtonState>,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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),
|
||||
|
|
|
|||
|
|
@ -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<TangemBottomSheetConfigContent.Empty>(
|
||||
|
|
@ -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(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue