From 95cbafec5734888eff996708a0754fac146e2baf Mon Sep 17 00:00:00 2001 From: Matt Bruce Date: Tue, 21 Jan 2025 12:12:44 -0600 Subject: [PATCH] added sorting to viewmodel Signed-off-by: Matt Bruce --- .../Services/MockEmployeeService.swift | 20 ++++++++++++------- .../ViewModels/EmployeesViewModel.swift | 7 +++++-- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/EmployeeDirectory/Services/MockEmployeeService.swift b/EmployeeDirectory/Services/MockEmployeeService.swift index 754fdda..29f3c1a 100644 --- a/EmployeeDirectory/Services/MockEmployeeService.swift +++ b/EmployeeDirectory/Services/MockEmployeeService.swift @@ -10,7 +10,9 @@ public class MockEmployeeService: EmployeeServiceProtocol { // MARK: - Properties public static let shared = MockEmployeeService() // Default shared instance private var employees: Employees - + private var sortField: EmployeeSortField = .fullName + private var sortOrder: EmployeeSortOrder = .ascending + // MARK: - Initializer public init() { @@ -30,14 +32,18 @@ public class MockEmployeeService: EmployeeServiceProtocol { public func getEmployees(_ serviceMode: EmployeeServiceMode = .production, page: Int, perPage: Int, - sortField: EmployeeSortField = .team, + sortField: EmployeeSortField = .fullName, sortOrder: EmployeeSortOrder = .ascending) async throws -> Employees { - employees = .init(employees: employees.employees.sorted(by: sortField, with: sortOrder), - total: employees.employees.count, - page: page, - perPage: perPage) - + if sortField != self.sortField || sortOrder != self.sortOrder { + employees = .init(employees: employees.employees.sorted(by: sortField, with: sortOrder), + total: employees.employees.count, + page: page, + perPage: perPage) + self.sortField = sortField + self.sortOrder = sortOrder + } + let totalUsers = employees.employees.count let startIndex = (page - 1) * perPage let endIndex = min(startIndex + perPage, totalUsers) diff --git a/EmployeeDirectory/ViewModels/EmployeesViewModel.swift b/EmployeeDirectory/ViewModels/EmployeesViewModel.swift index 411f5d9..44c483a 100644 --- a/EmployeeDirectory/ViewModels/EmployeesViewModel.swift +++ b/EmployeeDirectory/ViewModels/EmployeesViewModel.swift @@ -12,7 +12,7 @@ import Foundation @MainActor public class EmployeesViewModel: ObservableObject { private var serviceMode: EmployeeServiceMode = .production - + private var employeeService: EmployeeServiceProtocol = MockEmployeeService.shared @Published public private(set) var employees: [Employee] = [] @Published public private(set) var errorMessage: String? = nil @Published public private(set) var isLoading: Bool = false @@ -33,7 +33,10 @@ public class EmployeesViewModel: ObservableObject { Task { do { // 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 if page == 1 {