This commit is contained in:
Trey t
2023-06-25 16:53:38 -05:00
parent ad73c18bdc
commit f97faffb62
7 changed files with 42 additions and 15 deletions

View File

@@ -0,0 +1,83 @@
//
// AccountView.swift
// Werkout_ios
//
// Created by Trey Tartt on 6/15/23.
//
import Foundation
import SwiftUI
struct AccountView: View {
@State var completedWorkouts: [CompletedWorkout]?
@ObservedObject var userStore = UserStore.shared
var body: some View {
VStack(alignment: .leading) {
if let registeredUser = userStore.registeredUser {
if let nickName = registeredUser.nickName {
Text(nickName)
.font(.title)
}
HStack {
Text(registeredUser.firstName ?? "-")
Text(registeredUser.lastName ?? "-")
}
if let email = registeredUser.email {
Text(email)
}
}
if let completedWorkouts = completedWorkouts {
VStack(alignment: .leading) {
Divider()
Text("Workout History:")
HStack {
Text("Number of workouts:")
Text("\(completedWorkouts.count)")
}
if let lastWorkout = completedWorkouts.last {
HStack {
Text("Last workout:")
Text(lastWorkout.workoutStartTime)
}
}
}
}
Spacer()
}
.padding()
.onAppear{
if completedWorkouts == nil {
fetchCompletedWorkouts()
}
}
}
func fetchCompletedWorkouts() {
CompletedWorkoutFetchable().fetch(completion: { result in
switch result {
case .success(let model):
completedWorkouts = model
case .failure(let failure):
fatalError(failure.localizedDescription)
}
})
}
}
struct AccountView_Previews: PreviewProvider {
static let userStore = UserStore.shared
static let completedWorkouts = PreviewWorkout.parseCompletedWorkouts()
static var previews: some View {
AccountView(completedWorkouts: completedWorkouts)
.onAppear{
userStore.setFakeUser()
}
}
}

View File

@@ -198,5 +198,15 @@ struct AddExerciseView: View {
return hasCorrectMuscles && hasCorrectEquipment
}
})
}
}
func setupFake() {
DataStore.shared.setupFakeData()
}
}
struct AddExerciseView_Previews: PreviewProvider {
static var previews: some View {
AddExerciseView(selectedWorkout: { _ in })
}
}

View File

@@ -75,6 +75,10 @@ struct AllWorkoutsView: View {
self.needsUpdating = true
}
}
}
struct AllWorkoutsView_Previews: PreviewProvider {
static var previews: some View {
AllWorkoutsView(workouts: PreviewWorkout.allWorkouts())
}
}

View File

@@ -244,7 +244,8 @@ struct CountdownView: View {
}
struct WorkoutDetailView_Previews: PreviewProvider {
static let workoutDetail = PreviewWorkout.workout()
static var previews: some View {
WorkoutDetailView(viewModel: WorkoutDetailViewModel(workout: PreviewWorkout.workout()))
WorkoutDetailView(viewModel: WorkoutDetailViewModel(workout: WorkoutDetailView_Previews.workoutDetail, status: .showWorkout(WorkoutDetailView_Previews.workoutDetail)))
}
}

View File

@@ -15,18 +15,22 @@ class WorkoutDetailViewModel: ObservableObject {
}
@Published var status: WorkoutDetailViewModelStatus
init(workout: Workout) {
init(workout: Workout, status: WorkoutDetailViewModelStatus? = nil) {
self.status = .loading
WorkoutDetailFetchable(workoutID: workout.id).fetch(completion: { result in
switch result {
case .success(let model):
DispatchQueue.main.async {
self.status = .showWorkout(model)
if let passedStatus = status {
self.status = passedStatus
} else {
WorkoutDetailFetchable(workoutID: workout.id).fetch(completion: { result in
switch result {
case .success(let model):
DispatchQueue.main.async {
self.status = .showWorkout(model)
}
case .failure(let failure):
fatalError("failed \(failure.localizedDescription)")
}
case .failure(let failure):
fatalError("failed \(failure.localizedDescription)")
}
})
})
}
}
}