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.WcSendTransactionUM
import com.tangem.features.walletconnect.utils.WcNotificationsFactory
import com.tangem.domain.models.wallet.isHotWallet
import com.tangem.utils.converter.Converter
import kotlinx.collections.immutable.toImmutableList
import javax.inject.Inject
@ -62,6 +63,7 @@ internal class WcSendTransactionUMConverter @Inject constructor(
}
},
feeErrorNotification = feeErrorNotification,
isHoldToConfirmEnabled = value.context.session.wallet.isHotWallet,
),
feeSelectorUM = when (value.feeState) {
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.sign.WcSignTransactionItemUM
import com.tangem.features.walletconnect.transaction.entity.sign.WcSignTransactionUM
import com.tangem.domain.models.wallet.isHotWallet
import com.tangem.utils.converter.Converter
import kotlinx.collections.immutable.toImmutableList
import javax.inject.Inject
@ -35,6 +36,7 @@ internal class WcSignTransactionUMConverter @Inject constructor(
isLoading = value.signState.domainStep == WcSignStep.Signing,
address = WcAddressConverter.convert(value.context.derivationState),
walletInteractionIcon = walletInterationIcon(value.context.session.wallet),
isHoldToConfirmEnabled = value.context.session.wallet.isHotWallet,
),
transactionRequestInfo = WcTransactionRequestInfoUM(
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.sign.WcSignTransactionItemUM
import com.tangem.features.walletconnect.transaction.entity.sign.WcSignTransactionUM
import com.tangem.domain.models.wallet.isHotWallet
import com.tangem.utils.converter.Converter
import kotlinx.collections.immutable.toImmutableList
import javax.inject.Inject
@ -35,6 +36,7 @@ internal class WcSignTypedDataUMConverter @Inject constructor(
address = WcAddressConverter.convert(value.context.derivationState),
isLoading = value.signState.domainStep == WcSignStep.Signing,
walletInteractionIcon = walletInterationIcon(value.context.session.wallet),
isHoldToConfirmEnabled = value.context.session.wallet.isHotWallet,
),
transactionRequestInfo = WcTransactionRequestInfoUM(
blocks = buildList {

View file

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

View file

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

View file

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

View file

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

View file

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