WIP
This commit is contained in:
83
Werkout_ios/Views/AccountView/AccountView.swift
Normal file
83
Werkout_ios/Views/AccountView/AccountView.swift
Normal 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()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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 })
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,6 +75,10 @@ struct AllWorkoutsView: View {
|
||||
self.needsUpdating = true
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
struct AllWorkoutsView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
AllWorkoutsView(workouts: PreviewWorkout.allWorkouts())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)")
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user