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
	
	 brreynie
						brreynie