@@ -9,6 +9,7 @@ import androidx.lifecycle.asFlow
99import  androidx.navigation.NavController 
1010import  androidx.navigation.NavDeepLinkRequest 
1111import  androidx.navigation.NavOptions 
12+ import  it.airgap.beaconsdk.blockchain.substrate.data.SubstrateSignerPayload 
1213import  jp.co.soramitsu.account.api.presentation.account.create.ChainAccountCreatePayload 
1314import  jp.co.soramitsu.account.api.presentation.actions.AddAccountBottomSheet 
1415import  jp.co.soramitsu.account.impl.domain.account.details.AccountInChain 
@@ -18,6 +19,7 @@ import jp.co.soramitsu.account.impl.presentation.account.export.WalletExportFrag
1819import  jp.co.soramitsu.account.impl.presentation.account.exportaccounts.AccountsForExportFragment 
1920import  jp.co.soramitsu.account.impl.presentation.account.list.AccountChosenNavDirection 
2021import  jp.co.soramitsu.account.impl.presentation.account.list.AccountListFragment 
22+ import  jp.co.soramitsu.account.impl.presentation.experimental.SuccessfulFragment 
2123import  jp.co.soramitsu.account.impl.presentation.exporting.json.confirm.ExportJsonConfirmFragment 
2224import  jp.co.soramitsu.account.impl.presentation.exporting.json.confirm.ExportJsonConfirmPayload 
2325import  jp.co.soramitsu.account.impl.presentation.exporting.json.password.ExportJsonPasswordFragment 
@@ -35,8 +37,6 @@ import jp.co.soramitsu.account.impl.presentation.optionsaddaccount.OptionsAddAcc
3537import  jp.co.soramitsu.account.impl.presentation.pincode.PinCodeAction 
3638import  jp.co.soramitsu.account.impl.presentation.pincode.PincodeFragment 
3739import  jp.co.soramitsu.account.impl.presentation.pincode.ToolbarConfiguration 
38- import  it.airgap.beaconsdk.blockchain.substrate.data.SubstrateSignerPayload 
39- import  jp.co.soramitsu.account.impl.presentation.experimental.SuccessfulFragment 
4040import  jp.co.soramitsu.app.R 
4141import  jp.co.soramitsu.app.root.presentation.AlertFragment 
4242import  jp.co.soramitsu.app.root.presentation.RootRouter 
@@ -58,10 +58,15 @@ import jp.co.soramitsu.crowdloan.impl.presentation.contribute.custom.CustomContr
5858import  jp.co.soramitsu.crowdloan.impl.presentation.contribute.custom.model.CustomContributePayload 
5959import  jp.co.soramitsu.crowdloan.impl.presentation.contribute.select.CrowdloanContributeFragment 
6060import  jp.co.soramitsu.crowdloan.impl.presentation.contribute.select.parcel.ContributePayload 
61- import  jp.co.soramitsu.wallet.impl.domain.beacon.SignStatus 
62- import  jp.co.soramitsu.wallet.impl.presentation.beacon.sign.TransactionRawDataFragment 
6361import  jp.co.soramitsu.onboarding.impl.OnboardingRouter 
6462import  jp.co.soramitsu.onboarding.impl.welcome.WelcomeFragment 
63+ import  jp.co.soramitsu.polkaswap.api.presentation.PolkaswapRouter 
64+ import  jp.co.soramitsu.polkaswap.api.presentation.models.SwapDetailsParcelModel 
65+ import  jp.co.soramitsu.polkaswap.api.presentation.models.SwapDetailsViewState 
66+ import  jp.co.soramitsu.polkaswap.api.presentation.models.TransactionSettingsModel 
67+ import  jp.co.soramitsu.polkaswap.impl.presentation.swap_preview.SwapPreviewFragment 
68+ import  jp.co.soramitsu.polkaswap.impl.presentation.swap_tokens.SwapTokensFragment 
69+ import  jp.co.soramitsu.polkaswap.impl.presentation.transaction_settings.TransactionSettingsFragment 
6570import  jp.co.soramitsu.runtime.multiNetwork.chain.model.Chain 
6671import  jp.co.soramitsu.runtime.multiNetwork.chain.model.ChainId 
6772import  jp.co.soramitsu.splash.SplashRouter 
@@ -96,6 +101,9 @@ import jp.co.soramitsu.staking.impl.presentation.validators.details.CollatorDeta
96101import  jp.co.soramitsu.staking.impl.presentation.validators.details.ValidatorDetailsFragment 
97102import  jp.co.soramitsu.staking.impl.presentation.validators.parcel.CollatorDetailsParcelModel 
98103import  jp.co.soramitsu.staking.impl.presentation.validators.parcel.ValidatorDetailsParcelModel 
104+ import  jp.co.soramitsu.success.presentation.SuccessFragment 
105+ import  jp.co.soramitsu.success.presentation.SuccessRouter 
106+ import  jp.co.soramitsu.wallet.impl.domain.beacon.SignStatus 
99107import  jp.co.soramitsu.wallet.impl.domain.model.PhishingType 
100108import  jp.co.soramitsu.wallet.impl.presentation.AssetPayload 
101109import  jp.co.soramitsu.wallet.impl.presentation.WalletRouter 
@@ -106,28 +114,31 @@ import jp.co.soramitsu.wallet.impl.presentation.balance.detail.BalanceDetailFrag
106114import  jp.co.soramitsu.wallet.impl.presentation.balance.detail.frozen.FrozenAssetPayload 
107115import  jp.co.soramitsu.wallet.impl.presentation.balance.detail.frozen.FrozenTokensFragment 
108116import  jp.co.soramitsu.wallet.impl.presentation.balance.optionswallet.OptionsWalletFragment 
109- import  jp.co.soramitsu.wallet.impl.presentation.balance.searchAssets.SearchAssetsFragment  
117+ import  jp.co.soramitsu.wallet.impl.presentation.balance.walletselector.light.WalletSelectorFragment  
110118import  jp.co.soramitsu.wallet.impl.presentation.beacon.main.BeaconFragment 
111119import  jp.co.soramitsu.wallet.impl.presentation.beacon.main.DAppMetadataModel 
112120import  jp.co.soramitsu.wallet.impl.presentation.beacon.sign.SignBeaconTransactionFragment 
113- import  jp.co.soramitsu.wallet.impl.presentation.balance.walletselector.light.WalletSelectorFragment  
121+ import  jp.co.soramitsu.wallet.impl.presentation.beacon.sign.TransactionRawDataFragment  
114122import  jp.co.soramitsu.wallet.impl.presentation.history.AddressHistoryFragment 
115123import  jp.co.soramitsu.wallet.impl.presentation.model.OperationParcelizeModel 
116124import  jp.co.soramitsu.wallet.impl.presentation.receive.ReceiveFragment 
117125import  jp.co.soramitsu.wallet.impl.presentation.send.TransferDraft 
118126import  jp.co.soramitsu.wallet.impl.presentation.send.confirm.ConfirmSendFragment 
119127import  jp.co.soramitsu.wallet.impl.presentation.send.setup.SendSetupFragment 
120- import  jp.co.soramitsu.wallet.impl.presentation.send.success.SendSuccessFragment 
121128import  jp.co.soramitsu.wallet.impl.presentation.transaction.detail.extrinsic.ExtrinsicDetailFragment 
122129import  jp.co.soramitsu.wallet.impl.presentation.transaction.detail.extrinsic.ExtrinsicDetailsPayload 
123130import  jp.co.soramitsu.wallet.impl.presentation.transaction.detail.reward.RewardDetailFragment 
124131import  jp.co.soramitsu.wallet.impl.presentation.transaction.detail.reward.RewardDetailsPayload 
132+ import  jp.co.soramitsu.wallet.impl.presentation.transaction.detail.swap.SwapDetailFragment 
125133import  jp.co.soramitsu.wallet.impl.presentation.transaction.detail.transfer.TransferDetailFragment 
126134import  kotlinx.coroutines.flow.Flow 
135+ import  kotlinx.coroutines.flow.MutableStateFlow 
127136import  kotlinx.coroutines.flow.emptyFlow 
137+ import  kotlinx.coroutines.flow.filter 
128138import  kotlinx.coroutines.flow.filterNotNull 
129139import  kotlinx.coroutines.flow.flowOf 
130140import  kotlinx.coroutines.flow.map 
141+ import  kotlinx.coroutines.flow.onEach 
131142import  kotlinx.parcelize.Parcelize 
132143
133144@Parcelize
@@ -140,7 +151,9 @@ class Navigator :
140151    WalletRouter ,
141152    RootRouter ,
142153    StakingRouter ,
143-     CrowdloanRouter  {
154+     CrowdloanRouter ,
155+     PolkaswapRouter ,
156+     SuccessRouter  {
144157
145158    private  var  navController:  NavController ?  =  null 
146159    private  var  activity:  AppCompatActivity ?  =  null 
@@ -394,6 +407,31 @@ class Navigator :
394407        }
395408    }
396409
410+     override  fun  backWithResult (vararg  results :  Pair <String , Any ?>) {
411+         val  savedStateHandle =  navController?.previousBackStackEntry?.savedStateHandle
412+         if  (savedStateHandle !=  null ) {
413+             results.forEach { (key, value) -> 
414+                 savedStateHandle[key] =  value
415+             }
416+         }
417+         back()
418+     }
419+ 
420+     override  fun  openTransactionSettingsDialog (initialSettings :  TransactionSettingsModel ) {
421+         val  bundle =  TransactionSettingsFragment .getBundle(initialSettings)
422+         navController?.navigate(R .id.transactionSettingsFragment, bundle)
423+     }
424+ 
425+     override  fun  openSwapPreviewDialog (swapDetailsViewState :  SwapDetailsViewState , parcelModel :  SwapDetailsParcelModel ) {
426+         val  bundle =  SwapPreviewFragment .getBundle(swapDetailsViewState, parcelModel)
427+ 
428+         navController?.navigate(R .id.swapPreviewFragment, bundle)
429+     }
430+ 
431+     override  fun  openSelectMarketDialog () {
432+         navController?.navigate(R .id.selectMarketFragment)
433+     }
434+ 
397435    override  fun  openCustomRebond () {
398436        navController?.navigate(R .id.action_stakingBalanceFragment_to_customRebondFragment)
399437    }
@@ -537,6 +575,10 @@ class Navigator :
537575        navController?.navigate(R .id.back_to_main)
538576    }
539577
578+     override  fun  returnToAssetDetails () {
579+         navController?.navigate(R .id.back_to_asset_details)
580+     }
581+ 
540582    override  fun  openValidatorDetails (validatorDetails :  ValidatorDetailsParcelModel ) {
541583        navController?.navigate(R .id.validatorDetailsFragment, ValidatorDetailsFragment .getBundle(validatorDetails))
542584    }
@@ -555,8 +597,14 @@ class Navigator :
555597        navController?.navigate(R .id.sendSetupFragment, bundle)
556598    }
557599
558-     override  fun  openSelectChain (assetId :  String , chooserMode :  Boolean ) {
559-         val  bundle =  ChainSelectFragment .getBundle(assetId =  assetId, chooserMode =  chooserMode)
600+     override  fun  openSwapTokensScreen (assetPayload :  AssetPayload ) {
601+         val  bundle =  SwapTokensFragment .getBundle(assetPayload.chainAssetId, assetPayload.chainId)
602+ 
603+         navController?.navigate(R .id.swapTokensFragment, bundle)
604+     }
605+ 
606+     override  fun  openSelectChain (assetId :  String , chainId :  ChainId ? , chooserMode :  Boolean ) {
607+         val  bundle =  ChainSelectFragment .getBundle(assetId =  assetId, chainId =  chainId, chooserMode =  chooserMode)
560608        navController?.navigate(R .id.chainSelectFragment, bundle)
561609    }
562610
@@ -570,6 +618,19 @@ class Navigator :
570618        navController?.navigate(R .id.assetSelectFragment, bundle)
571619    }
572620
621+     override  fun  openSelectAsset (chainId :  ChainId , selectedAssetId :  String? , excludeAssetId :  String? ) {
622+         val  bundle =  AssetSelectFragment .getBundle(chainId, selectedAssetId, excludeAssetId)
623+         navController?.navigate(R .id.assetSelectFragment, bundle)
624+     }
625+ 
626+     override  fun  <T > observeResult (key :  String ): Flow <T > {
627+         val  savedStateHandle =  navController?.currentBackStackEntry?.savedStateHandle
628+         val  resultFlow =  savedStateHandle?.getStateFlow<T ?>(key, null ) ? :  MutableStateFlow (null )
629+         return  resultFlow
630+             .filter { it !=  null  }
631+             .onEach { savedStateHandle?.set<T >(key, null ) } as  Flow <T >
632+     }
633+ 
573634    override  fun  openSelectChainAsset (chainId :  ChainId ) {
574635        val  bundle =  AssetSelectFragment .getBundleFilterByChain(chainId)
575636        navController?.navigate(R .id.assetSelectFragment, bundle)
@@ -589,10 +650,14 @@ class Navigator :
589650        openOperationSuccess(operationHash, chainId, null )
590651    }
591652
653+     override  fun  openPolkaswapDisclaimer () {
654+         navController?.navigate(R .id.polkaswapDisclaimerFragment)
655+     }
656+ 
592657    override  fun  openOperationSuccess (operationHash :  String? , chainId :  ChainId , customMessage :  String? ) {
593-         val  bundle =  SendSuccessFragment .getBundle(operationHash, chainId, customMessage)
658+         val  bundle =  SuccessFragment .getBundle(operationHash, chainId, customMessage)
594659
595-         navController?.navigate(R .id.sendSuccessFragment , bundle)
660+         navController?.navigate(R .id.successSheetFragment , bundle)
596661    }
597662
598663    override  fun  finishSendFlow () {
@@ -617,6 +682,12 @@ class Navigator :
617682        navController?.navigate(R .id.open_extrinsic_detail, bundle)
618683    }
619684
685+     override  fun  openSwapDetail (operation :  OperationParcelizeModel .Swap ) {
686+         val  bundle =  SwapDetailFragment .getBundle(operation)
687+ 
688+         navController?.navigate(R .id.swapDetailFragment, bundle)
689+     }
690+ 
620691    override  fun  openWallets (accountChosenNavDirection :  AccountChosenNavDirection ) {
621692        navController?.navigate(R .id.action_open_accounts, AccountListFragment .getBundle(accountChosenNavDirection))
622693    }
@@ -842,9 +913,8 @@ class Navigator :
842913        navController?.navigate(R .id.alertFragment, bundle)
843914    }
844915
845-     override  fun  openSearchAssets (chainId :  String? ) {
846-         val  bundle =  SearchAssetsFragment .getBundle(chainId)
847-         navController?.navigate(R .id.searchAssetsFragment, bundle)
916+     override  fun  openSearchAssets () {
917+         navController?.navigate(R .id.searchAssetsFragment)
848918    }
849919
850920    override  fun  openOptionsWallet (walletId :  Long ) {
0 commit comments