added to keep track of oldEmployees

Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>
This commit is contained in:
Matt Bruce 2025-01-21 13:21:13 -06:00
parent b9bd3ae310
commit 6280aa42cb

View File

@ -13,8 +13,10 @@ import Combine
@MainActor
public class EmployeesViewModel: ObservableObject {
private var serviceMode: EmployeeServiceMode = .production
private var employeeService: EmployeeServiceProtocol = EmployeeService.shared
private var employeeService: EmployeeServiceProtocol = MockEmployeeService.shared
@Published public private(set) var employees: [Employee] = []
public private(set) var oldEmployees: [Employee] = []
@Published public private(set) var errorMessage: String? = nil
@Published public private(set) var isLoading: Bool = false
@Published public private(set) var hasMorePages: Bool = true
@ -34,6 +36,7 @@ public class EmployeesViewModel: ObservableObject {
/// Observe changes to sortField and sortOrder and debounce fetch calls
private func observeSortingChanges() {
Publishers.CombineLatest($sortField, $sortOrder)
.dropFirst()
.debounce(for: .milliseconds(300), scheduler: DispatchQueue.main)
.sink { [weak self] _, _ in
self?.resetAndFetchEmployees()
@ -55,16 +58,16 @@ public class EmployeesViewModel: ObservableObject {
sortField: sortField,
sortOrder: sortOrder)
totalEmployees = wrapper.total
currentPage = page
hasMorePages = wrapper.employees.count < totalEmployees
// Update published properties
if page == 1 {
employees = wrapper.employees // Replace list for the first page
} else {
employees.append(contentsOf: wrapper.employees) // Append for subsequent pages
}
totalEmployees = wrapper.total
currentPage = page
hasMorePages = employees.count < totalEmployees
} catch {
// Handle errors
errorMessage = "An unexpected error occurred, please try to refresh."
@ -89,6 +92,7 @@ public class EmployeesViewModel: ObservableObject {
/// Resets the current employee list and fetches data from page 1
private func resetAndFetchEmployees() {
currentPage = 1
oldEmployees = employees
employees = []
hasMorePages = true
fetchEmployees(page: 1)