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.Alignment | ||||||
| import androidx.compose.ui.Modifier | import androidx.compose.ui.Modifier | ||||||
| import androidx.compose.ui.graphics.Color | import androidx.compose.ui.graphics.Color | ||||||
| import androidx.compose.ui.text.font.FontWeight |  | ||||||
| import androidx.compose.ui.text.style.TextOverflow | import androidx.compose.ui.text.style.TextOverflow | ||||||
| import androidx.compose.ui.tooling.preview.Preview | import androidx.compose.ui.tooling.preview.Preview | ||||||
| import androidx.compose.ui.unit.dp | import androidx.compose.ui.unit.dp | ||||||
|  | @ -31,13 +30,15 @@ import be.ugent.sel.studeez.resources | ||||||
| @Composable | @Composable | ||||||
| fun TaskEntry( | fun TaskEntry( | ||||||
|     task: Task, |     task: Task, | ||||||
|  |     onCheckTask: (Boolean) -> Unit, | ||||||
|  |     onDeleteTask: () -> Unit, | ||||||
| ) { | ) { | ||||||
|     Card( |     Card( | ||||||
|         modifier = Modifier |         modifier = Modifier | ||||||
|             .fillMaxWidth() |             .fillMaxWidth() | ||||||
|             .padding(horizontal = 10.dp, vertical = 5.dp), |             .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( |         Row( | ||||||
|             horizontalArrangement = Arrangement.SpaceBetween, |             horizontalArrangement = Arrangement.SpaceBetween, | ||||||
|             verticalAlignment = Alignment.CenterVertically, |             verticalAlignment = Alignment.CenterVertically, | ||||||
|  | @ -50,7 +51,7 @@ fun TaskEntry( | ||||||
|             ) { |             ) { | ||||||
|                 Checkbox( |                 Checkbox( | ||||||
|                     checked = task.completed, |                     checked = task.completed, | ||||||
|                     onCheckedChange = {}, |                     onCheckedChange = onCheckTask, | ||||||
|                     colors = CheckboxDefaults.colors( |                     colors = CheckboxDefaults.colors( | ||||||
|                         checkedColor = Color.Gray, |                         checkedColor = Color.Gray, | ||||||
|                         uncheckedColor = MaterialTheme.colors.onSurface, |                         uncheckedColor = MaterialTheme.colors.onSurface, | ||||||
|  | @ -79,7 +80,7 @@ fun TaskEntry( | ||||||
|             Box(modifier = Modifier.weight(7f)) { |             Box(modifier = Modifier.weight(7f)) { | ||||||
|                 if (task.completed) { |                 if (task.completed) { | ||||||
|                     IconButton( |                     IconButton( | ||||||
|                         onClick = { /*TODO*/ }, |                         onClick = onDeleteTask, | ||||||
|                         modifier = Modifier |                         modifier = Modifier | ||||||
|                             .padding(start = 20.dp) |                             .padding(start = 20.dp) | ||||||
|                     ) { |                     ) { | ||||||
|  | @ -109,6 +110,7 @@ fun TaskEntryPreview() { | ||||||
|             name = "Test Task", |             name = "Test Task", | ||||||
|             completed = false, |             completed = false, | ||||||
|         ), |         ), | ||||||
|  |         {}, {}, | ||||||
|     ) |     ) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -119,7 +121,8 @@ fun CompletedTaskEntryPreview() { | ||||||
|         task = Task( |         task = Task( | ||||||
|             name = "Test Task", |             name = "Test Task", | ||||||
|             completed = true, |             completed = true, | ||||||
|         ) |         ), | ||||||
|  |         {}, {}, | ||||||
|     ) |     ) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -131,5 +134,6 @@ fun OverflowTaskEntryPreview() { | ||||||
|             name = "Test Taskkkkkkkkkkkkkkkkkkkkkkkkkkk", |             name = "Test Taskkkkkkkkkkkkkkkkkkkkkkkkkkk", | ||||||
|             completed = false, |             completed = false, | ||||||
|         ), |         ), | ||||||
|  |         {}, {}, | ||||||
|     ) |     ) | ||||||
| } | } | ||||||
|  | @ -7,4 +7,5 @@ data class Task( | ||||||
|     val name: String = "", |     val name: String = "", | ||||||
|     val completed: Boolean = false, |     val completed: Boolean = false, | ||||||
|     val time: Int = 0, |     val time: Int = 0, | ||||||
|  |     val subjectId: String = "", | ||||||
| ) | ) | ||||||
|  |  | ||||||
|  | @ -11,4 +11,6 @@ interface TaskDAO { | ||||||
|     fun saveTask(newTask: Task) |     fun saveTask(newTask: Task) | ||||||
| 
 | 
 | ||||||
|     fun deleteTask(oldTask: Task) |     fun deleteTask(oldTask: Task) | ||||||
|  | 
 | ||||||
|  |     fun toggleTaskCompleted(task: Task, completed: Boolean) | ||||||
| } | } | ||||||
|  | @ -16,7 +16,7 @@ class FireBaseTaskDAO @Inject constructor( | ||||||
|     private val auth: AccountDAO, |     private val auth: AccountDAO, | ||||||
| ) : TaskDAO { | ) : TaskDAO { | ||||||
|     override fun getTasks(subject: Subject): Flow<List<Task>> { |     override fun getTasks(subject: Subject): Flow<List<Task>> { | ||||||
|         return selectedSubjectTasksCollection(subject) |         return selectedSubjectTasksCollection(subject.id) | ||||||
|             .snapshots() |             .snapshots() | ||||||
|             .map { it.toObjects(Task::class.java) } |             .map { it.toObjects(Task::class.java) } | ||||||
|     } |     } | ||||||
|  | @ -26,13 +26,19 @@ class FireBaseTaskDAO @Inject constructor( | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     override fun deleteTask(oldTask: Task) { |     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) |         firestore.collection(FireBaseCollections.USER_COLLECTION) | ||||||
|             .document(auth.currentUserId) |             .document(auth.currentUserId) | ||||||
|             .collection(FireBaseCollections.SUBJECT_COLLECTION) |             .collection(FireBaseCollections.SUBJECT_COLLECTION) | ||||||
|             .document(subject.id) |             .document(subjectId) | ||||||
|             .collection(FireBaseCollections.TASK_COLLECTION) |             .collection(FireBaseCollections.TASK_COLLECTION) | ||||||
| } | } | ||||||
|  | @ -7,7 +7,6 @@ import androidx.compose.foundation.lazy.items | ||||||
| import androidx.compose.material.ButtonDefaults | import androidx.compose.material.ButtonDefaults | ||||||
| import androidx.compose.material.Icon | import androidx.compose.material.Icon | ||||||
| import androidx.compose.material.IconButton | import androidx.compose.material.IconButton | ||||||
| import androidx.compose.material.Text |  | ||||||
| import androidx.compose.material.icons.Icons | import androidx.compose.material.icons.Icons | ||||||
| import androidx.compose.material.icons.filled.Edit | import androidx.compose.material.icons.filled.Edit | ||||||
| import androidx.compose.runtime.Composable | 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.BasicButton | ||||||
| import be.ugent.sel.studeez.common.composable.NewTaskSubjectButton | import be.ugent.sel.studeez.common.composable.NewTaskSubjectButton | ||||||
| import be.ugent.sel.studeez.common.composable.SecondaryScreenTemplate | 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.common.ext.basicButton | ||||||
| import be.ugent.sel.studeez.data.local.models.task.Subject | import be.ugent.sel.studeez.data.local.models.task.Subject | ||||||
| import be.ugent.sel.studeez.data.local.models.task.Task | import be.ugent.sel.studeez.data.local.models.task.Task | ||||||
|  | @ -32,6 +32,8 @@ data class TaskActions( | ||||||
|     val getSubject: () -> Subject, |     val getSubject: () -> Subject, | ||||||
|     val getTasks: () -> Flow<List<Task>>, |     val getTasks: () -> Flow<List<Task>>, | ||||||
|     val deleteSubject: () -> Unit, |     val deleteSubject: () -> Unit, | ||||||
|  |     val deleteTask: (Task) -> Unit, | ||||||
|  |     val onCheckTask: (Task, Boolean) -> Unit, | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| fun getTaskActions(viewModel: TaskViewModel, open: (String) -> Unit): TaskActions { | fun getTaskActions(viewModel: TaskViewModel, open: (String) -> Unit): TaskActions { | ||||||
|  | @ -40,6 +42,8 @@ fun getTaskActions(viewModel: TaskViewModel, open: (String) -> Unit): TaskAction | ||||||
|         getTasks = viewModel::getTasks, |         getTasks = viewModel::getTasks, | ||||||
|         getSubject = viewModel::getSelectedSubject, |         getSubject = viewModel::getSelectedSubject, | ||||||
|         deleteSubject = { viewModel.deleteSubject(open) }, |         deleteSubject = { viewModel.deleteSubject(open) }, | ||||||
|  |         deleteTask = viewModel::deleteTask, | ||||||
|  |         onCheckTask = { task, isChecked -> viewModel.toggleTaskCompleted(task, isChecked) }, | ||||||
|     ) |     ) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -71,7 +75,11 @@ fun TaskScreen( | ||||||
|         ) { |         ) { | ||||||
|             LazyColumn { |             LazyColumn { | ||||||
|                 items(tasks.value) { |                 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) |             NewTaskSubjectButton(onClick = taskActions.addTask, R.string.new_task) | ||||||
|  | @ -111,6 +119,8 @@ fun TaskScreenPreview() { | ||||||
|             { Subject(name = "Test Subject") }, |             { Subject(name = "Test Subject") }, | ||||||
|             { flowOf() }, |             { flowOf() }, | ||||||
|             {}, |             {}, | ||||||
|  |             {}, | ||||||
|  |             { _, _ -> run {} }, | ||||||
|         ) |         ) | ||||||
|     ) |     ) | ||||||
| } | } | ||||||
|  | @ -35,4 +35,12 @@ class TaskViewModel @Inject constructor( | ||||||
|     fun getSelectedSubject(): Subject { |     fun getSelectedSubject(): Subject { | ||||||
|         return selectedSubject() |         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