#15 make form functional

This commit is contained in:
brreynie 2023-05-03 22:06:30 +02:00
parent 831050f3f2
commit fc1d12e214
8 changed files with 48 additions and 40 deletions

View file

@ -42,6 +42,8 @@ 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.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.timer_overview.TimerOverviewRoute
import be.ugent.sel.studeez.screens.timer_selection.TimerSelectionRoute
import be.ugent.sel.studeez.ui.theme.StudeezTheme
@ -156,6 +158,22 @@ fun StudeezNavGraph(
)
}
composable(StudeezDestinations.ADD_SUBJECT_FORM) {
SubjectAddRoute(
goBack = goBack,
open = open,
viewModel = hiltViewModel(),
)
}
composable(StudeezDestinations.EDIT_SUBJECT_FORM) {
SubjectEditRoute(
goBack = goBack,
open = open,
viewModel = hiltViewModel(),
)
}
composable(StudeezDestinations.TASKS_SCREEN) {
TaskRoute(
goBack = goBack,

View file

@ -10,7 +10,10 @@ object StudeezDestinations {
const val TIMER_SELECTION_SCREEN = "timer_selection"
const val SESSION_SCREEN = "session"
const val SESSION_RECAP = "session_recap"
const val SUBJECT_SCREEN = "subjects"
const val ADD_SUBJECT_FORM = "add_subject"
const val EDIT_SUBJECT_FORM = "edit_subject"
const val TASKS_SCREEN = "tasks"
// const val SESSIONS_SCREEN = "sessions"

View file

@ -30,7 +30,7 @@ fun SubjectRoute(
SubjectScreen(
drawerActions = drawerActions,
navigationBarActions = navigationBarActions,
addSubject = { viewModel.addSubject() },
addSubject = { viewModel.addSubject(open) },
getSubjects = viewModel::getSubjects,
onViewSubject = { viewModel.onViewSubject(it, open) },
)
@ -55,19 +55,6 @@ fun SubjectScreen(
modifier = Modifier.padding(top = 5.dp)
) {
LazyColumn {
// if (subjects.value.isNotEmpty()) {
// item {
// SubjectEntry(subject = subjects.value[0])
// }
// }
// if (subjects.value.size > 1) {
// items(subjects.value.subList(1, subjects.value.lastIndex + 1)) {
// Column {
// Divider(modifier = Modifier.padding(10.dp, 0.dp))
// SubjectEntry(subject = it)
// }
// }
// }
items(subjects.value) {
SubjectEntry(
subject = it,

View file

@ -1,6 +1,5 @@
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.domain.LogService
@ -17,14 +16,8 @@ class SubjectViewModel @Inject constructor(
private val selectedSubject: SelectedSubject,
logService: LogService,
) : StudeezViewModel(logService) {
fun addSubject() {
subjectDAO.saveSubject(
Subject(
name = "Test Subject",
time = 0,
argb_color = 0xFFF44336,
)
)
fun addSubject(open: (String) -> Unit) {
open(StudeezDestinations.ADD_SUBJECT_FORM)
}
fun getSubjects(): Flow<List<Subject>> {
@ -32,7 +25,6 @@ class SubjectViewModel @Inject constructor(
}
fun onViewSubject(subject: Subject, open: (String) -> Unit) {
Log.v("MYLOG", subject.id)
selectedSubject.set(subject)
open(StudeezDestinations.TASKS_SCREEN)
}

View file

@ -31,9 +31,9 @@ data class TaskActions(
val addTask: () -> Unit,
val getSubject: () -> Subject,
val getTasks: () -> Flow<List<Task>>,
val deleteSubject: () -> Unit,
val deleteTask: (Task) -> Unit,
val onCheckTask: (Task, Boolean) -> Unit,
val editSubject: () -> Unit,
)
fun getTaskActions(viewModel: TaskViewModel, open: (String) -> Unit): TaskActions {
@ -41,9 +41,9 @@ fun getTaskActions(viewModel: TaskViewModel, open: (String) -> Unit): TaskAction
addTask = viewModel::addTask,
getTasks = viewModel::getTasks,
getSubject = viewModel::getSelectedSubject,
deleteSubject = { viewModel.deleteSubject(open) },
deleteTask = viewModel::deleteTask,
onCheckTask = { task, isChecked -> viewModel.toggleTaskCompleted(task, isChecked) },
editSubject = { viewModel.editSubject(open) }
)
}
@ -67,7 +67,7 @@ fun TaskScreen(
SecondaryScreenTemplate(
title = taskActions.getSubject().name,
popUp = goBack,
barAction = { EditAction {} } // TODO implement
barAction = { EditAction(onClick = taskActions.editSubject) }
) {
val tasks = taskActions.getTasks().collectAsState(initial = emptyList())
Column(
@ -83,15 +83,6 @@ fun TaskScreen(
}
}
NewTaskSubjectButton(onClick = taskActions.addTask, R.string.new_task)
BasicButton(
text = R.string.delete_subject,
modifier = Modifier.basicButton(),
colors = ButtonDefaults.buttonColors(
backgroundColor = Color.Red,
contentColor = Color.White,
),
onClick = taskActions.deleteSubject,
)
}
}
}
@ -119,8 +110,8 @@ fun TaskScreenPreview() {
{ Subject(name = "Test Subject") },
{ flowOf() },
{},
{},
{ _, _ -> run {} },
{},
)
)
}

View file

@ -43,4 +43,8 @@ class TaskViewModel @Inject constructor(
fun toggleTaskCompleted(task: Task, completed: Boolean) {
taskDAO.toggleTaskCompleted(task, completed)
}
fun editSubject(open: (String) -> Unit) {
open(StudeezDestinations.EDIT_SUBJECT_FORM)
}
}

View file

@ -7,6 +7,7 @@ import androidx.compose.material.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import be.ugent.sel.studeez.R
@ -29,6 +30,8 @@ fun SubjectAddRoute(
goBack = goBack,
uiState = uiState,
onConfirm = { viewModel.onCreate(open) },
onNameChange = viewModel::onNameChange,
onColorChange = {},
)
}
@ -44,8 +47,10 @@ fun SubjectEditRoute(
goBack = goBack,
uiState = uiState,
onConfirm = { viewModel.onEdit(open) },
onNameChange = viewModel::onNameChange,
onColorChange = {},
) {
DeleteButton(onClick = viewModel::onDelete)
DeleteButton(onClick = { viewModel.onDelete(open) })
}
}
@ -55,6 +60,8 @@ fun SubjectForm(
goBack: () -> Unit,
uiState: SubjectFormUiState,
onConfirm: () -> Unit,
onNameChange: (String) -> Unit,
onColorChange: (Color) -> Unit,
extraButton: @Composable () -> Unit = {},
) {
SecondaryScreenTemplate(
@ -65,7 +72,7 @@ fun SubjectForm(
OutlinedTextField(
singleLine = true,
value = uiState.name,
onValueChange = {},
onValueChange = onNameChange,
placeholder = { Text(stringResource(id = R.string.username)) },
modifier = Modifier.fieldModifier(),
)
@ -87,6 +94,8 @@ fun AddSubjectFormPreview() {
goBack = {},
uiState = SubjectFormUiState(),
onConfirm = {},
onNameChange = {},
onColorChange = {},
)
}
@ -100,6 +109,8 @@ fun EditSubjectFormPreview() {
name = "Test Subject",
),
onConfirm = {},
onNameChange = {},
onColorChange = {},
) {
DeleteButton {}
}

View file

@ -33,8 +33,9 @@ class SubjectFormViewModel @Inject constructor(
uiState.value = uiState.value.copy(color = newValue)
}
fun onDelete() {
fun onDelete(open: (String) -> Unit) {
subjectDAO.deleteSubject(selectedSubject())
open(StudeezDestinations.SUBJECT_SCREEN)
}
fun onCreate(open: (String) -> Unit) {
@ -48,6 +49,7 @@ class SubjectFormViewModel @Inject constructor(
selectedSubject.set(newSubject)
// TODO open newly created subject
// open(StudeezDestinations.TASKS_SCREEN)
open(StudeezDestinations.SUBJECT_SCREEN)
}
fun onEdit(open: (String) -> Unit) {