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