add ModelContainerPreview conecept, move SampleData, fix Exercise, ExerciseUnit, ExerciseType
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
//
|
||||
// SampleData+Exercise.swift
|
||||
// WorkoutsPlus
|
||||
//
|
||||
// Created by Felix Förtsch on 13.11.24.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
extension Exercise {
|
||||
static let sampleDataRecommendedRoutine: [Exercise] = [
|
||||
Exercise("Shoulder Band Warm-up"),
|
||||
Exercise("Squat Sky Reaches"),
|
||||
Exercise("GMB Wrist Prep"),
|
||||
Exercise("Dead Bugs"),
|
||||
Exercise("Pull-up Progression"),
|
||||
Exercise("Dip Progression"),
|
||||
Exercise("Squat Progression"),
|
||||
Exercise("Hinge Progression"),
|
||||
Exercise("Row Progression"),
|
||||
Exercise("Push-up Progression"),
|
||||
Exercise("Handstand Practice"),
|
||||
Exercise("Support Practice")
|
||||
]
|
||||
|
||||
static let sampleDataRings: [Exercise] = [
|
||||
Exercise("Dips"),
|
||||
Exercise("Chin-ups"),
|
||||
Exercise("Push-ups"),
|
||||
Exercise("Inverted Rows"),
|
||||
Exercise("Hanging Knee Raises"),
|
||||
Exercise("Pistol Squats"),
|
||||
Exercise("Hanging Leg Curls"),
|
||||
Exercise("Sissy Squats")
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
//
|
||||
// SampleData+ExerciseType.swift
|
||||
// WorkoutsPlus
|
||||
//
|
||||
// Created by Felix Förtsch on 13.11.24.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
extension ExerciseType {
|
||||
static let sampleData = [
|
||||
ExerciseType("Kilograms"),
|
||||
ExerciseType("Kilometers"),
|
||||
ExerciseType("Meters"),
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
//
|
||||
// SampleData+ExerciseUnit.swift
|
||||
// WorkoutsPlus
|
||||
//
|
||||
// Created by Felix Förtsch on 13.11.24.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
extension ExerciseUnit {
|
||||
static let sampleData = [
|
||||
ExerciseUnit("Kilograms", symbol: "kg"),
|
||||
ExerciseUnit("Kilometers", symbol: "km"),
|
||||
ExerciseUnit("Meters", symbol: "m"),
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
//
|
||||
// SampleData.swift
|
||||
// WorkoutsPlus
|
||||
//
|
||||
// Created by Felix Förtsch on 17.08.24.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
import SwiftData
|
||||
|
||||
// This is taken from the Animals example
|
||||
extension ModelContainer {
|
||||
static var sample: () throws -> ModelContainer = {
|
||||
let schema = WorkoutsPlusApp.swiftDataSchema
|
||||
let configuration = ModelConfiguration(isStoredInMemoryOnly: true)
|
||||
let container = try ModelContainer(for: schema, configurations: [configuration])
|
||||
Task { @MainActor in
|
||||
SampleData.insertSampleData(into: container.mainContext)
|
||||
}
|
||||
return container
|
||||
}
|
||||
}
|
||||
|
||||
@MainActor // With your annotation, you’re declaring that all code in this class must run on the main actor, including access to the mainContext property. Since all the SwiftUI code in an app runs on the main actor by default, you’ve satisfied the condition.
|
||||
class SampleData {
|
||||
static let shared = SampleData()
|
||||
|
||||
let modelContainer: ModelContainer
|
||||
|
||||
var context: ModelContext {
|
||||
modelContainer.mainContext
|
||||
}
|
||||
|
||||
private init() {
|
||||
let schema = WorkoutsPlusApp.swiftDataSchema
|
||||
let modelConfiguration = ModelConfiguration(schema: schema, isStoredInMemoryOnly: true)
|
||||
|
||||
do {
|
||||
modelContainer = try ModelContainer(for: schema, configurations: [modelConfiguration])
|
||||
SampleData.insertSampleData(into: context)
|
||||
} catch {
|
||||
fatalError("Could not create ModelContainer: \(error)")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
extension SampleData {
|
||||
static func insertSampleData(into context: ModelContext) {
|
||||
for exerciseType in ExerciseType.sampleData {
|
||||
context.insert(exerciseType)
|
||||
}
|
||||
|
||||
for exerciseUnit in ExerciseUnit.sampleData {
|
||||
context.insert(exerciseUnit)
|
||||
}
|
||||
|
||||
for exercise in Exercise.sampleDataRecommendedRoutine {
|
||||
context.insert(exercise)
|
||||
}
|
||||
|
||||
for exercise in Exercise.sampleDataRings {
|
||||
context.insert(exercise)
|
||||
}
|
||||
|
||||
for workoutItem in WorkoutItem.sampleDataRecommendedRoutine {
|
||||
context.insert(workoutItem)
|
||||
}
|
||||
|
||||
for workoutItem in WorkoutItem.sampleDataRings {
|
||||
context.insert(workoutItem)
|
||||
}
|
||||
|
||||
for workout in Workout.sampleData {
|
||||
context.insert(workout)
|
||||
}
|
||||
|
||||
do {
|
||||
try context.save()
|
||||
} catch {
|
||||
print("Sample data context failed to save.")
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user