forked from agzam/vyatsu-schedule
46 lines
1.8 KiB
Kotlin
46 lines
1.8 KiB
Kotlin
package agzam.vyatsu
|
|||
|
|
|
||
|
|
import agzam.vyatsu.di.AppContainer
|
||
|
|
import agzam.vyatsu.ui.groups.GroupPickerScreen
|
||
|
|
import agzam.vyatsu.ui.groups.GroupPickerViewModel
|
||
|
|
import agzam.vyatsu.ui.home.HomeScreen
|
||
|
|
import agzam.vyatsu.ui.schedule.ScheduleViewModel
|
||
|
|
import androidx.compose.runtime.Composable
|
||
|
|
import androidx.compose.runtime.collectAsState
|
||
|
|
import androidx.compose.runtime.getValue
|
||
|
|
import androidx.compose.ui.platform.LocalContext
|
||
|
|
import androidx.lifecycle.ViewModel
|
||
|
|
import androidx.lifecycle.ViewModelProvider
|
||
|
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||
|
|
|
||
|
|
@Composable
|
||
|
|
fun AppRoot() {
|
||
|
|
val app = LocalContext.current.applicationContext as VyatsuApplication
|
||
|
|
val container = app.container
|
||
|
|
|
||
|
|
val scheduleViewModel: ScheduleViewModel = viewModel(factory = scheduleFactory(container))
|
||
|
|
val groupPickerViewModel: GroupPickerViewModel = viewModel(factory = groupPickerFactory(container))
|
||
|
|
|
||
|
|
val state by scheduleViewModel.uiState.collectAsState()
|
||
|
|
|
||
|
|
if (state.noGroup) {
|
||
|
|
GroupPickerScreen(
|
||
|
|
viewModel = groupPickerViewModel,
|
||
|
|
onGroupPicked = { group -> scheduleViewModel.selectGroup(group.id) }
|
||
|
|
)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
HomeScreen(
|
||
|
|
scheduleViewModel = scheduleViewModel,
|
||
|
|
onSwitchGroup = { scheduleViewModel.switchGroup() }
|
||
|
|
)
|
||
|
|
}
|
||
|
|
|
||
|
|
private class SimpleFactory<T : ViewModel>(private val create: () -> T) : ViewModelProvider.Factory {
|
||
|
|
@Suppress("UNCHECKED_CAST")
|
||
|
|
override fun <T : ViewModel> create(modelClass: Class<T>): T = create() as T
|
||
|
|
}
|
||
|
|
|
||
|
|
private fun scheduleFactory(c: AppContainer): ViewModelProvider.Factory = SimpleFactory { ScheduleViewModel(c.scheduleRepository, c.preferencesRepository) }
|
||
|
|
private fun groupPickerFactory(c: AppContainer): ViewModelProvider.Factory = SimpleFactory { GroupPickerViewModel(c.groupRepository) }
|