initial pre-viable version of watch app
This commit is contained in:
48
Workouts/_ATTIC_/Cepo/EntityAddEditView.swift
Normal file
48
Workouts/_ATTIC_/Cepo/EntityAddEditView.swift
Normal file
@ -0,0 +1,48 @@
|
||||
import SwiftUI
|
||||
import SwiftData
|
||||
|
||||
struct EntityAddEditView<T: EditableEntity, Content: View>: View {
|
||||
@Environment(\.dismiss) private var dismiss
|
||||
@Environment(\.modelContext) private var modelContext
|
||||
|
||||
@State var model: T
|
||||
private let content: (Binding<T>) -> Content
|
||||
|
||||
init(model: T, @ViewBuilder content: @escaping (Binding<T>) -> Content) {
|
||||
_model = State(initialValue: model)
|
||||
self.content = content
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
NavigationStack {
|
||||
Form {
|
||||
content($model)
|
||||
}
|
||||
.toolbar {
|
||||
ToolbarItem(placement: .navigationBarLeading) {
|
||||
Button("Cancel") {
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
|
||||
ToolbarItem(placement: .navigationBarTrailing) {
|
||||
Button("Save") {
|
||||
// If the model is not in a context, it's a new one.
|
||||
if model.modelContext == nil {
|
||||
modelContext.insert(model)
|
||||
}
|
||||
// The save is in a do-catch block to handle potential errors,
|
||||
// such as constraint violations.
|
||||
do {
|
||||
try modelContext.save()
|
||||
dismiss()
|
||||
} catch {
|
||||
// In a real app, you'd want to present this error to the user.
|
||||
print("Failed to save model: \(error.localizedDescription)")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user