// // ContentView.swift // EmployeeDirectory // // Created by Matt Bruce on 3/3/25. // import SwiftUI @MainActor struct EmployeeListView: View { @StateObject public var viewModel: EmployeesViewModel // Dependency injection via the initializer. init(viewModel: EmployeesViewModel? = nil) { _viewModel = StateObject(wrappedValue: viewModel ?? .init(service: EmployeeService())) } var body: some View { NavigationView { List { ForEach(viewModel.employees) { employee in NavigationLink(destination: EmployeeDetailsView(viewModel: .init(employee: employee))) { EmployeeRowView(viewModel: .init(employee: employee)) } .listRowSeparator(.hidden) } if viewModel.hasNextPage { ProgressView() .frame(maxWidth: .infinity, alignment: .center) .task { await viewModel.loadEmployees() } } } .navigationTitle("Employees") .listStyle(.plain) } .task { if viewModel.employees.isEmpty { await viewModel.loadEmployees() } } } } #Preview { EmployeeListView(viewModel: .init(service: MockEmployeeService())) }