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
 | 
			
		||||
 | 
			
		||||
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)
 | 
			
		||||
                    ) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 =
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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 {} },
 | 
			
		||||
            {},
 | 
			
		||||
            {}
 | 
			
		||||
            {},
 | 
			
		||||
            {},
 | 
			
		||||
        )
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue