Files
workoutsplus/WorkoutsPlus/Workout/WorkoutItemLibrarySheet.swift

70 lines
2.1 KiB
Swift

//
// AddExerciseToWorkout.swift
// WorkoutsPlus
//
// Created by Felix Förtsch on 22.08.24.
//
import SwiftUI
import SwiftData
struct WorkoutItemLibrarySheet: View {
@Environment(\.modelContext) private var modelContext
@Query(sort: \Exercise.name) private var exercises: [Exercise]
@State var workout: Workout
// TODO: Add (i) Button that allows editing an exercise (maybe requires NavigationStack?)
// TODO: Pass in some context? So that when we come from a Set and add a Set, it's treed. Or when we come from a Set and add an Exercise, we put it into it's child
var body: some View {
Group {
List {
Section(header: Text("Utilities")) {
AddItemButton(label: "Set") {
addWorkoutItemtoWorkout(WorkoutItem(set: [
WorkoutItem(Exercise("Set item 1")),
WorkoutItem(Exercise("Set item 2"))
]))
}
AddItemButton(label: "Rest") {
addWorkoutItemtoWorkout(WorkoutItem(rest: 45))
}
}
Section(header: Text("Excersises")) {
if !exercises.isEmpty {
ForEach(exercises) { exercise in
AddItemButton(label: exercise.name) {
let workoutItem = WorkoutItem(exercise)
addWorkoutItemtoWorkout(workoutItem)
}
}
} else {
ContentUnavailableView {
// TODO: Add Button that allows adding an exercise
Label("No Exercises", systemImage: Exercise.systemImage)
}
}
}
}
}
.presentationDetents([.medium, .large])
.presentationDragIndicator(.visible)
}
private func addWorkoutItemtoWorkout(_ workoutItem: WorkoutItem) {
workout.add(workoutItem: workoutItem)
// TODO: Handle saving in a way the user knows when it's saved
// modelContext.save()
}
}
#Preview("With Sample Data") {
WorkoutItemLibrarySheet(workout: Workout.sampleData.first!)
.modelContainer(SampleData.shared.modelContainer)
}
#Preview("Empty Database") {
WorkoutItemLibrarySheet(workout: Workout.sampleData.first!)
.modelContainer(for: Exercise.self, inMemory: true)
}