This commit is contained in:
Trey t
2023-06-26 09:57:12 -05:00
parent e16a127579
commit 79ee615e8c
16 changed files with 180 additions and 39 deletions

View File

@@ -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()
}
}

View File

@@ -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
})
}
}

View File

@@ -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()
}
}

View File

@@ -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)
}
}

View File

@@ -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
}
]

View File

@@ -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))

View File

@@ -3,9 +3,9 @@
-apple watch
account view
-account view
workout history view
calorie upload
-calorie upload
video view on iphone during workout

View File

@@ -51,6 +51,6 @@ class UserStore: ObservableObject {
}
func setFakeUser() {
self.registeredUser = PreviewWorkout.parseRegisterdUser()
self.registeredUser = PreviewData.parseRegisterdUser()
}
}

View File

@@ -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)

View File

@@ -90,6 +90,6 @@ struct AllWorkoutsView: View {
struct AllWorkoutsView_Previews: PreviewProvider {
static var previews: some View {
AllWorkoutsView(workouts: PreviewWorkout.allWorkouts())
AllWorkoutsView(workouts: PreviewData.allWorkouts())
}
}

View File

@@ -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,

View File

@@ -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
}() )
}

View File

@@ -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)))
}

View 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)
}
}