#22 get tasks from firestore
This commit is contained in:
parent
e1c05bb0d4
commit
056947e1db
8 changed files with 44 additions and 23 deletions
|
@ -77,7 +77,7 @@ fun SubjectEntry(
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Default.List, contentDescription = "tasks"
|
imageVector = Icons.Default.List, contentDescription = "tasks"
|
||||||
)
|
)
|
||||||
Text(text = subject.tasks.size.toString())
|
Text(text = "0/0") // TODO
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
package be.ugent.sel.studeez.data
|
||||||
|
|
||||||
|
import be.ugent.sel.studeez.data.local.models.task.Subject
|
||||||
|
import javax.inject.Inject
|
||||||
|
import javax.inject.Singleton
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used to communicate the selected subject from the subject overview to the task overview of that subject.
|
||||||
|
* Because this is a singleton-class the view-models of both screens observe the same data.
|
||||||
|
*/
|
||||||
|
@Singleton
|
||||||
|
class SelectedSubject @Inject constructor() {
|
||||||
|
private lateinit var subject: Subject
|
||||||
|
operator fun invoke() = subject
|
||||||
|
fun set(subject: Subject) {
|
||||||
|
this.subject = subject
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,7 +5,6 @@ import com.google.firebase.firestore.DocumentId
|
||||||
data class Subject(
|
data class Subject(
|
||||||
@DocumentId val id: String = "",
|
@DocumentId val id: String = "",
|
||||||
val name: String = "",
|
val name: String = "",
|
||||||
val tasks: List<Task> = mutableListOf(),
|
|
||||||
val time: Int = 0,
|
val time: Int = 0,
|
||||||
val argb_color: Long = 0,
|
val argb_color: Long = 0,
|
||||||
)
|
)
|
|
@ -5,4 +5,5 @@ object FireBaseCollections {
|
||||||
const val USER_COLLECTION = "users"
|
const val USER_COLLECTION = "users"
|
||||||
const val TIMER_COLLECTION = "timers"
|
const val TIMER_COLLECTION = "timers"
|
||||||
const val SUBJECT_COLLECTION = "subjects"
|
const val SUBJECT_COLLECTION = "subjects"
|
||||||
|
const val TASK_COLLECTION = "tasks"
|
||||||
}
|
}
|
|
@ -4,9 +4,11 @@ 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
|
||||||
import be.ugent.sel.studeez.domain.AccountDAO
|
import be.ugent.sel.studeez.domain.AccountDAO
|
||||||
import be.ugent.sel.studeez.domain.TaskDAO
|
import be.ugent.sel.studeez.domain.TaskDAO
|
||||||
|
import com.google.firebase.firestore.CollectionReference
|
||||||
import com.google.firebase.firestore.FirebaseFirestore
|
import com.google.firebase.firestore.FirebaseFirestore
|
||||||
|
import com.google.firebase.firestore.ktx.snapshots
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.flowOf
|
import kotlinx.coroutines.flow.map
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class FireBaseTaskDAO @Inject constructor(
|
class FireBaseTaskDAO @Inject constructor(
|
||||||
|
@ -14,18 +16,9 @@ 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 flowOf(
|
return selectedSubjectTasksCollection(subject)
|
||||||
listOf(
|
.snapshots()
|
||||||
Task(
|
.map { it.toObjects(Task::class.java) }
|
||||||
name = "Test Task",
|
|
||||||
completed = false,
|
|
||||||
),
|
|
||||||
Task(
|
|
||||||
name = "Test Task 2",
|
|
||||||
completed = true,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun saveTask(newTask: Task) {
|
override fun saveTask(newTask: Task) {
|
||||||
|
@ -36,4 +29,10 @@ class FireBaseTaskDAO @Inject constructor(
|
||||||
TODO("Not yet implemented")
|
TODO("Not yet implemented")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun selectedSubjectTasksCollection(subject: Subject): CollectionReference =
|
||||||
|
firestore.collection(FireBaseCollections.USER_COLLECTION)
|
||||||
|
.document(auth.currentUserId)
|
||||||
|
.collection(FireBaseCollections.SUBJECT_COLLECTION)
|
||||||
|
.document(subject.id)
|
||||||
|
.collection(FireBaseCollections.TASK_COLLECTION)
|
||||||
}
|
}
|
|
@ -32,7 +32,7 @@ fun SubjectRoute(
|
||||||
navigationBarActions = navigationBarActions,
|
navigationBarActions = navigationBarActions,
|
||||||
addSubject = { viewModel.addSubject() },
|
addSubject = { viewModel.addSubject() },
|
||||||
getSubjects = viewModel::getSubjects,
|
getSubjects = viewModel::getSubjects,
|
||||||
onViewSubject = { viewModel.onViewSubject(Subject(), open) },
|
onViewSubject = { viewModel.onViewSubject(it, open) },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ fun SubjectScreen(
|
||||||
navigationBarActions: NavigationBarActions,
|
navigationBarActions: NavigationBarActions,
|
||||||
addSubject: () -> Unit,
|
addSubject: () -> Unit,
|
||||||
getSubjects: () -> Flow<List<Subject>>,
|
getSubjects: () -> Flow<List<Subject>>,
|
||||||
onViewSubject: () -> Unit,
|
onViewSubject: (Subject) -> Unit,
|
||||||
) {
|
) {
|
||||||
PrimaryScreenTemplate(
|
PrimaryScreenTemplate(
|
||||||
title = resources().getString(R.string.tasks),
|
title = resources().getString(R.string.tasks),
|
||||||
|
@ -71,7 +71,7 @@ fun SubjectScreen(
|
||||||
items(subjects.value) {
|
items(subjects.value) {
|
||||||
SubjectEntry(
|
SubjectEntry(
|
||||||
subject = it,
|
subject = it,
|
||||||
onViewSubject = onViewSubject,
|
onViewSubject = { onViewSubject(it) },
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
package be.ugent.sel.studeez.screens.tasks
|
package be.ugent.sel.studeez.screens.tasks
|
||||||
|
|
||||||
|
import android.util.Log
|
||||||
|
import be.ugent.sel.studeez.data.SelectedSubject
|
||||||
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.domain.LogService
|
import be.ugent.sel.studeez.domain.LogService
|
||||||
import be.ugent.sel.studeez.domain.SubjectDAO
|
import be.ugent.sel.studeez.domain.SubjectDAO
|
||||||
|
@ -12,13 +14,13 @@ import javax.inject.Inject
|
||||||
@HiltViewModel
|
@HiltViewModel
|
||||||
class SubjectViewModel @Inject constructor(
|
class SubjectViewModel @Inject constructor(
|
||||||
private val subjectDAO: SubjectDAO,
|
private val subjectDAO: SubjectDAO,
|
||||||
|
private val selectedSubject: SelectedSubject,
|
||||||
logService: LogService,
|
logService: LogService,
|
||||||
) : StudeezViewModel(logService) {
|
) : StudeezViewModel(logService) {
|
||||||
fun addSubject() {
|
fun addSubject() {
|
||||||
subjectDAO.saveSubject(
|
subjectDAO.saveSubject(
|
||||||
Subject(
|
Subject(
|
||||||
name = "Test Subject",
|
name = "Test Subject",
|
||||||
tasks = listOf(),
|
|
||||||
time = 0,
|
time = 0,
|
||||||
argb_color = 0xFFF44336,
|
argb_color = 0xFFF44336,
|
||||||
)
|
)
|
||||||
|
@ -30,6 +32,8 @@ class SubjectViewModel @Inject constructor(
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onViewSubject(subject: Subject, open: (String) -> Unit) {
|
fun onViewSubject(subject: Subject, open: (String) -> Unit) {
|
||||||
|
Log.v("MYLOG", subject.id)
|
||||||
|
selectedSubject.set(subject)
|
||||||
open(StudeezDestinations.TASKS_SCREEN)
|
open(StudeezDestinations.TASKS_SCREEN)
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,25 +1,25 @@
|
||||||
package be.ugent.sel.studeez.screens.tasks
|
package be.ugent.sel.studeez.screens.tasks
|
||||||
|
|
||||||
import be.ugent.sel.studeez.data.local.models.task.Subject
|
import be.ugent.sel.studeez.data.SelectedSubject
|
||||||
import be.ugent.sel.studeez.data.local.models.task.Task
|
import be.ugent.sel.studeez.data.local.models.task.Task
|
||||||
import be.ugent.sel.studeez.domain.LogService
|
import be.ugent.sel.studeez.domain.LogService
|
||||||
import be.ugent.sel.studeez.domain.TaskDAO
|
import be.ugent.sel.studeez.domain.TaskDAO
|
||||||
import be.ugent.sel.studeez.screens.StudeezViewModel
|
import be.ugent.sel.studeez.screens.StudeezViewModel
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.flowOf
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@HiltViewModel
|
@HiltViewModel
|
||||||
class TaskViewModel @Inject constructor(
|
class TaskViewModel @Inject constructor(
|
||||||
private val taskDAO: TaskDAO,
|
private val taskDAO: TaskDAO,
|
||||||
|
private val selectedSubject: SelectedSubject,
|
||||||
logService: LogService,
|
logService: LogService,
|
||||||
) : StudeezViewModel(logService) {
|
) : StudeezViewModel(logService) {
|
||||||
fun addTask() {
|
fun addTask() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getTasks() : Flow<List<Task>> {
|
fun getTasks(): Flow<List<Task>> {
|
||||||
return taskDAO.getTasks(Subject())
|
return taskDAO.getTasks(selectedSubject())
|
||||||
}
|
}
|
||||||
}
|
}
|
Reference in a new issue