@@ -14,17 +14,20 @@ package cmp.navigation.authenticated
1414import androidx.navigation.NavController
1515import androidx.navigation.NavGraphBuilder
1616import androidx.navigation.NavOptions
17+ import androidx.navigation.navOptions
1718import androidx.navigation.navigation
1819import cmp.navigation.authenticatednavbar.AuthenticatedNavbarRoute
1920import cmp.navigation.authenticatednavbar.authenticatedNavbarGraph
2021import kotlinx.serialization.ExperimentalSerializationApi
2122import kotlinx.serialization.InternalSerializationApi
2223import kotlinx.serialization.Serializable
2324import org.mifos.mobile.core.common.Constants
24- import org.mifos.mobile.core.model.entity.TransferSuccessDestination
25+ import org.mifos.mobile.core.model.EventType
26+ import org.mifos.mobile.core.model.StatusNavigationDestination
2527import org.mifos.mobile.core.model.enums.TransferType
2628import org.mifos.mobile.feature.accounts.accountTransactions.accountTransactionsDestination
2729import org.mifos.mobile.feature.accounts.accountTransactions.navigateToAccountTransactionsScreen
30+ import org.mifos.mobile.feature.accounts.accounts.AccountNavRoute
2831import org.mifos.mobile.feature.accounts.accounts.accountsDestination
2932import org.mifos.mobile.feature.accounts.accounts.navigateToAccountsScreen
3033import org.mifos.mobile.feature.auth.login.navigateToLoginScreen
@@ -36,6 +39,7 @@ import org.mifos.mobile.feature.charge.charges.navigateToClientChargeScreen
3639import org.mifos.mobile.feature.charge.navigation.clientChargeNavGraph
3740import org.mifos.mobile.feature.charge.navigation.navigateToChargeGraph
3841import org.mifos.mobile.feature.home.navigation.HomeNavigationDestination
42+ import org.mifos.mobile.feature.loan.application.confirmDetails.ConfirmDetailsRoute
3943import org.mifos.mobile.feature.loan.application.navigation.loanApplicationNavGraph
4044import org.mifos.mobile.feature.loan.application.navigation.navigateToLoanApplicationGraph
4145import org.mifos.mobile.feature.loanaccount.loanAccountDetails.navigateToLoanAccountDetailsScreen
@@ -63,6 +67,7 @@ import org.mifos.mobile.feature.status.navigation.statusDestination
6367import org.mifos.mobile.feature.third.party.transfer.navigation.TptNavigationDestination
6468import org.mifos.mobile.feature.transfer.process.makeTransfer.makeTransferDestination
6569import org.mifos.mobile.feature.transfer.process.makeTransfer.navigateToMakeTransferScreen
70+ import org.mifos.mobile.feature.transfer.process.transferProcess.TransferProcessRoute
6671import org.mifos.mobile.feature.transfer.process.transferProcess.navigateToTransferProcessScreen
6772import org.mifos.mobile.feature.transfer.process.transferProcess.transferProcessDestination
6873
@@ -73,7 +78,7 @@ internal fun NavController.navigateToAuthenticatedGraph(navOptions: NavOptions?
7378 navigate(route = AuthenticatedGraphRoute , navOptions = navOptions)
7479}
7580
76- @Suppress(" CyclomaticComplexMethod" )
81+ @Suppress(" CyclomaticComplexMethod" , " LongMethod " )
7782@OptIn(InternalSerializationApi ::class , ExperimentalSerializationApi ::class )
7883internal fun NavGraphBuilder.authenticatedGraph (
7984 navController : NavController ,
@@ -132,7 +137,7 @@ internal fun NavGraphBuilder.authenticatedGraph(
132137 navController.navigateToTransferProcessScreen(
133138 destination.payload,
134139 TransferType .TPT ,
135- TransferSuccessDestination . TRANSFER_TAB .name,
140+ StatusNavigationDestination . THIRD_PARTY_TRANSFER .name,
136141 )
137142 }
138143 else -> {
@@ -171,6 +176,41 @@ internal fun NavGraphBuilder.authenticatedGraph(
171176 Constants .LOGIN -> {
172177 navController.navigateToLoginScreen()
173178 }
179+
180+ StatusNavigationDestination .SAVINGS_APPLICATION .name -> {
181+ navController.navigateToAccountFromStatus(Constants .SAVINGS_ACCOUNT )
182+ }
183+
184+ StatusNavigationDestination .LOAN_APPLICATION .name -> {
185+ navController.navigateToAccountFromStatus(Constants .LOAN_ACCOUNT )
186+ }
187+
188+ StatusNavigationDestination .SHARE_APPLICATION .name -> {
189+ navController.navigateToAccountFromStatus(Constants .SHARE_ACCOUNTS )
190+ }
191+
192+ StatusNavigationDestination .PREVIOUS_SCREEN .name -> {
193+ navController.popScreens()
194+ }
195+
196+ StatusNavigationDestination .THIRD_PARTY_TRANSFER .name -> {
197+ navController.navigateToHomeAfterStatus()
198+ }
199+
200+ StatusNavigationDestination .SAVINGS_ACCOUNT .name -> {
201+ repeat(3 ) { navController.popBackStack() }
202+ }
203+
204+ StatusNavigationDestination .LOAN_ACCOUNT .name -> {
205+ repeat(3 ) { navController.popBackStack() }
206+ }
207+
208+ StatusNavigationDestination .SAVINGS_UPDATE .name,
209+ StatusNavigationDestination .SAVINGS_WITHDRAW .name,
210+ -> {
211+ repeat(2 ) { navController.popBackStack() }
212+ }
213+
174214 else -> {
175215 navController.navigateToHomeAfterStatus()
176216 }
@@ -181,7 +221,7 @@ internal fun NavGraphBuilder.authenticatedGraph(
181221 savingsNavGraph(
182222 navController = navController,
183223 navigateToClientChargeScreen = navController::navigateToClientChargeScreen,
184- navigateToStatusScreen = navController::navigateToStatusAfterUpdate ,
224+ navigateToStatusScreen = navController::navigateToStatusScreenWithoutPopUpTo ,
185225 navigateToAuthenticateScreen = navController::navigateToVerifyPasscodeScreen,
186226 navigateToTransferScreen = {
187227 navController.navigateToMakeTransferScreen(it)
@@ -207,18 +247,18 @@ internal fun NavGraphBuilder.authenticatedGraph(
207247 loanApplicationNavGraph(
208248 navController = navController,
209249 navigateToAuthenticateScreen = navController::navigateToVerifyPasscodeScreen,
210- navigateToStatusScreen = navController::navigateToStatusAfterUpdate ,
250+ navigateToStatusScreen = navController::navigateToStatusScreen ,
211251 )
212252
213253 savingsApplicationNavGraph(
214254 navController = navController,
215- navigateToStatusScreen = navController::navigateToStatusAfterUpdate ,
255+ navigateToStatusScreen = navController::navigateToStatusScreen ,
216256 navigateToAuthenticateScreen = navController::navigateToVerifyPasscodeScreen,
217257 )
218258
219259 shareApplicationNavGraph(
220260 navController = navController,
221- navigateToStatusScreen = navController::navigateToStatusAfterUpdate ,
261+ navigateToStatusScreen = navController::navigateToStatusScreen ,
222262 navigateToAuthenticateScreen = navController::navigateToVerifyPasscodeScreen,
223263 )
224264
@@ -235,7 +275,7 @@ internal fun NavGraphBuilder.authenticatedGraph(
235275 beneficiaryNavGraph(
236276 navController = navController,
237277 navigateToQR = navController::navigateToQrReaderScreen,
238- navigateToStatusScreen = navController::navigateToStatusAfterUpdate ,
278+ navigateToStatusScreen = navController::navigateToStatusScreen ,
239279 navigateToAuthenticateScreen = navController::navigateToVerifyPasscodeScreen,
240280 )
241281
@@ -259,20 +299,15 @@ internal fun NavGraphBuilder.authenticatedGraph(
259299 navController.navigateToTransferProcessScreen(
260300 transferPayload = transferPayload,
261301 transferType = transferType,
262- transferSuccessDestination = when (transferDestination) {
263- TransferSuccessDestination .SAVINGS_ACCOUNT -> Constants .NAVIGATE_BACK_TO_SAVINGS
264- TransferSuccessDestination .LOAN_ACCOUNT -> Constants .NAVIGATE_BACK_TO_LOAN
265- TransferSuccessDestination .HOME -> " "
266- TransferSuccessDestination .TRANSFER_TAB -> Constants .TRANSFER_TAB
267- },
302+ transferSuccessDestination = transferDestination,
268303 )
269304 },
270305 )
271306
272307 transferProcessDestination(
273308 navigateBack = navController::popBackStack,
274309 navigateToAuthenticateScreen = navController::navigateToVerifyPasscodeScreen,
275- navigateToStatusScreen = navController::navigateToStatusAfterUpdate ,
310+ navigateToStatusScreen = navController::navigateToStatusScreenWithoutPopUpTo ,
276311 )
277312
278313 faqDestination(onBackClick = navController::popBackStack, contact = {})
@@ -328,7 +363,7 @@ fun NavController.navigateToStatusScreenPasscodeFlow(
328363 }
329364}
330365
331- fun NavController.navigateToStatusAfterUpdate (
366+ fun NavController.navigateToStatusScreen (
332367 eventType : String ,
333368 eventDestination : String ,
334369 title : String ,
@@ -344,9 +379,31 @@ fun NavController.navigateToStatusAfterUpdate(
344379 buttonText = buttonText,
345380 ),
346381 ) {
347- popUpTo(AuthenticatedGraphRoute ) {
348- inclusive = true
382+ if (eventType == EventType .SUCCESS .name) {
383+ popUpTo(AuthenticatedGraphRoute ) {
384+ inclusive = true
385+ }
386+ launchSingleTop = true
349387 }
388+ }
389+ }
390+
391+ fun NavController.navigateToStatusScreenWithoutPopUpTo (
392+ eventType : String ,
393+ eventDestination : String ,
394+ title : String ,
395+ subtitle : String ,
396+ buttonText : String ,
397+ ) {
398+ this .navigate(
399+ StatusNavigationRoute (
400+ eventType = eventType,
401+ eventDestination = eventDestination,
402+ title = title,
403+ subtitle = subtitle,
404+ buttonText = buttonText,
405+ ),
406+ ) {
350407 launchSingleTop = true
351408 }
352409}
@@ -359,3 +416,35 @@ fun NavController.navigateToHomeAfterStatus() {
359416 launchSingleTop = true
360417 }
361418}
419+
420+ fun NavController.navigateToAccountFromStatus (
421+ accountType : String ,
422+ ) {
423+ this .navigate(AuthenticatedNavbarRoute ) {
424+ popUpTo(StatusNavigationRoute ::class ) {
425+ inclusive = true
426+ }
427+ launchSingleTop = true
428+ }
429+
430+ this .navigate(AccountNavRoute (accountType)) {
431+ launchSingleTop = true
432+ }
433+ }
434+
435+ fun NavController.popScreens (
436+ popRules : Map <String , Int > = mapOf(
437+ ConfirmDetailsRoute ::class.qualifiedName.orEmpty() to 2,
438+ TransferProcessRoute ::class.qualifiedName.orEmpty() to 2,
439+ ),
440+ ) {
441+ val lastEntry = previousBackStackEntry?.destination?.route
442+
443+ val pops = popRules.entries
444+ .firstOrNull { (route, _) ->
445+ lastEntry?.startsWith(route) == true
446+ }
447+ ?.value ? : 1
448+
449+ repeat(pops) { popBackStack() }
450+ }
0 commit comments