Updated on 2026-08-14

This commit is contained in:
Tangem 2024-11-02 18:15:55 +04:00
parent e6cb71265e
commit 1fc34657ce
12 changed files with 45 additions and 44 deletions

View file

@ -39,8 +39,8 @@ class TokenItemStateConverter(
private val fiatAmountStateProvider: (CryptoCurrencyStatus) -> TokenItemState.FiatAmountState? = {
createFiatAmountState(it, appCurrency)
},
private val onItemClick: (CryptoCurrencyStatus) -> Unit,
private val onItemLongClick: ((CryptoCurrencyStatus) -> Unit)? = null,
private val onItemClick: ((TokenItemState, CryptoCurrencyStatus) -> Unit)? = null,
private val onItemLongClick: ((TokenItemState, CryptoCurrencyStatus) -> Unit)? = null,
) : Converter<CryptoCurrencyStatus, TokenItemState> {
override fun convert(value: CryptoCurrencyStatus): TokenItemState {
@ -75,9 +75,11 @@ class TokenItemStateConverter(
subtitleState = requireNotNull(subtitleStateProvider(this)),
fiatAmountState = requireNotNull(fiatAmountStateProvider(this)),
subtitle2State = TokenItemState.Subtitle2State.TextContent(text = getFormattedAmount()),
onItemClick = { onItemClick(this) },
onItemLongClick = onItemLongClick?.let {
{ it(this) }
onItemClick = onItemClick?.let { onItemClick ->
{ onItemClick(it, this) }
},
onItemLongClick = onItemLongClick?.let { onItemLongClick ->
{ onItemLongClick(it, this) }
},
)
}
@ -94,9 +96,11 @@ class TokenItemStateConverter(
iconState = iconStateProvider(this),
titleState = titleStateProvider(this),
subtitleState = subtitleStateProvider(this),
onItemClick = { onItemClick(this) },
onItemLongClick = onItemLongClick?.let {
{ it(this) }
onItemClick = onItemClick?.let { onItemClick ->
{ onItemClick(it, this) }
},
onItemLongClick = onItemLongClick?.let { onItemLongClick ->
{ onItemLongClick(it, this) }
},
)
}
@ -107,8 +111,8 @@ class TokenItemStateConverter(
iconState = iconStateProvider(this),
titleState = titleStateProvider(this),
subtitleState = subtitleStateProvider(this),
onItemLongClick = onItemLongClick?.let {
{ it(this) }
onItemLongClick = onItemLongClick?.let { onItemLongClick ->
{ onItemLongClick(it, this) }
},
)
}

View file

@ -145,14 +145,16 @@ private fun Modifier.tokenClickable(state: TokenItemState): Modifier = composed
is TokenItemState.Unreachable,
-> {
val onClick = state.onItemClick
val onLongClick = state.onItemLongClick?.let { rememberHapticFeedback(state = state, onAction = it) }
val onLongClick = state.onItemLongClick?.let {
rememberHapticFeedback(state = state, onAction = { it(state) })
}
when {
onClick == null && onLongClick == null -> this
onClick == null && onLongClick != null -> combinedClickable(onClick = {}, onLongClick = onLongClick)
onClick != null && onLongClick == null -> combinedClickable(onClick = onClick)
onClick != null && onLongClick == null -> combinedClickable(onClick = { onClick(state) })
onClick != null && onLongClick != null -> {
combinedClickable(onClick = onClick, onLongClick = onLongClick)
combinedClickable(onClick = { onClick(state) }, onLongClick = onLongClick)
}
else -> this
}

View file

@ -31,10 +31,10 @@ sealed class TokenItemState {
abstract val subtitle2State: Subtitle2State?
/** Callback which will be called when an item is clicked */
abstract val onItemClick: (() -> Unit)?
abstract val onItemClick: ((TokenItemState) -> Unit)?
/** Callback which will be called when an item is long clicked */
abstract val onItemLongClick: (() -> Unit)?
abstract val onItemLongClick: ((TokenItemState) -> Unit)?
/**
* Loading token state
@ -52,8 +52,8 @@ sealed class TokenItemState {
) : TokenItemState() {
override val fiatAmountState: FiatAmountState = FiatAmountState.Loading
override val subtitle2State: Subtitle2State = Subtitle2State.Loading
override val onItemClick: (() -> Unit)? = null
override val onItemLongClick: (() -> Unit)? = null
override val onItemClick: ((TokenItemState) -> Unit)? = null
override val onItemLongClick: ((TokenItemState) -> Unit)? = null
}
/**
@ -67,8 +67,8 @@ sealed class TokenItemState {
override val subtitleState: SubtitleState = SubtitleState.Locked
override val fiatAmountState: FiatAmountState = FiatAmountState.Locked
override val subtitle2State: Subtitle2State = Subtitle2State.Locked
override val onItemClick: (() -> Unit)? = null
override val onItemLongClick: (() -> Unit)? = null
override val onItemClick: ((TokenItemState) -> Unit)? = null
override val onItemLongClick: ((TokenItemState) -> Unit)? = null
}
/**
@ -90,8 +90,8 @@ sealed class TokenItemState {
override val subtitleState: SubtitleState,
override val fiatAmountState: FiatAmountState,
override val subtitle2State: Subtitle2State,
override val onItemClick: (() -> Unit)?,
override val onItemLongClick: (() -> Unit)?,
override val onItemClick: ((TokenItemState) -> Unit)?,
override val onItemLongClick: ((TokenItemState) -> Unit)?,
) : TokenItemState()
/**
@ -110,8 +110,8 @@ sealed class TokenItemState {
) : TokenItemState() {
override val subtitleState: SubtitleState? = null
override val fiatAmountState: FiatAmountState? = null
override val onItemClick: (() -> Unit)? = null
override val onItemLongClick: (() -> Unit)? = null
override val onItemClick: ((TokenItemState) -> Unit)? = null
override val onItemLongClick: ((TokenItemState) -> Unit)? = null
}
/**
@ -129,8 +129,8 @@ sealed class TokenItemState {
override val iconState: CurrencyIconState,
override val titleState: TitleState,
override val subtitleState: SubtitleState? = null,
override val onItemClick: (() -> Unit)?,
override val onItemLongClick: (() -> Unit)?,
override val onItemClick: ((TokenItemState) -> Unit)?,
override val onItemLongClick: ((TokenItemState) -> Unit)?,
) : TokenItemState() {
override val fiatAmountState: FiatAmountState? = null
override val subtitle2State: Subtitle2State? = null
@ -150,11 +150,11 @@ sealed class TokenItemState {
override val iconState: CurrencyIconState,
override val titleState: TitleState,
override val subtitleState: SubtitleState? = null,
override val onItemLongClick: (() -> Unit)?,
override val onItemLongClick: ((TokenItemState) -> Unit)?,
) : TokenItemState() {
override val fiatAmountState: FiatAmountState? = null
override val subtitle2State: Subtitle2State? = null
override val onItemClick: (() -> Unit)? = null
override val onItemClick: ((TokenItemState) -> Unit)? = null
}
@Immutable

View file

@ -4,7 +4,6 @@ import android.content.res.Configuration
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxScope
import androidx.compose.foundation.layout.size
import androidx.compose.material3.Icon
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@ -78,9 +77,7 @@ private fun BaseNetworkTitleItem(
@Composable
private fun DraggableIcon(reorderableTokenListState: ReorderableLazyListState) {
Box(
modifier = Modifier
.size(TangemTheme.dimens.size32)
.detectReorder(reorderableTokenListState),
modifier = Modifier.detectReorder(reorderableTokenListState),
contentAlignment = Alignment.Center,
) {
Icon(

View file

@ -33,7 +33,7 @@ internal class PortfolioTokenUMConverter(
subtitleStateProvider = {
TokenItemState.SubtitleState.TextContent(value = value.status.currency.name)
},
onItemClick = onTokenItemClick,
onItemClick = { _, status -> onTokenItemClick(status) },
)
return PortfolioTokenUM(

View file

@ -32,7 +32,7 @@ internal fun PortfolioItem(state: PortfolioTokenUM, lastInList: Boolean, modifie
val onClick = state.tokenItemState.onItemClick
if (onClick != null) {
hapticManager.perform(TangemHapticEffect.View.ContextClick)
onClick.invoke()
onClick.invoke(it)
}
},
)
@ -81,8 +81,8 @@ private fun Preview(@PreviewParameter(PortfolioTokenUMProvider::class) tokenUM:
PortfolioItem(
state = tokenUM.copy(
tokenItemState = when (tokenUM.tokenItemState) {
is TokenItemState.Content -> tokenUM.tokenItemState.copy(onItemClick = onItemClick)
is TokenItemState.Unreachable -> tokenUM.tokenItemState.copy(onItemClick = onItemClick)
is TokenItemState.Content -> tokenUM.tokenItemState.copy(onItemClick = { onItemClick() })
is TokenItemState.Unreachable -> tokenUM.tokenItemState.copy(onItemClick = { onItemClick() })
else -> tokenUM.tokenItemState
},
isQuickActionsShown = quickActionsShown,

View file

@ -35,7 +35,7 @@ internal class DefaultOnrampOperationComponent @AssistedInject constructor(
filterOperation = params.operation,
hasSearchBar = true,
userWalletId = params.userWalletId,
onTokenClick = ::onTokenClick,
onTokenClick = { _, status -> onTokenClick(status) },
),
)

View file

@ -25,11 +25,9 @@ internal sealed interface ExchangeCardUM {
* Empty state
*
* @property titleReference title reference
* @property onItemClick callback which will be called when an item is clicked
*/
data class Empty(
override val titleReference: TextReference,
val onItemClick: () -> Unit,
) : ExchangeCardUM {
override val hasRemoveButton: Boolean = false
@ -42,7 +40,7 @@ internal sealed interface ExchangeCardUM {
subtitleState = TokenItemState.SubtitleState.TextContent(value = "You want to Swap"),
fiatAmountState = TokenItemState.FiatAmountState.Content(text = ""),
subtitle2State = TokenItemState.Subtitle2State.TextContent(text = ""),
onItemClick = onItemClick,
onItemClick = null,
onItemLongClick = null,
)
}

View file

@ -101,7 +101,6 @@ private class ExchangeCardUMProvider : PreviewParameterProvider<ExchangeCardUM>
override val values: Sequence<ExchangeCardUM> = sequenceOf(
ExchangeCardUM.Empty(
titleReference = resourceReference(id = R.string.swapping_from_title),
onItemClick = {},
),
ExchangeCardUM.Filled(
titleReference = resourceReference(id = R.string.swapping_from_title),

View file

@ -5,6 +5,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.Stable
import androidx.compose.ui.Modifier
import com.tangem.core.decompose.factory.ComponentFactory
import com.tangem.core.ui.components.token.state.TokenItemState
import com.tangem.domain.tokens.model.CryptoCurrencyStatus
import com.tangem.domain.wallets.models.UserWalletId
import com.tangem.features.onramp.entity.OnrampOperation
@ -31,6 +32,6 @@ internal interface OnrampTokenListComponent {
val filterOperation: OnrampOperation,
val hasSearchBar: Boolean,
val userWalletId: UserWalletId,
val onTokenClick: (CryptoCurrencyStatus) -> Unit,
val onTokenClick: (TokenItemState, CryptoCurrencyStatus) -> Unit,
)
}

View file

@ -19,7 +19,7 @@ import kotlinx.collections.immutable.toImmutableList
@Suppress("LongParameterList")
internal class UpdateTokenItemsTransformer(
private val appCurrency: AppCurrency,
private val onItemClick: (CryptoCurrencyStatus) -> Unit,
private val onItemClick: (TokenItemState, CryptoCurrencyStatus) -> Unit,
private val statuses: Map<Boolean, List<CryptoCurrencyStatus>>,
private val isBalanceHidden: Boolean,
private val hasSearchBar: Boolean,

View file

@ -27,8 +27,8 @@ internal class TokenListStateConverter(
private val tokenStatusConverter = TokenItemStateConverter(
appCurrency = appCurrency,
onItemClick = clickIntents::onTokenItemClick,
onItemLongClick = clickIntents::onTokenItemLongClick,
onItemClick = { _, status -> clickIntents.onTokenItemClick(status) },
onItemLongClick = { _, status -> clickIntents.onTokenItemLongClick(status) },
)
override fun convert(value: WalletTokensListState): WalletTokensListState {