From 508491510c2e3800c8a57ea8044a4a33c5a30efd Mon Sep 17 00:00:00 2001 From: Trey t Date: Sun, 25 Jun 2023 17:15:34 -0500 Subject: [PATCH] WIP --- .../Views/AddExercise/AddExerciseView.swift | 219 ++++++++++-------- 1 file changed, 116 insertions(+), 103 deletions(-) diff --git a/Werkout_ios/Views/AddExercise/AddExerciseView.swift b/Werkout_ios/Views/AddExercise/AddExerciseView.swift index cf98a7f..fff8608 100644 --- a/Werkout_ios/Views/AddExercise/AddExerciseView.swift +++ b/Werkout_ios/Views/AddExercise/AddExerciseView.swift @@ -18,89 +18,15 @@ struct AddExerciseView: View { @StateObject var bridgeModule = BridgeModule.shared @Environment(\.dismiss) var dismiss - var selectedWorkout: ((ExerciseExercise) -> Void) var body: some View { VStack { - if let muscles = DataStore.shared.allMuscles { - Button("toggle all", action: { - if self.selectedMuscles.count > 0 { - self.selectedMuscles.removeAll() - } else { - self.selectedMuscles.append(contentsOf: muscles) - } - filterExercises() - }) - - ScrollView(.horizontal) { - HStack(spacing: 10) { - ForEach(muscles, id:\.id) { muscle in - ZStack { - RoundedRectangle(cornerRadius: 8) - .stroke(selectedMuscles.contains(where: { $0.id == muscle.id }) ? .green : .gray, lineWidth: 3) - .frame(maxWidth: .infinity, maxHeight: .infinity) - Text(muscle.name) - .lineLimit(2) - .multilineTextAlignment(.center) - .frame(maxWidth: .infinity, maxHeight: .infinity) - } - .contentShape(Rectangle()) - .onTapGesture { - if selectedMuscles.contains(where: { $0.id == muscle.id }) { - self.selectedMuscles.removeAll(where: { - $0.id == muscle.id - }) - } else { - self.selectedMuscles.append(muscle) - } - filterExercises() - } - .frame(width: 150, height: 70) - } - }.padding() - }.frame(height: 100) - } + muscleView() Divider() - if let equipment = DataStore.shared.allEquipment { - Button("toggle all", action: { - if self.selectedEquipment.count > 0 { - self.selectedEquipment.removeAll() - } else { - self.selectedEquipment.append(contentsOf: equipment) - } - filterExercises() - }) - ScrollView(.horizontal) { - HStack(spacing: 10) { - ForEach(equipment, id:\.id) { aequipment in - ZStack { - RoundedRectangle(cornerRadius: 8) - .stroke(selectedEquipment.contains(where: { $0.id == aequipment.id }) ? .green : .gray, lineWidth: 3) - .frame(maxWidth: .infinity, maxHeight: .infinity) - Text(aequipment.name ?? "--") - .frame(maxWidth: .infinity, maxHeight: .infinity) - .lineLimit(2) - .multilineTextAlignment(.center) - } - .contentShape(Rectangle()) - .onTapGesture { - if selectedEquipment.contains(where: { $0.id == aequipment.id }) { - self.selectedEquipment.removeAll(where: { - $0.id == aequipment.id - }) - } else { - self.selectedEquipment.append(aequipment) - } - filterExercises() - } - .frame(width: 150, height: 70) - } - }.padding() - }.frame(height: 100) - } + equipmentView() Divider() @@ -112,33 +38,12 @@ struct AddExerciseView: View { Divider() - List() { - ForEach(filteredExercises.indices, id: \.self) { i in - let obj = filteredExercises[i] - VStack { - Text(obj.name) - .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) - Text(obj.muscleGroups) - .font(.footnote) - .frame(maxWidth: .infinity, alignment: .leading) - } - .contentShape(Rectangle()) - .onTapGesture { - selectedWorkout(obj) - dismiss() - } - } - } + exerciseView() } .onAppear{ + if #function.hasPrefix("__preview") { + DataStore.shared.setupFakeData() + } guard let exercises = DataStore.shared.allExercise, let muscles = DataStore.shared.allMuscles, let equipment = DataStore.shared.allEquipment else { @@ -199,9 +104,117 @@ struct AddExerciseView: View { } }) } + + func muscleView() -> some View { + VStack { + if let muscles = DataStore.shared.allMuscles { + Button("toggle all", action: { + if self.selectedMuscles.count > 0 { + self.selectedMuscles.removeAll() + } else { + self.selectedMuscles.append(contentsOf: muscles) + } + filterExercises() + }) + ScrollView(.horizontal) { + HStack(spacing: 10) { + ForEach(muscles, id:\.id) { muscle in + ZStack { + RoundedRectangle(cornerRadius: 8) + .stroke(selectedMuscles.contains(where: { $0.id == muscle.id }) ? .green : .gray, lineWidth: 3) + .frame(maxWidth: .infinity, maxHeight: .infinity) + Text(muscle.name) + .lineLimit(2) + .multilineTextAlignment(.center) + .frame(maxWidth: .infinity, maxHeight: .infinity) + } + .contentShape(Rectangle()) + .onTapGesture { + if selectedMuscles.contains(where: { $0.id == muscle.id }) { + self.selectedMuscles.removeAll(where: { + $0.id == muscle.id + }) + } else { + self.selectedMuscles.append(muscle) + } + filterExercises() + } + .frame(width: 150, height: 70) + } + }.padding() + }.frame(height: 100) + } + } + } - func setupFake() { - DataStore.shared.setupFakeData() + func equipmentView() -> some View { + VStack { + if let equipment = DataStore.shared.allEquipment { + Button("toggle all", action: { + if self.selectedEquipment.count > 0 { + self.selectedEquipment.removeAll() + } else { + self.selectedEquipment.append(contentsOf: equipment) + } + filterExercises() + }) + ScrollView(.horizontal) { + HStack(spacing: 10) { + ForEach(equipment, id:\.id) { aequipment in + ZStack { + RoundedRectangle(cornerRadius: 8) + .stroke(selectedEquipment.contains(where: { $0.id == aequipment.id }) ? .green : .gray, lineWidth: 3) + .frame(maxWidth: .infinity, maxHeight: .infinity) + Text(aequipment.name ?? "--") + .frame(maxWidth: .infinity, maxHeight: .infinity) + .lineLimit(2) + .multilineTextAlignment(.center) + } + .contentShape(Rectangle()) + .onTapGesture { + if selectedEquipment.contains(where: { $0.id == aequipment.id }) { + self.selectedEquipment.removeAll(where: { + $0.id == aequipment.id + }) + } else { + self.selectedEquipment.append(aequipment) + } + filterExercises() + } + .frame(width: 150, height: 70) + } + }.padding() + }.frame(height: 100) + } + } + } + + func exerciseView() -> some View { + List() { + ForEach(filteredExercises.indices, id: \.self) { i in + let obj = filteredExercises[i] + VStack { + Text(obj.name) + .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) + Text(obj.muscleGroups) + .font(.footnote) + .frame(maxWidth: .infinity, alignment: .leading) + } + .contentShape(Rectangle()) + .onTapGesture { + selectedWorkout(obj) + dismiss() + } + } + } } }