// // MainView.swift // Werkout_ios // // Created by Trey Tartt on 6/14/23. // import SwiftUI struct WorkoutDetailView: View { @ObservedObject var viewModel: WorkoutDetailViewModel @EnvironmentObject var bridgeModule: BridgeModule @Environment(\.dismiss) var dismiss @State var selectedIdx = -1 { didSet { runItemAt(idx: selectedIdx) } } var body: some View { ZStack { switch viewModel.status { case .loading: Text("Loading") case .showWorkout(let workout): VStack { HStack { Button("i dont want to do this", action: { bridgeModule.currentWorkout = nil dismiss() }) .frame(maxWidth: .infinity, maxHeight: .infinity) .background(.red) Button("ohhh lets do it", action: { runItemAt(idx: 0) }) .frame(maxWidth: .infinity, maxHeight: .infinity) .background(.green) } .frame(height: 88) List() { ForEach(workout.exercisesSortedByCreated_at.indices, id: \.self) { i in let obj = workout.exercisesSortedByCreated_at[i] Text(obj.exercise.name ?? "") .onTapGesture { selectedIdx = i } } } if let duration = bridgeModule.currentExercise?.duration { HStack { ProgressView(value: Float(bridgeModule.timeLeft), total: Float(duration)) Text("\(bridgeModule.timeLeft)") }.padding(16) } } .onAppear{ bridgeModule.timerCompleted = { selectedIdx += 1 } } .interactiveDismissDisabled() } } } func runItemAt(idx: Int) { switch viewModel.status { case .showWorkout(let workout): if idx < workout.exercises.count { let exercise = workout.exercises[idx] bridgeModule.updateCurrent(exercise: exercise) bridgeModule.currentExerciseIdx = idx } else { workoutComplete() } default: fatalError("no workout!!") } } private func workoutComplete() { } } struct WorkoutDetailView_Previews: PreviewProvider { static var previews: some View { WorkoutDetailView(viewModel: WorkoutDetailViewModel(workout: PreviewWorkout.workout())) } }