Updated on 2026-08-14

This commit is contained in:
Tangem 2024-03-29 15:18:29 +05:00
parent 68920e11b5
commit 2754318b8e
9 changed files with 45 additions and 13 deletions

View file

@ -50,4 +50,11 @@ internal class AmountStateFactory(
amountState = state.amountState?.copy(notifications = notifications),
)
}
fun getOnAmountFeeLoadingCancel(): SendUiState {
val state = currentStateProvider()
return state.copy(
amountState = state.amountState?.copy(isFeeLoading = false),
)
}
}

View file

@ -104,7 +104,7 @@ private fun SendNavigationButton(
modifier = Modifier
.clip(RoundedCornerShape(TangemTheme.dimens.radius16))
.background(TangemTheme.colors.button.secondary)
.clickable(enabled = !showProgress) { uiState.clickIntents.onPrevClick() }
.clickable { uiState.clickIntents.onPrevClick() }
.padding(TangemTheme.dimens.spacing12),
)
}

View file

@ -28,6 +28,7 @@ private const val AMOUNT_BUTTONS_KEY = "amountButtonsKey"
internal fun LazyListScope.buttons(
segmentedButtonConfig: PersistentList<SendAmountSegmentedButtonsConfig>,
clickIntents: SendClickIntents,
isMaxButtonEnabled: Boolean,
) {
item(
key = AMOUNT_BUTTONS_KEY,
@ -55,6 +56,7 @@ internal fun LazyListScope.buttons(
}
SecondaryButton(
text = stringResource(R.string.send_max_amount),
enabled = isMaxButtonEnabled,
onClick = {
hapticFeedback.performHapticFeedback(HapticFeedbackType.LongPress)
clickIntents.onMaxValueClick()

View file

@ -22,7 +22,7 @@ import com.tangem.core.ui.utils.rememberDecimalFormat
import com.tangem.features.send.impl.presentation.state.fields.SendTextField
@Composable
internal fun AmountField(sendField: SendTextField.AmountField, isFiat: Boolean) {
internal fun AmountField(sendField: SendTextField.AmountField, isFiat: Boolean, isEnabled: Boolean) {
val decimalFormat = rememberDecimalFormat()
val (primaryValue, secondaryValue) = if (isFiat) {
sendField.fiatValue to sendField.value
@ -47,6 +47,7 @@ internal fun AmountField(sendField: SendTextField.AmountField, isFiat: Boolean)
color = TangemTheme.colors.text.primary1,
textAlign = TextAlign.Center,
),
isEnabled = isEnabled,
placeholderAlignment = TopCenter,
modifier = Modifier
.padding(

View file

@ -63,6 +63,7 @@ internal fun LazyListScope.amountField(
AmountField(
sendField = amountState.amountTextField,
isFiat = amountState.amountTextField.isFiatValue,
isEnabled = !amountState.isFeeLoading,
)
}
}

View file

@ -28,7 +28,11 @@ internal fun SendAmountContent(
.background(TangemTheme.colors.background.tertiary),
) {
amountField(amountState = amountState, isBalanceHiding = isBalanceHiding)
buttons(amountState.segmentedButtonConfig, clickIntents)
buttons(
segmentedButtonConfig = amountState.segmentedButtonConfig,
clickIntents = clickIntents,
isMaxButtonEnabled = !amountState.isFeeLoading,
)
notifications(amountState.notifications)
}
}

View file

@ -482,7 +482,11 @@ internal class SendViewModel @Inject constructor(
// region screen state navigation
override fun popBackStack() = stateRouter.popBackStack()
override fun onBackClick() = stateRouter.onBackClick(isSuccess = uiState.sendState?.isSuccess == true)
override fun onBackClick() {
cancelFeeRequest()
stateRouter.onBackClick(isSuccess = uiState.sendState?.isSuccess == true)
}
override fun onNextClick() {
val currentState = stateRouter.currentState.value
sendOnNextScreenAnalyticSender.send(currentState.type, uiState)
@ -504,7 +508,10 @@ internal class SendViewModel @Inject constructor(
stateRouter.onNextClick()
}
override fun onPrevClick() = stateRouter.onPrevClick()
override fun onPrevClick() {
cancelFeeRequest()
stateRouter.onPrevClick()
}
override fun onQrCodeScanClick() {
analyticsEventHandler.send(SendAnalyticEvents.QrCodeButtonClicked)
@ -541,6 +548,12 @@ internal class SendViewModel @Inject constructor(
false
}
}
private fun cancelFeeRequest() {
viewModelScope.launch(dispatchers.main) {
feeJobHolder.cancel()
}
}
// endregion
// region amount state clicks
@ -691,6 +704,9 @@ internal class SendViewModel @Inject constructor(
updateFeeNotifications()
updateAmountNotifications()
}.saveIn(feeJobHolder)
.invokeOnCompletion {
uiState = amountStateFactory.getOnAmountFeeLoadingCancel()
}
}
private suspend fun checkIfSubtractAvailable() {