#23 toggle task completed and #24 delete task

This commit is contained in:
brreynie 2023-05-03 14:58:41 +02:00
parent b7a74a13d7
commit 71590bd5a2
6 changed files with 42 additions and 11 deletions

View file

@ -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,
),
{}, {},
)
}

View file

@ -7,4 +7,5 @@ data class Task(
val name: String = "",
val completed: Boolean = false,
val time: Int = 0,
val subjectId: String = "",
)

View file

@ -11,4 +11,6 @@ interface TaskDAO {
fun saveTask(newTask: Task)
fun deleteTask(oldTask: Task)
fun toggleTaskCompleted(task: Task, completed: Boolean)
}

View file

@ -16,7 +16,7 @@ class FireBaseTaskDAO @Inject constructor(
private val auth: AccountDAO,
) : TaskDAO {
override fun getTasks(subject: Subject): Flow<List<Task>> {
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)
}

View file

@ -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<List<Task>>,
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 {} },
)
)
}

View file

@ -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)
}
}