diff --git a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/model/WcPairModel.kt b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/model/WcPairModel.kt index a8c67a9ce6..0167da0484 100644 --- a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/model/WcPairModel.kt +++ b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/model/WcPairModel.kt @@ -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) { diff --git a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/model/WcSelectNetworksModel.kt b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/model/WcSelectNetworksModel.kt index fb3a664462..ba3466ee86 100644 --- a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/model/WcSelectNetworksModel.kt +++ b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/model/WcSelectNetworksModel.kt @@ -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() - - val state: StateFlow - field = MutableStateFlow( - WcSelectNetworksUM( - missing = persistentListOf(), - required = persistentListOf(), - available = persistentListOf(), - notAdded = persistentListOf(), - onDone = ::onDone, + private val additionallyEnabledNetworks = MutableStateFlow>( + filterAdditionallyEnabledNetworks( + availableNetworks = params.availableNetworks, + additionallyEnabledNetworks = params.enabledAvailableNetworks, ), ) - private val additionallyEnabledNetworks = MutableStateFlow>(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 + 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, + additionallyEnabledNetworks: Set, + ): Set { + 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, + ) + } } \ No newline at end of file diff --git a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/model/transformers/WcSelectNetworksTransformer.kt b/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/model/transformers/WcSelectNetworksTransformer.kt deleted file mode 100644 index 68e07039c3..0000000000 --- a/features/walletconnect/impl/src/main/kotlin/com/tangem/features/walletconnect/connections/model/transformers/WcSelectNetworksTransformer.kt +++ /dev/null @@ -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, - private val requiredNetworks: Set, - private val availableNetworks: Set, - private val notAddedNetworks: Set, - private val enabledNetworks: Set, - private val onCheckedChange: (Boolean, String) -> Unit, -) : Transformer { - 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(), - ) - } -} \ No newline at end of file