Updated on 2026-08-14

This commit is contained in:
Tangem 2024-04-23 17:27:39 +05:00
parent 2f2a8b04b5
commit 37a224169c
13 changed files with 75 additions and 33 deletions

View file

@ -33,6 +33,11 @@ internal class AmountStateFactory(
cryptoCurrencyStatusProvider = cryptoCurrencyStatusProvider,
)
}
private val amountPasteConverter by lazy(LazyThreadSafetyMode.NONE) {
SendAmountPastedTriggerDismissConverter(
currentStateProvider = currentStateProvider,
)
}
fun getOnAmountValueChange(value: String) = amountFieldChangeConverter.convert(value)
@ -41,4 +46,6 @@ internal class AmountStateFactory(
}
fun getOnCurrencyChangedState(isFiat: Boolean) = amountCurrencyConverter.convert(isFiat)
fun getOnAmountPastedTriggerDismiss() = amountPasteConverter.convert(false)
}

View file

@ -24,6 +24,7 @@ internal class SendAmountCurrencyConverter(
amountState = amountState.copy(
amountTextField = amountTextField.copy(
isFiatValue = value,
isValuePasted = true,
),
),
)

View file

@ -0,0 +1,21 @@
package com.tangem.features.send.impl.presentation.state.amount
import com.tangem.features.send.impl.presentation.state.SendUiState
import com.tangem.utils.Provider
import com.tangem.utils.converter.Converter
internal class SendAmountPastedTriggerDismissConverter(
private val currentStateProvider: Provider<SendUiState>,
) : Converter<Boolean, SendUiState> {
override fun convert(value: Boolean): SendUiState {
val state = currentStateProvider()
val amountState = state.amountState ?: return state
return state.copy(
amountState = amountState.copy(
amountTextField = amountState.amountTextField.copy(
isValuePasted = false,
),
),
)
}
}

View file

@ -55,6 +55,8 @@ internal class SendAmountFieldConverter(
isError = false,
error = TextReference.Res(R.string.swapping_insufficient_funds),
isFiatUnavailable = fiatRate == null,
isValuePasted = false,
onValuePastedTriggerDismiss = clickIntents::onAmountPasteTriggerDismiss,
)
}

View file

@ -35,6 +35,7 @@ internal class SendAmountFieldMaxAmountConverter(
amountState = amountState.copy(
isPrimaryButtonEnabled = true,
amountTextField = amountTextField.copy(
isValuePasted = true,
value = cryptoValue,
fiatValue = fiatValue,
isError = false,

View file

@ -28,6 +28,8 @@ internal sealed class SendTextField {
val isFiatValue: Boolean,
val fiatValue: String,
val isFiatUnavailable: Boolean,
val isValuePasted: Boolean,
val onValuePastedTriggerDismiss: () -> Unit,
val isError: Boolean,
val error: TextReference,
) : SendTextField()

View file

@ -45,6 +45,8 @@ internal object AmountStatePreviewData {
isFiatUnavailable = false,
isError = false,
error = TextReference.EMPTY,
isValuePasted = false,
onValuePastedTriggerDismiss = {},
),
isSegmentedButtonsEnabled = true,
)

View file

@ -30,6 +30,8 @@ internal object SendClickIntentsStub : SendClickIntents {
override fun onMaxValueClick() {}
override fun onAmountPasteTriggerDismiss() {}
override fun onRecipientAddressValueChange(value: String, type: EnterAddressSource?) {}
override fun onRecipientMemoValueChange(value: String) {}

View file

@ -53,6 +53,8 @@ internal fun AmountField(sendField: SendTextField.AmountField, appCurrencyCode:
textAlign = TextAlign.Center,
),
isAutoResize = true,
isValuePasted = sendField.isValuePasted,
onValuePastedTriggerDismiss = sendField.onValuePastedTriggerDismiss,
modifier = Modifier
.focusRequester(requester)
.padding(

View file

@ -30,6 +30,8 @@ internal interface SendClickIntents {
fun onCurrencyChangeClick(isFiat: Boolean)
fun onMaxValueClick()
fun onAmountPasteTriggerDismiss()
// endregion
// region Recipient

View file

@ -551,6 +551,10 @@ internal class SendViewModel @Inject constructor(
uiState = amountStateFactory.getOnMaxAmountClick()
analyticsEventHandler.send(SendAnalyticEvents.MaxAmountButtonClicked)
}
override fun onAmountPasteTriggerDismiss() {
uiState = amountStateFactory.getOnAmountPastedTriggerDismiss()
}
// endregion
// region recipient state clicks