added sorting to viewmodel
Signed-off-by: Matt Bruce <mbrucedogs@gmail.com>
This commit is contained in:
parent
285b448bce
commit
95cbafec57
@ -10,7 +10,9 @@ public class MockEmployeeService: EmployeeServiceProtocol {
|
|||||||
// MARK: - Properties
|
// MARK: - Properties
|
||||||
public static let shared = MockEmployeeService() // Default shared instance
|
public static let shared = MockEmployeeService() // Default shared instance
|
||||||
private var employees: Employees
|
private var employees: Employees
|
||||||
|
private var sortField: EmployeeSortField = .fullName
|
||||||
|
private var sortOrder: EmployeeSortOrder = .ascending
|
||||||
|
|
||||||
// MARK: - Initializer
|
// MARK: - Initializer
|
||||||
|
|
||||||
public init() {
|
public init() {
|
||||||
@ -30,14 +32,18 @@ public class MockEmployeeService: EmployeeServiceProtocol {
|
|||||||
|
|
||||||
public func getEmployees(_ serviceMode: EmployeeServiceMode = .production,
|
public func getEmployees(_ serviceMode: EmployeeServiceMode = .production,
|
||||||
page: Int, perPage: Int,
|
page: Int, perPage: Int,
|
||||||
sortField: EmployeeSortField = .team,
|
sortField: EmployeeSortField = .fullName,
|
||||||
sortOrder: EmployeeSortOrder = .ascending) async throws -> Employees {
|
sortOrder: EmployeeSortOrder = .ascending) async throws -> Employees {
|
||||||
|
|
||||||
employees = .init(employees: employees.employees.sorted(by: sortField, with: sortOrder),
|
if sortField != self.sortField || sortOrder != self.sortOrder {
|
||||||
total: employees.employees.count,
|
employees = .init(employees: employees.employees.sorted(by: sortField, with: sortOrder),
|
||||||
page: page,
|
total: employees.employees.count,
|
||||||
perPage: perPage)
|
page: page,
|
||||||
|
perPage: perPage)
|
||||||
|
self.sortField = sortField
|
||||||
|
self.sortOrder = sortOrder
|
||||||
|
}
|
||||||
|
|
||||||
let totalUsers = employees.employees.count
|
let totalUsers = employees.employees.count
|
||||||
let startIndex = (page - 1) * perPage
|
let startIndex = (page - 1) * perPage
|
||||||
let endIndex = min(startIndex + perPage, totalUsers)
|
let endIndex = min(startIndex + perPage, totalUsers)
|
||||||
|
|||||||
@ -12,7 +12,7 @@ import Foundation
|
|||||||
@MainActor
|
@MainActor
|
||||||
public class EmployeesViewModel: ObservableObject {
|
public class EmployeesViewModel: ObservableObject {
|
||||||
private var serviceMode: EmployeeServiceMode = .production
|
private var serviceMode: EmployeeServiceMode = .production
|
||||||
|
private var employeeService: EmployeeServiceProtocol = MockEmployeeService.shared
|
||||||
@Published public private(set) var employees: [Employee] = []
|
@Published public private(set) var employees: [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
|
||||||
@ -33,7 +33,10 @@ public class EmployeesViewModel: ObservableObject {
|
|||||||
Task {
|
Task {
|
||||||
do {
|
do {
|
||||||
// Fetch employees using the paginated API
|
// Fetch employees using the paginated API
|
||||||
let wrapper = try await MockEmployeeService.shared.getEmployees(.empty ,page: page, perPage: perPage)
|
let wrapper = try await employeeService.getEmployees(serviceMode, page: page,
|
||||||
|
perPage: perPage,
|
||||||
|
sortField: .employeeType,
|
||||||
|
sortOrder: .ascending)
|
||||||
|
|
||||||
// Update published properties
|
// Update published properties
|
||||||
if page == 1 {
|
if page == 1 {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user