You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
3.5 KiB

import SwiftUI
struct TasksView: View {
@EnvironmentObject var store: Store
@State private var newName = ""
var body: some View {
VStack(alignment: .leading, spacing: 0) {
HStack(spacing: 10) {
TextField("Neue Aufgabe", text: $newName)
.textFieldStyle(.roundedBorder)
.frame(width: 260)
.onSubmit(add)
Button("Hinzufügen", action: add).buttonStyle(.borderedProminent)
.disabled(newName.trimmingCharacters(in: .whitespaces).isEmpty)
Text("Reihenfolge = Spalten in der Übersicht (ziehen zum Umsortieren). „Mit Partner“ blendet beim Eintragen das Partner-Feld ein.")
.font(.caption).foregroundStyle(Theme.muted)
}
.padding(16)
List {
ForEach($store.db.tasks) { $task in
HStack(spacing: 16) {
TextField("Name", text: $task.name)
.textFieldStyle(.roundedBorder)
.frame(width: 260)
Picker("", selection: $task.group) {
ForEach(TaskGroup.allCases) { Text($0.shortTitle).tag($0) }
}
.labelsHidden()
.frame(width: 170)
if task.partnerColumn {
Text("zählt die Partner").foregroundStyle(Theme.muted).frame(width: 120, alignment: .leading)
} else {
Toggle("Mit Partner", isOn: $task.withPartner).frame(width: 120, alignment: .leading)
}
Text(count(store.entryCount(task: task))).foregroundStyle(Theme.muted).frame(width: 90, alignment: .leading)
Spacer()
if !task.partnerColumn {
Button("Löschen", role: .destructive) { delete(task) }
.buttonStyle(.link).foregroundStyle(Theme.bengara)
}
}
.padding(.vertical, 3)
}
.onMove { store.db.tasks.move(fromOffsets: $0, toOffset: $1) }
}
}
}
private func count(_ n: Int) -> String { n == 1 ? "1 Eintrag" : "\(n) Einträge" }
private func add() {
let n = newName.trimmingCharacters(in: .whitespaces)
guard !n.isEmpty else { return }
let at = store.db.tasks.firstIndex(where: \.partnerColumn) ?? store.db.tasks.endIndex
store.db.tasks.insert(DutyTask(id: newID("t"), name: n, group: .schulung), at: at)
newName = ""
}
private func delete(_ task: DutyTask) {
let n = store.entryCount(task: task)
let alert = NSAlert()
if n > 0 {
alert.messageText = "„\(task.name)“ hat \(n) Einträge im Verlauf."
alert.informativeText = "Aufgaben mit Einträgen lassen sich nicht löschen. Du kannst sie umbenennen."
alert.runModal(); return
}
alert.messageText = "Aufgabe „\(task.name)“ löschen?"
alert.addButton(withTitle: "Löschen").hasDestructiveAction = true
alert.addButton(withTitle: "Abbrechen")
guard alert.runModal() == .alertFirstButtonReturn else { return }
store.db.tasks.removeAll { $0.id == task.id }
for i in store.db.persons.indices { store.db.persons[i].tasks.removeAll { $0 == task.id } }
}
}

Powered by TurnKey Linux.