// // MainViewViewModel.swift // Werkout_ios // // Created by Trey Tartt on 6/14/23. // import Combine import Foundation class WorkoutDetailViewModel: ObservableObject { enum WorkoutDetailViewModelStatus { case loading case showWorkout(Workout) case failed(String) } @Published var status: WorkoutDetailViewModelStatus let isPreview: Bool let workout: Workout init(workout: Workout, status: WorkoutDetailViewModelStatus? = nil, isPreview: Bool) { self.workout = workout self.isPreview = isPreview if let passedStatus = status { self.status = passedStatus } else { self.status = .loading } } func load() { guard case .loading = status else { return } 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): DispatchQueue.main.async { self.status = .failed("Failed to load workout details: \(failure.localizedDescription)") } } }) } }