refactor primaryScreenTemplate to not create drawerViewModel
This commit is contained in:
parent
2b2cc879b3
commit
9da9873b58
6 changed files with 122 additions and 43 deletions
|
@ -23,14 +23,17 @@ import be.ugent.sel.studeez.R
|
|||
import be.ugent.sel.studeez.resources
|
||||
import be.ugent.sel.studeez.ui.theme.StudeezTheme
|
||||
|
||||
data class DrawerActions(
|
||||
val onHomeButtonClick: () -> Unit,
|
||||
val onTimersClick: () -> Unit,
|
||||
val onSettingsClick: () -> Unit,
|
||||
val onLogoutClick: () -> Unit,
|
||||
val onAboutClick: () -> Unit,
|
||||
)
|
||||
|
||||
@Composable
|
||||
fun Drawer(
|
||||
onHomeButtonClick: () -> Unit,
|
||||
onTimersClick: () -> Unit,
|
||||
onSettingsClick: () -> Unit,
|
||||
onLogoutClick: () -> Unit,
|
||||
onAboutClick: () -> Unit,
|
||||
drawerActions: DrawerActions,
|
||||
) {
|
||||
Column(
|
||||
modifier = Modifier.fillMaxWidth()
|
||||
|
@ -43,29 +46,29 @@ fun Drawer(
|
|||
DrawerEntry(
|
||||
icon = Icons.Default.Home,
|
||||
text = resources().getString(R.string.home),
|
||||
onClick = onHomeButtonClick,
|
||||
onClick = drawerActions.onHomeButtonClick,
|
||||
)
|
||||
DrawerEntry(
|
||||
icon = ImageVector.vectorResource(id = R.drawable.ic_timer),
|
||||
text = resources().getString(R.string.timers),
|
||||
onClick = onTimersClick,
|
||||
onClick = drawerActions.onTimersClick,
|
||||
)
|
||||
DrawerEntry(
|
||||
icon = Icons.Default.Settings,
|
||||
text = resources().getString(R.string.settings),
|
||||
onClick = onSettingsClick,
|
||||
onClick = drawerActions.onSettingsClick,
|
||||
)
|
||||
DrawerEntry(
|
||||
icon = ImageVector.vectorResource(id = R.drawable.ic_logout),
|
||||
text = resources().getString(R.string.log_out),
|
||||
onClick = onLogoutClick,
|
||||
onClick = drawerActions.onLogoutClick,
|
||||
)
|
||||
}
|
||||
|
||||
DrawerEntry(
|
||||
icon = Icons.Outlined.Info,
|
||||
text = resources().getString(R.string.about),
|
||||
onClick = onAboutClick,
|
||||
onClick = drawerActions.onAboutClick,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -100,7 +103,8 @@ fun DrawerEntry(
|
|||
@Preview
|
||||
@Composable
|
||||
fun DrawerPreview() {
|
||||
val drawerActions = DrawerActions({}, {}, {}, {}, {})
|
||||
StudeezTheme {
|
||||
Drawer({}, {}, {}, {}, {})
|
||||
Drawer(drawerActions)
|
||||
}
|
||||
}
|
|
@ -6,37 +6,68 @@ import androidx.compose.material.icons.Icons
|
|||
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.ext.basicButton
|
||||
import be.ugent.sel.studeez.resources
|
||||
import be.ugent.sel.studeez.screens.drawer.DrawerActions
|
||||
import be.ugent.sel.studeez.screens.drawer.DrawerViewModel
|
||||
|
||||
@Composable
|
||||
fun HomeRoute(
|
||||
open: (String) -> Unit,
|
||||
openAndPopUp: (String, String) -> Unit,
|
||||
viewModel: HomeViewModel,
|
||||
) {
|
||||
HomeScreen(
|
||||
open = open,
|
||||
openAndPopUp = openAndPopUp,
|
||||
onStartSessionClick = { viewModel.onStartSessionClick(open) }
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun HomeScreen(
|
||||
open: (String) -> Unit,
|
||||
openAndPopUp: (String, String) -> Unit,
|
||||
viewModel: HomeViewModel = hiltViewModel()
|
||||
onStartSessionClick: () -> Unit,
|
||||
) {
|
||||
val drawerViewModel: DrawerViewModel = hiltViewModel()
|
||||
val drawerActions = DrawerActions(
|
||||
onHomeButtonClick = { drawerViewModel.onHomeButtonClick(open) },
|
||||
onTimersClick = { drawerViewModel.onTimersClick(open) },
|
||||
onSettingsClick = { drawerViewModel.onSettingsClick(open) },
|
||||
onLogoutClick = { drawerViewModel.onLogoutClick(openAndPopUp) },
|
||||
onAboutClick = { drawerViewModel.onAboutClick(open) },
|
||||
)
|
||||
PrimaryScreenTemplate(
|
||||
title = resources().getString(R.string.home),
|
||||
open = open,
|
||||
openAndPopUp = openAndPopUp,
|
||||
drawerActions = drawerActions,
|
||||
action = { FriendsAction() }
|
||||
) {
|
||||
BasicButton(R.string.start_session, Modifier.basicButton()) {
|
||||
viewModel.onStartSessionClick(open)
|
||||
onStartSessionClick()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun FriendsAction () {
|
||||
fun FriendsAction() {
|
||||
IconButton(onClick = { /*TODO*/ }) {
|
||||
Icon(
|
||||
imageVector = Icons.Default.Person,
|
||||
contentDescription = resources().getString(R.string.friends)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Preview
|
||||
@Composable
|
||||
fun HomeScreenPreview() {
|
||||
HomeScreen(open = {}, openAndPopUp = { _, _ -> run {} }, onStartSessionClick = {})
|
||||
}
|
||||
|
|
|
@ -10,6 +10,8 @@ import be.ugent.sel.studeez.R
|
|||
import be.ugent.sel.studeez.common.composable.Headline
|
||||
import be.ugent.sel.studeez.common.composable.PrimaryScreenTemplate
|
||||
import be.ugent.sel.studeez.resources
|
||||
import be.ugent.sel.studeez.screens.drawer.DrawerActions
|
||||
import be.ugent.sel.studeez.screens.drawer.DrawerViewModel
|
||||
import be.ugent.sel.studeez.R.string as AppText
|
||||
|
||||
@Composable
|
||||
|
@ -22,11 +24,19 @@ fun ProfileScreen(
|
|||
LaunchedEffect(key1 = Unit) {
|
||||
username = viewModel.getUsername()
|
||||
}
|
||||
|
||||
val drawerViewModel: DrawerViewModel = hiltViewModel()
|
||||
val drawerActions = DrawerActions(
|
||||
onHomeButtonClick = { drawerViewModel.onHomeButtonClick(open) },
|
||||
onTimersClick = { drawerViewModel.onTimersClick(open) },
|
||||
onSettingsClick = { drawerViewModel.onSettingsClick(open) },
|
||||
onLogoutClick = { drawerViewModel.onLogoutClick(openAndPopUp) },
|
||||
onAboutClick = { drawerViewModel.onAboutClick(open) },
|
||||
)
|
||||
PrimaryScreenTemplate(
|
||||
title = resources().getString(AppText.profile),
|
||||
open = open,
|
||||
openAndPopUp = openAndPopUp,
|
||||
drawerActions = drawerActions,
|
||||
action = { EditAction { viewModel.onEditProfileClick(open) } }
|
||||
) {
|
||||
Headline(text = (username ?: resources().getString(R.string.no_username)))
|
||||
|
|
|
@ -28,6 +28,8 @@ 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.TimerInfo
|
||||
import be.ugent.sel.studeez.resources
|
||||
import be.ugent.sel.studeez.screens.drawer.DrawerActions
|
||||
import be.ugent.sel.studeez.screens.drawer.DrawerViewModel
|
||||
|
||||
@Composable
|
||||
fun TimerOverviewScreen(
|
||||
|
@ -37,11 +39,19 @@ fun TimerOverviewScreen(
|
|||
) {
|
||||
|
||||
val timers = viewModel.getUserTimers().collectAsState(initial = emptyList())
|
||||
|
||||
val drawerViewModel: DrawerViewModel = hiltViewModel()
|
||||
val drawerActions = DrawerActions(
|
||||
onHomeButtonClick = { drawerViewModel.onHomeButtonClick(open) },
|
||||
onTimersClick = { drawerViewModel.onTimersClick(open) },
|
||||
onSettingsClick = { drawerViewModel.onSettingsClick(open) },
|
||||
onLogoutClick = { drawerViewModel.onLogoutClick(openAndPopUp) },
|
||||
onAboutClick = { drawerViewModel.onAboutClick(open) },
|
||||
)
|
||||
PrimaryScreenTemplate(
|
||||
title = resources().getString(R.string.timers),
|
||||
open = open,
|
||||
openAndPopUp = openAndPopUp
|
||||
openAndPopUp = openAndPopUp,
|
||||
drawerActions = drawerActions,
|
||||
) {
|
||||
|
||||
Column {
|
||||
|
|
|
@ -9,6 +9,8 @@ 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.resources
|
||||
import be.ugent.sel.studeez.screens.drawer.DrawerActions
|
||||
import be.ugent.sel.studeez.screens.drawer.DrawerViewModel
|
||||
import be.ugent.sel.studeez.screens.timer_overview.TimerEntry
|
||||
|
||||
@Composable
|
||||
|
@ -19,11 +21,19 @@ fun TimerSelectionScreen(
|
|||
) {
|
||||
|
||||
val timers = viewModel.getAllTimers().collectAsState(initial = emptyList())
|
||||
|
||||
val drawerViewModel: DrawerViewModel = hiltViewModel()
|
||||
val drawerActions = DrawerActions(
|
||||
onHomeButtonClick = { drawerViewModel.onHomeButtonClick(open) },
|
||||
onTimersClick = { drawerViewModel.onTimersClick(open) },
|
||||
onSettingsClick = { drawerViewModel.onSettingsClick(open) },
|
||||
onLogoutClick = { drawerViewModel.onLogoutClick(openAndPopUp) },
|
||||
onAboutClick = { drawerViewModel.onAboutClick(open) },
|
||||
)
|
||||
PrimaryScreenTemplate(
|
||||
title = resources().getString(R.string.timers),
|
||||
open = open,
|
||||
openAndPopUp = openAndPopUp,
|
||||
drawerActions = drawerActions,
|
||||
) {
|
||||
|
||||
LazyColumn(verticalArrangement = Arrangement.spacedBy(7.dp)) {
|
||||
|
|
Reference in a new issue