89 lines
3.3 KiB
Swift
89 lines
3.3 KiB
Swift
//
|
|
// 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())
|
|
// TextField("Filter", text: $searchString)
|
|
// .padding()
|
|
// .overlay(RoundedRectangle(cornerRadius: 10.0).strokeBorder(Color(uiColor: .darkGray), style: StrokeStyle(lineWidth: 1.0)))
|
|
// .padding()
|
|
// .background(Color(uiColor: .systemGroupedBackground))
|
|
}
|
|
}
|
|
}
|