Updated on 2026-08-14

This commit is contained in:
Tangem 2025-07-23 16:53:37 +07:00
parent 15e7df8d41
commit 4882daf1a2
14 changed files with 79 additions and 33 deletions

View file

@ -91,6 +91,12 @@ internal class DefaultWcRoutingComponent @AssistedInject constructor(
alertType = AlertsComponent.AlertType.UnsupportedMethod { model.innerRouter.pop() },
),
)
is WcInnerRoute.WcDappDisconnected -> AlertsComponent(
childContext,
AlertsComponent.Params(
alertType = AlertsComponent.AlertType.WcDisconnected { model.innerRouter.pop() },
),
)
}
}

View file

@ -26,5 +26,8 @@ internal sealed interface WcInnerRoute : Route {
data class Pair(val request: WcPairRequest) : WcInnerRoute
@Serializable
data class UnsupportedMethodAlert(override val rawRequest: WcSdkSessionRequest) : Method
data object UnsupportedMethodAlert : WcInnerRoute
@Serializable
data object WcDappDisconnected : WcInnerRoute
}

View file

@ -57,7 +57,7 @@ internal class WcRoutingModel @Inject constructor(
WcSolanaMethodName.SendAllTransaction,
-> WcInnerRoute.Send(rawRequest)
is WcMethodName.Unsupported,
-> WcInnerRoute.UnsupportedMethodAlert(rawRequest)
-> WcInnerRoute.UnsupportedMethodAlert
}
}

View file

@ -0,0 +1,16 @@
package com.tangem.features.walletconnect.transaction.converter
import com.tangem.domain.walletconnect.model.HandleMethodError
import com.tangem.features.walletconnect.connections.routing.WcInnerRoute
import com.tangem.utils.converter.Converter
internal object WcHandleMethodErrorConverter :
Converter<HandleMethodError, WcInnerRoute> {
override fun convert(value: HandleMethodError): WcInnerRoute = when (value) {
is HandleMethodError.Unsupported,
is HandleMethodError.UnknownError,
-> WcInnerRoute.UnsupportedMethodAlert
HandleMethodError.UnknownSession -> WcInnerRoute.WcDappDisconnected
}
}

View file

@ -10,9 +10,9 @@ import com.tangem.core.decompose.navigation.Router
import com.tangem.core.ui.clipboard.ClipboardManager
import com.tangem.domain.walletconnect.WcRequestUseCaseFactory
import com.tangem.domain.walletconnect.usecase.method.WcAddNetworkUseCase
import com.tangem.features.walletconnect.connections.routing.WcInnerRoute
import com.tangem.features.walletconnect.transaction.components.common.WcTransactionModelParams
import com.tangem.features.walletconnect.transaction.converter.WcAddEthereumChainUMConverter
import com.tangem.features.walletconnect.transaction.converter.WcHandleMethodErrorConverter
import com.tangem.features.walletconnect.transaction.entity.chain.WcAddEthereumChainUM
import com.tangem.features.walletconnect.transaction.entity.common.WcCommonTransactionModel
import com.tangem.features.walletconnect.transaction.entity.common.WcTransactionActionsUM
@ -45,7 +45,7 @@ internal class WcAddNetworkModel @Inject constructor(
init {
modelScope.launch {
val useCase: WcAddNetworkUseCase = useCaseFactory.createUseCase<WcAddNetworkUseCase>(params.rawRequest)
.onLeft { router.push(WcInnerRoute.UnsupportedMethodAlert(params.rawRequest)) }
.onLeft { router.push(WcHandleMethodErrorConverter.convert(it)) }
.getOrNull() ?: return@launch
_uiState.emit(
wcAddEthereumChainUMConverter.convert(

View file

@ -36,6 +36,7 @@ import com.tangem.features.send.v2.api.params.FeeSelectorParams
import com.tangem.features.walletconnect.connections.routing.WcInnerRoute
import com.tangem.features.walletconnect.transaction.components.common.WcTransactionModelParams
import com.tangem.features.walletconnect.transaction.converter.WcCommonTransactionUMConverter
import com.tangem.features.walletconnect.transaction.converter.WcHandleMethodErrorConverter
import com.tangem.features.walletconnect.transaction.entity.blockaid.WcSendReceiveTransactionCheckResultsUM
import com.tangem.features.walletconnect.transaction.entity.common.WcCommonTransactionModel
import com.tangem.features.walletconnect.transaction.entity.common.WcTransactionActionsUM
@ -84,9 +85,9 @@ internal class WcSendTransactionModel @Inject constructor(
init {
@Suppress("UnusedPrivateMember")
modelScope.launch {
val unknownMethodRunnable = { router.push(WcInnerRoute.UnsupportedMethodAlert(params.rawRequest)) }
val unknownMethodRunnable = { router.push(WcInnerRoute.UnsupportedMethodAlert) }
val useCase = useCaseFactory.createUseCase<WcSignUseCase<*>>(params.rawRequest)
.onLeft { unknownMethodRunnable() }
.onLeft { router.push(WcHandleMethodErrorConverter.convert(it)) }
.getOrNull() ?: return@launch
when (useCase) {
is WcListTransactionUseCase,

View file

@ -14,9 +14,9 @@ import com.tangem.domain.walletconnect.usecase.method.WcMessageSignUseCase
import com.tangem.domain.walletconnect.usecase.method.WcSignState
import com.tangem.domain.walletconnect.usecase.method.WcSignStep
import com.tangem.domain.walletconnect.usecase.method.WcSignUseCase
import com.tangem.features.walletconnect.connections.routing.WcInnerRoute
import com.tangem.features.walletconnect.transaction.components.common.WcTransactionModelParams
import com.tangem.features.walletconnect.transaction.converter.WcCommonTransactionUMConverter
import com.tangem.features.walletconnect.transaction.converter.WcHandleMethodErrorConverter
import com.tangem.features.walletconnect.transaction.entity.common.WcCommonTransactionModel
import com.tangem.features.walletconnect.transaction.entity.common.WcTransactionActionsUM
import com.tangem.features.walletconnect.transaction.entity.sign.WcSignTransactionUM
@ -50,7 +50,7 @@ internal class WcSignTransactionModel @Inject constructor(
init {
modelScope.launch {
val useCase = useCaseFactory.createUseCase<WcMessageSignUseCase>(params.rawRequest)
.onLeft { router.push(WcInnerRoute.UnsupportedMethodAlert(params.rawRequest)) }
.onLeft { router.push(WcHandleMethodErrorConverter.convert(it)) }
.getOrNull() ?: return@launch
useCase.invoke()
.onEach { signState ->