WIP
This commit is contained in:
@@ -23,13 +23,6 @@ struct ExerciseElement: Codable {
|
||||
case weightAudio = "weight_audio"
|
||||
case createdAt = "created_at"
|
||||
}
|
||||
|
||||
var createdAtDate: Date {
|
||||
let df = DateFormatter()
|
||||
df.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
|
||||
df.locale = Locale(identifier: "en_US_POSIX")
|
||||
return df.date(from: self.createdAt) ?? Date()
|
||||
}
|
||||
}
|
||||
|
||||
struct ExerciseExercise: Codable, Hashable, Identifiable {
|
||||
@@ -67,11 +60,4 @@ struct ExerciseExercise: Codable, Hashable, Identifiable {
|
||||
case muscleGroups = "muscle_groups"
|
||||
case synonyms
|
||||
}
|
||||
|
||||
var createdAtDate: Date {
|
||||
let df = DateFormatter()
|
||||
df.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
|
||||
df.locale = Locale(identifier: "en_US_POSIX")
|
||||
return df.date(from: self.createdAt) ?? Date()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,7 +35,11 @@ struct Workout: Codable, Identifiable {
|
||||
|
||||
var exercisesSortedByCreated_at: [ExerciseElement] {
|
||||
return self.exercises.sorted(by: {
|
||||
$0.createdAtDate < $1.createdAtDate
|
||||
if let lhsDate = $0.createdAt.dateFromServerDate,
|
||||
let rhsDate = $1.createdAt.dateFromServerDate {
|
||||
return lhsDate < rhsDate
|
||||
}
|
||||
return false
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -85,9 +85,9 @@ class DataStore {
|
||||
|
||||
|
||||
func setupFakeData() {
|
||||
allWorkouts = PreviewWorkout.allWorkouts()
|
||||
allMuscles = PreviewWorkout.parseMuscle()
|
||||
allEquipment = PreviewWorkout.parseEquipment()
|
||||
allExercise = PreviewWorkout.parseExercises()
|
||||
allWorkouts = PreviewData.allWorkouts()
|
||||
allMuscles = PreviewData.parseMuscle()
|
||||
allEquipment = PreviewData.parseEquipment()
|
||||
allExercise = PreviewData.parseExercises()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,3 +37,22 @@ extension Date {
|
||||
return isoFormatter.string(from: self)
|
||||
}
|
||||
}
|
||||
|
||||
extension String {
|
||||
var dateFromServerDate: Date? {
|
||||
let df = DateFormatter()
|
||||
df.dateFormat = "yyyy-MM-dd'T'HH:mm:ssX"
|
||||
df.locale = Locale(identifier: "en_US_POSIX")
|
||||
return df.date(from: self)
|
||||
}
|
||||
}
|
||||
|
||||
extension Date {
|
||||
func get(_ components: Calendar.Component..., calendar: Calendar = Calendar.current) -> DateComponents {
|
||||
return calendar.dateComponents(Set(components), from: self)
|
||||
}
|
||||
|
||||
func get(_ component: Calendar.Component, calendar: Calendar = Calendar.current) -> Int {
|
||||
return calendar.component(component, from: self)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,30 @@
|
||||
"difficulty": 1,
|
||||
"total_time": 112,
|
||||
"workout_start_time": "2015-10-22T19:50:08Z",
|
||||
"notes": "free",
|
||||
"notes": "🔥 i almost died",
|
||||
"total_calories": 123.0
|
||||
}, {
|
||||
"id": 12,
|
||||
"workout": {
|
||||
"id": 20,
|
||||
"registered_user": {
|
||||
"id": 2,
|
||||
"first_name": "test2_first",
|
||||
"last_name": "test2_last",
|
||||
"image": "",
|
||||
"nick_name": null
|
||||
},
|
||||
"created_at": "2023-06-20T21:03:00.124080Z",
|
||||
"updated_at": "2023-06-20T21:03:00.125595Z",
|
||||
"name": "Ipad",
|
||||
"description": "description"
|
||||
},
|
||||
"created_at": "2023-06-24T04:24:18.564094Z",
|
||||
"updated_at": "2023-06-24T04:24:18.567762Z",
|
||||
"difficulty": 1,
|
||||
"total_time": 112,
|
||||
"workout_start_time": "2015-10-22T19:50:08Z",
|
||||
"notes": "this workout sucked",
|
||||
"total_calories": 123.0
|
||||
}
|
||||
]
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// PreviewWorkout.swift
|
||||
// PreviewData.swift
|
||||
// Werkout_ios
|
||||
//
|
||||
// Created by Trey Tartt on 6/14/23.
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
import Foundation
|
||||
|
||||
class PreviewWorkout {
|
||||
class PreviewData {
|
||||
class func workout() -> Workout {
|
||||
let filepath = Bundle.main.path(forResource: "WorkoutOne", ofType: "json")!
|
||||
let data = try! Data(NSData(contentsOfFile: filepath))
|
||||
@@ -3,9 +3,9 @@
|
||||
|
||||
-apple watch
|
||||
|
||||
account view
|
||||
-account view
|
||||
workout history view
|
||||
calorie upload
|
||||
-calorie upload
|
||||
|
||||
video view on iphone during workout
|
||||
|
||||
|
||||
@@ -51,6 +51,6 @@ class UserStore: ObservableObject {
|
||||
}
|
||||
|
||||
func setFakeUser() {
|
||||
self.registeredUser = PreviewWorkout.parseRegisterdUser()
|
||||
self.registeredUser = PreviewData.parseRegisterdUser()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import SwiftUI
|
||||
struct AccountView: View {
|
||||
@State var completedWorkouts: [CompletedWorkout]?
|
||||
@ObservedObject var userStore = UserStore.shared
|
||||
@State var showCompletedWorkouts: Bool = false
|
||||
|
||||
var body: some View {
|
||||
VStack(alignment: .leading) {
|
||||
@@ -44,8 +45,19 @@ struct AccountView: View {
|
||||
Text("Last workout:")
|
||||
Text(lastWorkout.workoutStartTime)
|
||||
}
|
||||
|
||||
Button("View All Workouts", action: {
|
||||
showCompletedWorkouts = true
|
||||
})
|
||||
.frame(maxWidth: .infinity, alignment: .center)
|
||||
.frame(height: 44)
|
||||
.foregroundColor(.blue)
|
||||
.background(.yellow)
|
||||
.cornerRadius(8)
|
||||
.padding()
|
||||
.frame(maxWidth: .infinity)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
Spacer()
|
||||
@@ -62,11 +74,17 @@ struct AccountView: View {
|
||||
.frame(maxWidth: .infinity)
|
||||
}
|
||||
.padding()
|
||||
.sheet(isPresented: $showCompletedWorkouts) {
|
||||
if let history = completedWorkouts {
|
||||
WorkoutHistoryView(completedWorkouts: history)
|
||||
}
|
||||
}
|
||||
.onAppear{
|
||||
if completedWorkouts == nil {
|
||||
fetchCompletedWorkouts()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func fetchCompletedWorkouts() {
|
||||
@@ -83,7 +101,7 @@ struct AccountView: View {
|
||||
|
||||
struct AccountView_Previews: PreviewProvider {
|
||||
static let userStore = UserStore.shared
|
||||
static let completedWorkouts = PreviewWorkout.parseCompletedWorkouts()
|
||||
static let completedWorkouts = PreviewData.parseCompletedWorkouts()
|
||||
|
||||
static var previews: some View {
|
||||
AccountView(completedWorkouts: completedWorkouts)
|
||||
|
||||
@@ -90,6 +90,6 @@ struct AllWorkoutsView: View {
|
||||
|
||||
struct AllWorkoutsView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
AllWorkoutsView(workouts: PreviewWorkout.allWorkouts())
|
||||
AllWorkoutsView(workouts: PreviewData.allWorkouts())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -171,7 +171,7 @@ struct CompletedWorkoutView_Previews: PreviewProvider {
|
||||
"heart_rates": [65,65,4,54,232,12]
|
||||
] as [String : Any]
|
||||
|
||||
static let workout = PreviewWorkout.workout()
|
||||
static let workout = PreviewData.workout()
|
||||
|
||||
static var previews: some View {
|
||||
CompletedWorkoutView(postData: CompletedWorkoutView_Previews.postBody,
|
||||
|
||||
@@ -147,8 +147,8 @@ struct ExternalWorkoutDetailView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
ExternalWorkoutDetailView().environmentObject({ () -> BridgeModule in
|
||||
let envObj = BridgeModule.shared
|
||||
envObj.currentWorkout = PreviewWorkout.workout()
|
||||
bridge.currentExercise = PreviewWorkout.workout().exercisesSortedByCreated_at.first!
|
||||
envObj.currentWorkout = PreviewData.workout()
|
||||
bridge.currentExercise = PreviewData.workout().exercisesSortedByCreated_at.first!
|
||||
return envObj
|
||||
}() )
|
||||
}
|
||||
|
||||
@@ -244,7 +244,7 @@ struct CountdownView: View {
|
||||
}
|
||||
|
||||
struct WorkoutDetailView_Previews: PreviewProvider {
|
||||
static let workoutDetail = PreviewWorkout.workout()
|
||||
static let workoutDetail = PreviewData.workout()
|
||||
static var previews: some View {
|
||||
WorkoutDetailView(viewModel: WorkoutDetailViewModel(workout: WorkoutDetailView_Previews.workoutDetail, status: .showWorkout(WorkoutDetailView_Previews.workoutDetail)))
|
||||
}
|
||||
|
||||
85
Werkout_ios/Views/WorkoutHistoryView.swift
Normal file
85
Werkout_ios/Views/WorkoutHistoryView.swift
Normal file
@@ -0,0 +1,85 @@
|
||||
//
|
||||
// WorkoutHistoryView.swift
|
||||
// Werkout_ios
|
||||
//
|
||||
// Created by Trey Tartt on 6/26/23.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct WorkoutHistoryView: View {
|
||||
enum DifficltyString: Int {
|
||||
case easy = 1
|
||||
case moderate
|
||||
case average
|
||||
case hard
|
||||
case death
|
||||
|
||||
var stringValue: String {
|
||||
switch self {
|
||||
|
||||
case .easy:
|
||||
return "Easy"
|
||||
case .moderate:
|
||||
return "Moderate"
|
||||
case .average:
|
||||
return "Average"
|
||||
case .hard:
|
||||
return "Hard"
|
||||
case .death:
|
||||
return "Death"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let completedWorkouts: [CompletedWorkout]
|
||||
|
||||
var body: some View {
|
||||
List {
|
||||
ForEach(completedWorkouts, id:\.self.id) { completedWorkout in
|
||||
HStack {
|
||||
VStack {
|
||||
if let date = completedWorkout.workoutStartTime.dateFromServerDate {
|
||||
Text(DateFormatter().shortMonthSymbols[date.get(.month) - 1])
|
||||
|
||||
Text("\(date.get(.day))")
|
||||
Text("\(date.get(.hour))")
|
||||
}
|
||||
}
|
||||
|
||||
VStack(alignment: .leading) {
|
||||
HStack {
|
||||
|
||||
}
|
||||
Text(completedWorkout.workout.name)
|
||||
.font(.title3)
|
||||
|
||||
if let desc = completedWorkout.workout.description {
|
||||
Text(desc)
|
||||
.font(.footnote)
|
||||
}
|
||||
|
||||
Divider()
|
||||
|
||||
if let difficulty = completedWorkout.difficulty,
|
||||
let string = DifficltyString.init(rawValue: difficulty)?.stringValue {
|
||||
Text(string)
|
||||
}
|
||||
|
||||
if let notes = completedWorkout.notes {
|
||||
Text(notes)
|
||||
}
|
||||
}
|
||||
.padding(.leading)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct WorkoutHistoryView_Previews: PreviewProvider {
|
||||
static let fakeHistory = PreviewData.parseCompletedWorkouts()
|
||||
static var previews: some View {
|
||||
WorkoutHistoryView(completedWorkouts: fakeHistory)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user