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

80 lines
2.7 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 MusclesListView: View {
@Environment(\.dismiss) private var dismiss
@Environment(\.modelContext) private var modelContext
@Query(sort: [SortDescriptor(\MuscleGroup.name)]) var groups: [MuscleGroup]
@State var itemToEdit: Muscle? = nil
@State var itemToDelete: Muscle? = nil
private func save () {
try? modelContext.save()
}
var body: some View {
NavigationStack {
Form {
ForEach (groups) { group in
Section (header: Text("\(group.name) (\(group.muscles?.count ?? 0))")) {
let items = group.muscles ?? []
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("Muscles")
.sheet(item: $itemToEdit) { item in
MuscleAddEditView(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")?")
}
}
}
}