EmployeeDirectory-SwiftUI/EmployeeDirectory/Views/EmployeeListView.swift
2025-03-06 14:24:33 -06:00

54 lines
1.6 KiB
Swift

//
// 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 {
//build out dynamic rows first
ForEach(viewModel.employees, id: \.id) { employee in
NavigationLink(destination: EmployeeDetailsView(viewModel: .init(employee: employee))) {
EmployeeRowView(viewModel: .init(employee: employee))
}
.listRowInsets(.none)
.listRowSeparator(.hidden)
}
//add static row if there is a next page
if viewModel.hasNextPage {
ProgressView()
.frame(maxWidth: .infinity, alignment: .center)
.task {
await viewModel.loadEmployees()
}
}
}
.navigationTitle("Employees")
.listStyle(.insetGrouped)
}
.task {
if viewModel.employees.isEmpty {
await viewModel.loadEmployees()
}
}
}
}
#Preview {
EmployeeListView(viewModel: .init(service: MockEmployeeService()))
}