Fix some crashes when deleting assignments
This commit is contained in:
@ -64,14 +64,14 @@ fun EditionView(state: EditionState) = Row(Modifier.padding(0.dp)) {
|
|||||||
{ name, note, contact, add -> state.newStudent(name, contact, note, add) },
|
{ name, note, contact, add -> state.newStudent(name, contact, note, add) },
|
||||||
{ students -> state.addToCourse(students) },
|
{ students -> state.addToCourse(students) },
|
||||||
{ s, name -> state.setStudentName(s, name) }
|
{ s, name -> state.setStudentName(s, name) }
|
||||||
) { s -> state.delete(s) }
|
) { s, idx -> state.delete(s); if(id == idx) state.clearHistoryIndex() }
|
||||||
|
|
||||||
OpenPanel.Group -> GroupPanel(
|
OpenPanel.Group -> GroupPanel(
|
||||||
course, edition, groups, id,
|
course, edition, groups, id,
|
||||||
{ state.navTo(it) },
|
{ state.navTo(it) },
|
||||||
{ name -> state.newGroup(name) },
|
{ name -> state.newGroup(name) },
|
||||||
{ g, name -> state.setGroupName(g, name) }
|
{ g, name -> state.setGroupName(g, name) }
|
||||||
) { g -> state.delete(g) }
|
) { g, idx -> state.delete(g); if(id == idx) state.clearHistoryIndex() }
|
||||||
|
|
||||||
OpenPanel.Assignment -> AssignmentPanel(
|
OpenPanel.Assignment -> AssignmentPanel(
|
||||||
course, edition, mergedAssignments, id,
|
course, edition, mergedAssignments, id,
|
||||||
@ -79,7 +79,7 @@ fun EditionView(state: EditionState) = Row(Modifier.padding(0.dp)) {
|
|||||||
{ type, name -> state.newAssignment(type, name) },
|
{ type, name -> state.newAssignment(type, name) },
|
||||||
{ a, name -> state.setAssignmentTitle(a, name) },
|
{ a, name -> state.setAssignmentTitle(a, name) },
|
||||||
{ a1, a2 -> state.swapOrder(a1, a2) }
|
{ a1, a2 -> state.swapOrder(a1, a2) }
|
||||||
) { a -> state.delete(a) }
|
) { a, idx -> state.delete(a); if(id == idx) state.clearHistoryIndex() }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -133,7 +133,7 @@ fun StudentPanel(
|
|||||||
course: Course, edition: Edition, students: List<Student>, available: List<Student>,
|
course: Course, edition: Edition, students: List<Student>, available: List<Student>,
|
||||||
selected: Int, onSelect: (Int) -> Unit,
|
selected: Int, onSelect: (Int) -> Unit,
|
||||||
onAdd: (name: String, note: String, contact: String, addToEdition: Boolean) -> Unit,
|
onAdd: (name: String, note: String, contact: String, addToEdition: Boolean) -> Unit,
|
||||||
onImport: (List<Student>) -> Unit, onUpdate: (Student, String) -> Unit, onDelete: (Student) -> Unit
|
onImport: (List<Student>) -> Unit, onUpdate: (Student, String) -> Unit, onDelete: (Student, Int) -> Unit
|
||||||
) = Column(Modifier.padding(10.dp)) {
|
) = Column(Modifier.padding(10.dp)) {
|
||||||
var showDialog by remember { mutableStateOf(false) }
|
var showDialog by remember { mutableStateOf(false) }
|
||||||
var deleting by remember { mutableStateOf(-1) }
|
var deleting by remember { mutableStateOf(-1) }
|
||||||
@ -171,7 +171,7 @@ fun StudentPanel(
|
|||||||
ConfirmDeleteDialog(
|
ConfirmDeleteDialog(
|
||||||
"a student",
|
"a student",
|
||||||
{ deleting = -1 },
|
{ deleting = -1 },
|
||||||
{ onDelete(students[deleting]) }
|
{ onDelete(students[deleting], deleting) }
|
||||||
) { Text(students[deleting].name) }
|
) { Text(students[deleting].name) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -180,7 +180,7 @@ fun StudentPanel(
|
|||||||
fun GroupPanel(
|
fun GroupPanel(
|
||||||
course: Course, edition: Edition, groups: List<Group>,
|
course: Course, edition: Edition, groups: List<Group>,
|
||||||
selected: Int, onSelect: (Int) -> Unit,
|
selected: Int, onSelect: (Int) -> Unit,
|
||||||
onAdd: (String) -> Unit, onUpdate: (Group, String) -> Unit, onDelete: (Group) -> Unit
|
onAdd: (String) -> Unit, onUpdate: (Group, String) -> Unit, onDelete: (Group, Int) -> Unit
|
||||||
) = Column(Modifier.padding(10.dp)) {
|
) = Column(Modifier.padding(10.dp)) {
|
||||||
var showDialog by remember { mutableStateOf(false) }
|
var showDialog by remember { mutableStateOf(false) }
|
||||||
var deleting by remember { mutableStateOf(-1) }
|
var deleting by remember { mutableStateOf(-1) }
|
||||||
@ -218,7 +218,7 @@ fun GroupPanel(
|
|||||||
ConfirmDeleteDialog(
|
ConfirmDeleteDialog(
|
||||||
"a group",
|
"a group",
|
||||||
{ deleting = -1 },
|
{ deleting = -1 },
|
||||||
{ onDelete(groups[deleting]) }
|
{ onDelete(groups[deleting], deleting) }
|
||||||
) { Text(groups[deleting].name) }
|
) { Text(groups[deleting].name) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -228,7 +228,7 @@ fun AssignmentPanel(
|
|||||||
course: Course, edition: Edition, assignments: List<Assignment>,
|
course: Course, edition: Edition, assignments: List<Assignment>,
|
||||||
selected: Int, onSelect: (Int) -> Unit,
|
selected: Int, onSelect: (Int) -> Unit,
|
||||||
onAdd: (AssignmentType, String) -> Unit, onUpdate: (Assignment, String) -> Unit,
|
onAdd: (AssignmentType, String) -> Unit, onUpdate: (Assignment, String) -> Unit,
|
||||||
onSwapOrder: (Assignment, Assignment) -> Unit, onDelete: (Assignment) -> Unit
|
onSwapOrder: (Assignment, Assignment) -> Unit, onDelete: (Assignment, Int) -> Unit
|
||||||
) = Column(Modifier.padding(10.dp)) {
|
) = Column(Modifier.padding(10.dp)) {
|
||||||
var showDialog by remember { mutableStateOf(false) }
|
var showDialog by remember { mutableStateOf(false) }
|
||||||
var deleting by remember { mutableStateOf(-1) }
|
var deleting by remember { mutableStateOf(-1) }
|
||||||
@ -315,8 +315,8 @@ fun AssignmentPanel(
|
|||||||
ConfirmDeleteDialog(
|
ConfirmDeleteDialog(
|
||||||
"an assignment",
|
"an assignment",
|
||||||
{ deleting = -1 },
|
{ deleting = -1 },
|
||||||
{ onDelete(assignments[deleting]) }
|
{ onDelete(assignments[deleting], deleting) }
|
||||||
) { Text(assignments[deleting].name()) }
|
) { if(deleting != -1) Text(assignments[deleting].name()) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -362,6 +362,10 @@ class EditionState(val edition: Edition) {
|
|||||||
while(temp.last().first == -1 && temp.size >= 2) temp = temp.dropLast(1)
|
while(temp.last().first == -1 && temp.size >= 2) temp = temp.dropLast(1)
|
||||||
_history.value = temp
|
_history.value = temp
|
||||||
}
|
}
|
||||||
|
fun clearHistoryIndex() {
|
||||||
|
val last = _history.value.lastOrNull() ?: return
|
||||||
|
_history.value = _history.value.filter { (i, panel) -> panel != last.second || i != last.first } + (-1 to last.second)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class StudentState(val student: Student, edition: Edition) {
|
class StudentState(val student: Student, edition: Edition) {
|
||||||
|
Reference in New Issue
Block a user