add SimpleStopWatch to ActiveWorkoutSession

This commit is contained in:
Felix Förtsch
2024-10-28 12:00:56 +01:00
parent d1a87957f6
commit c722d59aff
18 changed files with 213 additions and 153 deletions
@@ -1,43 +1,51 @@
//
// ActiveWorkoutSession.swift
// WorkoutsPlus
//
// Created by Felix Förtsch on 12.09.24.
//
import SwiftUI
import SwiftData
// This view can only be viewed, if there exists a WorkoutSession that can be considered active (a person working out).
struct ActiveWorkoutSession: View {
@Environment(\.modelContext) private var modelContext
@Default(\.isWorkingOut) var isWorkingOut
@State var isTimerRunning: Bool = true
@Query(sort: \WorkoutSession.name) var workoutSessions: [WorkoutSession]
@Binding var activeWorkoutSession: WorkoutSession?
@Binding var activeWorkoutSession: WorkoutSession
var body: some View {
VStack {
VStack {
Text(activeWorkoutSession.name)
SimpleStopWatch(
startDate: activeWorkoutSession.startDate,
duration: $activeWorkoutSession.workoutDuration)
.font(.system(.largeTitle, design: .monospaced))
.fontWeight(.bold)
}
List {
Section(header: Text("Workout")) {
Text(activeWorkoutSession!.name)
}
Section(header: Text("Exercises")) {
ForEach(activeWorkoutSession!.workoutSessionItems) { workoutItem in
ForEach(activeWorkoutSession.workoutSessionItems) { workoutItem in
ActiveWorkoutSessionListItem(workoutItem: workoutItem)
}
}
}
}
.navigationTitle("Session")
// .navigationTitle(activeWorkoutSession.name)
// .navigationBarTitleDisplayMode(.inline)
.toolbar {
Button(action: {
isWorkingOut = false
activeWorkoutSession?.stop()
}) {
HStack {
Image(systemName: "stop.fill")
Text("Stop")
}
Button(action: {
isWorkingOut = false
activeWorkoutSession.isPaused.toggle()
}) {
HStack {
Image(systemName: "stop.fill")
Text("Stop")
}
.bold()
.fontDesign(.rounded)
.tint(.red)
}
.fontWeight(.bold)
.fontDesign(.rounded)
.tint(.red)
}
}
@@ -54,8 +62,7 @@ struct ActiveWorkoutSession: View {
}
#Preview {
@Previewable @State var activeWorkoutSession: WorkoutSession?
@Previewable @State var workout = Workout.sampleData.first!
@Previewable @State var activeWorkoutSession = Workout.sampleData.first!.start()
NavigationStack {
ActiveWorkoutSession(activeWorkoutSession: $activeWorkoutSession)
@@ -65,14 +72,3 @@ struct ActiveWorkoutSession: View {
}
.modelContainer(SampleData.shared.modelContainer)
}
//#Preview("Empty modelContainer") {
// @Previewable @State var activeWorkoutSession: WorkoutSession?
//
// NavigationStack {
// ActiveWorkoutSession(activeWorkoutSession: $activeWorkoutSession)
// }
// .onAppear {
// Defaults.shared.isWorkingOut = false
// }
//}