WIP
This commit is contained in:
@@ -10,6 +10,8 @@
|
|||||||
1C485C832A489B9C00A6F896 /* CompletedWorkouts.json in Resources */ = {isa = PBXBuildFile; fileRef = 1C485C822A489B9C00A6F896 /* CompletedWorkouts.json */; };
|
1C485C832A489B9C00A6F896 /* CompletedWorkouts.json in Resources */ = {isa = PBXBuildFile; fileRef = 1C485C822A489B9C00A6F896 /* CompletedWorkouts.json */; };
|
||||||
1C485C872A4915C400A6F896 /* CreateWorkoutItemPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C485C862A4915C400A6F896 /* CreateWorkoutItemPickerView.swift */; };
|
1C485C872A4915C400A6F896 /* CreateWorkoutItemPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C485C862A4915C400A6F896 /* CreateWorkoutItemPickerView.swift */; };
|
||||||
1C485C8A2A492BB400A6F896 /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C485C892A492BB400A6F896 /* LoginView.swift */; };
|
1C485C8A2A492BB400A6F896 /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C485C892A492BB400A6F896 /* LoginView.swift */; };
|
||||||
|
1C485C8C2A49D65600A6F896 /* WorkoutHistoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C485C8B2A49D65600A6F896 /* WorkoutHistoryView.swift */; };
|
||||||
|
1C485C8D2A49D95700A6F896 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A822A42347D0042FFBD /* Extensions.swift */; };
|
||||||
1CF65A262A3972840042FFBD /* Werkout_iosApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A252A3972840042FFBD /* Werkout_iosApp.swift */; };
|
1CF65A262A3972840042FFBD /* Werkout_iosApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A252A3972840042FFBD /* Werkout_iosApp.swift */; };
|
||||||
1CF65A282A3972840042FFBD /* Persistence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A272A3972840042FFBD /* Persistence.swift */; };
|
1CF65A282A3972840042FFBD /* Persistence.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A272A3972840042FFBD /* Persistence.swift */; };
|
||||||
1CF65A2B2A3972840042FFBD /* Werkout_ios.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A292A3972840042FFBD /* Werkout_ios.xcdatamodeld */; };
|
1CF65A2B2A3972840042FFBD /* Werkout_ios.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A292A3972840042FFBD /* Werkout_ios.xcdatamodeld */; };
|
||||||
@@ -24,7 +26,7 @@
|
|||||||
1CF65A4C2A39FDA20042FFBD /* WorkoutDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A4B2A39FDA20042FFBD /* WorkoutDetailView.swift */; };
|
1CF65A4C2A39FDA20042FFBD /* WorkoutDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A4B2A39FDA20042FFBD /* WorkoutDetailView.swift */; };
|
||||||
1CF65A4E2A39FF200042FFBD /* WorkoutDetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A4D2A39FF200042FFBD /* WorkoutDetailViewModel.swift */; };
|
1CF65A4E2A39FF200042FFBD /* WorkoutDetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A4D2A39FF200042FFBD /* WorkoutDetailViewModel.swift */; };
|
||||||
1CF65A502A3A1EA90042FFBD /* BridgeModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A4F2A3A1EA90042FFBD /* BridgeModule.swift */; };
|
1CF65A502A3A1EA90042FFBD /* BridgeModule.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A4F2A3A1EA90042FFBD /* BridgeModule.swift */; };
|
||||||
1CF65A522A3A90A00042FFBD /* PreviewWorkout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A512A3A90A00042FFBD /* PreviewWorkout.swift */; };
|
1CF65A522A3A90A00042FFBD /* PreviewData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A512A3A90A00042FFBD /* PreviewData.swift */; };
|
||||||
1CF65A542A3A9AF30042FFBD /* Straight_Leg_Sit_Up.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 1CF65A532A3A9A990042FFBD /* Straight_Leg_Sit_Up.mp4 */; };
|
1CF65A542A3A9AF30042FFBD /* Straight_Leg_Sit_Up.mp4 in Resources */ = {isa = PBXBuildFile; fileRef = 1CF65A532A3A9A990042FFBD /* Straight_Leg_Sit_Up.mp4 */; };
|
||||||
1CF65A572A3BF3830042FFBD /* AllMuscles.json in Resources */ = {isa = PBXBuildFile; fileRef = 1CF65A562A3BF3830042FFBD /* AllMuscles.json */; };
|
1CF65A572A3BF3830042FFBD /* AllMuscles.json in Resources */ = {isa = PBXBuildFile; fileRef = 1CF65A562A3BF3830042FFBD /* AllMuscles.json */; };
|
||||||
1CF65A592A3BF4B60042FFBD /* Muscle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A582A3BF4B60042FFBD /* Muscle.swift */; };
|
1CF65A592A3BF4B60042FFBD /* Muscle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A582A3BF4B60042FFBD /* Muscle.swift */; };
|
||||||
@@ -57,7 +59,7 @@
|
|||||||
1CF65AA82A452D9C0042FFBD /* Exercise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A442A39FB550042FFBD /* Exercise.swift */; };
|
1CF65AA82A452D9C0042FFBD /* Exercise.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A442A39FB550042FFBD /* Exercise.swift */; };
|
||||||
1CF65AA92A452D9C0042FFBD /* Workout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A422A39FB410042FFBD /* Workout.swift */; };
|
1CF65AA92A452D9C0042FFBD /* Workout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A422A39FB410042FFBD /* Workout.swift */; };
|
||||||
1CF65AAA2A452D9C0042FFBD /* RegisteredUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A462A39FB6C0042FFBD /* RegisteredUser.swift */; };
|
1CF65AAA2A452D9C0042FFBD /* RegisteredUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A462A39FB6C0042FFBD /* RegisteredUser.swift */; };
|
||||||
1CF65AAB2A452DAC0042FFBD /* PreviewWorkout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A512A3A90A00042FFBD /* PreviewWorkout.swift */; };
|
1CF65AAB2A452DAC0042FFBD /* PreviewData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1CF65A512A3A90A00042FFBD /* PreviewData.swift */; };
|
||||||
1CF65AAC2A452DF50042FFBD /* WorkoutOne.json in Resources */ = {isa = PBXBuildFile; fileRef = 1CF65A492A39FBB10042FFBD /* WorkoutOne.json */; };
|
1CF65AAC2A452DF50042FFBD /* WorkoutOne.json in Resources */ = {isa = PBXBuildFile; fileRef = 1CF65A492A39FBB10042FFBD /* WorkoutOne.json */; };
|
||||||
1CF65AAD2A452DF50042FFBD /* Exercises.json in Resources */ = {isa = PBXBuildFile; fileRef = 1CF65A662A3BFF840042FFBD /* Exercises.json */; };
|
1CF65AAD2A452DF50042FFBD /* Exercises.json in Resources */ = {isa = PBXBuildFile; fileRef = 1CF65A662A3BFF840042FFBD /* Exercises.json */; };
|
||||||
1CF65AAE2A452DF50042FFBD /* AllWorkouts.json in Resources */ = {isa = PBXBuildFile; fileRef = 1CF65A642A3BF6BE0042FFBD /* AllWorkouts.json */; };
|
1CF65AAE2A452DF50042FFBD /* AllWorkouts.json in Resources */ = {isa = PBXBuildFile; fileRef = 1CF65A642A3BF6BE0042FFBD /* AllWorkouts.json */; };
|
||||||
@@ -99,6 +101,7 @@
|
|||||||
1C485C822A489B9C00A6F896 /* CompletedWorkouts.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = CompletedWorkouts.json; sourceTree = "<group>"; };
|
1C485C822A489B9C00A6F896 /* CompletedWorkouts.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = CompletedWorkouts.json; sourceTree = "<group>"; };
|
||||||
1C485C862A4915C400A6F896 /* CreateWorkoutItemPickerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CreateWorkoutItemPickerView.swift; sourceTree = "<group>"; };
|
1C485C862A4915C400A6F896 /* CreateWorkoutItemPickerView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CreateWorkoutItemPickerView.swift; sourceTree = "<group>"; };
|
||||||
1C485C892A492BB400A6F896 /* LoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginView.swift; sourceTree = "<group>"; };
|
1C485C892A492BB400A6F896 /* LoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginView.swift; sourceTree = "<group>"; };
|
||||||
|
1C485C8B2A49D65600A6F896 /* WorkoutHistoryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkoutHistoryView.swift; sourceTree = "<group>"; };
|
||||||
1CF65A222A3972840042FFBD /* Werkout_ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Werkout_ios.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
1CF65A222A3972840042FFBD /* Werkout_ios.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Werkout_ios.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
1CF65A252A3972840042FFBD /* Werkout_iosApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Werkout_iosApp.swift; sourceTree = "<group>"; };
|
1CF65A252A3972840042FFBD /* Werkout_iosApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Werkout_iosApp.swift; sourceTree = "<group>"; };
|
||||||
1CF65A272A3972840042FFBD /* Persistence.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Persistence.swift; sourceTree = "<group>"; };
|
1CF65A272A3972840042FFBD /* Persistence.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Persistence.swift; sourceTree = "<group>"; };
|
||||||
@@ -115,7 +118,7 @@
|
|||||||
1CF65A4B2A39FDA20042FFBD /* WorkoutDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkoutDetailView.swift; sourceTree = "<group>"; };
|
1CF65A4B2A39FDA20042FFBD /* WorkoutDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkoutDetailView.swift; sourceTree = "<group>"; };
|
||||||
1CF65A4D2A39FF200042FFBD /* WorkoutDetailViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkoutDetailViewModel.swift; sourceTree = "<group>"; };
|
1CF65A4D2A39FF200042FFBD /* WorkoutDetailViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WorkoutDetailViewModel.swift; sourceTree = "<group>"; };
|
||||||
1CF65A4F2A3A1EA90042FFBD /* BridgeModule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BridgeModule.swift; sourceTree = "<group>"; };
|
1CF65A4F2A3A1EA90042FFBD /* BridgeModule.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BridgeModule.swift; sourceTree = "<group>"; };
|
||||||
1CF65A512A3A90A00042FFBD /* PreviewWorkout.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreviewWorkout.swift; sourceTree = "<group>"; };
|
1CF65A512A3A90A00042FFBD /* PreviewData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreviewData.swift; sourceTree = "<group>"; };
|
||||||
1CF65A532A3A9A990042FFBD /* Straight_Leg_Sit_Up.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = Straight_Leg_Sit_Up.mp4; sourceTree = "<group>"; };
|
1CF65A532A3A9A990042FFBD /* Straight_Leg_Sit_Up.mp4 */ = {isa = PBXFileReference; lastKnownFileType = file; path = Straight_Leg_Sit_Up.mp4; sourceTree = "<group>"; };
|
||||||
1CF65A552A3AA6800042FFBD /* Werkout-ios-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Werkout-ios-Info.plist"; sourceTree = SOURCE_ROOT; };
|
1CF65A552A3AA6800042FFBD /* Werkout-ios-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Werkout-ios-Info.plist"; sourceTree = SOURCE_ROOT; };
|
||||||
1CF65A562A3BF3830042FFBD /* AllMuscles.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = AllMuscles.json; sourceTree = "<group>"; };
|
1CF65A562A3BF3830042FFBD /* AllMuscles.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = AllMuscles.json; sourceTree = "<group>"; };
|
||||||
@@ -224,7 +227,7 @@
|
|||||||
children = (
|
children = (
|
||||||
1CF65A532A3A9A990042FFBD /* Straight_Leg_Sit_Up.mp4 */,
|
1CF65A532A3A9A990042FFBD /* Straight_Leg_Sit_Up.mp4 */,
|
||||||
1CF65A322A3972850042FFBD /* Preview Assets.xcassets */,
|
1CF65A322A3972850042FFBD /* Preview Assets.xcassets */,
|
||||||
1CF65A512A3A90A00042FFBD /* PreviewWorkout.swift */,
|
1CF65A512A3A90A00042FFBD /* PreviewData.swift */,
|
||||||
);
|
);
|
||||||
path = "Preview Content";
|
path = "Preview Content";
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -263,6 +266,7 @@
|
|||||||
1CF65A8C2A44B7680042FFBD /* CompletedWorkout */,
|
1CF65A8C2A44B7680042FFBD /* CompletedWorkout */,
|
||||||
1CF65A6C2A3F60100042FFBD /* CreateWorkout */,
|
1CF65A6C2A3F60100042FFBD /* CreateWorkout */,
|
||||||
1CF65A882A44B7290042FFBD /* WorkoutDetail */,
|
1CF65A882A44B7290042FFBD /* WorkoutDetail */,
|
||||||
|
1C485C8B2A49D65600A6F896 /* WorkoutHistoryView.swift */,
|
||||||
);
|
);
|
||||||
path = Views;
|
path = Views;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
@@ -483,7 +487,7 @@
|
|||||||
1CF65A4E2A39FF200042FFBD /* WorkoutDetailViewModel.swift in Sources */,
|
1CF65A4E2A39FF200042FFBD /* WorkoutDetailViewModel.swift in Sources */,
|
||||||
1CF65A472A39FB6C0042FFBD /* RegisteredUser.swift in Sources */,
|
1CF65A472A39FB6C0042FFBD /* RegisteredUser.swift in Sources */,
|
||||||
1CF65AB32A452F360042FFBD /* WatchPackageModel.swift in Sources */,
|
1CF65AB32A452F360042FFBD /* WatchPackageModel.swift in Sources */,
|
||||||
1CF65A522A3A90A00042FFBD /* PreviewWorkout.swift in Sources */,
|
1CF65A522A3A90A00042FFBD /* PreviewData.swift in Sources */,
|
||||||
1CF65A852A43E8060042FFBD /* CompletedWorkout.swift in Sources */,
|
1CF65A852A43E8060042FFBD /* CompletedWorkout.swift in Sources */,
|
||||||
1CF65A6E2A3F60480042FFBD /* CreateViewModels.swift in Sources */,
|
1CF65A6E2A3F60480042FFBD /* CreateViewModels.swift in Sources */,
|
||||||
1CF65A4C2A39FDA20042FFBD /* WorkoutDetailView.swift in Sources */,
|
1CF65A4C2A39FDA20042FFBD /* WorkoutDetailView.swift in Sources */,
|
||||||
@@ -499,6 +503,7 @@
|
|||||||
1CF65A832A42347D0042FFBD /* Extensions.swift in Sources */,
|
1CF65A832A42347D0042FFBD /* Extensions.swift in Sources */,
|
||||||
1CF65A282A3972840042FFBD /* Persistence.swift in Sources */,
|
1CF65A282A3972840042FFBD /* Persistence.swift in Sources */,
|
||||||
1CF65ABA2A4894430042FFBD /* UserStore.swift in Sources */,
|
1CF65ABA2A4894430042FFBD /* UserStore.swift in Sources */,
|
||||||
|
1C485C8C2A49D65600A6F896 /* WorkoutHistoryView.swift in Sources */,
|
||||||
1CF65A5B2A3BF4BE0042FFBD /* Equipment.swift in Sources */,
|
1CF65A5B2A3BF4BE0042FFBD /* Equipment.swift in Sources */,
|
||||||
1CF65A452A39FB550042FFBD /* Exercise.swift in Sources */,
|
1CF65A452A39FB550042FFBD /* Exercise.swift in Sources */,
|
||||||
1CF65A612A3BF6020042FFBD /* AddExerciseView.swift in Sources */,
|
1CF65A612A3BF6020042FFBD /* AddExerciseView.swift in Sources */,
|
||||||
@@ -518,7 +523,8 @@
|
|||||||
1CF65AAA2A452D9C0042FFBD /* RegisteredUser.swift in Sources */,
|
1CF65AAA2A452D9C0042FFBD /* RegisteredUser.swift in Sources */,
|
||||||
1CF65AB62A4532940042FFBD /* WatchMainViewModel.swift in Sources */,
|
1CF65AB62A4532940042FFBD /* WatchMainViewModel.swift in Sources */,
|
||||||
1CF65AA72A452D9C0042FFBD /* Muscle.swift in Sources */,
|
1CF65AA72A452D9C0042FFBD /* Muscle.swift in Sources */,
|
||||||
1CF65AAB2A452DAC0042FFBD /* PreviewWorkout.swift in Sources */,
|
1C485C8D2A49D95700A6F896 /* Extensions.swift in Sources */,
|
||||||
|
1CF65AAB2A452DAC0042FFBD /* PreviewData.swift in Sources */,
|
||||||
1CF65AA52A452D9C0042FFBD /* CompletedWorkout.swift in Sources */,
|
1CF65AA52A452D9C0042FFBD /* CompletedWorkout.swift in Sources */,
|
||||||
1CF65AA82A452D9C0042FFBD /* Exercise.swift in Sources */,
|
1CF65AA82A452D9C0042FFBD /* Exercise.swift in Sources */,
|
||||||
1CF65AB42A4530200042FFBD /* WatchPackageModel.swift in Sources */,
|
1CF65AB42A4530200042FFBD /* WatchPackageModel.swift in Sources */,
|
||||||
|
|||||||
@@ -23,13 +23,6 @@ struct ExerciseElement: Codable {
|
|||||||
case weightAudio = "weight_audio"
|
case weightAudio = "weight_audio"
|
||||||
case createdAt = "created_at"
|
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 {
|
struct ExerciseExercise: Codable, Hashable, Identifiable {
|
||||||
@@ -67,11 +60,4 @@ struct ExerciseExercise: Codable, Hashable, Identifiable {
|
|||||||
case muscleGroups = "muscle_groups"
|
case muscleGroups = "muscle_groups"
|
||||||
case synonyms
|
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] {
|
var exercisesSortedByCreated_at: [ExerciseElement] {
|
||||||
return self.exercises.sorted(by: {
|
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() {
|
func setupFakeData() {
|
||||||
allWorkouts = PreviewWorkout.allWorkouts()
|
allWorkouts = PreviewData.allWorkouts()
|
||||||
allMuscles = PreviewWorkout.parseMuscle()
|
allMuscles = PreviewData.parseMuscle()
|
||||||
allEquipment = PreviewWorkout.parseEquipment()
|
allEquipment = PreviewData.parseEquipment()
|
||||||
allExercise = PreviewWorkout.parseExercises()
|
allExercise = PreviewData.parseExercises()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,3 +37,22 @@ extension Date {
|
|||||||
return isoFormatter.string(from: self)
|
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,
|
"difficulty": 1,
|
||||||
"total_time": 112,
|
"total_time": 112,
|
||||||
"workout_start_time": "2015-10-22T19:50:08Z",
|
"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
|
"total_calories": 123.0
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
//
|
//
|
||||||
// PreviewWorkout.swift
|
// PreviewData.swift
|
||||||
// Werkout_ios
|
// Werkout_ios
|
||||||
//
|
//
|
||||||
// Created by Trey Tartt on 6/14/23.
|
// Created by Trey Tartt on 6/14/23.
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
class PreviewWorkout {
|
class PreviewData {
|
||||||
class func workout() -> Workout {
|
class func workout() -> Workout {
|
||||||
let filepath = Bundle.main.path(forResource: "WorkoutOne", ofType: "json")!
|
let filepath = Bundle.main.path(forResource: "WorkoutOne", ofType: "json")!
|
||||||
let data = try! Data(NSData(contentsOfFile: filepath))
|
let data = try! Data(NSData(contentsOfFile: filepath))
|
||||||
@@ -3,9 +3,9 @@
|
|||||||
|
|
||||||
-apple watch
|
-apple watch
|
||||||
|
|
||||||
account view
|
-account view
|
||||||
workout history view
|
workout history view
|
||||||
calorie upload
|
-calorie upload
|
||||||
|
|
||||||
video view on iphone during workout
|
video view on iphone during workout
|
||||||
|
|
||||||
|
|||||||
@@ -51,6 +51,6 @@ class UserStore: ObservableObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func setFakeUser() {
|
func setFakeUser() {
|
||||||
self.registeredUser = PreviewWorkout.parseRegisterdUser()
|
self.registeredUser = PreviewData.parseRegisterdUser()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import SwiftUI
|
|||||||
struct AccountView: View {
|
struct AccountView: View {
|
||||||
@State var completedWorkouts: [CompletedWorkout]?
|
@State var completedWorkouts: [CompletedWorkout]?
|
||||||
@ObservedObject var userStore = UserStore.shared
|
@ObservedObject var userStore = UserStore.shared
|
||||||
|
@State var showCompletedWorkouts: Bool = false
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
VStack(alignment: .leading) {
|
VStack(alignment: .leading) {
|
||||||
@@ -44,6 +45,17 @@ struct AccountView: View {
|
|||||||
Text("Last workout:")
|
Text("Last workout:")
|
||||||
Text(lastWorkout.workoutStartTime)
|
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)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -62,11 +74,17 @@ struct AccountView: View {
|
|||||||
.frame(maxWidth: .infinity)
|
.frame(maxWidth: .infinity)
|
||||||
}
|
}
|
||||||
.padding()
|
.padding()
|
||||||
|
.sheet(isPresented: $showCompletedWorkouts) {
|
||||||
|
if let history = completedWorkouts {
|
||||||
|
WorkoutHistoryView(completedWorkouts: history)
|
||||||
|
}
|
||||||
|
}
|
||||||
.onAppear{
|
.onAppear{
|
||||||
if completedWorkouts == nil {
|
if completedWorkouts == nil {
|
||||||
fetchCompletedWorkouts()
|
fetchCompletedWorkouts()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func fetchCompletedWorkouts() {
|
func fetchCompletedWorkouts() {
|
||||||
@@ -83,7 +101,7 @@ struct AccountView: View {
|
|||||||
|
|
||||||
struct AccountView_Previews: PreviewProvider {
|
struct AccountView_Previews: PreviewProvider {
|
||||||
static let userStore = UserStore.shared
|
static let userStore = UserStore.shared
|
||||||
static let completedWorkouts = PreviewWorkout.parseCompletedWorkouts()
|
static let completedWorkouts = PreviewData.parseCompletedWorkouts()
|
||||||
|
|
||||||
static var previews: some View {
|
static var previews: some View {
|
||||||
AccountView(completedWorkouts: completedWorkouts)
|
AccountView(completedWorkouts: completedWorkouts)
|
||||||
|
|||||||
@@ -90,6 +90,6 @@ struct AllWorkoutsView: View {
|
|||||||
|
|
||||||
struct AllWorkoutsView_Previews: PreviewProvider {
|
struct AllWorkoutsView_Previews: PreviewProvider {
|
||||||
static var previews: some View {
|
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]
|
"heart_rates": [65,65,4,54,232,12]
|
||||||
] as [String : Any]
|
] as [String : Any]
|
||||||
|
|
||||||
static let workout = PreviewWorkout.workout()
|
static let workout = PreviewData.workout()
|
||||||
|
|
||||||
static var previews: some View {
|
static var previews: some View {
|
||||||
CompletedWorkoutView(postData: CompletedWorkoutView_Previews.postBody,
|
CompletedWorkoutView(postData: CompletedWorkoutView_Previews.postBody,
|
||||||
|
|||||||
@@ -147,8 +147,8 @@ struct ExternalWorkoutDetailView_Previews: PreviewProvider {
|
|||||||
static var previews: some View {
|
static var previews: some View {
|
||||||
ExternalWorkoutDetailView().environmentObject({ () -> BridgeModule in
|
ExternalWorkoutDetailView().environmentObject({ () -> BridgeModule in
|
||||||
let envObj = BridgeModule.shared
|
let envObj = BridgeModule.shared
|
||||||
envObj.currentWorkout = PreviewWorkout.workout()
|
envObj.currentWorkout = PreviewData.workout()
|
||||||
bridge.currentExercise = PreviewWorkout.workout().exercisesSortedByCreated_at.first!
|
bridge.currentExercise = PreviewData.workout().exercisesSortedByCreated_at.first!
|
||||||
return envObj
|
return envObj
|
||||||
}() )
|
}() )
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -244,7 +244,7 @@ struct CountdownView: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct WorkoutDetailView_Previews: PreviewProvider {
|
struct WorkoutDetailView_Previews: PreviewProvider {
|
||||||
static let workoutDetail = PreviewWorkout.workout()
|
static let workoutDetail = PreviewData.workout()
|
||||||
static var previews: some View {
|
static var previews: some View {
|
||||||
WorkoutDetailView(viewModel: WorkoutDetailViewModel(workout: WorkoutDetailView_Previews.workoutDetail, status: .showWorkout(WorkoutDetailView_Previews.workoutDetail)))
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
struct ContentView: View {
|
struct ContentView: View {
|
||||||
let exercise = PreviewWorkout.parseEquipment()[2]
|
let exercise = PreviewData.parseEquipment()[2]
|
||||||
@StateObject var vm = WatchMainViewModel()
|
@StateObject var vm = WatchMainViewModel()
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
|
|||||||
Reference in New Issue
Block a user