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

@ -1,9 +1,10 @@
import Foundation
import SwiftData
import SwiftUI
@Model
final class Muscle: ListableItem {
@Attribute(.unique) var name: String = ""
final class Muscle {
var name: String = ""
var descr: String = ""
@ -13,9 +14,60 @@ final class Muscle: ListableItem {
@Relationship(deleteRule: .nullify)
var exercises: [Exercise]? = []
init(name: String, descr: String, muscleGroup: MuscleGroup) {
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)
}
}
}