From fc1d12e214c995c32827687e028d08e8cf8cd971 Mon Sep 17 00:00:00 2001 From: brreynie Date: Wed, 3 May 2023 22:06:30 +0200 Subject: [PATCH] #15 make form functional --- .../java/be/ugent/sel/studeez/StudeezApp.kt | 18 ++++++++++++++++++ .../studeez/navigation/StudeezDestinations.kt | 3 +++ .../sel/studeez/screens/tasks/SubjectScreen.kt | 15 +-------------- .../studeez/screens/tasks/SubjectViewModel.kt | 12 ++---------- .../sel/studeez/screens/tasks/TaskScreen.kt | 17 ++++------------- .../sel/studeez/screens/tasks/TaskViewModel.kt | 4 ++++ .../screens/tasks/forms/SubjectFormScreen.kt | 15 +++++++++++++-- .../tasks/forms/SubjectFormViewModel.kt | 4 +++- 8 files changed, 48 insertions(+), 40 deletions(-) diff --git a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt index e23e1fe..276e250 100644 --- a/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt +++ b/app/src/main/java/be/ugent/sel/studeez/StudeezApp.kt @@ -42,6 +42,8 @@ import be.ugent.sel.studeez.screens.sign_up.SignUpRoute import be.ugent.sel.studeez.screens.splash.SplashRoute import be.ugent.sel.studeez.screens.tasks.SubjectRoute import be.ugent.sel.studeez.screens.tasks.TaskRoute +import be.ugent.sel.studeez.screens.tasks.forms.SubjectAddRoute +import be.ugent.sel.studeez.screens.tasks.forms.SubjectEditRoute import be.ugent.sel.studeez.screens.timer_overview.TimerOverviewRoute import be.ugent.sel.studeez.screens.timer_selection.TimerSelectionRoute import be.ugent.sel.studeez.ui.theme.StudeezTheme @@ -156,6 +158,22 @@ fun StudeezNavGraph( ) } + composable(StudeezDestinations.ADD_SUBJECT_FORM) { + SubjectAddRoute( + goBack = goBack, + open = open, + viewModel = hiltViewModel(), + ) + } + + composable(StudeezDestinations.EDIT_SUBJECT_FORM) { + SubjectEditRoute( + goBack = goBack, + open = open, + viewModel = hiltViewModel(), + ) + } + composable(StudeezDestinations.TASKS_SCREEN) { TaskRoute( goBack = goBack, diff --git a/app/src/main/java/be/ugent/sel/studeez/navigation/StudeezDestinations.kt b/app/src/main/java/be/ugent/sel/studeez/navigation/StudeezDestinations.kt index 1d7ed4a..f56b872 100644 --- a/app/src/main/java/be/ugent/sel/studeez/navigation/StudeezDestinations.kt +++ b/app/src/main/java/be/ugent/sel/studeez/navigation/StudeezDestinations.kt @@ -10,7 +10,10 @@ object StudeezDestinations { const val TIMER_SELECTION_SCREEN = "timer_selection" const val SESSION_SCREEN = "session" const val SESSION_RECAP = "session_recap" + const val SUBJECT_SCREEN = "subjects" + const val ADD_SUBJECT_FORM = "add_subject" + const val EDIT_SUBJECT_FORM = "edit_subject" const val TASKS_SCREEN = "tasks" // const val SESSIONS_SCREEN = "sessions" diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/tasks/SubjectScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/tasks/SubjectScreen.kt index 64c2b8f..fef7e1d 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/tasks/SubjectScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/tasks/SubjectScreen.kt @@ -30,7 +30,7 @@ fun SubjectRoute( SubjectScreen( drawerActions = drawerActions, navigationBarActions = navigationBarActions, - addSubject = { viewModel.addSubject() }, + addSubject = { viewModel.addSubject(open) }, getSubjects = viewModel::getSubjects, onViewSubject = { viewModel.onViewSubject(it, open) }, ) @@ -55,19 +55,6 @@ fun SubjectScreen( modifier = Modifier.padding(top = 5.dp) ) { LazyColumn { -// if (subjects.value.isNotEmpty()) { -// item { -// SubjectEntry(subject = subjects.value[0]) -// } -// } -// if (subjects.value.size > 1) { -// items(subjects.value.subList(1, subjects.value.lastIndex + 1)) { -// Column { -// Divider(modifier = Modifier.padding(10.dp, 0.dp)) -// SubjectEntry(subject = it) -// } -// } -// } items(subjects.value) { SubjectEntry( subject = it, diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/tasks/SubjectViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/tasks/SubjectViewModel.kt index 31c0c0f..f1d6071 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/tasks/SubjectViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/tasks/SubjectViewModel.kt @@ -1,6 +1,5 @@ package be.ugent.sel.studeez.screens.tasks -import android.util.Log import be.ugent.sel.studeez.data.SelectedSubject import be.ugent.sel.studeez.data.local.models.task.Subject import be.ugent.sel.studeez.domain.LogService @@ -17,14 +16,8 @@ class SubjectViewModel @Inject constructor( private val selectedSubject: SelectedSubject, logService: LogService, ) : StudeezViewModel(logService) { - fun addSubject() { - subjectDAO.saveSubject( - Subject( - name = "Test Subject", - time = 0, - argb_color = 0xFFF44336, - ) - ) + fun addSubject(open: (String) -> Unit) { + open(StudeezDestinations.ADD_SUBJECT_FORM) } fun getSubjects(): Flow> { @@ -32,7 +25,6 @@ class SubjectViewModel @Inject constructor( } fun onViewSubject(subject: Subject, open: (String) -> Unit) { - Log.v("MYLOG", subject.id) selectedSubject.set(subject) open(StudeezDestinations.TASKS_SCREEN) } diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/tasks/TaskScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/tasks/TaskScreen.kt index 316fe31..bd41cff 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/tasks/TaskScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/tasks/TaskScreen.kt @@ -31,9 +31,9 @@ data class TaskActions( val addTask: () -> Unit, val getSubject: () -> Subject, val getTasks: () -> Flow>, - val deleteSubject: () -> Unit, val deleteTask: (Task) -> Unit, val onCheckTask: (Task, Boolean) -> Unit, + val editSubject: () -> Unit, ) fun getTaskActions(viewModel: TaskViewModel, open: (String) -> Unit): TaskActions { @@ -41,9 +41,9 @@ fun getTaskActions(viewModel: TaskViewModel, open: (String) -> Unit): TaskAction addTask = viewModel::addTask, getTasks = viewModel::getTasks, getSubject = viewModel::getSelectedSubject, - deleteSubject = { viewModel.deleteSubject(open) }, deleteTask = viewModel::deleteTask, onCheckTask = { task, isChecked -> viewModel.toggleTaskCompleted(task, isChecked) }, + editSubject = { viewModel.editSubject(open) } ) } @@ -67,7 +67,7 @@ fun TaskScreen( SecondaryScreenTemplate( title = taskActions.getSubject().name, popUp = goBack, - barAction = { EditAction {} } // TODO implement + barAction = { EditAction(onClick = taskActions.editSubject) } ) { val tasks = taskActions.getTasks().collectAsState(initial = emptyList()) Column( @@ -83,15 +83,6 @@ fun TaskScreen( } } NewTaskSubjectButton(onClick = taskActions.addTask, R.string.new_task) - BasicButton( - text = R.string.delete_subject, - modifier = Modifier.basicButton(), - colors = ButtonDefaults.buttonColors( - backgroundColor = Color.Red, - contentColor = Color.White, - ), - onClick = taskActions.deleteSubject, - ) } } } @@ -119,8 +110,8 @@ fun TaskScreenPreview() { { Subject(name = "Test Subject") }, { flowOf() }, {}, - {}, { _, _ -> run {} }, + {}, ) ) } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/tasks/TaskViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/tasks/TaskViewModel.kt index 105a200..26b8c17 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/tasks/TaskViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/tasks/TaskViewModel.kt @@ -43,4 +43,8 @@ class TaskViewModel @Inject constructor( fun toggleTaskCompleted(task: Task, completed: Boolean) { taskDAO.toggleTaskCompleted(task, completed) } + + fun editSubject(open: (String) -> Unit) { + open(StudeezDestinations.EDIT_SUBJECT_FORM) + } } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/tasks/forms/SubjectFormScreen.kt b/app/src/main/java/be/ugent/sel/studeez/screens/tasks/forms/SubjectFormScreen.kt index b2a8055..e97dc74 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/tasks/forms/SubjectFormScreen.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/tasks/forms/SubjectFormScreen.kt @@ -7,6 +7,7 @@ import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import be.ugent.sel.studeez.R @@ -29,6 +30,8 @@ fun SubjectAddRoute( goBack = goBack, uiState = uiState, onConfirm = { viewModel.onCreate(open) }, + onNameChange = viewModel::onNameChange, + onColorChange = {}, ) } @@ -44,8 +47,10 @@ fun SubjectEditRoute( goBack = goBack, uiState = uiState, onConfirm = { viewModel.onEdit(open) }, + onNameChange = viewModel::onNameChange, + onColorChange = {}, ) { - DeleteButton(onClick = viewModel::onDelete) + DeleteButton(onClick = { viewModel.onDelete(open) }) } } @@ -55,6 +60,8 @@ fun SubjectForm( goBack: () -> Unit, uiState: SubjectFormUiState, onConfirm: () -> Unit, + onNameChange: (String) -> Unit, + onColorChange: (Color) -> Unit, extraButton: @Composable () -> Unit = {}, ) { SecondaryScreenTemplate( @@ -65,7 +72,7 @@ fun SubjectForm( OutlinedTextField( singleLine = true, value = uiState.name, - onValueChange = {}, + onValueChange = onNameChange, placeholder = { Text(stringResource(id = R.string.username)) }, modifier = Modifier.fieldModifier(), ) @@ -87,6 +94,8 @@ fun AddSubjectFormPreview() { goBack = {}, uiState = SubjectFormUiState(), onConfirm = {}, + onNameChange = {}, + onColorChange = {}, ) } @@ -100,6 +109,8 @@ fun EditSubjectFormPreview() { name = "Test Subject", ), onConfirm = {}, + onNameChange = {}, + onColorChange = {}, ) { DeleteButton {} } diff --git a/app/src/main/java/be/ugent/sel/studeez/screens/tasks/forms/SubjectFormViewModel.kt b/app/src/main/java/be/ugent/sel/studeez/screens/tasks/forms/SubjectFormViewModel.kt index 99ea85c..ec246f4 100644 --- a/app/src/main/java/be/ugent/sel/studeez/screens/tasks/forms/SubjectFormViewModel.kt +++ b/app/src/main/java/be/ugent/sel/studeez/screens/tasks/forms/SubjectFormViewModel.kt @@ -33,8 +33,9 @@ class SubjectFormViewModel @Inject constructor( uiState.value = uiState.value.copy(color = newValue) } - fun onDelete() { + fun onDelete(open: (String) -> Unit) { subjectDAO.deleteSubject(selectedSubject()) + open(StudeezDestinations.SUBJECT_SCREEN) } fun onCreate(open: (String) -> Unit) { @@ -48,6 +49,7 @@ class SubjectFormViewModel @Inject constructor( selectedSubject.set(newSubject) // TODO open newly created subject // open(StudeezDestinations.TASKS_SCREEN) + open(StudeezDestinations.SUBJECT_SCREEN) } fun onEdit(open: (String) -> Unit) {