diff --git a/app/src/main/java/be/ugent/sel/studeez/common/composable/tasks/TaskEntry.kt b/app/src/main/java/be/ugent/sel/studeez/common/composable/tasks/TaskEntry.kt index 434919b..458cafc 100644 --- a/app/src/main/java/be/ugent/sel/studeez/common/composable/tasks/TaskEntry.kt +++ b/app/src/main/java/be/ugent/sel/studeez/common/composable/tasks/TaskEntry.kt @@ -18,7 +18,6 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -31,13 +30,15 @@ import be.ugent.sel.studeez.resources @Composable fun TaskEntry( task: Task, + onCheckTask: (Boolean) -> Unit, + onDeleteTask: () -> Unit, ) { Card( modifier = Modifier .fillMaxWidth() .padding(horizontal = 10.dp, vertical = 5.dp), ) { - val color = if (task.completed) Color.Gray else Color.Black + val color = if (task.completed) Color.Gray else MaterialTheme.colors.onSurface Row( horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically, @@ -50,7 +51,7 @@ fun TaskEntry( ) { Checkbox( checked = task.completed, - onCheckedChange = {}, + onCheckedChange = onCheckTask, colors = CheckboxDefaults.colors( checkedColor = Color.Gray, uncheckedColor = MaterialTheme.colors.onSurface, @@ -79,7 +80,7 @@ fun TaskEntry( Box(modifier = Modifier.weight(7f)) { if (task.completed) { IconButton( - onClick = { /*TODO*/ }, + onClick = onDeleteTask, modifier = Modifier .padding(start = 20.dp) ) { @@ -109,6 +110,7 @@ fun TaskEntryPreview() { name = "Test Task", completed = false, ), + {}, {}, ) } @@ -119,7 +121,8 @@ fun CompletedTaskEntryPreview() { task = Task( name = "Test Task", completed = true, - ) + ), + {}, {}, ) } @@ -131,5 +134,6 @@ fun OverflowTaskEntryPreview() { name = "Test Taskkkkkkkkkkkkkkkkkkkkkkkkkkk", completed = false, ), + {}, {}, ) } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/data/local/models/task/Task.kt b/app/src/main/java/be/ugent/sel/studeez/data/local/models/task/Task.kt index bde6932..05a5020 100644 --- a/app/src/main/java/be/ugent/sel/studeez/data/local/models/task/Task.kt +++ b/app/src/main/java/be/ugent/sel/studeez/data/local/models/task/Task.kt @@ -7,4 +7,5 @@ data class Task( val name: String = "", val completed: Boolean = false, val time: Int = 0, + val subjectId: String = "", ) diff --git a/app/src/main/java/be/ugent/sel/studeez/domain/TaskDAO.kt b/app/src/main/java/be/ugent/sel/studeez/domain/TaskDAO.kt index 2fb5dde..38c639a 100644 --- a/app/src/main/java/be/ugent/sel/studeez/domain/TaskDAO.kt +++ b/app/src/main/java/be/ugent/sel/studeez/domain/TaskDAO.kt @@ -11,4 +11,6 @@ interface TaskDAO { fun saveTask(newTask: Task) fun deleteTask(oldTask: Task) + + fun toggleTaskCompleted(task: Task, completed: Boolean) } \ No newline at end of file diff --git a/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FireBaseTaskDAO.kt b/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FireBaseTaskDAO.kt index 50c99f0..09e8cdf 100644 --- a/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FireBaseTaskDAO.kt +++ b/app/src/main/java/be/ugent/sel/studeez/domain/implementation/FireBaseTaskDAO.kt @@ -16,7 +16,7 @@ class FireBaseTaskDAO @Inject constructor( private val auth: AccountDAO, ) : TaskDAO { override fun getTasks(subject: Subject): Flow> { - return selectedSubjectTasksCollection(subject) + return selectedSubjectTasksCollection(subject.id) .snapshots() .map { it.toObjects(Task::class.java) } } @@ -26,13 +26,19 @@ class FireBaseTaskDAO @Inject constructor( } override fun deleteTask(oldTask: Task) { - TODO("Not yet implemented") + selectedSubjectTasksCollection(oldTask.subjectId).document(oldTask.id).delete() } - private fun selectedSubjectTasksCollection(subject: Subject): CollectionReference = + override fun toggleTaskCompleted(task: Task, completed: Boolean) { + selectedSubjectTasksCollection(task.subjectId) + .document(task.id) + .update("completed", completed) + } + + private fun selectedSubjectTasksCollection(subjectId: String): CollectionReference = firestore.collection(FireBaseCollections.USER_COLLECTION) .document(auth.currentUserId) .collection(FireBaseCollections.SUBJECT_COLLECTION) - .document(subject.id) + .document(subjectId) .collection(FireBaseCollections.TASK_COLLECTION) } \ No newline at end of file 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 bd8053b..316fe31 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 @@ -7,7 +7,6 @@ import androidx.compose.foundation.lazy.items import androidx.compose.material.ButtonDefaults import androidx.compose.material.Icon import androidx.compose.material.IconButton -import androidx.compose.material.Text import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Edit import androidx.compose.runtime.Composable @@ -20,6 +19,7 @@ import be.ugent.sel.studeez.R import be.ugent.sel.studeez.common.composable.BasicButton import be.ugent.sel.studeez.common.composable.NewTaskSubjectButton import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate +import be.ugent.sel.studeez.common.composable.tasks.TaskEntry import be.ugent.sel.studeez.common.ext.basicButton import be.ugent.sel.studeez.data.local.models.task.Subject import be.ugent.sel.studeez.data.local.models.task.Task @@ -32,6 +32,8 @@ data class TaskActions( val getSubject: () -> Subject, val getTasks: () -> Flow>, val deleteSubject: () -> Unit, + val deleteTask: (Task) -> Unit, + val onCheckTask: (Task, Boolean) -> Unit, ) fun getTaskActions(viewModel: TaskViewModel, open: (String) -> Unit): TaskActions { @@ -40,6 +42,8 @@ fun getTaskActions(viewModel: TaskViewModel, open: (String) -> Unit): TaskAction getTasks = viewModel::getTasks, getSubject = viewModel::getSelectedSubject, deleteSubject = { viewModel.deleteSubject(open) }, + deleteTask = viewModel::deleteTask, + onCheckTask = { task, isChecked -> viewModel.toggleTaskCompleted(task, isChecked) }, ) } @@ -71,7 +75,11 @@ fun TaskScreen( ) { LazyColumn { items(tasks.value) { - Text(text = it.name) + TaskEntry( + task = it, + onCheckTask = { isChecked -> taskActions.onCheckTask(it, isChecked) }, + onDeleteTask = { taskActions.deleteTask(it) }, + ) } } NewTaskSubjectButton(onClick = taskActions.addTask, R.string.new_task) @@ -111,6 +119,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 06dce41..105a200 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 @@ -35,4 +35,12 @@ class TaskViewModel @Inject constructor( fun getSelectedSubject(): Subject { return selectedSubject() } + + fun deleteTask(task: Task) { + taskDAO.deleteTask(task) + } + + fun toggleTaskCompleted(task: Task, completed: Boolean) { + taskDAO.toggleTaskCompleted(task, completed) + } } \ No newline at end of file