refactor primaryScreenTemplate to not create drawerViewModel

This commit is contained in:
brreynie 2023-04-22 22:04:48 +02:00
parent 2b2cc879b3
commit 9da9873b58
6 changed files with 122 additions and 43 deletions

View file

@ -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)
}
}

View file

@ -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 = {})
}

View file

@ -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)))

View file

@ -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 {

View file

@ -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)) {