diff --git a/EmployeeDirectory/ViewModels/EmployeesViewModel.swift b/EmployeeDirectory/ViewModels/EmployeesViewModel.swift new file mode 100644 index 0000000..919cc62 --- /dev/null +++ b/EmployeeDirectory/ViewModels/EmployeesViewModel.swift @@ -0,0 +1,52 @@ +// +// 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() + } +} +