Files
workouts/Workouts/Models/Muscle.swift
2025-07-25 17:42:25 -04:00

74 lines
1.8 KiB
Swift

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