From e35f1438547925c25067580fd1e5dc83c33dc59f Mon Sep 17 00:00:00 2001 From: brreynie Date: Tue, 9 May 2023 16:00:15 +0200 Subject: [PATCH] archive tasks --- .../common/composable/tasks/TaskEntry.kt | 18 ++++-------------- .../sel/studeez/data/local/models/task/Task.kt | 8 ++++++-- .../domain/implementation/FireBaseTaskDAO.kt | 6 ++++-- .../sel/studeez/screens/tasks/TaskScreen.kt | 11 +++++++---- .../sel/studeez/screens/tasks/TaskViewModel.kt | 6 ++++++ 5 files changed, 27 insertions(+), 22 deletions(-) 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 bf3a7cf..35e7a44 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 @@ -1,17 +1,7 @@ package be.ugent.sel.studeez.common.composable.tasks -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.material.Card -import androidx.compose.material.Checkbox -import androidx.compose.material.CheckboxDefaults -import androidx.compose.material.Icon -import androidx.compose.material.IconButton -import androidx.compose.material.MaterialTheme -import androidx.compose.material.Text +import androidx.compose.foundation.layout.* +import androidx.compose.material.* import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Delete import androidx.compose.runtime.Composable @@ -31,7 +21,7 @@ import be.ugent.sel.studeez.resources fun TaskEntry( task: Task, onCheckTask: (Boolean) -> Unit, - onDeleteTask: () -> Unit, + onArchiveTask: () -> Unit, onStartTask: () -> Unit ) { Card( @@ -81,7 +71,7 @@ fun TaskEntry( Box(modifier = Modifier.weight(7f)) { if (task.completed) { IconButton( - onClick = onDeleteTask, + onClick = onArchiveTask, modifier = Modifier .padding(start = 20.dp) ) { 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 91242b0..44d6d01 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 @@ -8,8 +8,12 @@ data class Task( val completed: Boolean = false, val time: Int = 0, val subjectId: String = "", - val archived: Boolean = false, -) + var archived: Boolean = false, +) { + fun archive() { + this.archived = true + } +} object TaskDocument { const val id = "id" 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 bf32776..4443b87 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 @@ -32,6 +32,7 @@ class FireBaseTaskDAO @Inject constructor( override suspend fun getTaskCount(subject: Subject): Int { return selectedSubjectTasksCollection(subject.id) + .whereEqualTo(TaskDocument.archived, false) .count() .get(AggregateSource.SERVER) .await() @@ -53,7 +54,7 @@ class FireBaseTaskDAO @Inject constructor( } override fun updateTask(newTask: Task) { - selectedSubjectTasksCollection(newTask.id).document(newTask.id).set(newTask) + selectedSubjectTasksCollection(newTask.subjectId).document(newTask.id).set(newTask) } override fun deleteTask(oldTask: Task) { @@ -63,7 +64,8 @@ class FireBaseTaskDAO @Inject constructor( override fun toggleTaskCompleted(task: Task, completed: Boolean) { selectedSubjectTasksCollection(task.subjectId) .document(task.id) - .update(TaskDocument.completed, completed) +// .update(TaskDocument.completed, completed) + .set(task.copy(completed = completed)) } private fun selectedSubjectTasksCollection(subjectId: String): CollectionReference = 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 8a35717..1b56bc6 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 @@ -30,7 +30,8 @@ data class TaskActions( val deleteTask: (Task) -> Unit, val onCheckTask: (Task, Boolean) -> Unit, val editSubject: () -> Unit, - val startTask: (Task) -> Unit + val startTask: (Task) -> Unit, + val archiveTask: (Task) -> Unit, ) fun getTaskActions(viewModel: TaskViewModel, open: (String) -> Unit): TaskActions { @@ -41,7 +42,8 @@ fun getTaskActions(viewModel: TaskViewModel, open: (String) -> Unit): TaskAction deleteTask = viewModel::deleteTask, onCheckTask = { task, isChecked -> viewModel.toggleTaskCompleted(task, isChecked) }, editSubject = { viewModel.editSubject(open) }, - startTask = { task -> viewModel.startTask(task, open) } + startTask = { task -> viewModel.startTask(task, open) }, + archiveTask = viewModel::archiveTask ) } @@ -76,7 +78,7 @@ fun TaskScreen( TaskEntry( task = it, onCheckTask = { isChecked -> taskActions.onCheckTask(it, isChecked) }, - onDeleteTask = { taskActions.deleteTask(it) }, + onArchiveTask = { taskActions.archiveTask(it) }, onStartTask = { taskActions.startTask(it) } ) } @@ -111,7 +113,8 @@ fun TaskScreenPreview() { {}, { _, _ -> 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 37f1c91..2361399 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 @@ -1,5 +1,6 @@ package be.ugent.sel.studeez.screens.tasks +import android.util.Log import be.ugent.sel.studeez.data.SelectedSubject import be.ugent.sel.studeez.data.SelectedTask import be.ugent.sel.studeez.data.local.models.task.Subject @@ -42,6 +43,11 @@ class TaskViewModel @Inject constructor( taskDAO.deleteTask(task) } + fun archiveTask(task: Task) { + task.archive() + taskDAO.updateTask(task) + } + fun toggleTaskCompleted(task: Task, completed: Boolean) { taskDAO.toggleTaskCompleted(task, completed) }