feat(ui): integrate teacher mode into AppRoot and Home
This commit is contained in:
@@ -6,6 +6,7 @@ import agzam.vyatsu.ui.picker.PickerScreen
|
||||
import agzam.vyatsu.ui.picker.PickerViewModel
|
||||
import agzam.vyatsu.ui.schedule.ScheduleViewModel
|
||||
import agzam.vyatsu.ui.settings.UpdateViewModel
|
||||
import agzam.vyatsu.ui.teacher.TeacherScheduleViewModel
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextButton
|
||||
@@ -23,9 +24,11 @@ fun AppRoot() {
|
||||
val container = app.container
|
||||
|
||||
val scheduleViewModel: ScheduleViewModel = viewModel(factory = scheduleFactory(container))
|
||||
val teacherScheduleViewModel: TeacherScheduleViewModel = viewModel(factory = teacherScheduleFactory(container))
|
||||
val updateViewModel: UpdateViewModel = viewModel(factory = updateFactory(container))
|
||||
|
||||
val state by scheduleViewModel.uiState.collectAsState()
|
||||
val teacherState by teacherScheduleViewModel.uiState.collectAsState()
|
||||
val showFirstRunDialog by updateViewModel.showFirstRunDialog.collectAsState()
|
||||
|
||||
if (showFirstRunDialog) {
|
||||
@@ -51,19 +54,21 @@ fun AppRoot() {
|
||||
)
|
||||
}
|
||||
|
||||
if (state.noGroup) {
|
||||
if (state.noGroup && teacherState.noTeacher) {
|
||||
val pickerViewModel: PickerViewModel = viewModel(factory = pickerFactory(container))
|
||||
PickerScreen(
|
||||
viewModel = pickerViewModel,
|
||||
onGroupPicked = { group -> scheduleViewModel.selectGroup(group.id) },
|
||||
onTeacherPicked = { }
|
||||
onTeacherPicked = { teacher -> teacherScheduleViewModel.selectTeacher(teacher.name) }
|
||||
)
|
||||
return
|
||||
}
|
||||
HomeScreen(
|
||||
scheduleViewModel = scheduleViewModel,
|
||||
teacherScheduleViewModel = teacherScheduleViewModel,
|
||||
updateViewModel = updateViewModel,
|
||||
onSwitchGroup = { scheduleViewModel.switchGroup() }
|
||||
onSwitchGroup = { scheduleViewModel.switchGroup() },
|
||||
onSwitchTeacher = { teacherScheduleViewModel.switchTeacher() }
|
||||
)
|
||||
}
|
||||
|
||||
@@ -73,6 +78,7 @@ private class SimpleFactory<T : ViewModel>(private val create: () -> T) : ViewMo
|
||||
}
|
||||
|
||||
private fun scheduleFactory(c: AppContainer): ViewModelProvider.Factory = SimpleFactory { ScheduleViewModel(c.scheduleRepository, c.preferencesRepository, c.groupRepository) }
|
||||
private fun teacherScheduleFactory(c: AppContainer): ViewModelProvider.Factory = SimpleFactory { TeacherScheduleViewModel(c.teacherScheduleRepository, c.preferencesRepository) }
|
||||
private fun pickerFactory(c: AppContainer): ViewModelProvider.Factory = SimpleFactory {
|
||||
PickerViewModel(
|
||||
c.groupRepository,
|
||||
|
||||
@@ -6,6 +6,8 @@ import agzam.vyatsu.ui.schedule.ScheduleScreen
|
||||
import agzam.vyatsu.ui.schedule.ScheduleViewModel
|
||||
import agzam.vyatsu.ui.settings.SettingsScreen
|
||||
import agzam.vyatsu.ui.settings.UpdateViewModel
|
||||
import agzam.vyatsu.ui.teacher.TeacherScheduleScreen
|
||||
import agzam.vyatsu.ui.teacher.TeacherScheduleViewModel
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.material.icons.Icons
|
||||
@@ -19,6 +21,7 @@ import androidx.compose.material3.NavigationBarItem
|
||||
import androidx.compose.material3.Scaffold
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.saveable.rememberSaveable
|
||||
@@ -35,10 +38,13 @@ private enum class HomeTab(val label: String) {
|
||||
@Composable
|
||||
fun HomeScreen(
|
||||
scheduleViewModel: ScheduleViewModel,
|
||||
teacherScheduleViewModel: TeacherScheduleViewModel,
|
||||
updateViewModel: UpdateViewModel,
|
||||
onSwitchGroup: () -> Unit
|
||||
onSwitchGroup: () -> Unit,
|
||||
onSwitchTeacher: () -> Unit
|
||||
) {
|
||||
var tab by rememberSaveable { mutableStateOf(HomeTab.SCHEDULE) }
|
||||
val teacherState by teacherScheduleViewModel.uiState.collectAsState()
|
||||
|
||||
Scaffold(
|
||||
bottomBar = {
|
||||
@@ -70,7 +76,14 @@ fun HomeScreen(
|
||||
.padding(innerPadding)
|
||||
) {
|
||||
when (tab) {
|
||||
HomeTab.SCHEDULE -> ScheduleScreen(viewModel = scheduleViewModel, onSwitchGroup = onSwitchGroup)
|
||||
HomeTab.SCHEDULE -> if (teacherState.teacherName != null) {
|
||||
TeacherScheduleScreen(
|
||||
viewModel = teacherScheduleViewModel,
|
||||
onSwitchTeacher = onSwitchTeacher
|
||||
)
|
||||
} else {
|
||||
ScheduleScreen(viewModel = scheduleViewModel, onSwitchGroup = onSwitchGroup)
|
||||
}
|
||||
HomeTab.CALLS -> CallsScreen()
|
||||
HomeTab.BUILDINGS -> BuildingsScreen()
|
||||
HomeTab.SETTINGS -> SettingsScreen(viewModel = updateViewModel)
|
||||
|
||||
Reference in New Issue
Block a user