From 281b5ec956ba95109d95b6126ea55f613d3de8ec Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 24 Jun 2025 14:43:38 +0500 Subject: [PATCH] Updated on 2026-08-14 --- .../ui/amountScreen/ui/AmountBlockV2.kt | 180 ++++++++++++++++++ core/res/src/main/res/values/strings.xml | 4 + core/ui/src/main/res/drawable/ic_scan_16.xml | 13 +- .../send/v2/send/DefaultSendComponent.kt | 2 + .../v2/send/confirm/SendConfirmComponent.kt | 1 + .../v2/send/confirm/model/SendConfirmModel.kt | 7 +- .../v2/send/confirm/ui/SendConfirmContent.kt | 9 +- .../features/send/v2/send/model/SendModel.kt | 1 + .../features/send/v2/send/ui/state/SendUM.kt | 1 + .../amount/SendAmountBlockComponent.kt | 26 ++- .../amount/SendAmountComponentParams.kt | 3 + .../SendDestinationBlockComponent.kt | 1 + .../destination/ui/DestinationBlock.kt | 143 +++++++++++++- 13 files changed, 371 insertions(+), 20 deletions(-) create mode 100644 common/ui/src/main/java/com/tangem/common/ui/amountScreen/ui/AmountBlockV2.kt diff --git a/common/ui/src/main/java/com/tangem/common/ui/amountScreen/ui/AmountBlockV2.kt b/common/ui/src/main/java/com/tangem/common/ui/amountScreen/ui/AmountBlockV2.kt new file mode 100644 index 0000000000..611e613b72 --- /dev/null +++ b/common/ui/src/main/java/com/tangem/common/ui/amountScreen/ui/AmountBlockV2.kt @@ -0,0 +1,180 @@ +package com.tangem.common.ui.amountScreen.ui + +import android.content.res.Configuration +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.* +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.tooling.preview.PreviewParameter +import androidx.compose.ui.tooling.preview.PreviewParameterProvider +import androidx.compose.ui.unit.dp +import com.tangem.common.ui.R +import com.tangem.common.ui.amountScreen.models.AmountState +import com.tangem.common.ui.amountScreen.preview.AmountStatePreviewData +import com.tangem.core.ui.components.currency.icon.CurrencyIcon +import com.tangem.core.ui.components.currency.icon.CurrencyIconState +import com.tangem.core.ui.extensions.TextReference +import com.tangem.core.ui.extensions.resolveReference +import com.tangem.core.ui.extensions.stringResourceSafe +import com.tangem.core.ui.format.bigdecimal.crypto +import com.tangem.core.ui.format.bigdecimal.fiat +import com.tangem.core.ui.format.bigdecimal.format +import com.tangem.core.ui.res.TangemTheme +import com.tangem.core.ui.res.TangemThemePreview + +@Composable +fun AmountBlockV2( + amountState: AmountState, + currencyIconState: CurrencyIconState, + isClickDisabled: Boolean, + isEditingDisabled: Boolean, + onClick: () -> Unit, + modifier: Modifier = Modifier, +) { + if (amountState !is AmountState.Data) return + val amount = amountState.amountTextField + + val cryptoAmount = amount.cryptoAmount.value?.format { + crypto( + symbol = "", + decimals = amount.cryptoAmount.decimals, + ) + }.orEmpty() + + val fiatAmount = amount.fiatAmount.value.format { + fiat( + fiatCurrencySymbol = amount.fiatAmount.currencySymbol, + fiatCurrencyCode = amountState.appCurrency.code, + ) + } + + val (firstAmount, secondAmount) = if (amount.isFiatValue) { + fiatAmount to cryptoAmount + } else { + cryptoAmount to fiatAmount + } + + val title = TextReference.Str( + stringResourceSafe( + R.string.send_from_wallet_name, + amountState.title + .resolveReference(), + ), + ) + val currencyTitle = amount.cryptoAmount.currencySymbol + + AmountBlockV2( + title = title, + balance = amountState.availableBalance, + currencyTitle = currencyTitle, + currencyIconState = currencyIconState, + firstAmount = firstAmount, + secondAmount = secondAmount, + isClickDisabled = isClickDisabled, + isEditingDisabled = isEditingDisabled, + onClick = onClick, + modifier = modifier, + ) +} + +@Suppress("LongParameterList") +@Composable +internal fun AmountBlockV2( + title: TextReference, + balance: TextReference, + currencyTitle: String, + currencyIconState: CurrencyIconState, + firstAmount: String, + secondAmount: String, + isClickDisabled: Boolean, + isEditingDisabled: Boolean, + onClick: () -> Unit, + modifier: Modifier = Modifier, +) { + Column( + modifier = modifier + .clip(TangemTheme.shapes.roundedCornersXMedium) + .background(TangemTheme.colors.background.action) + .clickable(enabled = !isClickDisabled && !isEditingDisabled, onClick = onClick) + .padding(TangemTheme.dimens.spacing16), + ) { + Row { + Text( + text = title.resolveReference(), + style = TangemTheme.typography.body2, + color = TangemTheme.colors.text.tertiary, + ) + Spacer(modifier = modifier.weight(1f)) + Text( + text = balance.resolveReference(), + style = TangemTheme.typography.body2, + color = TangemTheme.colors.text.tertiary, + ) + } + Row( + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier.fillMaxWidth(), + ) { + Column( + verticalArrangement = Arrangement.spacedBy(4.dp), + modifier = Modifier.padding(top = 8.dp), + ) { + Text( + text = firstAmount, + style = TangemTheme.typography.h2, + color = TangemTheme.colors.text.primary1, + ) + Text( + text = secondAmount, + style = TangemTheme.typography.body2, + color = TangemTheme.colors.text.tertiary, + ) + } + Column( + verticalArrangement = Arrangement.spacedBy(2.dp), + horizontalAlignment = Alignment.CenterHorizontally, + modifier = Modifier.padding(top = 6.dp), + ) { + CurrencyIcon( + state = currencyIconState, + modifier = Modifier.padding(horizontal = 14.dp), + ) + Text( + text = currencyTitle, + style = TangemTheme.typography.subtitle2, + color = TangemTheme.colors.text.primary1, + ) + } + } + } +} + +// region Preview +@Preview +@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) +@Composable +private fun AmountBlockPreview(@PreviewParameter(AmountBlockV2PreviewProvider::class) value: AmountState) { + TangemThemePreview { + AmountBlockV2( + amountState = value, + currencyIconState = CurrencyIconState.Empty(), + isClickDisabled = false, + isEditingDisabled = false, + onClick = {}, + ) + } +} + +private class AmountBlockV2PreviewProvider : PreviewParameterProvider { + override val values: Sequence + get() = sequenceOf( + AmountStatePreviewData.amountState, + ) +} +// endregion \ No newline at end of file diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index 46db541274..fc05ef9a38 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -822,6 +822,7 @@ Check your network connection Network fee info unreachable From + From %s Gas limit This is the maximum amount of gas that will be spent to complete a transaction or contract. A gas limit prevents unexpected or unlimited charges when executing a transaction. Gas price @@ -829,6 +830,7 @@ Max Maximum amount Fee up to + Memo: %s Invalid Memo Network fee coverage Nonce @@ -879,6 +881,7 @@ network fee will be covered by using %1$s energy network fee will be reduced by spending %1$s energy including a network fee of %1$s + To address Transaction has been successfully signed and sent to the blockchain node. Wallet balance will be updated in a while %1$s is an asset in the Tron network. To calculate the fee and make a transaction you need to deposit some Tron (TRX) in your account. Amount exceeds balance @@ -888,6 +891,7 @@ Fee exceeds balance Total amount exceeds balance Send any token, and we’ll convert it on the way. Your recipient gets exactly what they need—seamlessly. + Will be sent a recipient Send with swap Transaction sent Prepare to scan card or ring you want to set up. diff --git a/core/ui/src/main/res/drawable/ic_scan_16.xml b/core/ui/src/main/res/drawable/ic_scan_16.xml index 16a9aa2ffb..21e35b19c6 100644 --- a/core/ui/src/main/res/drawable/ic_scan_16.xml +++ b/core/ui/src/main/res/drawable/ic_scan_16.xml @@ -1,10 +1,5 @@ - - + + + + diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/DefaultSendComponent.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/DefaultSendComponent.kt index 36b57ddd7c..d38c5b42a8 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/DefaultSendComponent.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/DefaultSendComponent.kt @@ -206,6 +206,7 @@ internal class DefaultSendComponent @AssistedInject constructor( childStack = childStack, ) }, + isRedesignEnabled = model.uiState.value.isRedesignEnabled, ), ) } else { @@ -225,6 +226,7 @@ internal class DefaultSendComponent @AssistedInject constructor( return if (sendAmount != null && destinationAddress != null && feeCryptoCurrencyStatus != null && cryptoCurrencyStatus != null ) { + // TODO Apply new component [REDACTED_TASK_KEY] SendFeeComponent( appComponentContext = factoryContext, params = SendFeeComponentParams.FeeParams( diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/confirm/SendConfirmComponent.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/confirm/SendConfirmComponent.kt index a7145d5d6e..9a34d59c65 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/confirm/SendConfirmComponent.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/confirm/SendConfirmComponent.kt @@ -65,6 +65,7 @@ internal class SendConfirmComponent( appCurrency = params.appCurrency, blockClickEnableFlow = blockClickEnableFlow.asStateFlow(), predefinedValues = params.predefinedValues, + isRedesignEnabled = model.uiState.value.isRedesignEnabled, ), onResult = model::onAmountResult, onClick = model::showEditAmount, diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/confirm/model/SendConfirmModel.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/confirm/model/SendConfirmModel.kt index d5dcfadac4..a84b4a3fc7 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/confirm/model/SendConfirmModel.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/confirm/model/SendConfirmModel.kt @@ -454,6 +454,7 @@ internal class SendConfirmModel @Inject constructor( } } + @Suppress("LongMethod") private fun configConfirmNavigation() { combine( flow = uiState, @@ -470,7 +471,11 @@ internal class SendConfirmModel @Inject constructor( id = R.string.send_summary_title, formatArgs = wrappedList(params.cryptoCurrencyStatus.currency.name), ), - subtitle = amountUM?.title, + subtitle = if (uiState.value.isRedesignEnabled) { + null + } else { + amountUM?.title + }, backIconRes = R.drawable.ic_close_24, backIconClick = { analyticsEventHandler.send( diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/confirm/ui/SendConfirmContent.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/confirm/ui/SendConfirmContent.kt index 4f13d834a7..a6162f90f2 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/confirm/ui/SendConfirmContent.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/confirm/ui/SendConfirmContent.kt @@ -98,8 +98,13 @@ private fun LazyListScope.blocks( modifier = Modifier.padding(vertical = 12.dp), ) } - destinationBlockComponent.Content(modifier = Modifier) - amountBlockComponent.Content(modifier = Modifier) + if (uiState.isRedesignEnabled) { + amountBlockComponent.Content(modifier = Modifier) + destinationBlockComponent.Content(modifier = Modifier) + } else { + destinationBlockComponent.Content(modifier = Modifier) + amountBlockComponent.Content(modifier = Modifier) + } feeBlockComponent.Content(modifier = Modifier) } } diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/model/SendModel.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/model/SendModel.kt index 9aa5fe4c78..798a2abda2 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/model/SendModel.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/model/SendModel.kt @@ -364,5 +364,6 @@ internal class SendModel @Inject constructor( feeUM = FeeUM.Empty(), confirmUM = ConfirmUM.Empty, navigationUM = NavigationUM.Empty, + isRedesignEnabled = sendFeatureToggles.isSendRedesignEnabled, ) } \ No newline at end of file diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/ui/state/SendUM.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/ui/state/SendUM.kt index 8359df5247..a84a77e878 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/ui/state/SendUM.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/send/ui/state/SendUM.kt @@ -12,4 +12,5 @@ internal data class SendUM( val feeUM: FeeUM, val confirmUM: ConfirmUM, val navigationUM: NavigationUM, + val isRedesignEnabled: Boolean, ) \ No newline at end of file diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/amount/SendAmountBlockComponent.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/amount/SendAmountBlockComponent.kt index b05e56c031..7bf133c215 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/amount/SendAmountBlockComponent.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/amount/SendAmountBlockComponent.kt @@ -6,6 +6,7 @@ import androidx.compose.ui.Modifier import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.tangem.common.ui.amountScreen.models.AmountState import com.tangem.common.ui.amountScreen.ui.AmountBlock +import com.tangem.common.ui.amountScreen.ui.AmountBlockV2 import com.tangem.core.decompose.context.AppComponentContext import com.tangem.core.decompose.model.getOrCreateModel import com.tangem.core.ui.decompose.ComposableContentComponent @@ -37,11 +38,24 @@ internal class SendAmountBlockComponent( val state by model.uiState.collectAsStateWithLifecycle() val isClickEnabled by params.blockClickEnableFlow.collectAsStateWithLifecycle() - AmountBlock( - amountState = state, - isClickDisabled = !isClickEnabled, - isEditingDisabled = params.predefinedValues is PredefinedValues.Content.Deeplink, - onClick = onClick, - ) + if (params.isRedesignEnabled) { + val amountState = state as? AmountState.Data ?: return + + AmountBlockV2( + amountState = state, + currencyIconState = amountState.tokenIconState, + isClickDisabled = !isClickEnabled, + isEditingDisabled = params.predefinedValues is PredefinedValues.Content.Deeplink, + onClick = onClick, + modifier = modifier, + ) + } else { + AmountBlock( + amountState = state, + isClickDisabled = !isClickEnabled, + isEditingDisabled = params.predefinedValues is PredefinedValues.Content.Deeplink, + onClick = onClick, + ) + } } } \ No newline at end of file diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/amount/SendAmountComponentParams.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/amount/SendAmountComponentParams.kt index 7a59f9cfde..a13dcf3ef1 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/amount/SendAmountComponentParams.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/amount/SendAmountComponentParams.kt @@ -18,6 +18,7 @@ internal sealed class SendAmountComponentParams { abstract val appCurrency: AppCurrency abstract val cryptoCurrencyStatus: CryptoCurrencyStatus abstract val predefinedValues: PredefinedValues + abstract val isRedesignEnabled: Boolean data class AmountParams( override val state: AmountState, @@ -26,6 +27,7 @@ internal sealed class SendAmountComponentParams { override val appCurrency: AppCurrency, override val cryptoCurrencyStatus: CryptoCurrencyStatus, override val predefinedValues: PredefinedValues, + override val isRedesignEnabled: Boolean, val callback: ModelCallback, val currentRoute: Flow, val isBalanceHidingFlow: StateFlow, @@ -40,6 +42,7 @@ internal sealed class SendAmountComponentParams { override val appCurrency: AppCurrency, override val cryptoCurrencyStatus: CryptoCurrencyStatus, override val predefinedValues: PredefinedValues, + override val isRedesignEnabled: Boolean, val blockClickEnableFlow: StateFlow, ) : SendAmountComponentParams() } \ No newline at end of file diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/destination/SendDestinationBlockComponent.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/destination/SendDestinationBlockComponent.kt index 5f500027fa..f95975b12b 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/destination/SendDestinationBlockComponent.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/destination/SendDestinationBlockComponent.kt @@ -40,6 +40,7 @@ internal class SendDestinationBlockComponent( destinationUM = state, isClickDisabled = !isClickEnabled, isEditingDisabled = params.predefinedValues is PredefinedValues.Content.Deeplink, + isRedesignEnabled = (params.state as? DestinationUM.Content)?.isRedesignEnabled ?: false, onClick = onClick, ) } diff --git a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/destination/ui/DestinationBlock.kt b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/destination/ui/DestinationBlock.kt index 9fe2722f12..3debd43e2f 100644 --- a/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/destination/ui/DestinationBlock.kt +++ b/features/send-v2/impl/src/main/java/com/tangem/features/send/v2/subcomponents/destination/ui/DestinationBlock.kt @@ -1,26 +1,38 @@ package com.tangem.features.send.v2.subcomponents.destination.ui +import android.content.res.Configuration import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.tooling.preview.PreviewParameter +import androidx.compose.ui.tooling.preview.PreviewParameterProvider import com.tangem.core.ui.components.icons.identicon.IdentIcon +import com.tangem.core.ui.extensions.TextReference import com.tangem.core.ui.extensions.resolveReference +import com.tangem.core.ui.extensions.stringResourceSafe import com.tangem.core.ui.res.TangemTheme +import com.tangem.core.ui.res.TangemThemePreview +import com.tangem.features.send.v2.impl.R +import com.tangem.features.send.v2.subcomponents.destination.ui.state.DestinationRecipientListUM import com.tangem.features.send.v2.subcomponents.destination.ui.state.DestinationTextFieldUM import com.tangem.features.send.v2.subcomponents.destination.ui.state.DestinationUM +import kotlinx.collections.immutable.toImmutableList @Composable internal fun DestinationBlock( destinationUM: DestinationUM, isClickDisabled: Boolean, isEditingDisabled: Boolean, + isRedesignEnabled: Boolean, onClick: () -> Unit, ) { if (destinationUM !is DestinationUM.Content) return @@ -33,8 +45,15 @@ internal fun DestinationBlock( .clickable(enabled = !isClickDisabled && !isEditingDisabled, onClick = onClick) .padding(TangemTheme.dimens.spacing12), ) { - AddressBlock(destinationUM.addressTextField) - MemoBlock(destinationUM.memoTextField) + if (isRedesignEnabled) { + AddressWithMemoBlock( + address = destinationUM.addressTextField, + memo = destinationUM.memoTextField, + ) + } else { + AddressBlock(destinationUM.addressTextField) + MemoBlock(destinationUM.memoTextField) + } } } @@ -84,4 +103,124 @@ private fun MemoBlock(memo: DestinationTextFieldUM.RecipientMemo?) { modifier = Modifier.padding(top = TangemTheme.dimens.spacing8), ) } +} + +@Composable +private fun AddressWithMemoBlock( + address: DestinationTextFieldUM.RecipientAddress, + memo: DestinationTextFieldUM.RecipientMemo?, +) { + Text( + text = stringResourceSafe(R.string.send_to_address), + style = TangemTheme.typography.subtitle2, + color = TangemTheme.colors.text.tertiary, + ) + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(TangemTheme.dimens.spacing24), + modifier = Modifier.padding(top = TangemTheme.dimens.spacing8), + ) { + Text( + modifier = Modifier.weight(1f), + text = address.value, + style = TangemTheme.typography.body2, + color = TangemTheme.colors.text.primary1, + ) + IdentIcon( + address = address.value, + modifier = Modifier + .size(TangemTheme.dimens.size36) + .clip(RoundedCornerShape(TangemTheme.dimens.radius18)) + .background(TangemTheme.colors.background.tertiary), + ) + } + if (memo != null && memo.value.isNotBlank()) { + Text( + text = stringResourceSafe(R.string.send_memo, memo.value), + style = TangemTheme.typography.caption2, + color = TangemTheme.colors.text.tertiary, + modifier = Modifier.padding(top = TangemTheme.dimens.spacing8), + ) + } +} + +@Preview(showBackground = true, widthDp = 360) +@Preview(showBackground = true, widthDp = 360, uiMode = Configuration.UI_MODE_NIGHT_YES) +@Composable +private fun DestinationBlockPreview( + @PreviewParameter(DestinationBlockPreviewProvider::class) state: DestinationUM.Content, +) { + TangemThemePreview { + DestinationBlock( + destinationUM = state, + isClickDisabled = false, + isEditingDisabled = false, + isRedesignEnabled = state.isRedesignEnabled, + onClick = {}, + ) + } +} + +private class DestinationBlockPreviewProvider : PreviewParameterProvider { + override val values: Sequence + get() = sequenceOf( + DestinationUM.Content( + isPrimaryButtonEnabled = true, + addressTextField = DestinationTextFieldUM.RecipientAddress( + value = "0x34B4492A412D84A6E606288f3Bd714b89135D4dE", + keyboardOptions = KeyboardOptions.Default, + placeholder = TextReference.Str("Enter address"), + label = TextReference.Str("Recipient Address"), + isError = false, + error = null, + isValuePasted = false, + ), + memoTextField = DestinationTextFieldUM.RecipientMemo( + value = "Test memo for transaction", + keyboardOptions = KeyboardOptions.Default, + placeholder = TextReference.Str("Enter memo (optional)"), + label = TextReference.Str("Memo"), + isError = false, + error = null, + disabledText = TextReference.Str("Memo disabled"), + isEnabled = true, + isValuePasted = false, + ), + recent = emptyList().toImmutableList(), + wallets = emptyList().toImmutableList(), + networkName = "Ethereum", + isValidating = false, + isInitialized = true, + isRedesignEnabled = false, + ), + DestinationUM.Content( + isPrimaryButtonEnabled = true, + addressTextField = DestinationTextFieldUM.RecipientAddress( + value = "0x34B4492A412D84A6E606288f3Bd714b89135D4dE", + keyboardOptions = KeyboardOptions.Default, + placeholder = TextReference.Str("Enter address"), + label = TextReference.Str("Recipient Address"), + isError = false, + error = null, + isValuePasted = false, + ), + memoTextField = DestinationTextFieldUM.RecipientMemo( + value = "Test memo for transaction", + keyboardOptions = KeyboardOptions.Default, + placeholder = TextReference.Str("Enter memo (optional)"), + label = TextReference.Str("Memo"), + isError = false, + error = null, + disabledText = TextReference.Str("Memo disabled"), + isEnabled = true, + isValuePasted = false, + ), + recent = emptyList().toImmutableList(), + wallets = emptyList().toImmutableList(), + networkName = "Ethereum", + isValidating = false, + isInitialized = true, + isRedesignEnabled = true, + ), + ) } \ No newline at end of file