Support for more removal

This commit is contained in:
jay-tux 2025-02-28 20:05:51 +01:00
parent 0bfef36559
commit d0ddd54710
Signed by: jay-tux
GPG Key ID: 84302006B056926E
2 changed files with 41 additions and 8 deletions

View File

@ -60,6 +60,7 @@ fun EditionView(state: EditionState) = Row(Modifier.padding(0.dp)) {
groups,
idx.groupIdx(),
{ toggle(it, Panel.Group) },
{ state.delete(it) },
{ state.newGroup(it) }) { group, name ->
state.setGroupName(group, name)
}
@ -79,7 +80,8 @@ fun EditionView(state: EditionState) = Row(Modifier.padding(0.dp)) {
Box(Modifier.weight(0.5f)) {
StudentsWidget(
state.course, state.edition, students, idx.studentIdx(), { toggle(it, Panel.Student) },
available, { state.addToCourse(it) }
available, { state.addToCourse(it) },
{ state.delete(it) },
) { name, note, contact, addToEdition ->
state.newStudent(name, contact, note, addToEdition)
}
@ -91,6 +93,7 @@ fun EditionView(state: EditionState) = Row(Modifier.padding(0.dp)) {
solo,
idx.soloIdx(),
{ toggle(it, Panel.Solo) },
{ state.delete(it) },
{ state.newSoloAssignment(it) }) { assignment, title ->
state.setSoloAssignmentTitle(assignment, title)
}
@ -160,7 +163,10 @@ fun <T> EditionSideWidget(
}
deleter?.let { d ->
deleting?.let { x ->
Dialog({ deleting = null }, DialogProperties()) {
DialogWindow(
onCloseRequest = { deleting = null },
state = rememberDialogState(size = DpSize(400.dp, 300.dp), position = WindowPosition(Alignment.Center))
) {
Surface(Modifier.width(400.dp).height(300.dp), tonalElevation = 5.dp) {
Box(Modifier.fillMaxSize().padding(10.dp)) {
Column(Modifier.align(Alignment.Center)) {
@ -181,11 +187,12 @@ fun <T> EditionSideWidget(
@Composable
fun StudentsWidget(
course: Course, edition: Edition, students: List<Student>, selected: Int?, onSelect: (Int) -> Unit,
availableStudents: List<Student>, onImport: (List<Student>) -> Unit,
availableStudents: List<Student>, onImport: (List<Student>) -> Unit, deleter: (Student) -> Unit,
onAdd: (name: String, note: String, contact: String, addToEdition: Boolean) -> Unit
) = EditionSideWidget(
course, edition, "Student list (${students.size})", "students", "a student", students, selected, onSelect,
{ Text(it.name, Modifier.padding(5.dp)) }
{ Text(it.name, Modifier.padding(5.dp)) },
deleter = deleter
) { onExit ->
StudentDialog(course, edition, onExit, availableStudents, onImport, onAdd)
}
@ -291,11 +298,12 @@ fun StudentDialog(
@Composable
fun GroupsWidget(
course: Course, edition: Edition, groups: List<Group>, selected: Int?, onSelect: (Int) -> Unit,
onAdd: (name: String) -> Unit, onUpdate: (Group, String) -> Unit
deleter: (Group) -> Unit, onAdd: (name: String) -> Unit, onUpdate: (Group, String) -> Unit
) = EditionSideWidget(
course, edition, "Group list (${groups.size})", "groups", "a group", groups, selected, onSelect,
{ Text(it.name, Modifier.padding(5.dp)) },
{ current, onExit -> AddStringDialog("Group name", groups.map { it.name }, onExit, current.name) { onUpdate(current, it) } }
{ current, onExit -> AddStringDialog("Group name", groups.map { it.name }, onExit, current.name) { onUpdate(current, it) } },
deleter
) { onExit ->
AddStringDialog("Group name", groups.map { it.name }, onExit) { onAdd(it) }
}
@ -303,11 +311,12 @@ fun GroupsWidget(
@Composable
fun AssignmentsWidget(
course: Course, edition: Edition, assignments: List<SoloAssignment>, selected: Int?,
onSelect: (Int) -> Unit, onAdd: (name: String) -> Unit, onUpdate: (SoloAssignment, String) -> Unit
onSelect: (Int) -> Unit, deleter: (SoloAssignment) -> Unit, onAdd: (name: String) -> Unit, onUpdate: (SoloAssignment, String) -> Unit
) = EditionSideWidget(
course, edition, "Assignment list", "assignments", "an assignment", assignments, selected, onSelect,
{ Text(it.name, Modifier.padding(5.dp)) },
{ current, onExit -> AddStringDialog("Assignment title", assignments.map { it.name }, onExit, current.name) { onUpdate(current, it) } }
{ current, onExit -> AddStringDialog("Assignment title", assignments.map { it.name }, onExit, current.name) { onUpdate(current, it) } },
deleter
) { onExit ->
AddStringDialog("Assignment title", assignments.map { it.name }, onExit) { onAdd(it) }
}

View File

@ -139,6 +139,30 @@ class EditionState(val edition: Edition) {
groupAs.refresh()
}
fun delete(s: Student) {
transaction {
EditionStudents.deleteWhere { studentId eq s.id }
GroupStudents.deleteWhere { studentId eq s.id }
IndividualFeedbacks.deleteWhere { studentId eq s.id }
}
students.refresh(); availableStudents.refresh()
}
fun delete(g: Group) {
transaction {
GroupFeedbacks.deleteWhere { groupId eq g.id }
IndividualFeedbacks.deleteWhere { groupId eq g.id }
GroupStudents.deleteWhere { groupId eq g.id }
g.delete()
}
groups.refresh(); groupAs.refresh()
}
fun delete(sa: SoloAssignment) {
transaction {
SoloFeedbacks.deleteWhere { soloAssignmentId eq sa.id }
sa.delete()
}
solo.refresh()
}
fun delete(ga: GroupAssignment) {
transaction {
GroupFeedbacks.deleteWhere { groupAssignmentId eq ga.id }