This commit is contained in:
2025-07-13 21:54:09 -04:00
parent 0545f5dbc7
commit bdaa406876
33 changed files with 984 additions and 714 deletions

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