refactor WorkoutItemLibrarySheet, add Set sample data
This commit is contained in:
@@ -74,6 +74,12 @@ extension WorkoutItem {
|
||||
exercises.append(WorkoutItem(from: exercise))
|
||||
}
|
||||
|
||||
var set = WorkoutItem(workoutItems: [
|
||||
WorkoutItem(from: Exercise("Set item 1")),
|
||||
WorkoutItem(from: Exercise("Set item 2"))
|
||||
])
|
||||
exercises.append(set)
|
||||
|
||||
return exercises
|
||||
}()
|
||||
}
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
# Workouts+
|
||||
|
||||
## TODO List
|
||||
- Actually DO a workout View
|
||||
- JSON Import/Export
|
||||
- Use Multipeer connect for sharing/tracking?
|
||||
- Progression-Fotos: als eigene App? -> Generalisierung zu "Foto-Track"
|
||||
- Karte mit öffentlichen Orten einbinden (AOK-Fitnesspark?)
|
||||
- Progression-Fotos: als eigene App? -> Generalisierung zu "Foto-Track"
|
||||
|
||||
## Workouts
|
||||
- time-based: 60 s
|
||||
|
||||
@@ -13,7 +13,7 @@ struct WorkoutDetail: View {
|
||||
@Environment(\.modelContext) private var modelContext
|
||||
|
||||
@State var workout: Workout
|
||||
@State private var isPresentingExerciseLibrary = false
|
||||
@State private var isPresentingWorkoutItemLibrarySheet = false
|
||||
|
||||
var body: some View {
|
||||
List {
|
||||
@@ -25,7 +25,9 @@ struct WorkoutDetail: View {
|
||||
.foregroundStyle(workout.workoutIconColorName.color)
|
||||
}
|
||||
}
|
||||
Section(header: Text("Exercises")) {
|
||||
Section(
|
||||
header: Text("Exercises"),
|
||||
footer: Text("Drag and drop to re-arrange or swipe to delete exercises.")) {
|
||||
ForEach(workout.workoutItems
|
||||
.sorted(by: { $0.position < $1.position})) { workoutItem in
|
||||
switch workoutItem.workoutItemType {
|
||||
@@ -40,25 +42,23 @@ struct WorkoutDetail: View {
|
||||
.onDelete(perform: deleteExerciseFromWorkout)
|
||||
.onMove(perform: move)
|
||||
.environment(\.editMode, .constant(.active)) // Always active drag mode
|
||||
AddItemButton(label: "Exercise", action: addWorkoutItemToWorkout)
|
||||
AddItemButton(label: "Exercise", action: presentWorkoutItemLibrarySheet)
|
||||
}
|
||||
}
|
||||
.navigationBarTitle("\(workout.name)")
|
||||
.toolbar {
|
||||
ToolbarItem() {
|
||||
EditButton()
|
||||
}
|
||||
// TODO: Add proper Sharing for workouts.
|
||||
ToolbarItem() { ShareLink(item: URL(filePath: "felixfoertsch.de")!) }
|
||||
ToolbarItem() { EditButton() }
|
||||
}
|
||||
.sheet(isPresented: $isPresentingExerciseLibrary) {
|
||||
AddWorkoutItemToWorkout(workout: workout)
|
||||
.presentationDetents([.medium, .large])
|
||||
.presentationDragIndicator(.visible)
|
||||
.sheet(isPresented: $isPresentingWorkoutItemLibrarySheet) {
|
||||
WorkoutItemLibrarySheet(workout: workout)
|
||||
}
|
||||
}
|
||||
|
||||
private func addWorkoutItemToWorkout() {
|
||||
private func presentWorkoutItemLibrarySheet() {
|
||||
withAnimation {
|
||||
isPresentingExerciseLibrary = true
|
||||
isPresentingWorkoutItemLibrarySheet = true
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,18 +8,21 @@
|
||||
import SwiftUI
|
||||
import SwiftData
|
||||
|
||||
struct AddWorkoutItemToWorkout: View {
|
||||
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")) {
|
||||
// AddExerciseToWorkoutListItem(WorkoutItem(workoutItems: []), workout)
|
||||
AddItemButton(label: "Set") {
|
||||
addWorkoutItemtoWorkout(WorkoutItem(workoutItems: []))
|
||||
}
|
||||
}
|
||||
Section(header: Text("Excersises")) {
|
||||
if !exercises.isEmpty {
|
||||
@@ -38,6 +41,8 @@ struct AddWorkoutItemToWorkout: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
.presentationDetents([.medium, .large])
|
||||
.presentationDragIndicator(.visible)
|
||||
}
|
||||
|
||||
private func addWorkoutItemtoWorkout(_ workoutItem: WorkoutItem) {
|
||||
@@ -48,11 +53,11 @@ struct AddWorkoutItemToWorkout: View {
|
||||
}
|
||||
|
||||
#Preview("With Sample Data") {
|
||||
AddWorkoutItemToWorkout(workout: Workout.sampleData)
|
||||
WorkoutItemLibrarySheet(workout: Workout.sampleData)
|
||||
.modelContainer(SampleData.shared.modelContainer)
|
||||
}
|
||||
|
||||
#Preview("Empty Database") {
|
||||
AddWorkoutItemToWorkout(workout: Workout.sampleData)
|
||||
WorkoutItemLibrarySheet(workout: Workout.sampleData)
|
||||
.modelContainer(for: Exercise.self, inMemory: true)
|
||||
}
|
||||
Reference in New Issue
Block a user