From 6280aa42cb42f66e62a727b5aa47c4bf4bb9d3d8 Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Tue, 21 Jan 2025 13:21:13 -0600 Subject: [PATCH] added to keep track of oldEmployees Signed-off-by: Matt Bruce --- .../ViewModels/EmployeesViewModel.swift | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/EmployeeDirectory/ViewModels/EmployeesViewModel.swift b/EmployeeDirectory/ViewModels/EmployeesViewModel.swift index df3fd2d..ec3d93f 100644 --- a/EmployeeDirectory/ViewModels/EmployeesViewModel.swift +++ b/EmployeeDirectory/ViewModels/EmployeesViewModel.swift @@ -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)