Updated on 2026-08-14
This commit is contained in:
parent
fd70774d75
commit
e5478ad943
3 changed files with 62 additions and 82 deletions
|
|
@ -101,6 +101,7 @@ internal class WcPairModel @Inject constructor(
|
|||
is WcPairState.Proposal -> {
|
||||
sessionProposal = pairState.dAppSession
|
||||
proposalNetwork = sessionProposal.proposalNetwork.getValue(selectedUserWalletFlow.value)
|
||||
proposalNetwork.available.mapTo(additionallyEnabledNetworks) { it.id.rawId }
|
||||
appInfoUiState.transformerUpdate(
|
||||
WcAppInfoTransformer(
|
||||
dAppSession = sessionProposal,
|
||||
|
|
@ -179,6 +180,7 @@ internal class WcPairModel @Inject constructor(
|
|||
selectedUserWalletFlow.update { selectedUserWallet }
|
||||
appInfoUiState.transformerUpdate(WcAppInfoWalletChangedTransformer(selectedUserWallet, proposalNetwork))
|
||||
additionallyEnabledNetworks.clear()
|
||||
proposalNetwork.available.mapTo(additionallyEnabledNetworks) { it.id.rawId }
|
||||
}
|
||||
|
||||
override fun onNetworksSelected(selectedNetworks: Set<Network.RawID>) {
|
||||
|
|
|
|||
|
|
@ -5,14 +5,16 @@ import com.tangem.core.decompose.di.ModelScoped
|
|||
import com.tangem.core.decompose.model.Model
|
||||
import com.tangem.core.decompose.model.ParamsContainer
|
||||
import com.tangem.core.decompose.navigation.Router
|
||||
import com.tangem.core.ui.extensions.getGreyedOutIconRes
|
||||
import com.tangem.core.ui.extensions.iconResId
|
||||
import com.tangem.domain.models.network.Network
|
||||
import com.tangem.features.walletconnect.connections.components.WcSelectNetworksComponent.WcSelectNetworksParams
|
||||
import com.tangem.features.walletconnect.connections.entity.WcNetworkInfoItem
|
||||
import com.tangem.features.walletconnect.connections.entity.WcSelectNetworksUM
|
||||
import com.tangem.features.walletconnect.connections.model.transformers.WcSelectNetworksCheckedTransformer
|
||||
import com.tangem.features.walletconnect.connections.model.transformers.WcSelectNetworksTransformer
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import com.tangem.utils.transformer.update
|
||||
import kotlinx.collections.immutable.persistentListOf
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.update
|
||||
|
|
@ -27,32 +29,15 @@ internal class WcSelectNetworksModel @Inject constructor(
|
|||
) : Model() {
|
||||
|
||||
private val params = paramsContainer.require<WcSelectNetworksParams>()
|
||||
|
||||
val state: StateFlow<WcSelectNetworksUM>
|
||||
field = MutableStateFlow(
|
||||
WcSelectNetworksUM(
|
||||
missing = persistentListOf(),
|
||||
required = persistentListOf(),
|
||||
available = persistentListOf(),
|
||||
notAdded = persistentListOf(),
|
||||
onDone = ::onDone,
|
||||
private val additionallyEnabledNetworks = MutableStateFlow<Set<Network.RawID>>(
|
||||
filterAdditionallyEnabledNetworks(
|
||||
availableNetworks = params.availableNetworks,
|
||||
additionallyEnabledNetworks = params.enabledAvailableNetworks,
|
||||
),
|
||||
)
|
||||
|
||||
private val additionallyEnabledNetworks = MutableStateFlow<Set<Network.RawID>>(setOf())
|
||||
|
||||
init {
|
||||
state.update(
|
||||
WcSelectNetworksTransformer(
|
||||
missingRequiredNetworks = params.missingRequiredNetworks,
|
||||
requiredNetworks = params.requiredNetworks,
|
||||
availableNetworks = params.availableNetworks,
|
||||
notAddedNetworks = params.notAddedNetworks,
|
||||
enabledNetworks = params.enabledAvailableNetworks,
|
||||
onCheckedChange = ::onCheckedChange,
|
||||
),
|
||||
)
|
||||
}
|
||||
val state: StateFlow<WcSelectNetworksUM>
|
||||
field = MutableStateFlow(getInitialState())
|
||||
|
||||
private fun onCheckedChange(isChecked: Boolean, networkId: String) {
|
||||
additionallyEnabledNetworks.update {
|
||||
|
|
@ -65,4 +50,54 @@ internal class WcSelectNetworksModel @Inject constructor(
|
|||
params.callback.onNetworksSelected(additionallyEnabledNetworks.value)
|
||||
router.pop()
|
||||
}
|
||||
|
||||
private fun filterAdditionallyEnabledNetworks(
|
||||
availableNetworks: Set<Network>,
|
||||
additionallyEnabledNetworks: Set<Network.RawID>,
|
||||
): Set<Network.RawID> {
|
||||
return availableNetworks
|
||||
.asSequence()
|
||||
.filter { it.id.rawId in additionallyEnabledNetworks }
|
||||
.mapTo(hashSetOf()) { it.id.rawId }
|
||||
}
|
||||
|
||||
private fun getInitialState(): WcSelectNetworksUM {
|
||||
return WcSelectNetworksUM(
|
||||
missing = params.missingRequiredNetworks.map { network ->
|
||||
WcNetworkInfoItem.Required(
|
||||
id = network.rawId,
|
||||
icon = network.iconResId,
|
||||
name = network.name,
|
||||
symbol = network.currencySymbol,
|
||||
)
|
||||
}.toImmutableList(),
|
||||
required = params.requiredNetworks.map { network ->
|
||||
WcNetworkInfoItem.Checked(
|
||||
id = network.rawId,
|
||||
icon = network.iconResId,
|
||||
name = network.name,
|
||||
symbol = network.currencySymbol,
|
||||
)
|
||||
}.toImmutableList(),
|
||||
available = params.availableNetworks.map { network ->
|
||||
WcNetworkInfoItem.Checkable(
|
||||
id = network.rawId,
|
||||
icon = network.iconResId,
|
||||
name = network.name,
|
||||
symbol = network.currencySymbol,
|
||||
checked = network.id.rawId in additionallyEnabledNetworks.value,
|
||||
onCheckedChange = { onCheckedChange(it, network.rawId) },
|
||||
)
|
||||
}.toImmutableList(),
|
||||
notAdded = params.notAddedNetworks.map { network ->
|
||||
WcNetworkInfoItem.ReadOnly(
|
||||
id = network.rawId,
|
||||
icon = getGreyedOutIconRes(network.rawId),
|
||||
name = network.name,
|
||||
symbol = network.currencySymbol,
|
||||
)
|
||||
}.toImmutableList(),
|
||||
onDone = ::onDone,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
@ -1,57 +0,0 @@
|
|||
package com.tangem.features.walletconnect.connections.model.transformers
|
||||
|
||||
import com.tangem.core.ui.extensions.getGreyedOutIconRes
|
||||
import com.tangem.core.ui.extensions.iconResId
|
||||
import com.tangem.domain.models.network.Network
|
||||
import com.tangem.features.walletconnect.connections.entity.WcNetworkInfoItem
|
||||
import com.tangem.features.walletconnect.connections.entity.WcSelectNetworksUM
|
||||
import com.tangem.utils.transformer.Transformer
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
|
||||
internal class WcSelectNetworksTransformer(
|
||||
private val missingRequiredNetworks: Set<Network>,
|
||||
private val requiredNetworks: Set<Network>,
|
||||
private val availableNetworks: Set<Network>,
|
||||
private val notAddedNetworks: Set<Network>,
|
||||
private val enabledNetworks: Set<Network.RawID>,
|
||||
private val onCheckedChange: (Boolean, String) -> Unit,
|
||||
) : Transformer<WcSelectNetworksUM> {
|
||||
override fun transform(prevState: WcSelectNetworksUM): WcSelectNetworksUM {
|
||||
return prevState.copy(
|
||||
missing = missingRequiredNetworks.map { network ->
|
||||
WcNetworkInfoItem.Required(
|
||||
id = network.rawId,
|
||||
icon = network.iconResId,
|
||||
name = network.name,
|
||||
symbol = network.currencySymbol,
|
||||
)
|
||||
}.toImmutableList(),
|
||||
required = requiredNetworks.map { network ->
|
||||
WcNetworkInfoItem.Checked(
|
||||
id = network.rawId,
|
||||
icon = network.iconResId,
|
||||
name = network.name,
|
||||
symbol = network.currencySymbol,
|
||||
)
|
||||
}.toImmutableList(),
|
||||
available = availableNetworks.map { network ->
|
||||
WcNetworkInfoItem.Checkable(
|
||||
id = network.rawId,
|
||||
icon = network.iconResId,
|
||||
name = network.name,
|
||||
symbol = network.currencySymbol,
|
||||
checked = network.id.rawId in enabledNetworks,
|
||||
onCheckedChange = { onCheckedChange(it, network.rawId) },
|
||||
)
|
||||
}.toImmutableList(),
|
||||
notAdded = notAddedNetworks.map { network ->
|
||||
WcNetworkInfoItem.ReadOnly(
|
||||
id = network.rawId,
|
||||
icon = getGreyedOutIconRes(network.rawId),
|
||||
name = network.name,
|
||||
symbol = network.currencySymbol,
|
||||
)
|
||||
}.toImmutableList(),
|
||||
)
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue