Files
WerkoutIOS/Werkout_ios/Views/AddExercise/AddExerciseView.swift
2024-06-16 19:45:22 -05:00

96 lines
2.9 KiB
Swift

//
// 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]()
@StateObject var bridgeModule = BridgeModule.shared
let selectedExercise: ((Exercise) -> Void)
var body: some View {
VStack {
AllExerciseView(filteredExercises: $filteredExercises,
selectedExercise: { excercise in
selectedExercise(excercise)
})
.padding(.top)
HStack {
AllMusclesView(selectedMuscles: $selectedMuscles)
.frame(maxWidth: .infinity)
Divider()
AllEquipmentView(selectedEquipment: $selectedEquipment)
.frame(maxWidth: .infinity)
}
.padding(.top)
.frame(height: 44)
}
.onChange(of: selectedMuscles, perform: { _ in
filterExercises()
}) .onChange(of: selectedEquipment, perform: { _ in
filterExercises()
})
}
func filterExercises() {
guard let exercises = DataStore.shared.allExercise else {
filteredExercises = []
return
}
let filtered = exercises.filter({ exercise in
var hasCorrectMuscles = false
if selectedMuscles.count == 0 {
hasCorrectMuscles = true
} else {
let exerciseMuscleIds = exercise.muscles.map({ $0.id })
let selctedMuscleIds = selectedMuscles.map({ $0.id })
// if one items match
if exerciseMuscleIds.contains(where: selctedMuscleIds.contains) {
// if all items match
hasCorrectMuscles = true
}
}
var hasCorrectEquipment = false
if selectedEquipment.count == 0 {
hasCorrectEquipment = true
} else {
let exerciseEquipmentIds = exercise.equipment.map({ $0.id })
let selctedEquipmentIds = selectedEquipment.map({ $0.id })
// if one items match
if exerciseEquipmentIds.contains(where: selctedEquipmentIds.contains) {
// if all items match
hasCorrectEquipment = true
}
}
return hasCorrectMuscles && hasCorrectEquipment
})
filteredExercises = filtered
}
}
//struct AddExerciseView_Previews: PreviewProvider {
// static var previews: some View {
// AddExerciseView(selectedExercise: { _ in })
// }
//}