Updated on 2026-08-14

This commit is contained in:
Tangem 2026-05-14 16:50:03 +05:00
parent 261715f3f9
commit 9f6d8cb6b5
7 changed files with 26 additions and 30 deletions

View file

@ -35,6 +35,7 @@ internal class TangemPayEditDisplayNameComponent(
displayNameState = DisplayNameState.Editing(
displayName = state.editingValue.text,
editingValue = state.editingValue,
isSubmitEnabled = state.isDoneEnabled,
onValueChanged = state.onValueChanged,
onSubmit = state.onDoneClick,
onDismiss = state.onDismiss,

View file

@ -47,6 +47,7 @@ internal sealed interface DisplayNameState {
data class Editing(
override val displayName: String,
val editingValue: TextFieldValue,
val isSubmitEnabled: Boolean,
val onValueChanged: (TextFieldValue) -> Unit,
val onSubmit: () -> Unit,
val onDismiss: () -> Unit,

View file

@ -5,6 +5,7 @@ import androidx.compose.ui.text.input.TextFieldValue
internal data class TangemPayEditDisplayNameUM(
val editingValue: TextFieldValue,
val isLoading: Boolean,
val isDoneEnabled: Boolean,
val onValueChanged: (TextFieldValue) -> Unit,
val onDoneClick: () -> Unit,
val onDismiss: () -> Unit,

View file

@ -49,6 +49,7 @@ internal class TangemPayEditDisplayNameModel @Inject constructor(
selection = TextRange(originalDisplayName.length),
),
isLoading = false,
isDoneEnabled = true,
onValueChanged = ::onValueChanged,
onDoneClick = ::onDoneClick,
onDismiss = ::onDismiss,
@ -84,9 +85,9 @@ internal class TangemPayEditDisplayNameModel @Inject constructor(
}
private fun onValueChanged(value: TextFieldValue) {
if (value.text.length <= CardDisplayName.MAX_LENGTH) {
uiState.update { it.copy(editingValue = value) }
}
val displayName = CardDisplayName(value.text)
val isAvailableForConfirm = displayName.isRight()
uiState.update { it.copy(editingValue = value, isDoneEnabled = isAvailableForConfirm) }
}
private fun onDoneClick() {

View file

@ -50,7 +50,6 @@ import com.tangem.core.ui.extensions.stringResourceSafe
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.core.ui.test.TangemPayTestTags
import com.tangem.domain.models.account.CardDisplayName
import com.tangem.domain.visa.model.TangemPayCardFrozenState
import com.tangem.features.tangempay.details.impl.R
import com.tangem.features.tangempay.entity.DisplayNameState
@ -273,11 +272,7 @@ private fun EditingCardDisplayName(state: DisplayNameState.Editing, modifier: Mo
BasicTextField(
value = state.editingValue,
onValueChange = { newValue ->
if (newValue.text.length <= CardDisplayName.MAX_LENGTH) {
state.onValueChanged(newValue)
}
},
onValueChange = state.onValueChanged,
modifier = modifier
.width(textWidthDp.coerceAtLeast(1.dp))
.focusRequester(focusRequester),
@ -285,7 +280,13 @@ private fun EditingCardDisplayName(state: DisplayNameState.Editing, modifier: Mo
singleLine = true,
cursorBrush = SolidColor(TangemTheme.colors.text.constantWhite),
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done),
keyboardActions = KeyboardActions(onDone = { state.onSubmit() }),
keyboardActions = KeyboardActions(
onDone = if (state.isSubmitEnabled) {
{ state.onSubmit() }
} else {
null
},
),
decorationBox = { innerTextField ->
Box {
if (state.editingValue.text.isEmpty()) {
@ -481,6 +482,7 @@ private class TangemPayCardDetailsUMProvider : CollectionPreviewParameterProvide
displayName = "Tangem",
editingValue = TextFieldValue(text = "movet", selection = TextRange("movet".length)),
onValueChanged = {},
isSubmitEnabled = true,
onSubmit = {},
onDismiss = {},
),
@ -500,6 +502,7 @@ private class TangemPayCardDetailsUMProvider : CollectionPreviewParameterProvide
displayName = "Tangem",
editingValue = TextFieldValue(text = ""),
onValueChanged = {},
isSubmitEnabled = true,
onSubmit = {},
onDismiss = {},
),

View file

@ -106,6 +106,7 @@ internal fun TangemPayDetailsScreen(
TangemPayDetailsBalanceBlock(
modifier = Modifier
.padding(horizontal = TangemTheme.dimens.spacing16)
.padding(top = 12.dp)
.fillMaxWidth(),
state = state.balanceBlockState,
isBalanceHidden = state.isBalanceHidden,

View file

@ -1,25 +1,15 @@
package com.tangem.features.tangempay.ui
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.statusBarsPadding
import androidx.compose.foundation.layout.*
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp
import com.tangem.common.ui.navigationButtons.NavigationButton
import com.tangem.common.ui.navigationButtons.NavigationPrimaryButton
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.components.PrimaryButton
import com.tangem.core.ui.extensions.stringResourceSafe
import com.tangem.core.ui.res.TangemTheme
import com.tangem.features.tangempay.components.cardDetails.TangemPayCardDetailsBlockComponent
import com.tangem.features.tangempay.details.impl.R
@ -66,17 +56,15 @@ internal fun TangemPayEditDisplayNameScreen(
Spacer(modifier = Modifier.weight(1f))
NavigationPrimaryButton(
PrimaryButton(
modifier = Modifier
.imePadding()
.padding(start = 16.dp, end = 16.dp, bottom = 16.dp)
.fillMaxWidth(),
primaryButton = NavigationButton(
textReference = resourceReference(R.string.common_done),
onClick = state.onDoneClick,
shouldShowProgress = state.isLoading,
isEnabled = !state.isLoading && state.editingValue.text.isNotBlank(),
),
text = stringResourceSafe(R.string.common_done),
onClick = state.onDoneClick,
showProgress = state.isLoading,
enabled = !state.isLoading && state.isDoneEnabled,
)
}
}