Files
workouts/Workouts/Cepo/EntityAddEditView.swift
2025-07-25 17:42:25 -04:00

49 lines
1.6 KiB
Swift

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)")
}
}
}
}
}
}
}