// // EmployeesViewModel.swift // EmployeeDirectory // // Created by Matt Bruce on 1/20/25. // import Foundation @MainActor public class EmployeesViewModel: ObservableObject { private let service: EmployeeService private var serviceMode: EmployeeServiceMode = .production @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(service: EmployeeService = EmployeeService()) { self.service = service } 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 service.getEmployees(serviceMode) // Update published properties self.employees = wrapper.employees self.isLoading = false } catch { // Handle errors self.employees = [] self.isLoading = false self.errorMessage = "An unexpected error occurred, please try to refresh" } } } public func changeMode(to mode: EmployeeServiceMode) { serviceMode = mode fetchEmployees() } }