import Foundation import SwiftData import SwiftUI @Model final class Muscle { var name: String = "" var descr: String = "" @Relationship(deleteRule: .nullify, inverse: \MuscleGroup.muscles) var muscleGroup: MuscleGroup? @Relationship(deleteRule: .nullify) var exercises: [Exercise]? = [] init(name: String, descr: String, muscleGroup: MuscleGroup? = nil) { self.name = name self.descr = descr self.muscleGroup = muscleGroup } } // MARK: - EditableEntity Conformance extension Muscle: EditableEntity { var count: Int? { return self.exercises?.count } static func createNew() -> Muscle { return Muscle(name: "", descr: "") } static var navigationTitle: String { return "Muscles" } @ViewBuilder static func formView(for model: Muscle) -> some View { EntityAddEditView(model: model) { $model in MuscleFormView(model: $model) } } } // MARK: - Private Form View fileprivate struct MuscleFormView: View { @Binding var model: Muscle @Query(sort: [SortDescriptor(\MuscleGroup.name)]) var muscleGroups: [MuscleGroup] var body: some View { Section(header: Text("Name")) { TextField("Name", text: $model.name) .bold() } Section(header: Text("Muscle Group")) { Picker("Muscle Group", selection: $model.muscleGroup) { Text("Select a muscle group").tag(nil as MuscleGroup?) ForEach(muscleGroups) { group in Text(group.name).tag(group as MuscleGroup?) } } } Section(header: Text("Description")) { TextEditor(text: $model.descr) .frame(minHeight: 100) } } }