// // ExerciseListView.swift // Werkout_ios // // Created by Trey Tartt on 7/7/23. // import SwiftUI import AVKit struct ExerciseListView: View { @AppStorage("showNSFWVideos") private var showNSFWVideos = false @ObservedObject var bridgeModule = BridgeModule.shared var workout: Workout @State var avPlayer = AVPlayer(url: URL(string: "https://dev.werkout.fitness/media/exercise_videos/2_Dumbbell_Lateral_Lunges.mp4")!) @State var videoExercise: ExerciseExercise? { didSet { if let videoURL = self.videoExercise?.videoURL(nsfw: showNSFWVideos) { avPlayer = AVPlayer(url: videoURL) avPlayer.play() } } } var body: some View { ScrollViewReader { proxy in List() { ForEach(workout.exercisesSortedByCreated_at.indices, id: \.self) { i in let obj = workout.exercisesSortedByCreated_at[i] HStack { if i == bridgeModule.currentExerciseIdx { Image(systemName: "checkmark") .foregroundColor(.green) } Text(obj.exercise.name) .id(i) Spacer() if let reps = obj.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 = obj.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(index: i) } 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() } } } } struct ExerciseListView_Previews: PreviewProvider { static var previews: some View { ExerciseListView(workout: PreviewData.workout()) } }