refactor navbar to not need viewmodel in constructor
This commit is contained in:
parent
9da9873b58
commit
05c37b4168
6 changed files with 71 additions and 27 deletions
|
@ -21,6 +21,7 @@ import be.ugent.sel.studeez.resources
|
||||||
import be.ugent.sel.studeez.screens.drawer.Drawer
|
import be.ugent.sel.studeez.screens.drawer.Drawer
|
||||||
import be.ugent.sel.studeez.screens.drawer.DrawerActions
|
import be.ugent.sel.studeez.screens.drawer.DrawerActions
|
||||||
import be.ugent.sel.studeez.screens.navbar.NavigationBar
|
import be.ugent.sel.studeez.screens.navbar.NavigationBar
|
||||||
|
import be.ugent.sel.studeez.screens.navbar.NavigationBarActions
|
||||||
import be.ugent.sel.studeez.ui.theme.StudeezTheme
|
import be.ugent.sel.studeez.ui.theme.StudeezTheme
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
@ -28,9 +29,8 @@ import kotlinx.coroutines.launch
|
||||||
@Composable
|
@Composable
|
||||||
fun PrimaryScreenTemplate(
|
fun PrimaryScreenTemplate(
|
||||||
title: String,
|
title: String,
|
||||||
open: (String) -> Unit,
|
|
||||||
openAndPopUp: (String, String) -> Unit,
|
|
||||||
drawerActions: DrawerActions,
|
drawerActions: DrawerActions,
|
||||||
|
navigationBarActions: NavigationBarActions,
|
||||||
action: @Composable RowScope.() -> Unit = {},
|
action: @Composable RowScope.() -> Unit = {},
|
||||||
content: @Composable (PaddingValues) -> Unit
|
content: @Composable (PaddingValues) -> Unit
|
||||||
) {
|
) {
|
||||||
|
@ -61,7 +61,7 @@ fun PrimaryScreenTemplate(
|
||||||
Drawer(drawerActions)
|
Drawer(drawerActions)
|
||||||
},
|
},
|
||||||
|
|
||||||
bottomBar = { NavigationBar(open) },
|
bottomBar = { NavigationBar(navigationBarActions) },
|
||||||
floatingActionButtonPosition = FabPosition.Center,
|
floatingActionButtonPosition = FabPosition.Center,
|
||||||
isFloatingActionButtonDocked = true,
|
isFloatingActionButtonDocked = true,
|
||||||
floatingActionButton = { CollapsedAddButton() }
|
floatingActionButton = { CollapsedAddButton() }
|
||||||
|
@ -76,9 +76,8 @@ fun PrimaryScreenPreview() {
|
||||||
StudeezTheme {
|
StudeezTheme {
|
||||||
PrimaryScreenTemplate(
|
PrimaryScreenTemplate(
|
||||||
"Preview screen",
|
"Preview screen",
|
||||||
{},
|
|
||||||
{ _, _ -> run {} },
|
|
||||||
DrawerActions({}, {}, {}, {}, {}),
|
DrawerActions({}, {}, {}, {}, {}),
|
||||||
|
NavigationBarActions({}, {}, {}, {}),
|
||||||
{
|
{
|
||||||
IconButton(onClick = { /*TODO*/ }) {
|
IconButton(onClick = { /*TODO*/ }) {
|
||||||
Icon(
|
Icon(
|
||||||
|
|
|
@ -15,6 +15,8 @@ import be.ugent.sel.studeez.common.ext.basicButton
|
||||||
import be.ugent.sel.studeez.resources
|
import be.ugent.sel.studeez.resources
|
||||||
import be.ugent.sel.studeez.screens.drawer.DrawerActions
|
import be.ugent.sel.studeez.screens.drawer.DrawerActions
|
||||||
import be.ugent.sel.studeez.screens.drawer.DrawerViewModel
|
import be.ugent.sel.studeez.screens.drawer.DrawerViewModel
|
||||||
|
import be.ugent.sel.studeez.screens.navbar.NavigationBarActions
|
||||||
|
import be.ugent.sel.studeez.screens.navbar.NavigationBarViewModel
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun HomeRoute(
|
fun HomeRoute(
|
||||||
|
@ -43,11 +45,17 @@ fun HomeScreen(
|
||||||
onLogoutClick = { drawerViewModel.onLogoutClick(openAndPopUp) },
|
onLogoutClick = { drawerViewModel.onLogoutClick(openAndPopUp) },
|
||||||
onAboutClick = { drawerViewModel.onAboutClick(open) },
|
onAboutClick = { drawerViewModel.onAboutClick(open) },
|
||||||
)
|
)
|
||||||
|
val navigationBarViewModel: NavigationBarViewModel = hiltViewModel()
|
||||||
|
val navigationBarActions = NavigationBarActions(
|
||||||
|
onHomeClick = { navigationBarViewModel.onHomeClick(open) },
|
||||||
|
onTasksClick = { navigationBarViewModel.onTasksClick(open) },
|
||||||
|
onSessionsClick = { navigationBarViewModel.onSessionsClick(open) },
|
||||||
|
onProfileClick = { navigationBarViewModel.onProfileClick(open) },
|
||||||
|
)
|
||||||
PrimaryScreenTemplate(
|
PrimaryScreenTemplate(
|
||||||
title = resources().getString(R.string.home),
|
title = resources().getString(R.string.home),
|
||||||
open = open,
|
|
||||||
openAndPopUp = openAndPopUp,
|
|
||||||
drawerActions = drawerActions,
|
drawerActions = drawerActions,
|
||||||
|
navigationBarActions = navigationBarActions,
|
||||||
action = { FriendsAction() }
|
action = { FriendsAction() }
|
||||||
) {
|
) {
|
||||||
BasicButton(R.string.start_session, Modifier.basicButton()) {
|
BasicButton(R.string.start_session, Modifier.basicButton()) {
|
||||||
|
|
|
@ -12,16 +12,20 @@ import androidx.compose.material.icons.outlined.DateRange
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
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.resources
|
import be.ugent.sel.studeez.resources
|
||||||
import be.ugent.sel.studeez.ui.theme.StudeezTheme
|
import be.ugent.sel.studeez.ui.theme.StudeezTheme
|
||||||
import be.ugent.sel.studeez.R.string as AppText
|
import be.ugent.sel.studeez.R.string as AppText
|
||||||
|
|
||||||
|
data class NavigationBarActions(
|
||||||
|
val onHomeClick: () -> Unit,
|
||||||
|
val onTasksClick: () -> Unit,
|
||||||
|
val onSessionsClick: () -> Unit,
|
||||||
|
val onProfileClick: () -> Unit,
|
||||||
|
)
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun NavigationBar(
|
fun NavigationBar(
|
||||||
open: (String) -> Unit,
|
navigationBarActions: NavigationBarActions,
|
||||||
viewModel: NavigationBarViewModel = hiltViewModel()
|
|
||||||
) {
|
) {
|
||||||
// TODO Pass functions and new screens.
|
// TODO Pass functions and new screens.
|
||||||
// TODO Pass which screen is selected.
|
// TODO Pass which screen is selected.
|
||||||
|
@ -33,31 +37,43 @@ fun NavigationBar(
|
||||||
icon = { Icon(imageVector = Icons.Default.List, resources().getString(AppText.home)) },
|
icon = { Icon(imageVector = Icons.Default.List, resources().getString(AppText.home)) },
|
||||||
label = { Text(text = resources().getString(AppText.home)) },
|
label = { Text(text = resources().getString(AppText.home)) },
|
||||||
selected = false, // TODO
|
selected = false, // TODO
|
||||||
onClick = { viewModel.onHomeClick(open) }
|
onClick = navigationBarActions.onHomeClick
|
||||||
)
|
)
|
||||||
|
|
||||||
BottomNavigationItem(
|
BottomNavigationItem(
|
||||||
icon = { Icon(imageVector = Icons.Default.Check, resources().getString(AppText.tasks)) },
|
icon = {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.Default.Check, resources().getString(AppText.tasks)
|
||||||
|
)
|
||||||
|
},
|
||||||
label = { Text(text = resources().getString(AppText.tasks)) },
|
label = { Text(text = resources().getString(AppText.tasks)) },
|
||||||
selected = false, // TODO
|
selected = false, // TODO
|
||||||
onClick = { viewModel.onTasksClick(open) }
|
onClick = navigationBarActions.onTasksClick
|
||||||
)
|
)
|
||||||
|
|
||||||
// Hack to space the entries in the navigation bar, make space for fab
|
// Hack to space the entries in the navigation bar, make space for fab
|
||||||
BottomNavigationItem(icon = {}, onClick = {}, selected = false)
|
BottomNavigationItem(icon = {}, onClick = {}, selected = false)
|
||||||
|
|
||||||
BottomNavigationItem(
|
BottomNavigationItem(
|
||||||
icon = { Icon(imageVector = Icons.Outlined.DateRange, resources().getString(AppText.sessions)) },
|
icon = {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.Outlined.DateRange, resources().getString(AppText.sessions)
|
||||||
|
)
|
||||||
|
},
|
||||||
label = { Text(text = resources().getString(AppText.sessions)) },
|
label = { Text(text = resources().getString(AppText.sessions)) },
|
||||||
selected = false, // TODO
|
selected = false, // TODO
|
||||||
onClick = { viewModel.onSessionsClick(open) }
|
onClick = navigationBarActions.onSessionsClick
|
||||||
)
|
)
|
||||||
|
|
||||||
BottomNavigationItem(
|
BottomNavigationItem(
|
||||||
icon = { Icon(imageVector = Icons.Default.Person, resources().getString(AppText.profile)) },
|
icon = {
|
||||||
|
Icon(
|
||||||
|
imageVector = Icons.Default.Person, resources().getString(AppText.profile)
|
||||||
|
)
|
||||||
|
},
|
||||||
label = { Text(text = resources().getString(AppText.profile)) },
|
label = { Text(text = resources().getString(AppText.profile)) },
|
||||||
selected = false, // TODO
|
selected = false, // TODO
|
||||||
onClick = { viewModel.onProfileClick(open) }
|
onClick = navigationBarActions.onProfileClick
|
||||||
)
|
)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -67,9 +83,6 @@ fun NavigationBar(
|
||||||
@Composable
|
@Composable
|
||||||
fun NavigationBarPreview() {
|
fun NavigationBarPreview() {
|
||||||
StudeezTheme {
|
StudeezTheme {
|
||||||
NavigationBar(
|
NavigationBar(NavigationBarActions({}, {}, {}, {}))
|
||||||
{ _ -> {} },
|
|
||||||
hiltViewModel()
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -12,6 +12,8 @@ import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate
|
||||||
import be.ugent.sel.studeez.resources
|
import be.ugent.sel.studeez.resources
|
||||||
import be.ugent.sel.studeez.screens.drawer.DrawerActions
|
import be.ugent.sel.studeez.screens.drawer.DrawerActions
|
||||||
import be.ugent.sel.studeez.screens.drawer.DrawerViewModel
|
import be.ugent.sel.studeez.screens.drawer.DrawerViewModel
|
||||||
|
import be.ugent.sel.studeez.screens.navbar.NavigationBarActions
|
||||||
|
import be.ugent.sel.studeez.screens.navbar.NavigationBarViewModel
|
||||||
import be.ugent.sel.studeez.R.string as AppText
|
import be.ugent.sel.studeez.R.string as AppText
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
@ -32,11 +34,17 @@ fun ProfileScreen(
|
||||||
onLogoutClick = { drawerViewModel.onLogoutClick(openAndPopUp) },
|
onLogoutClick = { drawerViewModel.onLogoutClick(openAndPopUp) },
|
||||||
onAboutClick = { drawerViewModel.onAboutClick(open) },
|
onAboutClick = { drawerViewModel.onAboutClick(open) },
|
||||||
)
|
)
|
||||||
|
val navigationBarViewModel: NavigationBarViewModel = hiltViewModel()
|
||||||
|
val navigationBarActions = NavigationBarActions(
|
||||||
|
onHomeClick = { navigationBarViewModel.onHomeClick(open) },
|
||||||
|
onTasksClick = { navigationBarViewModel.onTasksClick(open) },
|
||||||
|
onSessionsClick = { navigationBarViewModel.onSessionsClick(open) },
|
||||||
|
onProfileClick = { navigationBarViewModel.onProfileClick(open) },
|
||||||
|
)
|
||||||
PrimaryScreenTemplate(
|
PrimaryScreenTemplate(
|
||||||
title = resources().getString(AppText.profile),
|
title = resources().getString(AppText.profile),
|
||||||
open = open,
|
|
||||||
openAndPopUp = openAndPopUp,
|
|
||||||
drawerActions = drawerActions,
|
drawerActions = drawerActions,
|
||||||
|
navigationBarActions = navigationBarActions,
|
||||||
action = { EditAction { viewModel.onEditProfileClick(open) } }
|
action = { EditAction { viewModel.onEditProfileClick(open) } }
|
||||||
) {
|
) {
|
||||||
Headline(text = (username ?: resources().getString(R.string.no_username)))
|
Headline(text = (username ?: resources().getString(R.string.no_username)))
|
||||||
|
|
|
@ -30,6 +30,8 @@ import be.ugent.sel.studeez.data.local.models.timer_info.TimerInfo
|
||||||
import be.ugent.sel.studeez.resources
|
import be.ugent.sel.studeez.resources
|
||||||
import be.ugent.sel.studeez.screens.drawer.DrawerActions
|
import be.ugent.sel.studeez.screens.drawer.DrawerActions
|
||||||
import be.ugent.sel.studeez.screens.drawer.DrawerViewModel
|
import be.ugent.sel.studeez.screens.drawer.DrawerViewModel
|
||||||
|
import be.ugent.sel.studeez.screens.navbar.NavigationBarActions
|
||||||
|
import be.ugent.sel.studeez.screens.navbar.NavigationBarViewModel
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun TimerOverviewScreen(
|
fun TimerOverviewScreen(
|
||||||
|
@ -47,11 +49,17 @@ fun TimerOverviewScreen(
|
||||||
onLogoutClick = { drawerViewModel.onLogoutClick(openAndPopUp) },
|
onLogoutClick = { drawerViewModel.onLogoutClick(openAndPopUp) },
|
||||||
onAboutClick = { drawerViewModel.onAboutClick(open) },
|
onAboutClick = { drawerViewModel.onAboutClick(open) },
|
||||||
)
|
)
|
||||||
|
val navigationBarViewModel: NavigationBarViewModel = hiltViewModel()
|
||||||
|
val navigationBarActions = NavigationBarActions(
|
||||||
|
onHomeClick = { navigationBarViewModel.onHomeClick(open) },
|
||||||
|
onTasksClick = { navigationBarViewModel.onTasksClick(open) },
|
||||||
|
onSessionsClick = { navigationBarViewModel.onSessionsClick(open) },
|
||||||
|
onProfileClick = { navigationBarViewModel.onProfileClick(open) },
|
||||||
|
)
|
||||||
PrimaryScreenTemplate(
|
PrimaryScreenTemplate(
|
||||||
title = resources().getString(R.string.timers),
|
title = resources().getString(R.string.timers),
|
||||||
open = open,
|
|
||||||
openAndPopUp = openAndPopUp,
|
|
||||||
drawerActions = drawerActions,
|
drawerActions = drawerActions,
|
||||||
|
navigationBarActions = navigationBarActions,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
|
|
|
@ -11,6 +11,8 @@ import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate
|
||||||
import be.ugent.sel.studeez.resources
|
import be.ugent.sel.studeez.resources
|
||||||
import be.ugent.sel.studeez.screens.drawer.DrawerActions
|
import be.ugent.sel.studeez.screens.drawer.DrawerActions
|
||||||
import be.ugent.sel.studeez.screens.drawer.DrawerViewModel
|
import be.ugent.sel.studeez.screens.drawer.DrawerViewModel
|
||||||
|
import be.ugent.sel.studeez.screens.navbar.NavigationBarActions
|
||||||
|
import be.ugent.sel.studeez.screens.navbar.NavigationBarViewModel
|
||||||
import be.ugent.sel.studeez.screens.timer_overview.TimerEntry
|
import be.ugent.sel.studeez.screens.timer_overview.TimerEntry
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
@ -29,11 +31,17 @@ fun TimerSelectionScreen(
|
||||||
onLogoutClick = { drawerViewModel.onLogoutClick(openAndPopUp) },
|
onLogoutClick = { drawerViewModel.onLogoutClick(openAndPopUp) },
|
||||||
onAboutClick = { drawerViewModel.onAboutClick(open) },
|
onAboutClick = { drawerViewModel.onAboutClick(open) },
|
||||||
)
|
)
|
||||||
|
val navigationBarViewModel: NavigationBarViewModel = hiltViewModel()
|
||||||
|
val navigationBarActions = NavigationBarActions(
|
||||||
|
onHomeClick = { navigationBarViewModel.onHomeClick(open) },
|
||||||
|
onTasksClick = { navigationBarViewModel.onTasksClick(open) },
|
||||||
|
onSessionsClick = { navigationBarViewModel.onSessionsClick(open) },
|
||||||
|
onProfileClick = { navigationBarViewModel.onProfileClick(open) },
|
||||||
|
)
|
||||||
PrimaryScreenTemplate(
|
PrimaryScreenTemplate(
|
||||||
title = resources().getString(R.string.timers),
|
title = resources().getString(R.string.timers),
|
||||||
open = open,
|
|
||||||
openAndPopUp = openAndPopUp,
|
|
||||||
drawerActions = drawerActions,
|
drawerActions = drawerActions,
|
||||||
|
navigationBarActions = navigationBarActions,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
LazyColumn(verticalArrangement = Arrangement.spacedBy(7.dp)) {
|
LazyColumn(verticalArrangement = Arrangement.spacedBy(7.dp)) {
|
||||||
|
|
Reference in a new issue