// // AllWorkoutsListView.swift // Werkout_ios // // Created by Trey Tartt on 7/7/23. // import SwiftUI struct AllWorkoutsListView: View { @State var searchString: String = "" let workouts: [Workout] let selectedWorkout: ((Workout) -> Void) var filteredWorkouts: [Workout] { if !searchString.isEmpty, searchString.count > 0 { return workouts.filter({ if $0.name.lowercased().contains(searchString.lowercased()) { return true } if let equipment = $0.equipment?.joined(separator: "").lowercased(), equipment.contains(searchString.lowercased()) { return true } if let muscles = $0.muscles?.joined(separator: "").lowercased(), muscles.contains(searchString.lowercased()) { return true } return false }) } else { return workouts } } var refresh: (() -> Void) var body: some View { VStack { List { ForEach(filteredWorkouts, id:\.name) { workout in Section { VStack { Text(workout.name) .font(.title2) .frame(maxWidth: .infinity, alignment: .leading) Text(workout.description ?? "") .frame(maxWidth: .infinity, alignment: .leading) if let muscles = workout.muscles, muscles.joined(separator: ", ").count > 0{ Divider() Text(muscles.joined(separator: ", ")) .font(.footnote) .frame(maxWidth: .infinity, alignment: .leading) } if let equipment = workout.equipment, equipment.joined(separator: ", ").count > 0 { Divider() Text(equipment.joined(separator: ", ")) .font(.footnote) .frame(maxWidth: .infinity, alignment: .leading) } } .contentShape(Rectangle()) .onTapGesture { selectedWorkout(workout) } } } } .refreshable { refresh() } TextField("Filter" ,text: $searchString) .padding() .textFieldStyle(OvalTextFieldStyle()) } } }