Files
workouts/Workouts/Views/Settings/MuscleGroups/MuscleGroupsListView.swift
2025-07-25 17:42:25 -04:00

82 lines
2.6 KiB
Swift

//
// MuscleGroupsListView.swift
// Workouts
//
// Created by rzen on 7/13/25 at 12:14 PM.
//
// Copyright 2025 Rouslan Zenetl. All Rights Reserved.
//
import SwiftUI
import SwiftData
struct MuscleGroupsListView: View {
@Environment(\.modelContext) private var modelContext
@Query(sort: [SortDescriptor(\MuscleGroup.name)]) var items: [MuscleGroup]
@State var showingAddSheet = false
@State var itemToEdit: MuscleGroup? = nil
@State var itemToDelete: MuscleGroup? = nil
var body: some View {
Form {
List {
ForEach (items) { item in
ListItem(title: item.name, count: item.muscles?.count)
.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("Muscle Groups")
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
Button(action: {
showingAddSheet.toggle()
}) {
Image(systemName: "plus")
}
}
}
.sheet(isPresented: $showingAddSheet) {
MuscleGroupAddEditView()
}
.sheet(item: $itemToEdit) {item in
MuscleGroupAddEditView(model: item)
}
.confirmationDialog(
"Delete?",
isPresented: Binding<Bool>(
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")?")
}
}
}