parent
b7a74a13d7
commit
71590bd5a2
6 changed files with 42 additions and 11 deletions
|
@ -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,
|
||||
),
|
||||
{}, {},
|
||||
)
|
||||
}
|
|
@ -7,4 +7,5 @@ data class Task(
|
|||
val name: String = "",
|
||||
val completed: Boolean = false,
|
||||
val time: Int = 0,
|
||||
val subjectId: String = "",
|
||||
)
|
||||
|
|
|
@ -11,4 +11,6 @@ interface TaskDAO {
|
|||
fun saveTask(newTask: Task)
|
||||
|
||||
fun deleteTask(oldTask: Task)
|
||||
|
||||
fun toggleTaskCompleted(task: Task, completed: Boolean)
|
||||
}
|
|
@ -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)
|
||||
}
|
|
@ -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 {} },
|
||||
)
|
||||
)
|
||||
}
|
|
@ -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)
|
||||
}
|
||||
}
|
Reference in a new issue