first cut of a view model
Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>
This commit is contained in:
parent
532914d357
commit
26864403fd
52
EmployeeDirectory/ViewModels/EmployeesViewModel.swift
Normal file
52
EmployeeDirectory/ViewModels/EmployeesViewModel.swift
Normal 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()
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user