Updated on 2026-08-14

This commit is contained in:
Tangem 2023-12-21 11:00:44 +02:00
parent 925ae57742
commit f1ce18c109
4 changed files with 29 additions and 25 deletions

View file

@ -1,7 +1,9 @@
package com.tangem.feature.swap.models
import androidx.annotation.DrawableRes
import androidx.annotation.StringRes
import androidx.compose.ui.text.input.TextFieldValue
import com.tangem.core.ui.R
import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfig
import com.tangem.core.ui.components.notifications.NotificationConfig
import com.tangem.core.ui.components.states.Item
@ -99,13 +101,17 @@ sealed interface FeeSelectState {
sealed interface TransactionCardType {
data class SendCard(
val headerResId: Int
data class Inputtable(
val onAmountChanged: ((String) -> Unit),
val onFocusChanged: ((Boolean) -> Unit),
@StringRes override val headerResId: Int = R.string.exchange_send_view_header,
) : TransactionCardType
data class ReceiveCard(
data class ReadOnly(
val highPriceImpact: String? = null,
@StringRes override val headerResId: Int = R.string.exchange_receive_view_header,
) : TransactionCardType
}

View file

@ -50,7 +50,7 @@ internal class StateBuilder(
return SwapStateHolder(
blockchainId = networkInfo.blockchainId,
sendCardData = SwapCardState.SwapCardData(
type = TransactionCardType.SendCard(actions.onAmountChanged, actions.onAmountSelected),
type = TransactionCardType.Inputtable(actions.onAmountChanged, actions.onAmountSelected),
amountEquivalent = null,
amountTextFieldValue = null,
token = null,
@ -64,7 +64,7 @@ internal class StateBuilder(
isBalanceHidden = true,
),
receiveCardData = SwapCardState.SwapCardData(
type = TransactionCardType.ReceiveCard(),
type = TransactionCardType.ReadOnly(),
amountEquivalent = null,
tokenIconUrl = "",
tokenCurrency = "",
@ -98,7 +98,9 @@ internal class StateBuilder(
if (uiStateHolder.sendCardData !is SwapCardState.SwapCardData) return uiStateHolder
return uiStateHolder.copy(
sendCardData = SwapCardState.SwapCardData(
type = requireNotNull(uiStateHolder.sendCardData.type as? TransactionCardType.SendCard),
type = TransactionCardType.ReadOnly(
headerResId = R.string.exchange_send_view_header
),
amountTextFieldValue = TextFieldValue(
text = "0",
),
@ -114,7 +116,7 @@ internal class StateBuilder(
isBalanceHidden = isBalanceHiddenProvider(),
),
receiveCardData = SwapCardState.Empty(
type = TransactionCardType.ReceiveCard(),
type = TransactionCardType.ReadOnly(),
amountEquivalent = "0 ${appCurrencyProvider.invoke().symbol}",
amountTextFieldValue = TextFieldValue(
text = "0",
@ -156,7 +158,7 @@ internal class StateBuilder(
if (uiStateHolder.receiveCardData !is SwapCardState.SwapCardData) return uiStateHolder
return uiStateHolder.copy(
sendCardData = SwapCardState.SwapCardData(
type = requireNotNull(uiStateHolder.sendCardData.type as? TransactionCardType.SendCard),
type = requireNotNull(uiStateHolder.sendCardData.type as? TransactionCardType.Inputtable),
amountTextFieldValue = uiStateHolder.sendCardData.amountTextFieldValue,
amountEquivalent = null,
token = uiStateHolder.sendCardData.token,
@ -170,7 +172,7 @@ internal class StateBuilder(
isBalanceHidden = isBalanceHiddenProvider(),
),
receiveCardData = SwapCardState.SwapCardData(
type = TransactionCardType.ReceiveCard(),
type = TransactionCardType.ReadOnly(),
amountTextFieldValue = null,
amountEquivalent = null,
token = uiStateHolder.receiveCardData.token,
@ -220,7 +222,7 @@ internal class StateBuilder(
val toCurrencyStatus = quoteModel.toTokenInfo.cryptoCurrencyStatus
return uiStateHolder.copy(
sendCardData = SwapCardState.SwapCardData(
type = requireNotNull(uiStateHolder.sendCardData.type as? TransactionCardType.SendCard),
type = requireNotNull(uiStateHolder.sendCardData.type as? TransactionCardType.Inputtable),
amountTextFieldValue = uiStateHolder.sendCardData.amountTextFieldValue,
amountEquivalent = getFormattedFiatAmount(quoteModel.fromTokenInfo.amountFiat),
token = fromCurrencyStatus,
@ -234,7 +236,7 @@ internal class StateBuilder(
isBalanceHidden = isBalanceHiddenProvider(),
),
receiveCardData = SwapCardState.SwapCardData(
type = TransactionCardType.ReceiveCard(),
type = TransactionCardType.ReadOnly(),
amountTextFieldValue = TextFieldValue(quoteModel.toTokenInfo.tokenAmount.formatToUIRepresentation()),
amountEquivalent = getFormattedFiatAmount(quoteModel.toTokenInfo.amountFiat),
token = toCurrencyStatus,
@ -419,7 +421,7 @@ internal class StateBuilder(
)
val receiveCardData = toToken?.let {
SwapCardState.SwapCardData(
type = TransactionCardType.ReceiveCard(),
type = TransactionCardType.ReadOnly(),
amountTextFieldValue = TextFieldValue(
text = "0",
),
@ -435,7 +437,7 @@ internal class StateBuilder(
isBalanceHidden = isBalanceHiddenProvider(),
)
} ?: SwapCardState.Empty(
type = TransactionCardType.ReceiveCard(),
type = TransactionCardType.ReadOnly(),
amountEquivalent = "0 ${appCurrencyProvider.invoke().symbol}",
amountTextFieldValue = TextFieldValue(
text = "0",
@ -533,7 +535,7 @@ internal class StateBuilder(
if (uiStateHolder.receiveCardData !is SwapCardState.SwapCardData) return uiStateHolder
return uiStateHolder.copy(
sendCardData = SwapCardState.SwapCardData(
type = requireNotNull(uiStateHolder.sendCardData.type as? TransactionCardType.SendCard),
type = requireNotNull(uiStateHolder.sendCardData.type as? TransactionCardType.Inputtable),
amountTextFieldValue = uiStateHolder.sendCardData.amountTextFieldValue,
amountEquivalent = emptyAmountState.zeroAmountEquivalent,
token = uiStateHolder.sendCardData.token,
@ -547,7 +549,7 @@ internal class StateBuilder(
isBalanceHidden = isBalanceHiddenProvider(),
),
receiveCardData = SwapCardState.SwapCardData(
type = TransactionCardType.ReceiveCard(),
type = TransactionCardType.ReadOnly(),
amountTextFieldValue = TextFieldValue("0"),
amountEquivalent = emptyAmountState.zeroAmountEquivalent,
token = uiStateHolder.receiveCardData.token,

View file

@ -1,6 +1,5 @@
package com.tangem.feature.swap.ui
import androidx.compose.animation.*
import androidx.compose.foundation.*
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.CircleShape
@ -429,7 +428,7 @@ private fun MainButton(state: SwapStateHolder, onPermissionWarningClick: () -> U
// region preview
private val sendCard = SwapCardState.SwapCardData(
type = TransactionCardType.SendCard({}) {},
type = TransactionCardType.Inputtable({}, {}),
amountTextFieldValue = TextFieldValue(),
amountEquivalent = "1 000 000",
tokenIconUrl = "",
@ -444,7 +443,7 @@ private val sendCard = SwapCardState.SwapCardData(
)
private val receiveCard = SwapCardState.SwapCardData(
type = TransactionCardType.ReceiveCard(),
type = TransactionCardType.ReadOnly(),
amountTextFieldValue = TextFieldValue(),
amountEquivalent = "1 000 000",
tokenIconUrl = "",

View file

@ -182,10 +182,7 @@ private fun Header(type: TransactionCardType, balance: String, modifier: Modifie
horizontalArrangement = Arrangement.SpaceBetween,
verticalAlignment = Alignment.CenterVertically,
) {
val title = when (type) {
is TransactionCardType.ReceiveCard -> R.string.exchange_receive_view_header
is TransactionCardType.SendCard -> R.string.exchange_send_view_header
}
val title = type.headerResId
Text(
text = stringResource(id = title),
color = TangemTheme.colors.text.tertiary,
@ -245,7 +242,7 @@ private fun Content(
) {
val sumTextModifier = Modifier.defaultMinSize(minHeight = TangemTheme.dimens.size32)
when (type) {
is TransactionCardType.ReceiveCard -> {
is TransactionCardType.ReadOnly -> {
if (textFieldValue != null) {
ResizableText(
text = textFieldValue.text,
@ -263,7 +260,7 @@ private fun Content(
)
}
}
is TransactionCardType.SendCard -> {
is TransactionCardType.Inputtable -> {
AutoSizeTextField(
modifier = sumTextModifier,
textFieldValue = textFieldValue ?: TextFieldValue(),
@ -276,7 +273,7 @@ private fun Content(
SpacerH8()
if (amountEquivalent != null) {
if (type is TransactionCardType.ReceiveCard && priceImpact !is PriceImpact.Empty) {
if (type is TransactionCardType.ReadOnly && priceImpact !is PriceImpact.Empty) {
Row {
Text(
text = makePriceImpactBalanceWarning(amountEquivalent, priceImpact.getIntPercentValue()),
@ -485,7 +482,7 @@ private fun Preview_SwapMainCard_InDarkTheme() {
@Composable
private fun TransactionCardPreview() {
TransactionCard(
type = TransactionCardType.SendCard({}) {},
type = TransactionCardType.Inputtable({}, {}),
amountEquivalent = "1 000 000",
tokenIconUrl = "",
tokenCurrency = "DAI",