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
|
@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)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user