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