79 lines
2.8 KiB
Swift
79 lines
2.8 KiB
Swift
//
|
|
// MaintenanceListView.swift
|
|
// Gas Man
|
|
//
|
|
// Created by Kameron Kenny on 3/17/25.
|
|
//
|
|
|
|
|
|
import SwiftUI
|
|
import CoreData
|
|
|
|
struct MaintenanceListView: View {
|
|
@Environment(\.managedObjectContext) private var viewContext
|
|
@FetchRequest(
|
|
sortDescriptors: [NSSortDescriptor(keyPath: \MaintenanceEvent.date, ascending: false)],
|
|
animation: .default)
|
|
private var maintenanceEvents: FetchedResults<MaintenanceEvent>
|
|
|
|
@State private var showingAddMaintenance = false
|
|
|
|
var body: some View {
|
|
NavigationView {
|
|
List {
|
|
ForEach(maintenanceEvents) { event in
|
|
VStack(alignment: .leading, spacing: 4) {
|
|
Text("Date: \(event.date ?? Date(), formatter: dateFormatter)")
|
|
Text("Odometer: \(event.odometer, specifier: "%.0f") miles")
|
|
Text("Type: \(event.eventType)")
|
|
Text("Cost: $\(event.cost, specifier: "%.2f")")
|
|
if let notes = event.notes, !notes.isEmpty {
|
|
Text("Notes: \(notes)")
|
|
}
|
|
if let locationName = event.locationName, !locationName.isEmpty {
|
|
Text("Location: \(locationName)")
|
|
}
|
|
if let locationCoordinates = event.locationCoordinates, !locationCoordinates.isEmpty {
|
|
Text("Coordinates: \(locationCoordinates)")
|
|
}
|
|
}
|
|
}
|
|
.onDelete(perform: deleteMaintenance)
|
|
}
|
|
.navigationTitle("Maintenance")
|
|
.toolbar {
|
|
ToolbarItem(placement: .navigationBarTrailing) {
|
|
Button(action: { showingAddMaintenance.toggle() }) {
|
|
Label("Add Maintenance", systemImage: "plus")
|
|
}
|
|
}
|
|
ToolbarItem(placement: .navigationBarLeading) {
|
|
EditButton()
|
|
}
|
|
}
|
|
.sheet(isPresented: $showingAddMaintenance) {
|
|
AddMaintenanceView().environment(\.managedObjectContext, viewContext)
|
|
}
|
|
}
|
|
}
|
|
|
|
private func deleteMaintenance(offsets: IndexSet) {
|
|
withAnimation {
|
|
offsets.map { maintenanceEvents[$0] }.forEach(viewContext.delete)
|
|
do {
|
|
try viewContext.save()
|
|
} catch {
|
|
let nsError = error as NSError
|
|
fatalError("Unresolved error \(nsError), \(nsError.userInfo)")
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private let dateFormatter: DateFormatter = {
|
|
let formatter = DateFormatter()
|
|
formatter.dateStyle = .short
|
|
formatter.timeStyle = .short
|
|
return formatter
|
|
}()
|