Updated on 2026-08-14
This commit is contained in:
parent
03691635a2
commit
e2b489f0b9
20 changed files with 144 additions and 637 deletions
|
|
@ -27,12 +27,10 @@
|
|||
<ID>MultilineLambdaItParameter:WcSwitchNetworkModel.kt$WcSwitchNetworkModel${ if (it.isExistInWcSession) { router.pop() } else { showErrorDialog(HandleMethodError.RequiredNetwork(it.network.name)) } }</ID>
|
||||
<ID>NamedArguments:WcAddEthereumChainModalBottomSheetContent.kt$WcAddEthereumChainModalBottomSheetContent(state, {}, {}, {})</ID>
|
||||
<ID>NamedArguments:WcAlertsFactory.kt$WcAlertsFactory$createMaliciousDAppAlert(alertType.description, alertType.onClick, alertType.iconType, alertType.iconBgType)</ID>
|
||||
<ID>NamedArguments:WcPairModel.kt$WcPairModel$handlePairState( pairState, portfolios, selected, isAccountMode, )</ID>
|
||||
<ID>NamedArguments:WcSendTransactionModel.kt$WcSendTransactionModel$buildUiState(securityCheck, useCase, signState, isApprovalMethod)</ID>
|
||||
<ID>NestedScopeFunctions:WcSendAndReceiveBlockAidUiConverter.kt$WcSendAndReceiveBlockAidUiConverter$let { spendAllowanceUMConverter.convert( WcSpendAllowanceUMConverter.Input( approvedAmount = it, onLearnMoreClick = value.onApproveLearnMoreClick, ), ) }</ID>
|
||||
<ID>NoNameShadowing:WcNavigationUtils.kt$model</ID>
|
||||
<ID>NullCheckOnMutableProperty:WcCommonTransactionComponentDelegate.kt$WcCommonTransactionComponentDelegate$if (contentStack != null) { val content by contentStack!!.subscribeAsState() BackHandler(onBack = ::onChildBack) content.active.instance.BottomSheet() }</ID>
|
||||
<ID>NullableBooleanCheck:WcPairModel.kt$WcPairModel$isAccountMode ?: false</ID>
|
||||
<ID>NullableToStringCall:WcEstimatedWalletChangeUMConverter.kt$WcEstimatedWalletChangeUMConverter$${value.sign}</ID>
|
||||
<ID>ReusedModifierInstance:DefaultWalletConnectEntryComponent.kt$DefaultWalletConnectEntryComponent$Content(modifier = modifier)</ID>
|
||||
<ID>ReusedModifierInstance:WcAppInfoBS.kt$Box( modifier = modifier .padding(start = 48.dp) .border( width = 2.dp, color = TangemTheme.colors.background.action, shape = CircleShape, ) .padding(2.dp) .background(color = TangemTheme.colors.background.action) .size(20.dp) .clip(CircleShape) .background(color = TangemTheme.colors.icon.primary1.copy(alpha = 0.1F)), ) { Text( modifier = Modifier.align(Alignment.Center), text = "+$remainingCount", style = TangemTheme.typography.overline, color = TangemTheme.colors.text.secondary, ) }</ID>
|
||||
|
|
@ -46,7 +44,6 @@
|
|||
<ID>UnsafeCallOnNullableType:WcPairComponent.kt$WcPairComponent$model.portfolioFetcher!!</ID>
|
||||
<ID>UnsafeCallOnNullableType:WcSignTransactionComponent.kt$WcSignTransactionComponent$content!!</ID>
|
||||
<ID>UnsafeCallOnNullableType:WcTransactionRequestInfoComponent.kt$WcTransactionRequestInfoComponent$content!!</ID>
|
||||
<ID>UseEmptyCounterpart:WcPairModel.kt$WcPairModel$setOf<Network>()</ID>
|
||||
<ID>UseOrEmpty:WcSpendAllowanceUMConverter.kt$WcSpendAllowanceUMConverter$value.approvedAmount.amount?.currencySymbol ?: ""</ID>
|
||||
<ID>UseOrEmpty:WcTransactionCheckErrorItem.kt$notification.text?.resolveReference() ?: ""</ID>
|
||||
</CurrentIssues>
|
||||
|
|
|
|||
|
|
@ -15,11 +15,9 @@ import com.tangem.core.decompose.navigation.inner.InnerRouter
|
|||
import com.tangem.core.ui.components.bottomsheets.message.MessageBottomSheetUMV2
|
||||
import com.tangem.core.ui.decompose.ComposableBottomSheetComponent
|
||||
import com.tangem.core.ui.decompose.ComposableContentComponent
|
||||
import com.tangem.domain.walletconnect.model.WcPairRequest
|
||||
import com.tangem.domain.models.wallet.UserWalletId
|
||||
import com.tangem.domain.walletconnect.model.WcPairRequest
|
||||
import com.tangem.features.account.PortfolioSelectorComponent
|
||||
import com.tangem.features.walletconnect.connections.components.WcSelectNetworksComponent.*
|
||||
import com.tangem.features.walletconnect.connections.components.WcSelectWalletComponent.*
|
||||
import com.tangem.features.walletconnect.connections.model.WcPairModel
|
||||
import com.tangem.features.walletconnect.connections.routes.WcAppInfoRoutes
|
||||
import com.tangem.features.walletconnect.connections.routes.WcAppInfoRoutes.Alert
|
||||
|
|
@ -115,7 +113,7 @@ internal class WcPairComponent(
|
|||
WcAppInfoRoutes.PortfolioSelector -> portfolioSelectorComponentFactory.create(
|
||||
context = appComponentContext,
|
||||
params = PortfolioSelectorComponent.Params(
|
||||
portfolioFetcher = model.portfolioFetcher!!,
|
||||
portfolioFetcher = model.portfolioFetcher,
|
||||
bsCallback = model.portfolioSelectorCallback,
|
||||
controller = model.selectorController,
|
||||
),
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ import com.tangem.core.ui.message.DialogMessage
|
|||
import com.tangem.core.ui.message.EventMessageAction
|
||||
import com.tangem.core.ui.message.SnackbarMessage
|
||||
import com.tangem.core.ui.res.TangemTheme
|
||||
import com.tangem.domain.account.featuretoggle.AccountsFeatureToggles
|
||||
import com.tangem.domain.account.supplier.MultiAccountListSupplier
|
||||
import com.tangem.domain.account.usecase.IsAccountsModeEnabledUseCase
|
||||
import com.tangem.domain.qrscanning.models.QrResultSource
|
||||
|
|
@ -55,7 +54,6 @@ internal class WcConnectionsModel @Inject constructor(
|
|||
private val wcDisconnectUseCase: WcDisconnectUseCase,
|
||||
private val multiAccountListSupplier: MultiAccountListSupplier,
|
||||
private val isAccountsModeEnabledUseCase: IsAccountsModeEnabledUseCase,
|
||||
accountsFeatureToggles: AccountsFeatureToggles,
|
||||
private val wcPairService: WcPairService,
|
||||
override val dispatchers: CoroutineDispatcherProvider,
|
||||
analytics: AnalyticsEventHandler,
|
||||
|
|
@ -70,11 +68,7 @@ internal class WcConnectionsModel @Inject constructor(
|
|||
init {
|
||||
analytics.send(WcAnalyticEvents.ScreenOpened())
|
||||
listenQrUpdates()
|
||||
if (accountsFeatureToggles.isFeatureEnabled) {
|
||||
listenWcSessions()
|
||||
} else {
|
||||
listenWcSessionsOld()
|
||||
}
|
||||
listenWcSessions()
|
||||
}
|
||||
|
||||
private fun listenQrUpdates() {
|
||||
|
|
@ -98,21 +92,6 @@ internal class WcConnectionsModel @Inject constructor(
|
|||
.launchIn(modelScope)
|
||||
}
|
||||
|
||||
private fun listenWcSessionsOld() {
|
||||
wcSessionsUseCase.invoke()
|
||||
.conflate()
|
||||
.distinctUntilChanged()
|
||||
.onEach { sessionsMap ->
|
||||
uiState.update(
|
||||
WcSessionsTransformer(
|
||||
sessionsMap = sessionsMap,
|
||||
openAppInfoModal = ::openAppInfoModal,
|
||||
),
|
||||
)
|
||||
}
|
||||
.launchIn(modelScope)
|
||||
}
|
||||
|
||||
private fun listenWcSessions() {
|
||||
combine(
|
||||
flow = wcSessionsUseCase.invoke().distinctUntilChanged(),
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@ import com.tangem.core.ui.extensions.stringReference
|
|||
import com.tangem.core.ui.extensions.wrappedList
|
||||
import com.tangem.core.ui.message.SnackbarMessage
|
||||
import com.tangem.core.ui.message.ToastMessage
|
||||
import com.tangem.domain.account.featuretoggle.AccountsFeatureToggles
|
||||
import com.tangem.domain.account.producer.SingleAccountListProducer
|
||||
import com.tangem.domain.account.supplier.SingleAccountListSupplier
|
||||
import com.tangem.domain.account.usecase.IsAccountsModeEnabledUseCase
|
||||
|
|
@ -75,7 +74,6 @@ internal class WcPairModel @Inject constructor(
|
|||
private val messageSender: UiMessageSender,
|
||||
override val dispatchers: CoroutineDispatcherProvider,
|
||||
private val analytics: AnalyticsEventHandler,
|
||||
private val accountsFeatureToggles: AccountsFeatureToggles,
|
||||
val selectorController: PortfolioSelectorController,
|
||||
private val singleAccountListSupplier: SingleAccountListSupplier,
|
||||
private val isAccountsModeEnabledUseCase: IsAccountsModeEnabledUseCase,
|
||||
|
|
@ -95,7 +93,10 @@ internal class WcPairModel @Inject constructor(
|
|||
)
|
||||
|
||||
val stackNavigation = StackNavigation<WcAppInfoRoutes>()
|
||||
val portfolioFetcher: PortfolioFetcher?
|
||||
val portfolioFetcher: PortfolioFetcher = portfolioFetcherFactory.create(
|
||||
mode = PortfolioFetcher.Mode.All(isOnlyMultiCurrency = true),
|
||||
scope = modelScope,
|
||||
)
|
||||
val portfolioSelectorCallback = object : PortfolioSelectorComponent.BottomSheetCallback {
|
||||
override val onDismiss: () -> Unit = { stackNavigation.pop() }
|
||||
override val onBack: () -> Unit = { stackNavigation.pop() }
|
||||
|
|
@ -110,32 +111,23 @@ internal class WcPairModel @Inject constructor(
|
|||
)
|
||||
private var proposalNetwork by Delegates.notNull<WcSessionProposal.ProposalNetwork>()
|
||||
private var sessionProposal by Delegates.notNull<WcSessionProposal>()
|
||||
private var additionallyEnabledNetworks = setOf<Network>()
|
||||
private var additionallyEnabledNetworks = emptySet<Network>()
|
||||
private val dAppVerifiedStateConverter = WcDAppVerifiedStateConverter(onVerifiedClick = ::showVerifiedAlert)
|
||||
|
||||
val appInfoUiState: StateFlow<WcAppInfoUM>
|
||||
field = MutableStateFlow<WcAppInfoUM>(createLoadingState())
|
||||
|
||||
init {
|
||||
if (accountsFeatureToggles.isFeatureEnabled) {
|
||||
portfolioFetcher = portfolioFetcherFactory.create(
|
||||
mode = PortfolioFetcher.Mode.All(isOnlyMultiCurrency = true),
|
||||
scope = modelScope,
|
||||
)
|
||||
modelScope.launch {
|
||||
val params = SingleAccountListProducer.Params(params.userWalletId)
|
||||
val accountList = singleAccountListSupplier.getSyncOrNull(params)
|
||||
if (accountList == null) {
|
||||
router.pop()
|
||||
return@launch
|
||||
}
|
||||
val firstAccount = accountList.accounts.first()
|
||||
selectorController.selectAccount(firstAccount.accountId)
|
||||
combineFlows(portfolioFetcher)
|
||||
modelScope.launch {
|
||||
val params = SingleAccountListProducer.Params(params.userWalletId)
|
||||
val accountList = singleAccountListSupplier.getSyncOrNull(params)
|
||||
if (accountList == null) {
|
||||
router.pop()
|
||||
return@launch
|
||||
}
|
||||
} else {
|
||||
portfolioFetcher = null
|
||||
loadDAppInfo()
|
||||
val firstAccount = accountList.accounts.first()
|
||||
selectorController.selectAccount(firstAccount.accountId)
|
||||
combineFlows(portfolioFetcher)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -151,22 +143,16 @@ internal class WcPairModel @Inject constructor(
|
|||
flow4 = isAccountsModeEnabledUseCase(),
|
||||
transform = { portfolios, selected, pairState, isAccountMode ->
|
||||
handlePairState(
|
||||
pairState,
|
||||
portfolios,
|
||||
selected,
|
||||
isAccountMode,
|
||||
pairState = pairState,
|
||||
portfolios = portfolios,
|
||||
selected = selected,
|
||||
isAccountMode = isAccountMode,
|
||||
)
|
||||
},
|
||||
)
|
||||
.launchIn(modelScope)
|
||||
}
|
||||
|
||||
private fun loadDAppInfo() {
|
||||
wcPairUseCase()
|
||||
.onEach { pairState -> handlePairState(pairState) }
|
||||
.launchIn(modelScope)
|
||||
}
|
||||
|
||||
private suspend fun handlePairState(
|
||||
pairState: WcPairState,
|
||||
portfolios: PortfolioFetcher.Data? = null,
|
||||
|
|
@ -193,7 +179,7 @@ internal class WcPairModel @Inject constructor(
|
|||
)
|
||||
processError(pairState.error)
|
||||
}
|
||||
is WcPairState.Loading -> appInfoUiState.update { createLoadingState(isAccountMode ?: false) }
|
||||
is WcPairState.Loading -> appInfoUiState.update { createLoadingState(isAccountMode == true) }
|
||||
is WcPairState.Proposal -> handleProposalState(
|
||||
pairState = pairState,
|
||||
portfolios = portfolios,
|
||||
|
|
@ -225,7 +211,7 @@ internal class WcPairModel @Inject constructor(
|
|||
} else {
|
||||
val portfolioSelectRow = tryToCreatePortfolioSelectRow(selected, portfolios)
|
||||
if (proposalAccountNetwork != null) {
|
||||
selectorController.isEnabled.value = { wallet, account ->
|
||||
selectorController.isEnabled.value = { _, account ->
|
||||
proposalAccountNetwork.contains(account.account.accountId)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue