Updated on 2026-08-14

This commit is contained in:
Tangem 2026-01-30 15:02:45 +03:00
parent 4226d4e94c
commit aed32a47f1
8 changed files with 50 additions and 25 deletions

View file

@ -16,6 +16,7 @@ import com.tangem.features.walletconnect.transaction.entity.common.WcTransaction
import com.tangem.features.walletconnect.transaction.entity.send.WcSendTransactionItemUM import com.tangem.features.walletconnect.transaction.entity.send.WcSendTransactionItemUM
import com.tangem.features.walletconnect.transaction.entity.send.WcSendTransactionUM import com.tangem.features.walletconnect.transaction.entity.send.WcSendTransactionUM
import com.tangem.features.walletconnect.utils.WcNotificationsFactory import com.tangem.features.walletconnect.utils.WcNotificationsFactory
import com.tangem.domain.models.wallet.isHotWallet
import com.tangem.utils.converter.Converter import com.tangem.utils.converter.Converter
import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableList
import javax.inject.Inject import javax.inject.Inject
@ -62,6 +63,7 @@ internal class WcSendTransactionUMConverter @Inject constructor(
} }
}, },
feeErrorNotification = feeErrorNotification, feeErrorNotification = feeErrorNotification,
isHoldToConfirmEnabled = value.context.session.wallet.isHotWallet,
), ),
feeSelectorUM = when (value.feeState) { feeSelectorUM = when (value.feeState) {
WcTransactionFeeState.None -> FeeSelectorUM.Loading WcTransactionFeeState.None -> FeeSelectorUM.Loading

View file

@ -10,6 +10,7 @@ import com.tangem.features.walletconnect.transaction.entity.common.WcTransaction
import com.tangem.features.walletconnect.transaction.entity.common.WcTransactionRequestInfoUM import com.tangem.features.walletconnect.transaction.entity.common.WcTransactionRequestInfoUM
import com.tangem.features.walletconnect.transaction.entity.sign.WcSignTransactionItemUM import com.tangem.features.walletconnect.transaction.entity.sign.WcSignTransactionItemUM
import com.tangem.features.walletconnect.transaction.entity.sign.WcSignTransactionUM import com.tangem.features.walletconnect.transaction.entity.sign.WcSignTransactionUM
import com.tangem.domain.models.wallet.isHotWallet
import com.tangem.utils.converter.Converter import com.tangem.utils.converter.Converter
import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableList
import javax.inject.Inject import javax.inject.Inject
@ -35,6 +36,7 @@ internal class WcSignTransactionUMConverter @Inject constructor(
isLoading = value.signState.domainStep == WcSignStep.Signing, isLoading = value.signState.domainStep == WcSignStep.Signing,
address = WcAddressConverter.convert(value.context.derivationState), address = WcAddressConverter.convert(value.context.derivationState),
walletInteractionIcon = walletInterationIcon(value.context.session.wallet), walletInteractionIcon = walletInterationIcon(value.context.session.wallet),
isHoldToConfirmEnabled = value.context.session.wallet.isHotWallet,
), ),
transactionRequestInfo = WcTransactionRequestInfoUM( transactionRequestInfo = WcTransactionRequestInfoUM(
requestBlockUMConverter.convert( requestBlockUMConverter.convert(

View file

@ -10,6 +10,7 @@ import com.tangem.features.walletconnect.transaction.entity.common.WcTransaction
import com.tangem.features.walletconnect.transaction.entity.common.WcTransactionRequestInfoUM import com.tangem.features.walletconnect.transaction.entity.common.WcTransactionRequestInfoUM
import com.tangem.features.walletconnect.transaction.entity.sign.WcSignTransactionItemUM import com.tangem.features.walletconnect.transaction.entity.sign.WcSignTransactionItemUM
import com.tangem.features.walletconnect.transaction.entity.sign.WcSignTransactionUM import com.tangem.features.walletconnect.transaction.entity.sign.WcSignTransactionUM
import com.tangem.domain.models.wallet.isHotWallet
import com.tangem.utils.converter.Converter import com.tangem.utils.converter.Converter
import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableList
import javax.inject.Inject import javax.inject.Inject
@ -35,6 +36,7 @@ internal class WcSignTypedDataUMConverter @Inject constructor(
address = WcAddressConverter.convert(value.context.derivationState), address = WcAddressConverter.convert(value.context.derivationState),
isLoading = value.signState.domainStep == WcSignStep.Signing, isLoading = value.signState.domainStep == WcSignStep.Signing,
walletInteractionIcon = walletInterationIcon(value.context.session.wallet), walletInteractionIcon = walletInterationIcon(value.context.session.wallet),
isHoldToConfirmEnabled = value.context.session.wallet.isHotWallet,
), ),
transactionRequestInfo = WcTransactionRequestInfoUM( transactionRequestInfo = WcTransactionRequestInfoUM(
blocks = buildList { blocks = buildList {

View file

@ -34,4 +34,5 @@ internal data class WcSendTransactionItemUM(
val feeErrorNotification: NotificationUM.Info?, val feeErrorNotification: NotificationUM.Info?,
val isLoading: Boolean = false, val isLoading: Boolean = false,
val walletInteractionIcon: Int? = null, val walletInteractionIcon: Int? = null,
val isHoldToConfirmEnabled: Boolean = false,
) : TangemBottomSheetConfigContent ) : TangemBottomSheetConfigContent

View file

@ -21,4 +21,5 @@ internal data class WcSignTransactionItemUM(
val address: String?, val address: String?,
val walletInteractionIcon: Int?, val walletInteractionIcon: Int?,
val isLoading: Boolean = false, val isLoading: Boolean = false,
val isHoldToConfirmEnabled: Boolean = false,
) : TangemBottomSheetConfigContent ) : TangemBottomSheetConfigContent

View file

@ -8,9 +8,11 @@ import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import com.domain.blockaid.models.transaction.ValidationResult import com.domain.blockaid.models.transaction.ValidationResult
import com.tangem.core.ui.components.HoldToConfirmButton
import com.tangem.core.ui.components.PrimaryButton import com.tangem.core.ui.components.PrimaryButton
import com.tangem.core.ui.components.PrimaryButtonIconEnd import com.tangem.core.ui.components.PrimaryButtonIconEnd
import com.tangem.core.ui.components.SecondaryButton import com.tangem.core.ui.components.SecondaryButton
import com.tangem.core.ui.R as CoreR
import com.tangem.core.ui.extensions.TextReference import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.resolveReference import com.tangem.core.ui.extensions.resolveReference
import com.tangem.core.ui.extensions.stringResourceSafe import com.tangem.core.ui.extensions.stringResourceSafe
@ -28,31 +30,43 @@ internal fun WcTransactionRequestButtons(
onClickActiveButton: () -> Unit, onClickActiveButton: () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
enabled: Boolean = true, enabled: Boolean = true,
isHoldToConfirmEnabled: Boolean = false,
) { ) {
WcCommonButtons( WcCommonButtons(
onDismiss = onDismiss, onDismiss = onDismiss,
modifier = modifier, modifier = modifier,
primaryButton = { primaryButton = {
// Before change, make sure you are align with WcSendTransactionModel::onSign val buttonModifier = Modifier
when (validationResult) {
ValidationResult.UNSAFE,
ValidationResult.WARNING,
-> PrimaryButton(
modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.weight(1f), .weight(1f)
// Before change, make sure you are align with WcSendTransactionModel::onSign
when {
validationResult == ValidationResult.UNSAFE ||
validationResult == ValidationResult.WARNING -> {
PrimaryButton(
modifier = buttonModifier,
text = stringResourceSafe(R.string.common_continue), text = stringResourceSafe(R.string.common_continue),
onClick = onClickActiveButton, onClick = onClickActiveButton,
showProgress = isLoading, showProgress = isLoading,
enabled = enabled, enabled = enabled,
) )
ValidationResult.SAFE, }
ValidationResult.FAILED_TO_VALIDATE, isHoldToConfirmEnabled -> {
null, HoldToConfirmButton(
-> PrimaryButtonIconEnd( modifier = buttonModifier,
modifier = Modifier text = stringResourceSafe(
.fillMaxWidth() CoreR.string.common_hold_to,
.weight(1f), activeButtonText.resolveReference(),
),
onConfirm = onClickActiveButton,
isLoading = isLoading,
enabled = enabled,
)
}
else -> {
PrimaryButtonIconEnd(
modifier = buttonModifier,
text = activeButtonText.resolveReference(), text = activeButtonText.resolveReference(),
onClick = onClickActiveButton, onClick = onClickActiveButton,
iconResId = walletInteractionIcon, iconResId = walletInteractionIcon,
@ -60,6 +74,7 @@ internal fun WcTransactionRequestButtons(
enabled = enabled, enabled = enabled,
) )
} }
}
}, },
) )
} }

View file

@ -144,6 +144,7 @@ internal fun WcSendTransactionModalBottomSheet(
enabled = state.sendEnabled, enabled = state.sendEnabled,
walletInteractionIcon = state.walletInteractionIcon, walletInteractionIcon = state.walletInteractionIcon,
validationResult = state.transactionValidationResult, validationResult = state.transactionValidationResult,
isHoldToConfirmEnabled = state.isHoldToConfirmEnabled,
) )
}, },
) )

View file

@ -101,6 +101,7 @@ internal fun WcSignTransactionModalBottomSheetContent(
isLoading = state.isLoading, isLoading = state.isLoading,
walletInteractionIcon = state.walletInteractionIcon, walletInteractionIcon = state.walletInteractionIcon,
validationResult = null, validationResult = null,
isHoldToConfirmEnabled = state.isHoldToConfirmEnabled,
) )
}, },
) )