fix selectedSubject
This commit is contained in:
		
							parent
							
								
									e9cc4f4a0c
								
							
						
					
					
						commit
						0e4200057b
					
				
					 10 changed files with 53 additions and 38 deletions
				
			
		| 
						 | 
				
			
			@ -24,12 +24,12 @@ import be.ugent.sel.studeez.screens.sessions.SessionsRoute
 | 
			
		|||
import be.ugent.sel.studeez.screens.settings.SettingsRoute
 | 
			
		||||
import be.ugent.sel.studeez.screens.sign_up.SignUpRoute
 | 
			
		||||
import be.ugent.sel.studeez.screens.splash.SplashRoute
 | 
			
		||||
import be.ugent.sel.studeez.screens.tasks.SubjectRoute
 | 
			
		||||
import be.ugent.sel.studeez.screens.subjects.SubjectRoute
 | 
			
		||||
import be.ugent.sel.studeez.screens.tasks.TaskRoute
 | 
			
		||||
import be.ugent.sel.studeez.screens.tasks.forms.SubjectAddRoute
 | 
			
		||||
import be.ugent.sel.studeez.screens.tasks.forms.SubjectEditRoute
 | 
			
		||||
import be.ugent.sel.studeez.screens.tasks.forms.TaskAddRoute
 | 
			
		||||
import be.ugent.sel.studeez.screens.tasks.forms.TaskEditRoute
 | 
			
		||||
import be.ugent.sel.studeez.screens.subjects.form.SubjectCreateRoute
 | 
			
		||||
import be.ugent.sel.studeez.screens.subjects.form.SubjectEditRoute
 | 
			
		||||
import be.ugent.sel.studeez.screens.tasks.form.TaskAddRoute
 | 
			
		||||
import be.ugent.sel.studeez.screens.tasks.form.TaskEditRoute
 | 
			
		||||
import be.ugent.sel.studeez.screens.timer_form.TimerAddRoute
 | 
			
		||||
import be.ugent.sel.studeez.screens.timer_form.TimerEditRoute
 | 
			
		||||
import be.ugent.sel.studeez.screens.timer_form.timer_type_select.TimerTypeSelectScreen
 | 
			
		||||
| 
						 | 
				
			
			@ -81,7 +81,7 @@ fun StudeezNavGraph(
 | 
			
		|||
        }
 | 
			
		||||
 | 
			
		||||
        composable(StudeezDestinations.ADD_SUBJECT_FORM) {
 | 
			
		||||
            SubjectAddRoute(
 | 
			
		||||
            SubjectCreateRoute(
 | 
			
		||||
                goBack = goBack,
 | 
			
		||||
                openAndPopUp = openAndPopUp,
 | 
			
		||||
                viewModel = hiltViewModel(),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
package be.ugent.sel.studeez.screens.tasks
 | 
			
		||||
package be.ugent.sel.studeez.screens.subjects
 | 
			
		||||
 | 
			
		||||
import androidx.compose.foundation.layout.*
 | 
			
		||||
import androidx.compose.foundation.lazy.LazyColumn
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
package be.ugent.sel.studeez.screens.tasks
 | 
			
		||||
package be.ugent.sel.studeez.screens.subjects
 | 
			
		||||
 | 
			
		||||
import be.ugent.sel.studeez.data.local.models.task.Subject
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
package be.ugent.sel.studeez.screens.tasks
 | 
			
		||||
package be.ugent.sel.studeez.screens.subjects
 | 
			
		||||
 | 
			
		||||
import androidx.lifecycle.viewModelScope
 | 
			
		||||
import be.ugent.sel.studeez.data.SelectedSubject
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
package be.ugent.sel.studeez.screens.tasks.forms
 | 
			
		||||
package be.ugent.sel.studeez.screens.subjects.form
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.StringRes
 | 
			
		||||
import androidx.compose.foundation.layout.Column
 | 
			
		||||
| 
						 | 
				
			
			@ -19,10 +19,10 @@ import be.ugent.sel.studeez.resources
 | 
			
		|||
import be.ugent.sel.studeez.R.string as AppText
 | 
			
		||||
 | 
			
		||||
@Composable
 | 
			
		||||
fun SubjectAddRoute(
 | 
			
		||||
fun SubjectCreateRoute(
 | 
			
		||||
    goBack: () -> Unit,
 | 
			
		||||
    openAndPopUp: (String, String) -> Unit,
 | 
			
		||||
    viewModel: SubjectFormViewModel,
 | 
			
		||||
    viewModel: SubjectCreateFormViewModel,
 | 
			
		||||
) {
 | 
			
		||||
    val uiState by viewModel.uiState
 | 
			
		||||
    SubjectForm(
 | 
			
		||||
| 
						 | 
				
			
			@ -39,7 +39,7 @@ fun SubjectAddRoute(
 | 
			
		|||
fun SubjectEditRoute(
 | 
			
		||||
    goBack: () -> Unit,
 | 
			
		||||
    openAndPopUp: (String, String) -> Unit,
 | 
			
		||||
    viewModel: SubjectFormViewModel,
 | 
			
		||||
    viewModel: SubjectEditFormViewModel,
 | 
			
		||||
) {
 | 
			
		||||
    val uiState by viewModel.uiState
 | 
			
		||||
    SubjectForm(
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
package be.ugent.sel.studeez.screens.tasks.forms
 | 
			
		||||
package be.ugent.sel.studeez.screens.subjects.form
 | 
			
		||||
 | 
			
		||||
data class SubjectFormUiState(
 | 
			
		||||
    val name: String = "",
 | 
			
		||||
| 
						 | 
				
			
			@ -1,5 +1,6 @@
 | 
			
		|||
package be.ugent.sel.studeez.screens.tasks.forms
 | 
			
		||||
package be.ugent.sel.studeez.screens.subjects.form
 | 
			
		||||
 | 
			
		||||
import androidx.compose.runtime.MutableState
 | 
			
		||||
import androidx.compose.runtime.mutableStateOf
 | 
			
		||||
import be.ugent.sel.studeez.data.SelectedSubject
 | 
			
		||||
import be.ugent.sel.studeez.data.local.models.task.Subject
 | 
			
		||||
| 
						 | 
				
			
			@ -10,25 +11,17 @@ import be.ugent.sel.studeez.screens.StudeezViewModel
 | 
			
		|||
import dagger.hilt.android.lifecycle.HiltViewModel
 | 
			
		||||
import javax.inject.Inject
 | 
			
		||||
 | 
			
		||||
@HiltViewModel
 | 
			
		||||
class SubjectFormViewModel @Inject constructor(
 | 
			
		||||
    private val subjectDAO: SubjectDAO,
 | 
			
		||||
    private val selectedSubject: SelectedSubject,
 | 
			
		||||
abstract class SubjectFormViewModel(
 | 
			
		||||
    protected val subjectDAO: SubjectDAO,
 | 
			
		||||
    protected val selectedSubject: SelectedSubject,
 | 
			
		||||
    logService: LogService,
 | 
			
		||||
) : StudeezViewModel(logService) {
 | 
			
		||||
    var uiState = mutableStateOf(
 | 
			
		||||
        if (selectedSubject.isSet()) SubjectFormUiState(
 | 
			
		||||
            name = selectedSubject().name,
 | 
			
		||||
            color = selectedSubject().argb_color
 | 
			
		||||
        )
 | 
			
		||||
        else SubjectFormUiState()
 | 
			
		||||
    )
 | 
			
		||||
        private set
 | 
			
		||||
    abstract val uiState: MutableState<SubjectFormUiState>
 | 
			
		||||
 | 
			
		||||
    private val name: String
 | 
			
		||||
    protected val name: String
 | 
			
		||||
        get() = uiState.value.name
 | 
			
		||||
 | 
			
		||||
    private val color: Long
 | 
			
		||||
    protected val color: Long
 | 
			
		||||
        get() = uiState.value.color
 | 
			
		||||
 | 
			
		||||
    fun onNameChange(newValue: String) {
 | 
			
		||||
| 
						 | 
				
			
			@ -38,11 +31,15 @@ class SubjectFormViewModel @Inject constructor(
 | 
			
		|||
    fun onColorChange(newValue: Long) {
 | 
			
		||||
        uiState.value = uiState.value.copy(color = newValue)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
    fun onDelete(openAndPopUp: (String, String) -> Unit) {
 | 
			
		||||
        subjectDAO.deleteSubject(selectedSubject())
 | 
			
		||||
        openAndPopUp(StudeezDestinations.SUBJECT_SCREEN, StudeezDestinations.EDIT_SUBJECT_FORM)
 | 
			
		||||
    }
 | 
			
		||||
@HiltViewModel
 | 
			
		||||
class SubjectCreateFormViewModel @Inject constructor(
 | 
			
		||||
    subjectDAO: SubjectDAO,
 | 
			
		||||
    selectedSubject: SelectedSubject,
 | 
			
		||||
    logService: LogService,
 | 
			
		||||
) : SubjectFormViewModel(subjectDAO, selectedSubject, logService) {
 | 
			
		||||
    override val uiState = mutableStateOf(SubjectFormUiState())
 | 
			
		||||
 | 
			
		||||
    fun onCreate(openAndPopUp: (String, String) -> Unit) {
 | 
			
		||||
        val newSubject = Subject(
 | 
			
		||||
| 
						 | 
				
			
			@ -57,6 +54,25 @@ class SubjectFormViewModel @Inject constructor(
 | 
			
		|||
//        open(StudeezDestinations.TASKS_SCREEN)
 | 
			
		||||
        openAndPopUp(StudeezDestinations.SUBJECT_SCREEN, StudeezDestinations.ADD_SUBJECT_FORM)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@HiltViewModel
 | 
			
		||||
class SubjectEditFormViewModel @Inject constructor(
 | 
			
		||||
    subjectDAO: SubjectDAO,
 | 
			
		||||
    selectedSubject: SelectedSubject,
 | 
			
		||||
    logService: LogService,
 | 
			
		||||
) : SubjectFormViewModel(subjectDAO, selectedSubject, logService) {
 | 
			
		||||
    override val uiState = mutableStateOf(
 | 
			
		||||
        SubjectFormUiState(
 | 
			
		||||
            name = selectedSubject().name,
 | 
			
		||||
            color = selectedSubject().argb_color
 | 
			
		||||
        )
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    fun onDelete(openAndPopUp: (String, String) -> Unit) {
 | 
			
		||||
        subjectDAO.deleteSubject(selectedSubject())
 | 
			
		||||
        openAndPopUp(StudeezDestinations.SUBJECT_SCREEN, StudeezDestinations.EDIT_SUBJECT_FORM)
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun onEdit(openAndPopUp: (String, String) -> Unit) {
 | 
			
		||||
        val newSubject = selectedSubject().copy(
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
package be.ugent.sel.studeez.screens.tasks.forms
 | 
			
		||||
package be.ugent.sel.studeez.screens.tasks.form
 | 
			
		||||
 | 
			
		||||
import androidx.annotation.StringRes
 | 
			
		||||
import androidx.compose.foundation.layout.Column
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
package be.ugent.sel.studeez.screens.tasks.forms
 | 
			
		||||
package be.ugent.sel.studeez.screens.tasks.form
 | 
			
		||||
 | 
			
		||||
data class TaskFormUiState(
 | 
			
		||||
    val name: String = "",
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
package be.ugent.sel.studeez.screens.tasks.forms
 | 
			
		||||
package be.ugent.sel.studeez.screens.tasks.form
 | 
			
		||||
 | 
			
		||||
import androidx.compose.runtime.mutableStateOf
 | 
			
		||||
import be.ugent.sel.studeez.data.SelectedSubject
 | 
			
		||||
| 
						 | 
				
			
			@ -11,8 +11,7 @@ import be.ugent.sel.studeez.screens.StudeezViewModel
 | 
			
		|||
import dagger.hilt.android.lifecycle.HiltViewModel
 | 
			
		||||
import javax.inject.Inject
 | 
			
		||||
 | 
			
		||||
@HiltViewModel
 | 
			
		||||
class TaskFormViewModel @Inject constructor(
 | 
			
		||||
abstract class TaskFormViewModel(
 | 
			
		||||
    private val taskDAO: TaskDAO,
 | 
			
		||||
    private val selectedSubject: SelectedSubject,
 | 
			
		||||
    private val selectedTask: SelectedTask,
 | 
			
		||||
		Reference in a new issue