53 lines
1.5 KiB
Swift
53 lines
1.5 KiB
Swift
import SwiftUI
|
|
|
|
struct TodoEditorView: View {
|
|
@Environment(ListStore.self) private var store
|
|
@Environment(\.dismiss) private var dismiss
|
|
|
|
let listID: UUID
|
|
var item: TodoItem?
|
|
|
|
@State private var title: String = ""
|
|
@FocusState private var titleFocused: Bool
|
|
|
|
private var isEditing: Bool { item != nil }
|
|
|
|
var body: some View {
|
|
NavigationStack {
|
|
Form {
|
|
TextField("Titel", text: $title)
|
|
.focused($titleFocused)
|
|
}
|
|
.navigationTitle(isEditing ? "Bearbeiten" : "Neuer Eintrag")
|
|
.navigationBarTitleDisplayMode(.inline)
|
|
.toolbar {
|
|
ToolbarItem(placement: .cancellationAction) {
|
|
Button("Abbrechen") { dismiss() }
|
|
}
|
|
ToolbarItem(placement: .confirmationAction) {
|
|
Button("Fertig") { save() }
|
|
.disabled(title.trimmingCharacters(in: .whitespaces).isEmpty)
|
|
}
|
|
}
|
|
.onAppear {
|
|
if let item {
|
|
title = item.title
|
|
}
|
|
titleFocused = true
|
|
}
|
|
}
|
|
}
|
|
|
|
private func save() {
|
|
let trimmed = title.trimmingCharacters(in: .whitespaces)
|
|
guard !trimmed.isEmpty else { return }
|
|
|
|
if let item {
|
|
store.updateItem(item.id, in: listID, title: trimmed)
|
|
} else {
|
|
store.addItem(to: listID, title: trimmed)
|
|
}
|
|
dismiss()
|
|
}
|
|
}
|