Updated on 2026-08-14

This commit is contained in:
Tangem 2024-06-06 21:02:59 +05:00
parent 77654b7814
commit cd5904764e
9 changed files with 30 additions and 30 deletions

View file

@ -19,7 +19,7 @@ import com.tangem.core.ui.res.TangemThemePreview
/**
* Amount screen with field
* * @param amountState amount state
* @param amountState amount state
* @param isBalanceHiding flag hidden balances
* @param clickIntents amount screen clicks
*/

View file

@ -6,7 +6,7 @@ import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.KeyboardType
import com.tangem.common.ui.R
import com.tangem.common.ui.amountScreen.AmountScreenClickIntents
import com.tangem.common.ui.amountScreen.models.AmountField
import com.tangem.common.ui.amountScreen.models.AmountFieldModel
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.utils.parseBigDecimal
import com.tangem.domain.appcurrency.model.AppCurrency
@ -30,9 +30,9 @@ class AmountFieldConverter(
private val clickIntents: AmountScreenClickIntents,
private val cryptoCurrencyStatusProvider: Provider<CryptoCurrencyStatus>,
private val appCurrencyProvider: Provider<AppCurrency>,
) : Converter<String, AmountField> {
) : Converter<String, AmountFieldModel> {
override fun convert(value: String): AmountField {
override fun convert(value: String): AmountFieldModel {
val cryptoCurrencyStatus = cryptoCurrencyStatusProvider()
val cryptoDecimal = value.toBigDecimalOrNull() ?: BigDecimal.ZERO
val cryptoAmount = cryptoDecimal.convertToAmount(cryptoCurrencyStatus.currency)
@ -47,7 +47,7 @@ class AmountFieldConverter(
}
}
val isDoneActionEnabled = !cryptoDecimal.isNullOrZero()
return AmountField(
return AmountFieldModel(
value = value,
fiatValue = fiatValue,
onValueChange = clickIntents::onAmountValueChange,

View file

@ -22,7 +22,7 @@ import com.tangem.domain.tokens.model.Amount
* @param isError indicates is value invalid
* @param error error text
*/
data class AmountField(
data class AmountFieldModel(
val value: String,
val onValueChange: (String) -> Unit,
val keyboardOptions: KeyboardOptions,

View file

@ -27,6 +27,6 @@ data class AmountState(
val segmentedButtonConfig: PersistentList<AmountSegmentedButtonsConfig>,
val selectedButton: Int,
val isSegmentedButtonsEnabled: Boolean,
val amountTextField: AmountField,
val amountTextField: AmountFieldModel,
val appCurrencyCode: String,
)

View file

@ -2,7 +2,7 @@ package com.tangem.common.ui.amountScreen.preview
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
import com.tangem.common.ui.amountScreen.models.AmountField
import com.tangem.common.ui.amountScreen.models.AmountFieldModel
import com.tangem.common.ui.amountScreen.models.AmountSegmentedButtonsConfig
import com.tangem.common.ui.amountScreen.models.AmountState
import com.tangem.core.ui.components.currency.tokenicon.TokenIconState
@ -32,7 +32,7 @@ object AmountStatePreviewData {
),
),
appCurrencyCode = "usd",
amountTextField = AmountField(
amountTextField = AmountFieldModel(
value = "",
onValueChange = {},
keyboardOptions = KeyboardOptions.Default,

View file

@ -53,7 +53,7 @@ internal fun LazyListScope.buttons(
initialSelectedItem = segmentedButtonConfig.getOrNull(selectedButton),
isEnabled = isSegmentedButtonsEnabled,
) {
SendAmountCurrencyButton(
AmountCurrencyButton(
button = it,
isSegmentedButtonsEnabled = isSegmentedButtonsEnabled,
)
@ -84,7 +84,7 @@ internal fun LazyListScope.buttons(
}
@Composable
private fun SendAmountCurrencyButton(button: AmountSegmentedButtonsConfig, isSegmentedButtonsEnabled: Boolean) {
private fun AmountCurrencyButton(button: AmountSegmentedButtonsConfig, isSegmentedButtonsEnabled: Boolean) {
Row(
modifier = Modifier
.fillMaxSize()

View file

@ -16,7 +16,7 @@ import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextDirection
import com.tangem.common.ui.amountScreen.models.AmountField
import com.tangem.common.ui.amountScreen.models.AmountFieldModel
import com.tangem.core.ui.components.fields.AmountTextField
import com.tangem.core.ui.components.fields.visualtransformations.AmountVisualTransformation
import com.tangem.core.ui.extensions.TextReference
@ -27,14 +27,14 @@ import com.tangem.core.ui.utils.rememberDecimalFormat
import kotlinx.coroutines.delay
@Composable
internal fun AmountField(sendField: AmountField, appCurrencyCode: String) {
internal fun AmountField(amountField: AmountFieldModel, appCurrencyCode: String) {
val decimalFormat = rememberDecimalFormat()
val isFiatValue = sendField.isFiatValue
val isFiatValue = amountField.isFiatValue
val currencyCode = if (isFiatValue) appCurrencyCode else null
val (primaryAmount, primaryValue) = if (isFiatValue) {
sendField.fiatAmount to sendField.fiatValue
amountField.fiatAmount to amountField.fiatValue
} else {
sendField.cryptoAmount to sendField.value
amountField.cryptoAmount to amountField.value
}
val requester = remember { FocusRequester() }
@ -47,16 +47,16 @@ internal fun AmountField(sendField: AmountField, appCurrencyCode: String) {
currencyCode = currencyCode,
decimalFormat = decimalFormat,
),
onValueChange = sendField.onValueChange,
keyboardOptions = sendField.keyboardOptions,
keyboardActions = sendField.keyboardActions,
onValueChange = amountField.onValueChange,
keyboardOptions = amountField.keyboardOptions,
keyboardActions = amountField.keyboardActions,
textStyle = TangemTheme.typography.h2.copy(
color = TangemTheme.colors.text.primary1,
textAlign = TextAlign.Center,
),
isAutoResize = true,
isValuePasted = sendField.isValuePasted,
onValuePastedTriggerDismiss = sendField.onValuePastedTriggerDismiss,
isValuePasted = amountField.isValuePasted,
onValuePastedTriggerDismiss = amountField.onValuePastedTriggerDismiss,
modifier = Modifier
.focusRequester(requester)
.padding(
@ -72,12 +72,12 @@ internal fun AmountField(sendField: AmountField, appCurrencyCode: String) {
requester.requestFocus()
}
AmountSecondary(sendField, appCurrencyCode)
AmountSecondary(amountField, appCurrencyCode)
}
@Composable
private fun AmountSecondary(sendField: AmountField, appCurrencyCode: String) {
val secondaryAmount = if (sendField.isFiatValue) sendField.cryptoAmount else sendField.fiatAmount
private fun AmountSecondary(amountField: AmountFieldModel, appCurrencyCode: String) {
val secondaryAmount = if (amountField.isFiatValue) amountField.cryptoAmount else amountField.fiatAmount
Box(
modifier = Modifier
.padding(
@ -86,7 +86,7 @@ private fun AmountSecondary(sendField: AmountField, appCurrencyCode: String) {
end = TangemTheme.dimens.spacing12,
),
) {
val text = if (sendField.isFiatValue) {
val text = if (amountField.isFiatValue) {
BigDecimalFormatter.formatCryptoAmount(
cryptoAmount = secondaryAmount.value,
cryptoCurrency = secondaryAmount.currencySymbol,
@ -109,8 +109,8 @@ private fun AmountSecondary(sendField: AmountField, appCurrencyCode: String) {
.padding(bottom = TangemTheme.dimens.spacing32),
)
AmountFieldError(
isError = sendField.isError,
error = sendField.error,
isError = amountField.isError,
error = amountField.error,
modifier = Modifier
.align(BottomCenter)
.padding(bottom = TangemTheme.dimens.spacing12),

View file

@ -61,7 +61,7 @@ internal fun LazyListScope.amountField(
.padding(top = TangemTheme.dimens.spacing32),
)
AmountField(
sendField = amountState.amountTextField,
amountField = amountState.amountTextField,
appCurrencyCode = amountState.appCurrencyCode,
)
}

View file

@ -1,7 +1,7 @@
package com.tangem.common.ui.amountScreen.utils
import androidx.compose.ui.text.input.ImeAction
import com.tangem.common.ui.amountScreen.models.AmountField
import com.tangem.common.ui.amountScreen.models.AmountFieldModel
import com.tangem.core.ui.utils.parseBigDecimal
import com.tangem.core.ui.utils.parseToBigDecimal
import com.tangem.domain.tokens.model.CryptoCurrencyStatus
@ -38,7 +38,7 @@ internal fun String.getFiatValue(
internal fun String.checkExceedBalance(
cryptoCurrencyStatus: CryptoCurrencyStatus,
amountTextField: AmountField,
amountTextField: AmountFieldModel,
): Boolean {
val currencyCryptoAmount = cryptoCurrencyStatus.value.amount ?: BigDecimal.ZERO
val currencyFiatAmount = cryptoCurrencyStatus.value.fiatAmount ?: BigDecimal.ZERO