Inhalt
Aktueller Ordner:
duesseldorfer-schuelerinventar-swift-client/Duesk/ViewsGroupManagerView.swift
import SwiftUI
struct GroupManagerView: View {
@Environment(\.dismiss) private var dismiss
@StateObject private var viewModel = GroupManagerViewModel()
@State private var newGroupName = ""
@State private var editingGroup: Group?
@State private var editGroupName = ""
let onChanged: (() -> Void)?
init(onChanged: (() -> Void)? = nil) {
self.onChanged = onChanged
}
var body: some View {
NavigationView {
List {
ForEach(viewModel.groups) { group in
HStack {
Text(group.name)
Spacer()
Text("ID: \(group.gruppeID)")
.font(.caption)
.foregroundColor(.secondary)
}
.contextMenu {
Button("Umbenennen") {
editingGroup = group
editGroupName = group.name
}
Button("Löschen", role: .destructive) {
Task {
if let index = viewModel.groups.firstIndex(where: { $0.id == group.id }) {
await viewModel.deleteGroup(at: IndexSet(integer: index))
onChanged?()
}
}
}
}
}
.onDelete { indexSet in
Task {
await viewModel.deleteGroup(at: indexSet)
onChanged?()
}
}
}
.navigationTitle("Gruppenverwaltung")
.toolbar {
ToolbarItem(placement: .cancellationAction) {
Button("Schließen") { dismiss() }
}
ToolbarItem(placement: .primaryAction) {
HStack {
TextField("Neue Gruppe", text: $newGroupName)
.textFieldStyle(.roundedBorder)
.frame(width: 150)
Button("Hinzufügen") {
Task {
if await viewModel.addGroup(name: newGroupName) {
newGroupName = ""
onChanged?()
}
}
}
.disabled(newGroupName.isEmpty)
}
}
}
.overlay {
if viewModel.isLoading {
ProgressView()
}
}
.alert("Fehler", isPresented: .constant(viewModel.errorMessage != nil)) {
Button("OK") { viewModel.errorMessage = nil }
} message: {
Text(viewModel.errorMessage ?? "")
}
.sheet(item: $editingGroup) { group in
NavigationView {
Form {
TextField("Gruppenname", text: $editGroupName)
}
.navigationTitle("Gruppe umbenennen")
.toolbar {
ToolbarItem(placement: .cancellationAction) {
Button("Abbrechen") { editingGroup = nil }
}
ToolbarItem(placement: .confirmationAction) {
Button("Speichern") {
Task {
if await viewModel.renameGroup(group: group, newName: editGroupName) {
editingGroup = nil
onChanged?()
}
}
}
.disabled(editGroupName.isEmpty)
}
}
}
.frame(width: 400, height: 200)
}
}
.task {
await viewModel.loadGroups()
}
}
}