// // AddExerciseToWorkout.swift // WorkoutsPlus // // Created by Felix Förtsch on 22.08.24. // import SwiftUI import SwiftData struct AddExerciseToWorkout: View { @Environment(\.modelContext) private var modelContext @Query(sort: \ExerciseTemplate.name) private var exerciseTemplates: [ExerciseTemplate] @Bindable var workout: Workout var body: some View { Group { if !exerciseTemplates.isEmpty { List { Section(header: Text("Excersises")) { ForEach(exerciseTemplates) { exerciseTemplate in AddExerciseToWorkoutListItem(exerciseTemplate, workout) } } } } else { ContentUnavailableView { // TODO: Add Button that allows adding an exercise Label("No Exercises", systemImage: ExerciseTemplate.systemImage) } } } } } struct AddExerciseToWorkoutListItem: View { @Environment(\.modelContext) private var modelContext var exerciseTemplate: ExerciseTemplate var workout: Workout init(_ exerciseTemplate: ExerciseTemplate, _ workout: Workout) { self.exerciseTemplate = exerciseTemplate self.workout = workout } var body: some View { Button(action: { workout.addExercise(from: exerciseTemplate) }) { HStack { Text(exerciseTemplate.name) .foregroundColor(.black) Spacer() Image(systemName: "plus.circle.fill") .foregroundColor(.green) } } } } #Preview("With Sample Data") { AddExerciseToWorkout(workout: Workout.sampleData.first!) .modelContainer(SampleData.shared.modelContainer) } #Preview("Empty Database") { AddExerciseToWorkout(workout: Workout.sampleData.first!) .modelContainer(for: ExerciseTemplate.self, inMemory: true) }