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.platform.LocalContext
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import androidx.navigation.NavGraphBuilder
|
|
||||||
import androidx.navigation.NavHostController
|
import androidx.navigation.NavHostController
|
||||||
import androidx.navigation.compose.NavHost
|
import androidx.navigation.compose.NavHost
|
||||||
import androidx.navigation.compose.composable
|
import androidx.navigation.compose.composable
|
||||||
import androidx.navigation.compose.rememberNavController
|
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.common.snackbar.SnackbarManager
|
||||||
import be.ugent.sel.studeez.navigation.StudeezDestinations
|
import be.ugent.sel.studeez.navigation.StudeezDestinations
|
||||||
import be.ugent.sel.studeez.screens.home.HomeRoute
|
import be.ugent.sel.studeez.screens.home.HomeRoute
|
||||||
|
@ -55,13 +56,7 @@ fun StudeezApp() {
|
||||||
},
|
},
|
||||||
scaffoldState = appState.scaffoldState
|
scaffoldState = appState.scaffoldState
|
||||||
) { innerPaddingModifier ->
|
) { innerPaddingModifier ->
|
||||||
NavHost(
|
StudeezNavGraph(appState, Modifier.padding(innerPaddingModifier))
|
||||||
navController = appState.navController,
|
|
||||||
startDestination = StudeezDestinations.SPLASH_SCREEN,
|
|
||||||
modifier = Modifier.padding(innerPaddingModifier)
|
|
||||||
) {
|
|
||||||
studeezGraph(appState)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -86,8 +81,19 @@ fun resources(): Resources {
|
||||||
return LocalContext.current.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()
|
||||||
|
|
||||||
|
NavHost(
|
||||||
|
navController = appState.navController,
|
||||||
|
startDestination = StudeezDestinations.SPLASH_SCREEN,
|
||||||
|
modifier = modifier,
|
||||||
|
) {
|
||||||
val goBack: () -> Unit = {
|
val goBack: () -> Unit = {
|
||||||
appState.popUp()
|
appState.popUp()
|
||||||
}
|
}
|
||||||
|
@ -100,6 +106,7 @@ fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) {
|
||||||
appState.navigateAndPopUp(route, popUp)
|
appState.navigateAndPopUp(route, popUp)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
composable(StudeezDestinations.SPLASH_SCREEN) {
|
composable(StudeezDestinations.SPLASH_SCREEN) {
|
||||||
SplashRoute(openAndPopUp, viewModel = hiltViewModel())
|
SplashRoute(openAndPopUp, viewModel = hiltViewModel())
|
||||||
}
|
}
|
||||||
|
@ -113,7 +120,13 @@ fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) {
|
||||||
}
|
}
|
||||||
|
|
||||||
composable(StudeezDestinations.HOME_SCREEN) {
|
composable(StudeezDestinations.HOME_SCREEN) {
|
||||||
HomeRoute(open, openAndPopUp, viewModel = hiltViewModel())
|
HomeRoute(
|
||||||
|
open,
|
||||||
|
openAndPopUp,
|
||||||
|
viewModel = hiltViewModel(),
|
||||||
|
drawerViewModel = drawerViewModel,
|
||||||
|
navBarViewModel = navBarViewModel,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO Tasks screen
|
// TODO Tasks screen
|
||||||
|
@ -124,7 +137,13 @@ fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) {
|
||||||
}
|
}
|
||||||
|
|
||||||
composable(StudeezDestinations.TIMER_OVERVIEW_SCREEN) {
|
composable(StudeezDestinations.TIMER_OVERVIEW_SCREEN) {
|
||||||
TimerOverviewRoute(open, openAndPopUp, viewModel = hiltViewModel())
|
TimerOverviewRoute(
|
||||||
|
open,
|
||||||
|
openAndPopUp,
|
||||||
|
viewModel = hiltViewModel(),
|
||||||
|
drawerViewModel = drawerViewModel,
|
||||||
|
navBarViewModel = navBarViewModel,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
composable(StudeezDestinations.SESSION_SCREEN) {
|
composable(StudeezDestinations.SESSION_SCREEN) {
|
||||||
|
@ -140,6 +159,13 @@ fun NavGraphBuilder.studeezGraph(appState: StudeezAppstate) {
|
||||||
}
|
}
|
||||||
|
|
||||||
composable(StudeezDestinations.TIMER_SELECTION_SCREEN) {
|
composable(StudeezDestinations.TIMER_SELECTION_SCREEN) {
|
||||||
TimerSelectionRoute(open, openAndPopUp, viewModel = hiltViewModel())
|
TimerSelectionRoute(
|
||||||
|
open,
|
||||||
|
openAndPopUp,
|
||||||
|
viewModel = hiltViewModel(),
|
||||||
|
drawerViewModel = drawerViewModel,
|
||||||
|
navBarViewModel = navBarViewModel,
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -7,13 +7,14 @@ import androidx.compose.material.icons.filled.Person
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
|
||||||
import be.ugent.sel.studeez.R
|
import be.ugent.sel.studeez.R
|
||||||
import be.ugent.sel.studeez.common.composable.BasicButton
|
import be.ugent.sel.studeez.common.composable.BasicButton
|
||||||
import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate
|
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.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.drawer.getDrawerActions
|
||||||
import be.ugent.sel.studeez.common.composable.navbar.NavigationBarActions
|
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.composable.navbar.getNavigationBarActions
|
||||||
import be.ugent.sel.studeez.common.ext.basicButton
|
import be.ugent.sel.studeez.common.ext.basicButton
|
||||||
import be.ugent.sel.studeez.resources
|
import be.ugent.sel.studeez.resources
|
||||||
|
@ -23,11 +24,13 @@ fun HomeRoute(
|
||||||
open: (String) -> Unit,
|
open: (String) -> Unit,
|
||||||
openAndPopUp: (String, String) -> Unit,
|
openAndPopUp: (String, String) -> Unit,
|
||||||
viewModel: HomeViewModel,
|
viewModel: HomeViewModel,
|
||||||
|
drawerViewModel: DrawerViewModel,
|
||||||
|
navBarViewModel: NavigationBarViewModel,
|
||||||
) {
|
) {
|
||||||
HomeScreen(
|
HomeScreen(
|
||||||
onStartSessionClick = { viewModel.onStartSessionClick(open) },
|
onStartSessionClick = { viewModel.onStartSessionClick(open) },
|
||||||
drawerActions = getDrawerActions(hiltViewModel(), open, openAndPopUp),
|
drawerActions = getDrawerActions(drawerViewModel, open, openAndPopUp),
|
||||||
navigationBarActions = getNavigationBarActions(hiltViewModel(), open),
|
navigationBarActions = getNavigationBarActions(navBarViewModel, open),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,15 +9,16 @@ import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
|
||||||
import be.ugent.sel.studeez.R
|
import be.ugent.sel.studeez.R
|
||||||
import be.ugent.sel.studeez.common.composable.BasicButton
|
import be.ugent.sel.studeez.common.composable.BasicButton
|
||||||
import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate
|
import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate
|
||||||
import be.ugent.sel.studeez.common.composable.StealthButton
|
import be.ugent.sel.studeez.common.composable.StealthButton
|
||||||
import be.ugent.sel.studeez.common.composable.TimerEntry
|
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.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.drawer.getDrawerActions
|
||||||
import be.ugent.sel.studeez.common.composable.navbar.NavigationBarActions
|
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.composable.navbar.getNavigationBarActions
|
||||||
import be.ugent.sel.studeez.common.ext.basicButton
|
import be.ugent.sel.studeez.common.ext.basicButton
|
||||||
import be.ugent.sel.studeez.data.local.models.timer_info.CustomTimerInfo
|
import be.ugent.sel.studeez.data.local.models.timer_info.CustomTimerInfo
|
||||||
|
@ -47,11 +48,13 @@ fun TimerOverviewRoute(
|
||||||
open: (String) -> Unit,
|
open: (String) -> Unit,
|
||||||
openAndPopUp: (String, String) -> Unit,
|
openAndPopUp: (String, String) -> Unit,
|
||||||
viewModel: TimerOverviewViewModel,
|
viewModel: TimerOverviewViewModel,
|
||||||
|
drawerViewModel: DrawerViewModel,
|
||||||
|
navBarViewModel: NavigationBarViewModel,
|
||||||
) {
|
) {
|
||||||
TimerOverviewScreen(
|
TimerOverviewScreen(
|
||||||
timerOverviewActions = getTimerOverviewActions(viewModel),
|
timerOverviewActions = getTimerOverviewActions(viewModel),
|
||||||
drawerActions = getDrawerActions(hiltViewModel(), open, openAndPopUp),
|
drawerActions = getDrawerActions(drawerViewModel, open, openAndPopUp),
|
||||||
navigationBarActions = getNavigationBarActions(hiltViewModel(), open),
|
navigationBarActions = getNavigationBarActions(navBarViewModel, open),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,14 +7,15 @@ import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.collectAsState
|
import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
|
||||||
import be.ugent.sel.studeez.R
|
import be.ugent.sel.studeez.R
|
||||||
import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate
|
import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate
|
||||||
import be.ugent.sel.studeez.common.composable.StealthButton
|
import be.ugent.sel.studeez.common.composable.StealthButton
|
||||||
import be.ugent.sel.studeez.common.composable.TimerEntry
|
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.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.drawer.getDrawerActions
|
||||||
import be.ugent.sel.studeez.common.composable.navbar.NavigationBarActions
|
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.composable.navbar.getNavigationBarActions
|
||||||
import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo
|
import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo
|
||||||
import be.ugent.sel.studeez.resources
|
import be.ugent.sel.studeez.resources
|
||||||
|
@ -41,11 +42,13 @@ fun TimerSelectionRoute(
|
||||||
open: (String) -> Unit,
|
open: (String) -> Unit,
|
||||||
openAndPopUp: (String, String) -> Unit,
|
openAndPopUp: (String, String) -> Unit,
|
||||||
viewModel: TimerSelectionViewModel,
|
viewModel: TimerSelectionViewModel,
|
||||||
|
drawerViewModel: DrawerViewModel,
|
||||||
|
navBarViewModel: NavigationBarViewModel,
|
||||||
) {
|
) {
|
||||||
TimerSelectionScreen(
|
TimerSelectionScreen(
|
||||||
timerSelectionActions = getTimerSelectionActions(viewModel, open),
|
timerSelectionActions = getTimerSelectionActions(viewModel, open),
|
||||||
drawerActions = getDrawerActions(hiltViewModel(), open, openAndPopUp),
|
drawerActions = getDrawerActions(drawerViewModel, open, openAndPopUp),
|
||||||
navigationBarActions = getNavigationBarActions(hiltViewModel(), open),
|
navigationBarActions = getNavigationBarActions(navBarViewModel, open),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Reference in a new issue