Updated on 2026-08-14
This commit is contained in:
parent
e11e2d953d
commit
8db1038e3f
6 changed files with 31 additions and 16 deletions
|
|
@ -40,6 +40,7 @@ fun TangemIconButton(
|
|||
@DrawableRes iconRes: Int,
|
||||
onClick: () -> Unit,
|
||||
modifier: Modifier = Modifier,
|
||||
enabled: Boolean = true,
|
||||
shape: RoundedCornerShape = RoundedCornerShape(24.dp),
|
||||
background: Color = TangemTheme.colors.button.secondary,
|
||||
iconTint: Color = TangemTheme.colors.icon.secondary,
|
||||
|
|
@ -52,7 +53,7 @@ fun TangemIconButton(
|
|||
modifier = modifier
|
||||
.size(24.dp)
|
||||
.clip(shape)
|
||||
.clickable(onClick = onClick)
|
||||
.clickable(onClick = onClick, enabled = enabled)
|
||||
.background(background)
|
||||
.padding(innerPadding),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ internal class TangemPayDetailsStateFactory(
|
|||
cardsBlockState = TangemPayDetailsBalanceBlockState.CardsBlockState(
|
||||
cards = persistentListOf(),
|
||||
onAddCardClick = intents::onAddCardClick,
|
||||
isAddCardEnabled = false,
|
||||
),
|
||||
),
|
||||
isBalanceHidden = false,
|
||||
|
|
@ -58,11 +59,6 @@ internal class TangemPayDetailsStateFactory(
|
|||
|
||||
fun getLoadedState(status: PaymentAccountStatusValue.Loaded): TangemPayDetailsUM {
|
||||
val hasUnfrozenCard = status.cards.any { it.frozenState == TangemPayCardFrozenState.Unfrozen }
|
||||
val errorNotificationConfig = when (status.error) {
|
||||
null -> null
|
||||
PaymentAccountStatusValue.Error.NotSynced -> createRenewSessionNotificationConfig()
|
||||
else -> createAccountUnavailableConfig()
|
||||
}
|
||||
return TangemPayDetailsUM(
|
||||
topBarConfig = TangemPayDetailsTopBarConfig(
|
||||
onBackClick = onBack,
|
||||
|
|
@ -75,7 +71,7 @@ internal class TangemPayDetailsStateFactory(
|
|||
onRefresh = intents::onRefreshSwipe,
|
||||
),
|
||||
balanceBlockState = TangemPayDetailsBalanceBlockState.Loading(
|
||||
actionButtons = getActionButtonsConfig(isEnabled = errorNotificationConfig == null && hasUnfrozenCard),
|
||||
actionButtons = getActionButtonsConfig(isEnabled = status.error == null && hasUnfrozenCard),
|
||||
cardsBlockState = TangemPayDetailsBalanceBlockState.CardsBlockState(
|
||||
cards = status.cards
|
||||
.let { if (isMultipleCardsEnabled) it else it.take(1) }
|
||||
|
|
@ -85,18 +81,23 @@ internal class TangemPayDetailsStateFactory(
|
|||
onClick = { intents.onCardClick(cardItem.id) },
|
||||
isReissuingOrClosing = cardItem.state == TangemPayCardState.Reissuing ||
|
||||
cardItem.state == TangemPayCardState.Closing,
|
||||
isEnabled = errorNotificationConfig == null,
|
||||
isEnabled = status.error == null,
|
||||
isFrozen = cardItem.isFrozen,
|
||||
isIssuing = cardItem.state == TangemPayCardState.Issuing,
|
||||
)
|
||||
}
|
||||
.toImmutableList(),
|
||||
onAddCardClick = intents::onAddCardClick,
|
||||
isAddCardEnabled = status.error == null,
|
||||
),
|
||||
),
|
||||
isBalanceHidden = false,
|
||||
addToWalletBlockState = null,
|
||||
errorNotificationConfig = errorNotificationConfig,
|
||||
errorNotificationConfig = when (status.error) {
|
||||
null -> null
|
||||
PaymentAccountStatusValue.Error.NotSynced -> createRenewSessionNotificationConfig()
|
||||
else -> createAccountUnavailableConfig()
|
||||
},
|
||||
accountDeactivatedNotificationConfig = null,
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -90,7 +90,12 @@ internal sealed class TangemPayDetailsBalanceBlockState {
|
|||
override val cardsBlockState: CardsBlockState?,
|
||||
) : TangemPayDetailsBalanceBlockState()
|
||||
|
||||
data class CardsBlockState(val cards: ImmutableList<Card>, val onAddCardClick: () -> Unit)
|
||||
data class CardsBlockState(
|
||||
val cards: ImmutableList<Card>,
|
||||
val onAddCardClick: () -> Unit,
|
||||
val isAddCardEnabled: Boolean,
|
||||
)
|
||||
|
||||
data class Card(
|
||||
val lastDigits: String,
|
||||
val onClick: () -> Unit,
|
||||
|
|
|
|||
|
|
@ -304,10 +304,11 @@ private fun CardsBlockRow(
|
|||
TangemPayCardItem(modifier = itemsModifier, card = card)
|
||||
}
|
||||
TangemIconButton(
|
||||
modifier = itemsModifier,
|
||||
modifier = itemsModifier.alpha(if (cardsBlockState.isAddCardEnabled) 1f else DISABLED_ALPHA),
|
||||
onClick = cardsBlockState.onAddCardClick,
|
||||
iconRes = R.drawable.ic_plus_24,
|
||||
shape = RoundedCornerShape(4.dp),
|
||||
enabled = cardsBlockState.isAddCardEnabled,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -500,6 +501,7 @@ internal class TangemPayDetailsUMProvider : CollectionPreviewParameterProvider<T
|
|||
),
|
||||
),
|
||||
onAddCardClick = {},
|
||||
isAddCardEnabled = true,
|
||||
),
|
||||
),
|
||||
isBalanceHidden = false,
|
||||
|
|
@ -532,6 +534,7 @@ internal class TangemPayDetailsUMProvider : CollectionPreviewParameterProvider<T
|
|||
),
|
||||
),
|
||||
onAddCardClick = {},
|
||||
isAddCardEnabled = true,
|
||||
),
|
||||
),
|
||||
isBalanceHidden = false,
|
||||
|
|
|
|||
|
|
@ -360,7 +360,10 @@ private fun CardsBlock(
|
|||
SpacerW(TangemTheme.dimens2.x2)
|
||||
}
|
||||
item {
|
||||
TangemPayAddCardView(onClick = cardsBlockState.onAddCardClick)
|
||||
TangemPayAddCardView(
|
||||
onClick = cardsBlockState.onAddCardClick,
|
||||
isEnabled = cardsBlockState.isAddCardEnabled,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ import com.tangem.core.ui.test.TangemPayTestTags
|
|||
|
||||
private const val DEFAULT_CARD_BG = 0xFF1C1F29
|
||||
private const val REISSUING_CARD_BG = 0xFF1E1E1E
|
||||
private const val DISABLED_ALPHA = 0.5f
|
||||
|
||||
@Composable
|
||||
internal fun TangemPayCardView(
|
||||
|
|
@ -98,16 +99,17 @@ internal fun TangemPayCardView(
|
|||
}
|
||||
|
||||
@Composable
|
||||
internal fun TangemPayAddCardView(onClick: () -> Unit, modifier: Modifier = Modifier) {
|
||||
internal fun TangemPayAddCardView(onClick: () -> Unit, isEnabled: Boolean, modifier: Modifier = Modifier) {
|
||||
Box(
|
||||
modifier = modifier
|
||||
.alpha(if (isEnabled) 1f else DISABLED_ALPHA)
|
||||
.size(
|
||||
height = TangemTheme.dimens2.x10,
|
||||
width = TangemTheme.dimens2.x14,
|
||||
)
|
||||
.clip(RoundedCornerShape(6.dp))
|
||||
.background(TangemTheme.colors3.bg.opaque.primary)
|
||||
.clickableSingle(onClick = onClick),
|
||||
.clickableSingle(onClick = onClick, enabled = isEnabled),
|
||||
contentAlignment = Alignment.Center,
|
||||
) {
|
||||
Icon(
|
||||
|
|
@ -138,7 +140,7 @@ private fun CardBackground(
|
|||
|
||||
Box(
|
||||
modifier = modifier
|
||||
.alpha(if (isEnabled) 1f else 0.5f)
|
||||
.alpha(if (isEnabled) 1f else DISABLED_ALPHA)
|
||||
.clip(RoundedCornerShape(6.dp))
|
||||
.drawBehind {
|
||||
drawRect(bgColor)
|
||||
|
|
@ -216,7 +218,7 @@ private fun CardBackgroundPreview() {
|
|||
isFrozen = false,
|
||||
)
|
||||
SpacerH(TangemTheme.dimens2.x4)
|
||||
TangemPayAddCardView(onClick = {})
|
||||
TangemPayAddCardView(onClick = {}, isEnabled = true)
|
||||
SpacerH(TangemTheme.dimens2.x4)
|
||||
TangemPayCardView(
|
||||
isIssueInProgress = false,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue