fix selectedTask

This commit is contained in:
brreynie 2023-05-09 22:03:38 +02:00
parent 0e4200057b
commit e333a0f626
3 changed files with 37 additions and 19 deletions

View file

@ -28,7 +28,7 @@ import be.ugent.sel.studeez.screens.subjects.SubjectRoute
import be.ugent.sel.studeez.screens.tasks.TaskRoute import be.ugent.sel.studeez.screens.tasks.TaskRoute
import be.ugent.sel.studeez.screens.subjects.form.SubjectCreateRoute import be.ugent.sel.studeez.screens.subjects.form.SubjectCreateRoute
import be.ugent.sel.studeez.screens.subjects.form.SubjectEditRoute import be.ugent.sel.studeez.screens.subjects.form.SubjectEditRoute
import be.ugent.sel.studeez.screens.tasks.form.TaskAddRoute import be.ugent.sel.studeez.screens.tasks.form.TaskCreateRoute
import be.ugent.sel.studeez.screens.tasks.form.TaskEditRoute import be.ugent.sel.studeez.screens.tasks.form.TaskEditRoute
import be.ugent.sel.studeez.screens.timer_form.TimerAddRoute import be.ugent.sel.studeez.screens.timer_form.TimerAddRoute
import be.ugent.sel.studeez.screens.timer_form.TimerEditRoute import be.ugent.sel.studeez.screens.timer_form.TimerEditRoute
@ -105,7 +105,7 @@ fun StudeezNavGraph(
} }
composable(StudeezDestinations.ADD_TASK_FORM) { composable(StudeezDestinations.ADD_TASK_FORM) {
TaskAddRoute( TaskCreateRoute(
goBack = goBack, goBack = goBack,
openAndPopUp = openAndPopUp, openAndPopUp = openAndPopUp,
viewModel = hiltViewModel(), viewModel = hiltViewModel(),

View file

@ -18,10 +18,10 @@ import be.ugent.sel.studeez.resources
import be.ugent.sel.studeez.R.string as AppText import be.ugent.sel.studeez.R.string as AppText
@Composable @Composable
fun TaskAddRoute( fun TaskCreateRoute(
goBack: () -> Unit, goBack: () -> Unit,
openAndPopUp: (String, String) -> Unit, openAndPopUp: (String, String) -> Unit,
viewModel: TaskFormViewModel, viewModel: TaskCreateFormViewModel,
) { ) {
val uiState by viewModel.uiState val uiState by viewModel.uiState
TaskForm( TaskForm(
@ -37,7 +37,7 @@ fun TaskAddRoute(
fun TaskEditRoute( fun TaskEditRoute(
goBack: () -> Unit, goBack: () -> Unit,
openAndPopUp: (String, String) -> Unit, openAndPopUp: (String, String) -> Unit,
viewModel: TaskFormViewModel, viewModel: TaskEditFormViewModel,
) { ) {
val uiState by viewModel.uiState val uiState by viewModel.uiState
TaskForm( TaskForm(

View file

@ -1,5 +1,6 @@
package be.ugent.sel.studeez.screens.tasks.form package be.ugent.sel.studeez.screens.tasks.form
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import be.ugent.sel.studeez.data.SelectedSubject import be.ugent.sel.studeez.data.SelectedSubject
import be.ugent.sel.studeez.data.SelectedTask import be.ugent.sel.studeez.data.SelectedTask
@ -12,37 +13,54 @@ import dagger.hilt.android.lifecycle.HiltViewModel
import javax.inject.Inject import javax.inject.Inject
abstract class TaskFormViewModel( abstract class TaskFormViewModel(
private val taskDAO: TaskDAO, protected val taskDAO: TaskDAO,
private val selectedSubject: SelectedSubject, protected val selectedSubject: SelectedSubject,
private val selectedTask: SelectedTask, protected val selectedTask: SelectedTask,
logService: LogService, logService: LogService,
) : StudeezViewModel(logService) { ) : StudeezViewModel(logService) {
var uiState = mutableStateOf( abstract val uiState: MutableState<TaskFormUiState>
if (selectedTask.isSet()) TaskFormUiState(selectedTask().name) else TaskFormUiState()
)
private set
private val name: String protected val name: String
get() = uiState.value.name get() = uiState.value.name
fun onNameChange(newValue: String) { fun onNameChange(newValue: String) {
uiState.value = uiState.value.copy(name = newValue) uiState.value = uiState.value.copy(name = newValue)
} }
}
fun onDelete(openAndPopUp: (String, String) -> Unit) { @HiltViewModel
taskDAO.deleteTask(selectedTask()) class TaskCreateFormViewModel @Inject constructor(
openAndPopUp(StudeezDestinations.TASKS_SCREEN, StudeezDestinations.EDIT_TASK_FORM) taskDAO: TaskDAO,
} selectedSubject: SelectedSubject,
selectedTask: SelectedTask,
logService: LogService,
) : TaskFormViewModel(taskDAO, selectedSubject, selectedTask, logService) {
override val uiState = mutableStateOf(TaskFormUiState())
fun onCreate(openAndPopUp: (String, String) -> Unit) { fun onCreate(openAndPopUp: (String, String) -> Unit) {
val newTask = Task(name = name, subjectId = selectedSubject().id) val newTask = Task(name = name, subjectId = selectedSubject().id)
taskDAO.saveTask(newTask) taskDAO.saveTask(newTask)
openAndPopUp(StudeezDestinations.TASKS_SCREEN, StudeezDestinations.ADD_TASK_FORM) openAndPopUp(StudeezDestinations.TASKS_SCREEN, StudeezDestinations.ADD_TASK_FORM)
} }
}
@HiltViewModel
class TaskEditFormViewModel @Inject constructor(
taskDAO: TaskDAO,
selectedSubject: SelectedSubject,
selectedTask: SelectedTask,
logService: LogService,
) : TaskFormViewModel(taskDAO, selectedSubject, selectedTask, logService) {
override val uiState = mutableStateOf(TaskFormUiState())
fun onDelete(openAndPopUp: (String, String) -> Unit) {
taskDAO.deleteTask(selectedTask())
openAndPopUp(StudeezDestinations.TASKS_SCREEN, StudeezDestinations.EDIT_TASK_FORM)
}
fun onEdit(openAndPopUp: (String, String) -> Unit) { fun onEdit(openAndPopUp: (String, String) -> Unit) {
val newTask = Task(name = name) val newTask = selectedTask().copy(name = name)
taskDAO.updateTask(newTask) taskDAO.updateTask(newTask)
openAndPopUp(StudeezDestinations.TASKS_SCREEN, StudeezDestinations.EDIT_TASK_FORM) openAndPopUp(StudeezDestinations.TASKS_SCREEN, StudeezDestinations.EDIT_TASK_FORM)
} }
} }