block-employee-directory/EmployeeDirectory/ViewModels/EmployeesViewModel.swift
Matt Bruce 0f9515b90b refactored out passing service mode
Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>
2025-01-21 14:12:07 -06:00

52 lines
1.4 KiB
Swift

//
// 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()
}
}