refactor NavGraph so viewModel for drawer and navbar are shared across app
This commit is contained in:
parent
097d1ea134
commit
bbdcd0140c
4 changed files with 107 additions and 72 deletions
|
@ -18,11 +18,12 @@ import androidx.compose.ui.platform.LocalConfiguration
|
|||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import androidx.navigation.NavGraphBuilder
|
||||
import androidx.navigation.NavHostController
|
||||
import androidx.navigation.compose.NavHost
|
||||
import androidx.navigation.compose.composable
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import be.ugent.sel.studeez.common.composable.drawer.DrawerViewModel
|
||||
import be.ugent.sel.studeez.common.composable.navbar.NavigationBarViewModel
|
||||
import be.ugent.sel.studeez.common.snackbar.SnackbarManager
|
||||
import be.ugent.sel.studeez.navigation.StudeezDestinations
|
||||
import be.ugent.sel.studeez.screens.home.HomeRoute
|
||||
|
@ -55,13 +56,7 @@ fun StudeezApp() {
|
|||
},
|
||||
scaffoldState = appState.scaffoldState
|
||||
) { innerPaddingModifier ->
|
||||
NavHost(
|
||||
navController = appState.navController,
|
||||
startDestination = StudeezDestinations.SPLASH_SCREEN,
|
||||
modifier = Modifier.padding(innerPaddingModifier)
|
||||
) {
|
||||
studeezGraph(appState)
|
||||
}
|
||||
StudeezNavGraph(appState, Modifier.padding(innerPaddingModifier))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -86,60 +81,91 @@ fun resources(): Resources {
|
|||
return LocalContext.current.resources
|
||||
}
|
||||
|
||||
fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) {
|
||||
@Composable
|
||||
fun StudeezNavGraph(
|
||||
appState: StudeezAppstate,
|
||||
modifier: Modifier,
|
||||
) {
|
||||
val drawerViewModel: DrawerViewModel = hiltViewModel()
|
||||
val navBarViewModel: NavigationBarViewModel = hiltViewModel()
|
||||
|
||||
val goBack: () -> Unit = {
|
||||
appState.popUp()
|
||||
NavHost(
|
||||
navController = appState.navController,
|
||||
startDestination = StudeezDestinations.SPLASH_SCREEN,
|
||||
modifier = modifier,
|
||||
) {
|
||||
val goBack: () -> Unit = {
|
||||
appState.popUp()
|
||||
}
|
||||
|
||||
val open: (String) -> Unit = { route ->
|
||||
appState.navigate(route)
|
||||
}
|
||||
|
||||
val openAndPopUp: (String, String) -> Unit = { route, popUp ->
|
||||
appState.navigateAndPopUp(route, popUp)
|
||||
}
|
||||
|
||||
|
||||
composable(StudeezDestinations.SPLASH_SCREEN) {
|
||||
SplashRoute(openAndPopUp, viewModel = hiltViewModel())
|
||||
}
|
||||
|
||||
composable(StudeezDestinations.LOGIN_SCREEN) {
|
||||
LoginRoute(openAndPopUp, viewModel = hiltViewModel())
|
||||
}
|
||||
|
||||
composable(StudeezDestinations.SIGN_UP_SCREEN) {
|
||||
SignUpRoute(openAndPopUp, viewModel = hiltViewModel())
|
||||
}
|
||||
|
||||
composable(StudeezDestinations.HOME_SCREEN) {
|
||||
HomeRoute(
|
||||
open,
|
||||
openAndPopUp,
|
||||
viewModel = hiltViewModel(),
|
||||
drawerViewModel = drawerViewModel,
|
||||
navBarViewModel = navBarViewModel,
|
||||
)
|
||||
}
|
||||
|
||||
// TODO Tasks screen
|
||||
// TODO Sessions screen
|
||||
|
||||
composable(StudeezDestinations.PROFILE_SCREEN) {
|
||||
ProfileRoute(open, openAndPopUp, viewModel = hiltViewModel())
|
||||
}
|
||||
|
||||
composable(StudeezDestinations.TIMER_OVERVIEW_SCREEN) {
|
||||
TimerOverviewRoute(
|
||||
open,
|
||||
openAndPopUp,
|
||||
viewModel = hiltViewModel(),
|
||||
drawerViewModel = drawerViewModel,
|
||||
navBarViewModel = navBarViewModel,
|
||||
)
|
||||
}
|
||||
|
||||
composable(StudeezDestinations.SESSION_SCREEN) {
|
||||
SessionRoute(open, viewModel = hiltViewModel())
|
||||
}
|
||||
|
||||
// TODO Timers screen
|
||||
// TODO Settings screen
|
||||
|
||||
// Edit screens
|
||||
composable(StudeezDestinations.EDIT_PROFILE_SCREEN) {
|
||||
EditProfileRoute(goBack, openAndPopUp, viewModel = hiltViewModel())
|
||||
}
|
||||
|
||||
composable(StudeezDestinations.TIMER_SELECTION_SCREEN) {
|
||||
TimerSelectionRoute(
|
||||
open,
|
||||
openAndPopUp,
|
||||
viewModel = hiltViewModel(),
|
||||
drawerViewModel = drawerViewModel,
|
||||
navBarViewModel = navBarViewModel,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
val open: (String) -> Unit = { route ->
|
||||
appState.navigate(route)
|
||||
}
|
||||
|
||||
val openAndPopUp: (String, String) -> Unit = { route, popUp ->
|
||||
appState.navigateAndPopUp(route, popUp)
|
||||
}
|
||||
|
||||
composable(StudeezDestinations.SPLASH_SCREEN) {
|
||||
SplashRoute(openAndPopUp, viewModel = hiltViewModel())
|
||||
}
|
||||
|
||||
composable(StudeezDestinations.LOGIN_SCREEN) {
|
||||
LoginRoute(openAndPopUp, viewModel = hiltViewModel())
|
||||
}
|
||||
|
||||
composable(StudeezDestinations.SIGN_UP_SCREEN) {
|
||||
SignUpRoute(openAndPopUp, viewModel = hiltViewModel())
|
||||
}
|
||||
|
||||
composable(StudeezDestinations.HOME_SCREEN) {
|
||||
HomeRoute(open, openAndPopUp, viewModel = hiltViewModel())
|
||||
}
|
||||
|
||||
// TODO Tasks screen
|
||||
// TODO Sessions screen
|
||||
|
||||
composable(StudeezDestinations.PROFILE_SCREEN) {
|
||||
ProfileRoute(open, openAndPopUp, viewModel = hiltViewModel())
|
||||
}
|
||||
|
||||
composable(StudeezDestinations.TIMER_OVERVIEW_SCREEN) {
|
||||
TimerOverviewRoute(open, openAndPopUp, viewModel = hiltViewModel())
|
||||
}
|
||||
|
||||
composable(StudeezDestinations.SESSION_SCREEN) {
|
||||
SessionRoute(open, viewModel = hiltViewModel())
|
||||
}
|
||||
|
||||
// TODO Timers screen
|
||||
// TODO Settings screen
|
||||
|
||||
// Edit screens
|
||||
composable(StudeezDestinations.EDIT_PROFILE_SCREEN) {
|
||||
EditProfileRoute(goBack, openAndPopUp, viewModel = hiltViewModel())
|
||||
}
|
||||
|
||||
composable(StudeezDestinations.TIMER_SELECTION_SCREEN) {
|
||||
TimerSelectionRoute(open, openAndPopUp, viewModel = hiltViewModel())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,13 +7,14 @@ import androidx.compose.material.icons.filled.Person
|
|||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import be.ugent.sel.studeez.R
|
||||
import be.ugent.sel.studeez.common.composable.BasicButton
|
||||
import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate
|
||||
import be.ugent.sel.studeez.common.composable.drawer.DrawerActions
|
||||
import be.ugent.sel.studeez.common.composable.drawer.DrawerViewModel
|
||||
import be.ugent.sel.studeez.common.composable.drawer.getDrawerActions
|
||||
import be.ugent.sel.studeez.common.composable.navbar.NavigationBarActions
|
||||
import be.ugent.sel.studeez.common.composable.navbar.NavigationBarViewModel
|
||||
import be.ugent.sel.studeez.common.composable.navbar.getNavigationBarActions
|
||||
import be.ugent.sel.studeez.common.ext.basicButton
|
||||
import be.ugent.sel.studeez.resources
|
||||
|
@ -23,11 +24,13 @@ fun HomeRoute(
|
|||
open: (String) -> Unit,
|
||||
openAndPopUp: (String, String) -> Unit,
|
||||
viewModel: HomeViewModel,
|
||||
drawerViewModel: DrawerViewModel,
|
||||
navBarViewModel: NavigationBarViewModel,
|
||||
) {
|
||||
HomeScreen(
|
||||
onStartSessionClick = { viewModel.onStartSessionClick(open) },
|
||||
drawerActions = getDrawerActions(hiltViewModel(), open, openAndPopUp),
|
||||
navigationBarActions = getNavigationBarActions(hiltViewModel(), open),
|
||||
drawerActions = getDrawerActions(drawerViewModel, open, openAndPopUp),
|
||||
navigationBarActions = getNavigationBarActions(navBarViewModel, open),
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -9,15 +9,16 @@ import androidx.compose.runtime.collectAsState
|
|||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import be.ugent.sel.studeez.R
|
||||
import be.ugent.sel.studeez.common.composable.BasicButton
|
||||
import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate
|
||||
import be.ugent.sel.studeez.common.composable.StealthButton
|
||||
import be.ugent.sel.studeez.common.composable.TimerEntry
|
||||
import be.ugent.sel.studeez.common.composable.drawer.DrawerActions
|
||||
import be.ugent.sel.studeez.common.composable.drawer.DrawerViewModel
|
||||
import be.ugent.sel.studeez.common.composable.drawer.getDrawerActions
|
||||
import be.ugent.sel.studeez.common.composable.navbar.NavigationBarActions
|
||||
import be.ugent.sel.studeez.common.composable.navbar.NavigationBarViewModel
|
||||
import be.ugent.sel.studeez.common.composable.navbar.getNavigationBarActions
|
||||
import be.ugent.sel.studeez.common.ext.basicButton
|
||||
import be.ugent.sel.studeez.data.local.models.timer_info.CustomTimerInfo
|
||||
|
@ -47,11 +48,13 @@ fun TimerOverviewRoute(
|
|||
open: (String) -> Unit,
|
||||
openAndPopUp: (String, String) -> Unit,
|
||||
viewModel: TimerOverviewViewModel,
|
||||
drawerViewModel: DrawerViewModel,
|
||||
navBarViewModel: NavigationBarViewModel,
|
||||
) {
|
||||
TimerOverviewScreen(
|
||||
timerOverviewActions = getTimerOverviewActions(viewModel),
|
||||
drawerActions = getDrawerActions(hiltViewModel(), open, openAndPopUp),
|
||||
navigationBarActions = getNavigationBarActions(hiltViewModel(), open),
|
||||
drawerActions = getDrawerActions(drawerViewModel, open, openAndPopUp),
|
||||
navigationBarActions = getNavigationBarActions(navBarViewModel, open),
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -7,14 +7,15 @@ import androidx.compose.runtime.Composable
|
|||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.hilt.navigation.compose.hiltViewModel
|
||||
import be.ugent.sel.studeez.R
|
||||
import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate
|
||||
import be.ugent.sel.studeez.common.composable.StealthButton
|
||||
import be.ugent.sel.studeez.common.composable.TimerEntry
|
||||
import be.ugent.sel.studeez.common.composable.drawer.DrawerActions
|
||||
import be.ugent.sel.studeez.common.composable.drawer.DrawerViewModel
|
||||
import be.ugent.sel.studeez.common.composable.drawer.getDrawerActions
|
||||
import be.ugent.sel.studeez.common.composable.navbar.NavigationBarActions
|
||||
import be.ugent.sel.studeez.common.composable.navbar.NavigationBarViewModel
|
||||
import be.ugent.sel.studeez.common.composable.navbar.getNavigationBarActions
|
||||
import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo
|
||||
import be.ugent.sel.studeez.resources
|
||||
|
@ -41,11 +42,13 @@ fun TimerSelectionRoute(
|
|||
open: (String) -> Unit,
|
||||
openAndPopUp: (String, String) -> Unit,
|
||||
viewModel: TimerSelectionViewModel,
|
||||
drawerViewModel: DrawerViewModel,
|
||||
navBarViewModel: NavigationBarViewModel,
|
||||
) {
|
||||
TimerSelectionScreen(
|
||||
timerSelectionActions = getTimerSelectionActions(viewModel, open),
|
||||
drawerActions = getDrawerActions(hiltViewModel(), open, openAndPopUp),
|
||||
navigationBarActions = getNavigationBarActions(hiltViewModel(), open),
|
||||
drawerActions = getDrawerActions(drawerViewModel, open, openAndPopUp),
|
||||
navigationBarActions = getNavigationBarActions(navBarViewModel, open),
|
||||
)
|
||||
}
|
||||
|
||||
|
|
Reference in a new issue