This commit is contained in:
Trey t
2023-06-18 21:12:17 -05:00
parent 544332c422
commit e6cc60b064
13 changed files with 403 additions and 55 deletions

View File

@@ -7,6 +7,7 @@
import Foundation
import SwiftUI
import Combine
struct AddExerciseView: View {
@State var exercises: [ExerciseExercise]?
@@ -17,6 +18,8 @@ struct AddExerciseView: View {
@State var selectedEquipment = [Equipment]()
@State var filteredExercises = [ExerciseExercise]()
@State var searchString: String = ""
@EnvironmentObject var bridgeModule: BridgeModule
@Environment(\.dismiss) var dismiss
@@ -101,15 +104,23 @@ struct AddExerciseView: View {
}.frame(height: 100)
}
TextField("Filter", text: $searchString)
.onReceive(Just(searchString)) { location in
filterExercises()
}
.padding()
List() {
ForEach(filteredExercises.indices, id: \.self) { i in
let obj = filteredExercises[i]
VStack {
Text(obj.name)
.frame(maxWidth: .infinity, alignment: .leading)
Text(obj.side)
.font(.footnote)
.frame(maxWidth: .infinity, alignment: .leading)
if obj.side.count > 0 {
Text(obj.side)
.font(.footnote)
.frame(maxWidth: .infinity, alignment: .leading)
}
Text(obj.equipmentRequired)
.font(.footnote)
.frame(maxWidth: .infinity, alignment: .leading)
@@ -117,6 +128,7 @@ struct AddExerciseView: View {
.font(.footnote)
.frame(maxWidth: .infinity, alignment: .leading)
}
.contentShape(Rectangle())
.onTapGesture {
selectedWorkout(obj)
dismiss()
@@ -172,7 +184,11 @@ struct AddExerciseView: View {
}
}
return hasCorrectMuscles && hasCorrectEquipment
if !searchString.isEmpty {
return exercise.name.contains(searchString) && hasCorrectMuscles && hasCorrectEquipment
} else {
return hasCorrectMuscles && hasCorrectEquipment
}
})
}

View File

@@ -1,43 +0,0 @@
//
// CreateWorkoutView.swift
// Werkout_ios
//
// Created by Trey Tartt on 6/15/23.
//
import SwiftUI
struct CreateWorkoutView: View {
@State var exercises = [ExerciseExercise]()
@State private var showAddExercise = false
var body: some View {
VStack {
Button("add", action: {
showAddExercise.toggle()
})
List() {
ForEach(exercises.indices, id: \.self) { i in
let obj = exercises[i]
Text(obj.name)
}
}
}
.sheet(isPresented: $showAddExercise) {
AddExerciseView(selectedWorkout: { exercise in
addNewExercise(exercise: exercise)
})
}
}
func addNewExercise(exercise: ExerciseExercise) {
exercises.append(exercise)
}
}
struct CreateWorkoutView_Previews: PreviewProvider {
static var previews: some View {
CreateWorkoutView()
}
}

View File

@@ -0,0 +1,99 @@
//
// CreateViewRepsWeightView.swift
// Werkout_ios
//
// Created by Trey Tartt on 6/18/23.
//
import SwiftUI
struct CreateExerciseActionsView: View {
@ObservedObject var workoutExercise: CreateWorkoutExercise
var superset: CreateWorkoutSuperSet
var viewModel: WorkoutViewModel
var body: some View {
VStack {
if workoutExercise.exercise.isReps {
VStack {
HStack {
VStack {
HStack {
Text("Reps: ")
Text("\(workoutExercise.reps)")
}
Stepper("", onIncrement: {
workoutExercise.increaseReps()
}, onDecrement: {
workoutExercise.decreaseReps()
})
}
Divider()
VStack{
HStack {
Text("Weight: ")
Text("\(workoutExercise.weight)")
}
Stepper("", onIncrement: {
workoutExercise.increaseWeight()
}, onDecrement: {
workoutExercise.decreaseWeight()
})
}
}
}
} else if workoutExercise.exercise.isDuration {
VStack{
HStack {
Text("Duration: ")
Text("\(workoutExercise.duration)")
}
Stepper("", onIncrement: {
workoutExercise.increaseDuration()
}, onDecrement: {
workoutExercise.decreaseDuration()
})
}
}
HStack {
Spacer()
Button(action: {
}) {
Image(systemName: "video.fill")
}
.frame(width: 88, height: 44)
.foregroundColor(.white)
.background(.blue)
.cornerRadius(10)
Spacer()
Divider()
Spacer()
Button(action: {
superset.deleteExerciseForChosenSuperset(exercise: workoutExercise)
viewModel.objectWillChange.send()
}) {
Image(systemName: "trash.fill")
}
.frame(width: 88, height: 44)
.foregroundColor(.white)
.background(.red)
.cornerRadius(10)
Spacer()
}
Divider()
.background(.blue)
}
}
}
//struct CreateViewRepsWeightView_Previews: PreviewProvider {
// static var previews: some View {
// CreateViewRepsWeightView()
// }
//}

View File

@@ -0,0 +1,98 @@
//
// CreateViewModels.swift
// Werkout_ios
//
// Created by Trey Tartt on 6/18/23.
//
import SwiftUI
class CreateWorkoutExercise: ObservableObject, Identifiable {
let id = UUID()
var exercise: ExerciseExercise
@Published var reps: Int = 0
@Published var duration: Int = 0
@Published var weight: Int = 0
init(exercise: ExerciseExercise, reps: Int = 0, duration: Int = 0, weight: Int = 0) {
self.exercise = exercise
self.reps = reps
self.duration = duration
self.weight = weight
}
func increaseReps() {
self.reps += 1
}
func decreaseReps() {
self.reps -= 1
if self.reps < 0 {
self.reps = 0
}
}
func increaseDuration() {
self.duration += 15
}
func decreaseDuration() {
self.duration -= 15
if self.duration < 0 {
self.duration = 0
}
}
func increaseWeight() {
self.weight += 5
}
func decreaseWeight() {
self.weight -= 15
if self.weight < 0 {
self.weight = 0
}
}
}
class CreateWorkoutSuperSet: ObservableObject, Identifiable {
let id = UUID()
@Published var exercises = [CreateWorkoutExercise]()
@Published var numberOfRounds = 1
func increaseNumberOfRounds() {
self.numberOfRounds += 1
}
func decreaseNumberOfRounds() {
self.numberOfRounds -= 1
if self.numberOfRounds < 1 {
self.numberOfRounds = 1
}
}
func deleteExerciseForChosenSuperset(exercise: CreateWorkoutExercise) {
if let idx = exercises.firstIndex(where: {
$0.id == exercise.id
}) {
exercises.remove(at: idx)
}
}
}
class WorkoutViewModel: ObservableObject {
@Published var superSets = [CreateWorkoutSuperSet]()
@Published var title = String()
func addNewSuperset() {
superSets.append(CreateWorkoutSuperSet())
}
func delete(superset: CreateWorkoutSuperSet) {
if let idx = superSets.firstIndex(where: {
$0.id == superset.id
}) {
superSets.remove(at: idx)
}
}
}

View File

@@ -0,0 +1,105 @@
//
// CreateWorkoutView.swift
// Werkout_ios
//
// Created by Trey Tartt on 6/15/23.
//
import SwiftUI
struct CreateWorkoutMainView: View {
@ObservedObject var viewModel = WorkoutViewModel()
@State private var showAddExercise = false
@State var selectedCreateWorkoutSuperSet: CreateWorkoutSuperSet?
var body: some View {
VStack {
TextField("Title", text: $viewModel.title)
.padding()
HStack {
Button("Add Superset", action: {
viewModel.addNewSuperset()
})
.frame(maxWidth: .infinity, alignment: .center)
.frame(height: 44)
.foregroundColor(.blue)
.background(.yellow)
.cornerRadius(8)
.padding()
.frame(maxWidth: .infinity)
Divider()
Button("Done", action: {
})
.frame(maxWidth: .infinity, alignment: .center)
.frame(height: 44)
.foregroundColor(.white)
.background(.blue)
.cornerRadius(8)
.padding()
.frame(maxWidth: .infinity)
}
.frame(height: 44)
List() {
ForEach($viewModel.superSets, id: \.id) { superset in
Section {
ForEach(superset.exercises, id: \.id) { exercise in
HStack {
VStack {
Text(exercise.wrappedValue.exercise.name)
.font(.title2)
.frame(maxWidth: .infinity)
if exercise.wrappedValue.exercise.side.count > 0 {
Text(exercise.wrappedValue.exercise.side)
.font(.title3)
.frame(maxWidth: .infinity, alignment: .center)
}
CreateExerciseActionsView(workoutExercise: exercise.wrappedValue,
superset: superset.wrappedValue,
viewModel: viewModel)
}
}
}
HStack {
Stepper("Number of rounds", onIncrement: {
superset.wrappedValue.increaseNumberOfRounds()
viewModel.objectWillChange.send()
}, onDecrement: {
superset.wrappedValue.decreaseNumberOfRounds()
viewModel.objectWillChange.send()
})
Text("\(superset.wrappedValue.numberOfRounds)")
}
CreateWorkoutSupersetActionsView(workoutSuperSet: superset.wrappedValue,
showAddExercise: $showAddExercise,
viewModel: viewModel,
selectedCreateWorkoutSuperSet: $selectedCreateWorkoutSuperSet)
}
}
.listRowSeparator(.hidden)
}
}
.sheet(isPresented: $showAddExercise) {
AddExerciseView(selectedWorkout: { exercise in
let workoutExercise = CreateWorkoutExercise(exercise: exercise)
selectedCreateWorkoutSuperSet?.exercises.append(workoutExercise)
viewModel.objectWillChange.send()
selectedCreateWorkoutSuperSet = nil
})
}
}
}
//struct CreateWorkoutView_Previews: PreviewProvider {
// static var previews: some View {
// CreateWorkoutView()
// }
//}

View File

@@ -0,0 +1,53 @@
//
// CreateWorkoutSupersetActionsView.swift
// Werkout_ios
//
// Created by Trey Tartt on 6/18/23.
//
import SwiftUI
struct CreateWorkoutSupersetActionsView: View {
var workoutSuperSet: CreateWorkoutSuperSet
@Binding var showAddExercise: Bool
var viewModel: WorkoutViewModel
@Binding var selectedCreateWorkoutSuperSet: CreateWorkoutSuperSet?
var body: some View {
HStack {
Button(action: {
selectedCreateWorkoutSuperSet = workoutSuperSet
showAddExercise.toggle()
}) {
Text("Add exercise")
.padding()
}
.frame(maxWidth: .infinity)
.foregroundColor(.white)
.background(.green)
.cornerRadius(10)
.frame(maxWidth: .infinity, alignment: .center)
// Button(action: {
// if let selectedCreateWorkoutSuperSet = selectedCreateWorkoutSuperSet {
// viewModel.delete(superset: selectedCreateWorkoutSuperSet)
// viewModel.objectWillChange.send()
// }
// }) {
// Text("Delete superset")
// .padding()
// }
// .frame(maxWidth: .infinity)
// .foregroundColor(.white)
// .background(.red)
// .cornerRadius(10)
// .frame(maxWidth: .infinity, alignment: .center)
}
}
}
//struct CreateWorkoutSupersetActionsView_Previews: PreviewProvider {
// static var previews: some View {
// CreateWorkoutSupersetActionsView()
// }
//}