Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import kotlinx.serialization.InternalSerializationApi
import kotlinx.serialization.Serializable
import org.mifos.mobile.core.common.Constants
import org.mifos.mobile.core.model.entity.TransferSuccessDestination
import org.mifos.mobile.core.model.enums.TransferType
import org.mifos.mobile.feature.accounts.accountTransactions.accountTransactionsDestination
import org.mifos.mobile.feature.accounts.accountTransactions.navigateToAccountTransactionsScreen
import org.mifos.mobile.feature.accounts.accounts.accountsDestination
Expand Down Expand Up @@ -59,7 +60,7 @@ import org.mifos.mobile.feature.share.application.navigation.navigateToShareAppl
import org.mifos.mobile.feature.share.application.navigation.shareApplicationNavGraph
import org.mifos.mobile.feature.status.navigation.StatusNavigationRoute
import org.mifos.mobile.feature.status.navigation.statusDestination
import org.mifos.mobile.feature.third.party.transfer.navigation.thirdPartyTransferNavGraph
import org.mifos.mobile.feature.third.party.transfer.navigation.TptNavigationDestination
import org.mifos.mobile.feature.transfer.process.makeTransfer.makeTransferDestination
import org.mifos.mobile.feature.transfer.process.makeTransfer.navigateToMakeTransferScreen
import org.mifos.mobile.feature.transfer.process.transferProcess.navigateToTransferProcessScreen
Expand All @@ -72,54 +73,74 @@ internal fun NavController.navigateToAuthenticatedGraph(navOptions: NavOptions?
navigate(route = AuthenticatedGraphRoute, navOptions = navOptions)
}

@Suppress("CyclomaticComplexMethod")
@OptIn(InternalSerializationApi::class, ExperimentalSerializationApi::class)
internal fun NavGraphBuilder.authenticatedGraph(
navController: NavController,
) {
navigation<AuthenticatedGraphRoute>(
startDestination = AuthenticatedNavbarRoute,
) {
authenticatedNavbarGraph { destination ->
when (destination) {
is HomeNavigationDestination.AccountsWithType -> {
if (destination.type in listOf(
Constants.SAVINGS_ACCOUNT,
Constants.LOAN_ACCOUNT,
Constants.SHARE_ACCOUNTS,
)
) {
navController.navigateToAccountsScreen(destination.type)
authenticatedNavbarGraph(
homeNavigator = { destination ->
when (destination) {
is HomeNavigationDestination.AccountsWithType -> {
if (destination.type in listOf(
Constants.SAVINGS_ACCOUNT,
Constants.LOAN_ACCOUNT,
Constants.SHARE_ACCOUNTS,
)
) {
navController.navigateToAccountsScreen(destination.type)
}
}
}

is HomeNavigationDestination.Notification ->
navController.navigateToNotificationScreen()
is HomeNavigationDestination.Notification ->
navController.navigateToNotificationScreen()

is HomeNavigationDestination.Charge ->
navController.navigateToChargeGraph()
is HomeNavigationDestination.Charge ->
navController.navigateToChargeGraph()

is HomeNavigationDestination.Faq ->
navController.navigateToFaq()
is HomeNavigationDestination.Faq ->
navController.navigateToFaq()

is HomeNavigationDestination.Beneficiary ->
navController.navigateToBeneficiaryNavGraph()
is HomeNavigationDestination.Beneficiary ->
navController.navigateToBeneficiaryNavGraph()

is HomeNavigationDestination.Transaction ->
navController.navigateToAccountTransactionsScreen(
Constants.RECENT_TRANSACTIONS,
-1L,
)
is HomeNavigationDestination.Transaction ->
navController.navigateToAccountTransactionsScreen(
Constants.RECENT_TRANSACTIONS,
-1L,
)

is HomeNavigationDestination.ApplyLoan ->
navController.navigateToLoanApplicationGraph()
is HomeNavigationDestination.ApplyLoan ->
navController.navigateToLoanApplicationGraph()

is HomeNavigationDestination.ApplySavings ->
navController.navigateToSavingsApplicationGraph()
is HomeNavigationDestination.ApplySavings ->
navController.navigateToSavingsApplicationGraph()

is HomeNavigationDestination.ApplyShare ->
navController.navigateToShareApplicationGraph()
}
}
is HomeNavigationDestination.ApplyShare ->
navController.navigateToShareApplicationGraph()
}
},

tptNavigator = { destination ->
when (destination) {
TptNavigationDestination.Notification -> navController.navigateToNotificationScreen()

is TptNavigationDestination.TransferProcess -> {
navController.navigateToTransferProcessScreen(
destination.payload,
TransferType.TPT,
TransferSuccessDestination.TRANSFER_TAB.name,
)
}
else -> {
navController.navigateToManualBeneficiaryAddScreen()
}
}
},
)

notificationDestination(
navigateBack = navController::popBackStack,
Expand Down Expand Up @@ -242,23 +263,12 @@ internal fun NavGraphBuilder.authenticatedGraph(
TransferSuccessDestination.SAVINGS_ACCOUNT -> Constants.NAVIGATE_BACK_TO_SAVINGS
TransferSuccessDestination.LOAN_ACCOUNT -> Constants.NAVIGATE_BACK_TO_LOAN
TransferSuccessDestination.HOME -> ""
TransferSuccessDestination.TRANSFER_TAB -> Constants.TRANSFER_TAB
},
)
},
)

thirdPartyTransferNavGraph(
navigateBack = navController::popBackStack,
addBeneficiary = { },
reviewTransfer = { transferPayload, transferType, transferDestination ->
navController.navigateToTransferProcessScreen(
transferPayload,
transferType,
transferDestination.name,
)
},
)

transferProcessDestination(
navigateBack = navController::popBackStack,
navigateToAuthenticateScreen = navController::navigateToVerifyPasscodeScreen,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@ import org.mifos.mobile.core.designsystem.icon.MifosIcons
import org.mifos.mobile.core.ui.navigation.NavigationItem
import org.mifos.mobile.feature.home.navigation.HomeRoute
import org.mifos.mobile.feature.settings.navigation.SettingsNavGraphRoute
import org.mifos.mobile.feature.third.party.transfer.navigation.ThirdPartyTransferNavGraphRoute
import org.mifos.mobile.navigation.generated.resources.Res
import org.mifos.mobile.navigation.generated.resources.home
import org.mifos.mobile.navigation.generated.resources.profile
import org.mifos.mobile.navigation.generated.resources.transfer

sealed class AuthenticatedNavBarTabItem : NavigationItem {

Expand All @@ -41,22 +43,22 @@ sealed class AuthenticatedNavBarTabItem : NavigationItem {

// TODO Add Top level destinations here

// data object TransferTab : AuthenticatedNavBarTabItem() {
// override val iconResSelected: ImageVector
// get() = MifosIcons.TransferTab
// override val iconRes: ImageVector
// get() = MifosIcons.TransferTab
// override val labelRes: StringResource
// get() = Res.string.transfer
// override val contentDescriptionRes: StringResource
// get() = Res.string.transfer
// override val graphRoute: String
// get() = transferNavRoute.toObjectNavigationRoute()
// override val startDestinationRoute: String
// get() = transferNavRoute.toObjectNavigationRoute()
// override val testTag: String
// get() = "TransferTab"
// }
data object TransferTab : AuthenticatedNavBarTabItem() {
override val iconResSelected: ImageVector
get() = MifosIcons.MoneyHand
override val iconRes: ImageVector
get() = MifosIcons.MoneyHand
override val labelRes: StringResource
get() = Res.string.transfer
override val contentDescriptionRes: StringResource
get() = Res.string.transfer
override val graphRoute: String
get() = ThirdPartyTransferNavGraphRoute.toObjectNavigationRoute()
override val startDestinationRoute: String
get() = ThirdPartyTransferNavGraphRoute.toObjectNavigationRoute()
override val testTag: String
get() = "TransferTab"
}

data object ProfileTab : AuthenticatedNavBarTabItem() {
override val iconResSelected: ImageVector
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import androidx.navigation.NavOptions
import kotlinx.serialization.Serializable
import org.mifos.mobile.core.ui.composableWithStayTransitions
import org.mifos.mobile.feature.home.navigation.HomeNavigator
import org.mifos.mobile.feature.third.party.transfer.navigation.TptNavigator

@Serializable
data object AuthenticatedNavbarRoute
Expand All @@ -27,10 +28,13 @@ internal fun NavController.navigateToAuthenticatedNavBar(navOptions: NavOptions?

internal fun NavGraphBuilder.authenticatedNavbarGraph(
homeNavigator: HomeNavigator,
tptNavigator: TptNavigator,
) {
composableWithStayTransitions<AuthenticatedNavbarRoute> {
AuthenticatedNavbarNavigationScreen(
homeNavigator = homeNavigator,
tptNavigator = tptNavigator,

)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -46,12 +46,16 @@ import org.mifos.mobile.feature.home.navigation.homeDestination
import org.mifos.mobile.feature.home.navigation.navigateToHomeScreen
import org.mifos.mobile.feature.settings.navigation.navigateToSettingsGraph
import org.mifos.mobile.feature.settings.navigation.settingsGraph
import org.mifos.mobile.feature.third.party.transfer.navigation.TptNavigator
import org.mifos.mobile.feature.third.party.transfer.navigation.navigateToTptGraph
import org.mifos.mobile.feature.third.party.transfer.navigation.tptGraphDestination
import org.mifos.mobile.navigation.generated.resources.Res
import org.mifos.mobile.navigation.generated.resources.not_connected

@Composable
internal fun AuthenticatedNavbarNavigationScreen(
homeNavigator: HomeNavigator,
tptNavigator: TptNavigator,
modifier: Modifier = Modifier,
navController: NavHostController = rememberMifosNavController(
name = "AuthenticatedNavbarScreen",
Expand All @@ -72,6 +76,12 @@ internal fun AuthenticatedNavbarNavigationScreen(
}
}

AuthenticatedNavBarEvent.NavigateToThirdPartyTransferScreen -> {
navigateToTabOrRoot(tabToNavigateTo = event.tab) {
navigateToTptGraph(navOptions = it)
}
}

AuthenticatedNavBarEvent.NavigateToUserProfileScreen -> {
navigateToTabOrRoot(tabToNavigateTo = event.tab) {
navigateToSettingsGraph(navOptions = it)
Expand Down Expand Up @@ -103,20 +113,23 @@ internal fun AuthenticatedNavbarNavigationScreen(
{ viewModel.trySendAction(it) }
},
homeNavigator = homeNavigator,
tptNavigator = tptNavigator,
)
}

@Composable
internal fun AuthenticatedNavbarNavigationScreenContent(
navController: NavHostController,
homeNavigator: HomeNavigator,
tptNavigator: TptNavigator,
modifier: Modifier = Modifier,
snackbarHostState: SnackbarHostState = remember { SnackbarHostState() },
onAction: (AuthenticatedNavBarAction) -> Unit,
) {
val navBackStackEntry by navController.currentBackStackEntryAsState()
val navigationItems = persistentListOf<NavigationItem>(
AuthenticatedNavBarTabItem.HomeTab,
AuthenticatedNavBarTabItem.TransferTab,
AuthenticatedNavBarTabItem.ProfileTab,
)

Expand All @@ -137,6 +150,10 @@ internal fun AuthenticatedNavbarNavigationScreenContent(
is AuthenticatedNavBarTabItem.ProfileTab -> {
onAction(AuthenticatedNavBarAction.ProfileTabClick)
}

is AuthenticatedNavBarTabItem.TransferTab -> {
onAction(AuthenticatedNavBarAction.TransferTabClick)
}
}
},
shouldShowNavigation = navigationItems.any {
Expand All @@ -162,6 +179,10 @@ internal fun AuthenticatedNavbarNavigationScreenContent(
// TODO Add top level destination screens
homeDestination(onNavigate = homeNavigator)

tptGraphDestination(
onNavigate = tptNavigator,
)

settingsGraph(
navController = navController,
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,13 +38,19 @@ internal class AuthenticatedNavbarNavigationViewModel(
is AuthenticatedNavBarAction.Internal -> handleInternalAction(action)

AuthenticatedNavBarAction.ProfileTabClick -> handleProfileTabClicked()

AuthenticatedNavBarAction.TransferTabClick -> handleTransferTabClicked()
}
}

private fun handleVaultTabClicked() {
sendEvent(AuthenticatedNavBarEvent.NavigateToHomeScreen)
}

private fun handleTransferTabClicked() {
sendEvent(AuthenticatedNavBarEvent.NavigateToThirdPartyTransferScreen)
}

private fun handleProfileTabClicked() {
sendEvent(AuthenticatedNavBarEvent.NavigateToUserProfileScreen)
}
Expand All @@ -65,6 +71,8 @@ internal sealed class AuthenticatedNavBarAction {

data object ProfileTabClick : AuthenticatedNavBarAction()

data object TransferTabClick : AuthenticatedNavBarAction()

sealed class Internal : AuthenticatedNavBarAction() {
data class UserStateUpdateReceive(val appSettings: AppSettings?) : Internal()
}
Expand All @@ -78,6 +86,10 @@ internal sealed class AuthenticatedNavBarEvent {
override val tab: AuthenticatedNavBarTabItem = AuthenticatedNavBarTabItem.HomeTab
}

data object NavigateToThirdPartyTransferScreen : AuthenticatedNavBarEvent() {
override val tab: AuthenticatedNavBarTabItem = AuthenticatedNavBarTabItem.TransferTab
}

data object NavigateToUserProfileScreen : AuthenticatedNavBarEvent() {
override val tab: AuthenticatedNavBarTabItem = AuthenticatedNavBarTabItem.ProfileTab
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,4 +114,5 @@ object Constants {

const val APPLY_SAVINGS = "apply_savings"
const val APPLY_SHARE = "apply_share"
const val TRANSFER_TAB = "transfer_tab"
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,5 @@ enum class TransferSuccessDestination {
SAVINGS_ACCOUNT,
LOAN_ACCOUNT,
HOME,
TRANSFER_TAB,
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@
*/
package org.mifos.mobile.core.model.entity.payload

import kotlinx.serialization.Serializable
import org.mifos.mobile.core.model.entity.templates.account.AccountOption

@Serializable
data class ReviewTransferPayload(
val payToAccount: AccountOption? = null,
val payFromAccount: AccountOption? = null,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@ package org.mifos.mobile.core.model.enums
* On 24/03/17.
*/

enum class AccountType {
enum class AccountType(val value: String) {

SAVINGS,
SAVINGS("Savings Account"),

LOAN,
LOAN("Loan Account"),

SHARE,
SHARE("Share Account"),
}
Loading
Loading