// // CreateWorkout.swift // Werkout_ios // // Created by Trey Tartt on 6/15/23. // import Foundation import SwiftUI import Combine struct AddExerciseView: View { enum CreateWorkoutItemPickerViewType { case muscles case equipment } @State var selectedMuscles = [Muscle]() @State var selectedEquipment = [Equipment]() @State var filteredExercises = [Exercise]() @ObservedObject var bridgeModule = BridgeModule.shared let selectedExercise: ((Exercise) -> Void) var body: some View { VStack(spacing: 0) { AllExerciseView(filteredExercises: $filteredExercises, selectedExercise: { excercise in selectedExercise(excercise) }) .padding(.top, WerkoutTheme.md) Divider() .overlay(WerkoutTheme.divider) HStack { AllMusclesView(selectedMuscles: $selectedMuscles) .frame(maxWidth: .infinity) Divider() .overlay(WerkoutTheme.divider) AllEquipmentView(selectedEquipment: $selectedEquipment) .frame(maxWidth: .infinity) } .padding(.top, WerkoutTheme.sm) .frame(height: 44) } .background(WerkoutTheme.background) .onChange(of: selectedMuscles) { _, _ in filterExercises() } .onChange(of: selectedEquipment) { _, _ in filterExercises() } } func filterExercises() { guard let exercises = DataStore.shared.allExercise else { filteredExercises = [] return } let selectedMuscleIds = Set(selectedMuscles.map { $0.id }) let selectedEquipmentIds = Set(selectedEquipment.map { $0.id }) filteredExercises = exercises.filter { exercise in let muscleOK = selectedMuscleIds.isEmpty || exercise.muscles.contains(where: { selectedMuscleIds.contains($0.muscle ?? -1) }) let equipmentOK = selectedEquipmentIds.isEmpty || exercise.equipment.contains(where: { selectedEquipmentIds.contains($0.equipment ?? -1) }) return muscleOK && equipmentOK } } } //struct AddExerciseView_Previews: PreviewProvider { // static var previews: some View { // AddExerciseView(selectedExercise: { _ in }) // } //}