// // ExercisesListView.swift // Workouts // // Created by rzen on 7/13/25 at 4:30 PM. // // Copyright 2025 Rouslan Zenetl. All Rights Reserved. // import SwiftUI import SwiftData struct ExercisesListView: View { @Environment(\.dismiss) private var dismiss @Environment(\.modelContext) private var modelContext @Query(sort: [SortDescriptor(\ExerciseType.name)]) var groups: [ExerciseType] @State var showingAddSheet = false @State var itemToEdit: Exercise? = nil @State var itemToDelete: Exercise? = nil private func save () { try? modelContext.save() } var body: some View { NavigationStack { Form { ForEach (groups) { group in let items = group.exercises ?? [] let itemCount = items.count if itemCount > 0 { Section (header: Text("\(group.name) (\(itemCount))")) { ForEach (items) { item in ListItem(title: item.name) .swipeActions(edge: .trailing, allowsFullSwipe: false) { Button (role: .destructive) { itemToDelete = item } label: { Label("Delete", systemImage: "trash") } Button { itemToEdit = item } label: { Label("Edit", systemImage: "pencil") } .tint(.indigo) } } } } } } .navigationTitle("Exercises") .toolbar { ToolbarItem(placement: .navigationBarTrailing) { Button(action: { showingAddSheet.toggle() }) { Image(systemName: "plus") } } } .sheet(isPresented: $showingAddSheet) { ExerciseAddEditView() } .sheet(item: $itemToEdit) { item in ExerciseAddEditView(model: item) } .confirmationDialog( "Delete?", isPresented: Binding( get: { itemToDelete != nil }, set: { if !$0 { itemToDelete = nil } } ), titleVisibility: .visible ) { Button("Delete", role: .destructive) { if let itemToDelete = itemToDelete { modelContext.delete(itemToDelete) try? modelContext.save() self.itemToDelete = nil } } Button("Cancel", role: .cancel) { itemToDelete = nil } } message: { Text("Are you sure you want to delete \(itemToDelete?.name ?? "this item")?") } } } }