added to keep track of oldEmployees
Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>
This commit is contained in:
parent
b9bd3ae310
commit
6280aa42cb
@ -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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user