Updated on 2026-08-14
This commit is contained in:
parent
646349ff69
commit
f467cbacd0
14 changed files with 786 additions and 310 deletions
|
|
@ -29,6 +29,7 @@ internal class TangemPayDetailsStateFactory(
|
|||
isTangemPayDeactivated: Boolean,
|
||||
cardNumberEnd: String,
|
||||
isReissuing: Boolean,
|
||||
isFrozen: Boolean,
|
||||
): TangemPayDetailsUM {
|
||||
return TangemPayDetailsUM(
|
||||
topBarConfig = TangemPayDetailsTopBarConfig(
|
||||
|
|
@ -49,6 +50,7 @@ internal class TangemPayDetailsStateFactory(
|
|||
lastDigits = cardNumberEnd,
|
||||
onClick = {},
|
||||
isReissuing = isReissuing,
|
||||
isFrozen = isFrozen,
|
||||
),
|
||||
),
|
||||
onAddCardClick = intents::onAddCardClick,
|
||||
|
|
|
|||
|
|
@ -92,6 +92,7 @@ internal sealed class TangemPayDetailsBalanceBlockState {
|
|||
val lastDigits: String,
|
||||
val onClick: () -> Unit,
|
||||
val isReissuing: Boolean,
|
||||
val isFrozen: Boolean,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -293,9 +293,15 @@ internal class TangemPayCardPageModel @Inject constructor(
|
|||
if (frozenStateJobHolder.isActive) return
|
||||
|
||||
val message = if (isFrozen) {
|
||||
TangemPayMessagesFactory.createUnfreezeCardMessage(onUnfreezeClicked = ::unfreezeCard)
|
||||
TangemPayMessagesFactory.createUnfreezeCardMessage(
|
||||
onUnfreezeClicked = ::unfreezeCard,
|
||||
isRedesignEnabled = tangemPayFeatureToggles.isRedesignEnabled,
|
||||
)
|
||||
} else {
|
||||
TangemPayMessagesFactory.createFreezeCardMessage(onFreezeClicked = ::freezeCard)
|
||||
TangemPayMessagesFactory.createFreezeCardMessage(
|
||||
onFreezeClicked = ::freezeCard,
|
||||
isRedesignEnabled = tangemPayFeatureToggles.isRedesignEnabled,
|
||||
)
|
||||
}
|
||||
uiMessageSender.send(message)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -106,6 +106,7 @@ internal class TangemPayDetailsModel @Inject constructor(
|
|||
isTangemPayDeactivated = isTangemPayDeactivated,
|
||||
cardNumberEnd = initialCard?.lastDigits.orEmpty(),
|
||||
isReissuing = initialCard == null || initialCard.state != TangemPayCardState.Active,
|
||||
isFrozen = initialCard?.frozenState == TangemPayCardFrozenState.Frozen,
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.tangem.features.tangempay.model.transformers
|
||||
|
||||
import com.tangem.domain.models.pay.TangemPayCard
|
||||
import com.tangem.domain.models.pay.TangemPayCardFrozenState
|
||||
import com.tangem.domain.models.pay.TangemPayCardState
|
||||
import com.tangem.features.tangempay.entity.TangemPayDetailsBalanceBlockState
|
||||
import com.tangem.features.tangempay.entity.TangemPayDetailsUM
|
||||
|
|
@ -17,6 +18,7 @@ internal class TangemPayCardDataTransformer(
|
|||
lastDigits = card.lastDigits,
|
||||
onClick = onCardClick,
|
||||
isReissuing = card.state != TangemPayCardState.Active,
|
||||
isFrozen = card.frozenState == TangemPayCardFrozenState.Frozen,
|
||||
)
|
||||
val cardsBlockState = prevState.balanceBlockState.cardsBlockState?.copy(
|
||||
cards = persistentListOf(updatedCard),
|
||||
|
|
|
|||
|
|
@ -460,8 +460,18 @@ internal class TangemPayDetailsUMProvider : CollectionPreviewParameterProvider<T
|
|||
isBalanceFlickering = false,
|
||||
cardsBlockState = TangemPayDetailsBalanceBlockState.CardsBlockState(
|
||||
cards = persistentListOf(
|
||||
TangemPayDetailsBalanceBlockState.Card(lastDigits = "1234", onClick = {}, isReissuing = false),
|
||||
TangemPayDetailsBalanceBlockState.Card(lastDigits = "3456", onClick = {}, isReissuing = false),
|
||||
TangemPayDetailsBalanceBlockState.Card(
|
||||
lastDigits = "1234",
|
||||
onClick = {},
|
||||
isReissuing = false,
|
||||
isFrozen = false,
|
||||
),
|
||||
TangemPayDetailsBalanceBlockState.Card(
|
||||
lastDigits = "3456",
|
||||
onClick = {},
|
||||
isReissuing = false,
|
||||
isFrozen = false,
|
||||
),
|
||||
),
|
||||
onAddCardClick = {},
|
||||
),
|
||||
|
|
@ -490,6 +500,7 @@ internal class TangemPayDetailsUMProvider : CollectionPreviewParameterProvider<T
|
|||
lastDigits = "1234",
|
||||
onClick = {},
|
||||
isReissuing = true,
|
||||
isFrozen = false,
|
||||
),
|
||||
),
|
||||
onAddCardClick = {},
|
||||
|
|
|
|||
|
|
@ -340,6 +340,7 @@ private fun CardsBlock(
|
|||
isReissuing = item.isReissuing,
|
||||
lastDigits = item.lastDigits,
|
||||
onClick = item.onClick,
|
||||
isFrozen = item.isFrozen,
|
||||
)
|
||||
SpacerW(TangemTheme.dimens2.x2)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ import com.tangem.core.ui.res.TangemThemePreviewRedesign
|
|||
import com.tangem.core.ui.res.generated.icons.Icons
|
||||
import com.tangem.core.ui.res.generated.icons.ic_clock_12
|
||||
import com.tangem.core.ui.res.generated.icons.ic_cloud_12_filled
|
||||
import com.tangem.core.ui.res.generated.icons.ic_snowflake_16
|
||||
import com.tangem.core.ui.test.TangemPayTestTags
|
||||
|
||||
private const val DEFAULT_CARD_BG = 0xFF1C1F29
|
||||
|
|
@ -42,6 +43,7 @@ internal fun TangemPayCardView(
|
|||
isReissuing: Boolean,
|
||||
lastDigits: String,
|
||||
onClick: () -> Unit,
|
||||
isFrozen: Boolean,
|
||||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
CardBackground(
|
||||
|
|
@ -64,10 +66,10 @@ internal fun TangemPayCardView(
|
|||
) {
|
||||
Icon(
|
||||
modifier = Modifier.size(TangemTheme.dimens2.x3),
|
||||
imageVector = if (isReissuing) {
|
||||
Icons.ic_clock_12
|
||||
} else {
|
||||
Icons.ic_cloud_12_filled
|
||||
imageVector = when {
|
||||
isFrozen -> Icons.ic_snowflake_16
|
||||
isReissuing -> Icons.ic_clock_12
|
||||
else -> Icons.ic_cloud_12_filled
|
||||
},
|
||||
tint = TangemTheme.colors3.icon.staticDark,
|
||||
contentDescription = null,
|
||||
|
|
@ -191,11 +193,13 @@ private fun CardBackgroundPreview() {
|
|||
content = {},
|
||||
)
|
||||
SpacerH(TangemTheme.dimens2.x4)
|
||||
TangemPayCardView(isReissuing = false, onClick = {}, lastDigits = "1234")
|
||||
TangemPayCardView(isReissuing = false, onClick = {}, lastDigits = "1234", isFrozen = false)
|
||||
SpacerH(TangemTheme.dimens2.x4)
|
||||
TangemPayCardView(isReissuing = true, onClick = {}, lastDigits = "")
|
||||
TangemPayCardView(isReissuing = true, onClick = {}, lastDigits = "", isFrozen = false)
|
||||
SpacerH(TangemTheme.dimens2.x4)
|
||||
TangemPayAddCardView(onClick = {})
|
||||
SpacerH(TangemTheme.dimens2.x4)
|
||||
TangemPayCardView(isReissuing = false, onClick = {}, lastDigits = "1234", isFrozen = true)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -6,6 +6,9 @@ import com.tangem.core.ui.extensions.TextReference
|
|||
import com.tangem.core.ui.extensions.resourceReference
|
||||
import com.tangem.core.ui.message.BottomSheetMessage
|
||||
import com.tangem.core.ui.message.bottomSheetMessage
|
||||
import com.tangem.core.ui.res.generated.icons.Icons
|
||||
import com.tangem.core.ui.res.generated.icons.ic_snowflake_20
|
||||
import com.tangem.core.ui.res.generated.icons.ic_sun_20
|
||||
import com.tangem.features.tangempay.entity.TangemPayDetailsErrorType
|
||||
|
||||
internal object TangemPayMessagesFactory {
|
||||
|
|
@ -55,16 +58,31 @@ internal object TangemPayMessagesFactory {
|
|||
}
|
||||
}
|
||||
|
||||
fun createFreezeCardMessage(onFreezeClicked: () -> Unit): BottomSheetMessage {
|
||||
fun createFreezeCardMessage(isRedesignEnabled: Boolean, onFreezeClicked: () -> Unit): BottomSheetMessage {
|
||||
return bottomSheetMessage {
|
||||
infoBlock {
|
||||
icon(R.drawable.ic_snow_24) {
|
||||
type = MessageBottomSheetUM.Icon.Type.Accent
|
||||
backgroundType = MessageBottomSheetUM.Icon.BackgroundType.Accent
|
||||
if (isRedesignEnabled) {
|
||||
vector(Icons.ic_snowflake_20) {
|
||||
type = MessageBottomSheetUM.Vector.Type.Informative
|
||||
backgroundType = MessageBottomSheetUM.Vector.BackgroundType.Informative
|
||||
}
|
||||
} else {
|
||||
icon(R.drawable.ic_snow_24) {
|
||||
type = MessageBottomSheetUM.Icon.Type.Accent
|
||||
backgroundType = MessageBottomSheetUM.Icon.BackgroundType.Accent
|
||||
}
|
||||
}
|
||||
title = TextReference.Res(R.string.tangem_pay_freeze_card_alert_title)
|
||||
body = TextReference.Res(R.string.tangem_pay_freeze_card_alert_body)
|
||||
}
|
||||
if (isRedesignEnabled) {
|
||||
secondaryButton {
|
||||
text = resourceReference(R.string.common_cancel)
|
||||
onClick {
|
||||
closeBs()
|
||||
}
|
||||
}
|
||||
}
|
||||
primaryButton {
|
||||
text = resourceReference(R.string.tangem_pay_freeze_card_freeze)
|
||||
onClick {
|
||||
|
|
@ -75,16 +93,31 @@ internal object TangemPayMessagesFactory {
|
|||
}
|
||||
}
|
||||
|
||||
fun createUnfreezeCardMessage(onUnfreezeClicked: () -> Unit): BottomSheetMessage {
|
||||
fun createUnfreezeCardMessage(isRedesignEnabled: Boolean, onUnfreezeClicked: () -> Unit): BottomSheetMessage {
|
||||
return bottomSheetMessage {
|
||||
infoBlock {
|
||||
icon(R.drawable.ic_snow_24) {
|
||||
type = MessageBottomSheetUM.Icon.Type.Accent
|
||||
backgroundType = MessageBottomSheetUM.Icon.BackgroundType.Accent
|
||||
if (isRedesignEnabled) {
|
||||
vector(Icons.ic_sun_20) {
|
||||
type = MessageBottomSheetUM.Vector.Type.Attention
|
||||
backgroundType = MessageBottomSheetUM.Vector.BackgroundType.Attention
|
||||
}
|
||||
} else {
|
||||
icon(R.drawable.ic_snow_24) {
|
||||
type = MessageBottomSheetUM.Icon.Type.Accent
|
||||
backgroundType = MessageBottomSheetUM.Icon.BackgroundType.Accent
|
||||
}
|
||||
}
|
||||
title = TextReference.Res(R.string.tangem_pay_unfreeze_card_alert_title)
|
||||
body = TextReference.Res(R.string.tangem_pay_unfreeze_card_alert_body)
|
||||
}
|
||||
if (isRedesignEnabled) {
|
||||
secondaryButton {
|
||||
text = resourceReference(R.string.common_cancel)
|
||||
onClick {
|
||||
closeBs()
|
||||
}
|
||||
}
|
||||
}
|
||||
primaryButton {
|
||||
text = resourceReference(R.string.tangempay_card_details_unfreeze_card)
|
||||
onClick {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue