archive tasks
This commit is contained in:
parent
5f8b7d7a7b
commit
e35f143854
5 changed files with 27 additions and 22 deletions
|
@ -1,17 +1,7 @@
|
||||||
package be.ugent.sel.studeez.common.composable.tasks
|
package be.ugent.sel.studeez.common.composable.tasks
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.foundation.layout.Box
|
import androidx.compose.material.*
|
||||||
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.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.filled.Delete
|
import androidx.compose.material.icons.filled.Delete
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
@ -31,7 +21,7 @@ import be.ugent.sel.studeez.resources
|
||||||
fun TaskEntry(
|
fun TaskEntry(
|
||||||
task: Task,
|
task: Task,
|
||||||
onCheckTask: (Boolean) -> Unit,
|
onCheckTask: (Boolean) -> Unit,
|
||||||
onDeleteTask: () -> Unit,
|
onArchiveTask: () -> Unit,
|
||||||
onStartTask: () -> Unit
|
onStartTask: () -> Unit
|
||||||
) {
|
) {
|
||||||
Card(
|
Card(
|
||||||
|
@ -81,7 +71,7 @@ fun TaskEntry(
|
||||||
Box(modifier = Modifier.weight(7f)) {
|
Box(modifier = Modifier.weight(7f)) {
|
||||||
if (task.completed) {
|
if (task.completed) {
|
||||||
IconButton(
|
IconButton(
|
||||||
onClick = onDeleteTask,
|
onClick = onArchiveTask,
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.padding(start = 20.dp)
|
.padding(start = 20.dp)
|
||||||
) {
|
) {
|
||||||
|
|
|
@ -8,8 +8,12 @@ data class Task(
|
||||||
val completed: Boolean = false,
|
val completed: Boolean = false,
|
||||||
val time: Int = 0,
|
val time: Int = 0,
|
||||||
val subjectId: String = "",
|
val subjectId: String = "",
|
||||||
val archived: Boolean = false,
|
var archived: Boolean = false,
|
||||||
)
|
) {
|
||||||
|
fun archive() {
|
||||||
|
this.archived = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
object TaskDocument {
|
object TaskDocument {
|
||||||
const val id = "id"
|
const val id = "id"
|
||||||
|
|
|
@ -32,6 +32,7 @@ class FireBaseTaskDAO @Inject constructor(
|
||||||
|
|
||||||
override suspend fun getTaskCount(subject: Subject): Int {
|
override suspend fun getTaskCount(subject: Subject): Int {
|
||||||
return selectedSubjectTasksCollection(subject.id)
|
return selectedSubjectTasksCollection(subject.id)
|
||||||
|
.whereEqualTo(TaskDocument.archived, false)
|
||||||
.count()
|
.count()
|
||||||
.get(AggregateSource.SERVER)
|
.get(AggregateSource.SERVER)
|
||||||
.await()
|
.await()
|
||||||
|
@ -53,7 +54,7 @@ class FireBaseTaskDAO @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun updateTask(newTask: Task) {
|
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) {
|
override fun deleteTask(oldTask: Task) {
|
||||||
|
@ -63,7 +64,8 @@ class FireBaseTaskDAO @Inject constructor(
|
||||||
override fun toggleTaskCompleted(task: Task, completed: Boolean) {
|
override fun toggleTaskCompleted(task: Task, completed: Boolean) {
|
||||||
selectedSubjectTasksCollection(task.subjectId)
|
selectedSubjectTasksCollection(task.subjectId)
|
||||||
.document(task.id)
|
.document(task.id)
|
||||||
.update(TaskDocument.completed, completed)
|
// .update(TaskDocument.completed, completed)
|
||||||
|
.set(task.copy(completed = completed))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun selectedSubjectTasksCollection(subjectId: String): CollectionReference =
|
private fun selectedSubjectTasksCollection(subjectId: String): CollectionReference =
|
||||||
|
|
|
@ -30,7 +30,8 @@ data class TaskActions(
|
||||||
val deleteTask: (Task) -> Unit,
|
val deleteTask: (Task) -> Unit,
|
||||||
val onCheckTask: (Task, Boolean) -> Unit,
|
val onCheckTask: (Task, Boolean) -> Unit,
|
||||||
val editSubject: () -> Unit,
|
val editSubject: () -> Unit,
|
||||||
val startTask: (Task) -> Unit
|
val startTask: (Task) -> Unit,
|
||||||
|
val archiveTask: (Task) -> Unit,
|
||||||
)
|
)
|
||||||
|
|
||||||
fun getTaskActions(viewModel: TaskViewModel, open: (String) -> Unit): TaskActions {
|
fun getTaskActions(viewModel: TaskViewModel, open: (String) -> Unit): TaskActions {
|
||||||
|
@ -41,7 +42,8 @@ fun getTaskActions(viewModel: TaskViewModel, open: (String) -> Unit): TaskAction
|
||||||
deleteTask = viewModel::deleteTask,
|
deleteTask = viewModel::deleteTask,
|
||||||
onCheckTask = { task, isChecked -> viewModel.toggleTaskCompleted(task, isChecked) },
|
onCheckTask = { task, isChecked -> viewModel.toggleTaskCompleted(task, isChecked) },
|
||||||
editSubject = { viewModel.editSubject(open) },
|
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(
|
TaskEntry(
|
||||||
task = it,
|
task = it,
|
||||||
onCheckTask = { isChecked -> taskActions.onCheckTask(it, isChecked) },
|
onCheckTask = { isChecked -> taskActions.onCheckTask(it, isChecked) },
|
||||||
onDeleteTask = { taskActions.deleteTask(it) },
|
onArchiveTask = { taskActions.archiveTask(it) },
|
||||||
onStartTask = { taskActions.startTask(it) }
|
onStartTask = { taskActions.startTask(it) }
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -111,7 +113,8 @@ fun TaskScreenPreview() {
|
||||||
{},
|
{},
|
||||||
{ _, _ -> run {} },
|
{ _, _ -> run {} },
|
||||||
{},
|
{},
|
||||||
{}
|
{},
|
||||||
|
{},
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
package be.ugent.sel.studeez.screens.tasks
|
package be.ugent.sel.studeez.screens.tasks
|
||||||
|
|
||||||
|
import android.util.Log
|
||||||
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
|
||||||
import be.ugent.sel.studeez.data.local.models.task.Subject
|
import be.ugent.sel.studeez.data.local.models.task.Subject
|
||||||
|
@ -42,6 +43,11 @@ class TaskViewModel @Inject constructor(
|
||||||
taskDAO.deleteTask(task)
|
taskDAO.deleteTask(task)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun archiveTask(task: Task) {
|
||||||
|
task.archive()
|
||||||
|
taskDAO.updateTask(task)
|
||||||
|
}
|
||||||
|
|
||||||
fun toggleTaskCompleted(task: Task, completed: Boolean) {
|
fun toggleTaskCompleted(task: Task, completed: Boolean) {
|
||||||
taskDAO.toggleTaskCompleted(task, completed)
|
taskDAO.toggleTaskCompleted(task, completed)
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue