// // EmployeesViewModel.swift // EmployeeDirectory // // Created by Matt Bruce on 1/20/25. // import Foundation /// ViewModel that will be bound to an Employees model and used /// specifically with the EmployeesViewController. @MainActor public class EmployeesViewModel: ObservableObject { private var employeeService: EmployeeServiceProtocol = EmployeeService() @Published public private(set) var employees: [Employee] = [] @Published public private(set) var errorMessage: String? = nil @Published public private(set) var isLoading: Bool = false public init() {} public func fetchEmployees() { // resetting values out the values before fetching new data errorMessage = nil isLoading = true Task { do { // Fetch employees using the async method let wrapper = try await employeeService.getEmployees() // Update published properties employees = wrapper.employees isLoading = false } catch { // Handle errors employees = [] isLoading = false errorMessage = "An unexpected error occurred, please try to refresh" } } } public func changeService(to employeeService: EmployeeServiceProtocol) { self.employeeService = employeeService fetchEmployees() } }