@@ -11,6 +11,7 @@ import jp.co.soramitsu.common.address.AddressModel
1111import jp.co.soramitsu.common.address.createAddressModel
1212import jp.co.soramitsu.common.address.createEthereumAddressModel
1313import jp.co.soramitsu.common.resources.ResourceManager
14+ import jp.co.soramitsu.common.utils.flowOf
1415import jp.co.soramitsu.common.utils.orZero
1516import jp.co.soramitsu.common.utils.sumByBigInteger
1617import jp.co.soramitsu.common.validation.CompositeValidation
@@ -25,6 +26,7 @@ import jp.co.soramitsu.runtime.ext.accountIdOf
2526import jp.co.soramitsu.runtime.ext.utilityAsset
2627import jp.co.soramitsu.runtime.multiNetwork.chain.model.Chain
2728import jp.co.soramitsu.runtime.multiNetwork.chain.model.ChainId
29+ import jp.co.soramitsu.runtime.multiNetwork.chain.model.polkadotChainId
2830import jp.co.soramitsu.runtime.state.SingleAssetSharedState
2931import jp.co.soramitsu.staking.api.data.StakingSharedState
3032import jp.co.soramitsu.staking.api.domain.api.AccountIdMap
@@ -144,8 +146,23 @@ class StakingParachainScenarioInteractor(
144146 )
145147
146148 override val stakingStateFlow = stakingInteractor.selectedChainFlow().flatMapConcat { chain ->
147- val accountId = accountRepository.getSelectedMetaAccount().accountId(chain) ? : error(" cannot find accountId" )
148- stakingParachainScenarioRepository.stakingStateFlow(chain, accountId)
149+ val availableStakingSelection = stakingSharedState.availableToSelect()
150+ val isSelectedChainAvailable = availableStakingSelection.any { it.chainId == chain.id }
151+
152+ val useChain = if (isSelectedChainAvailable) {
153+ chain
154+ } else {
155+ val chainId = with (availableStakingSelection) {
156+ firstOrNull { it.chainId == polkadotChainId } ? : first()
157+ }.chainId
158+ availableStakingSelection.firstOrNull { it.chainId == chainId }?.let { newSelection ->
159+ stakingSharedState.update(newSelection)
160+ }
161+ val availableChain = stakingInteractor.getChain(chainId)
162+ availableChain
163+ }
164+ val accountId = accountRepository.getSelectedMetaAccount().accountId(useChain) ? : error(" cannot find accountId" )
165+ stakingParachainScenarioRepository.stakingStateFlow(useChain, accountId)
149166 }
150167
151168 suspend fun getIdentities (collatorsIds : List <AccountId >): Map <String , Identity ?> {
@@ -416,7 +433,7 @@ class StakingParachainScenarioInteractor(
416433 override suspend fun getUnstakeAvailableAmount (asset : Asset , collatorId : AccountId ? ): BigDecimal {
417434 collatorId ? : error(" cannot find collatorId" )
418435
419- val chainToAccountIdFlow = jp.co.soramitsu.common.utils. flowOf {
436+ val chainToAccountIdFlow = flowOf {
420437 val chain = stakingInteractor.getSelectedChain()
421438 val accountId = accountRepository.getSelectedMetaAccount().accountId(chain) ? : error(" cannot find accountId" )
422439 chain to accountId
0 commit comments