WIP
This commit is contained in:
@@ -18,89 +18,15 @@ struct AddExerciseView: View {
|
|||||||
|
|
||||||
@StateObject var bridgeModule = BridgeModule.shared
|
@StateObject var bridgeModule = BridgeModule.shared
|
||||||
@Environment(\.dismiss) var dismiss
|
@Environment(\.dismiss) var dismiss
|
||||||
|
|
||||||
var selectedWorkout: ((ExerciseExercise) -> Void)
|
var selectedWorkout: ((ExerciseExercise) -> Void)
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
VStack {
|
VStack {
|
||||||
if let muscles = DataStore.shared.allMuscles {
|
muscleView()
|
||||||
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)
|
|
||||||
}
|
|
||||||
|
|
||||||
Divider()
|
Divider()
|
||||||
|
|
||||||
if let equipment = DataStore.shared.allEquipment {
|
equipmentView()
|
||||||
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)
|
|
||||||
}
|
|
||||||
|
|
||||||
Divider()
|
Divider()
|
||||||
|
|
||||||
@@ -112,33 +38,12 @@ struct AddExerciseView: View {
|
|||||||
|
|
||||||
Divider()
|
Divider()
|
||||||
|
|
||||||
List() {
|
exerciseView()
|
||||||
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()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
.onAppear{
|
.onAppear{
|
||||||
|
if #function.hasPrefix("__preview") {
|
||||||
|
DataStore.shared.setupFakeData()
|
||||||
|
}
|
||||||
guard let exercises = DataStore.shared.allExercise,
|
guard let exercises = DataStore.shared.allExercise,
|
||||||
let muscles = DataStore.shared.allMuscles,
|
let muscles = DataStore.shared.allMuscles,
|
||||||
let equipment = DataStore.shared.allEquipment else {
|
let equipment = DataStore.shared.allEquipment else {
|
||||||
@@ -200,8 +105,116 @@ struct AddExerciseView: View {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func setupFake() {
|
func muscleView() -> some View {
|
||||||
DataStore.shared.setupFakeData()
|
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 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()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user