first cut of a view model

Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>
This commit is contained in:
Matt Bruce 2025-01-20 18:08:37 -06:00
parent 532914d357
commit 26864403fd

View File

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