// // ExerciseListView.swift // Werkout_ios // // Created by Trey Tartt on 7/7/23. // import SwiftUI import AVKit struct ExerciseListView: View { @AppStorage(Constants.phoneThotStyle) private var phoneThotStyle: ThotStyle = .never @ObservedObject var bridgeModule = BridgeModule.shared @State var avPlayer = AVPlayer(url: URL(string: "https://dev.werkout.fitness/media/exercise_videos/2_Dumbbell_Lateral_Lunges.mp4")!) var workout: Workout @State var videoExercise: Exercise? { didSet { if let videoURL = VideoURLCreator.videoURL( thotStyle: phoneThotStyle, defaultVideoURLStr: self.videoExercise?.videoURL, exerciseName: self.videoExercise?.name, workout: bridgeModule.currentExerciseInfo.workout) { avPlayer = AVPlayer(url: videoURL) avPlayer.play() } } } var body: some View { if let supersets = workout.supersets { ScrollViewReader { proxy in List() { ForEach(supersets.indices, id: \.self) { supersetIndex in let superset = supersets[supersetIndex] Section(content: { ForEach(superset.exercises.indices, id: \.self) { exerciseIndex in let supersetExecercise = superset.exercises[exerciseIndex] HStack { if supersetExecercise.id == bridgeModule.currentExerciseInfo.currentExercise?.id { Image(systemName: "checkmark") .foregroundColor(.green) } Text(supersetExecercise.exercise.name) .id(exerciseIndex) Spacer() if let reps = supersetExecercise.reps, reps > 0 { HStack { Image(systemName: "number") .foregroundColor(.white) .frame(width: 20, alignment: .leading) Text("\(reps)") .foregroundColor(.white) .frame(width: 30, alignment: .trailing) } .padding([.top, .bottom], 5) .padding([.leading], 10) .padding([.trailing], 15) .background(.blue) .cornerRadius(5, corners: [.topLeft, .bottomLeft]) .frame(alignment: .trailing) } if let duration = supersetExecercise.duration, duration > 0 { HStack { Image(systemName: "stopwatch") .foregroundColor(.white) .frame(width: 20, alignment: .leading) Text("\(duration)") .foregroundColor(.white) .frame(width: 30, alignment: .trailing) } .padding([.top, .bottom], 5) .padding([.leading], 10) .padding([.trailing], 15) .background(.green) .cornerRadius(5, corners: [.topLeft, .bottomLeft]) } } .padding(.trailing, -20) .contentShape(Rectangle()) .onTapGesture { if bridgeModule.isInWorkout { bridgeModule.goToExerciseAt(section: supersetIndex, row: exerciseIndex) } else { // videoExercise = obj.exercise } // .onChange(of: bridgeModule.currentExerciseIdx, perform: { newValue in // withAnimation { // proxy.scrollTo(newValue, anchor: .top) // } // }) } .sheet(item: $videoExercise) { exercise in PlayerView(player: $avPlayer) .onAppear{ avPlayer.play() } } } }, header: { HStack { Text(superset.name ?? "--") .foregroundColor(Color("appColor")) .bold() Spacer() Text("\(superset.rounds) rounds") .foregroundColor(Color("appColor")) .bold() } }) } } } } } } struct ExerciseListView_Previews: PreviewProvider { static var previews: some View { ExerciseListView(workout: PreviewData.workout()) } }