53 lines
1.4 KiB
Swift
53 lines
1.4 KiB
Swift
//
|
|
// 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()
|
|
}
|
|
}
|
|
|