This commit is contained in:
2025-08-08 21:09:11 -04:00
parent 2f044c3d9c
commit 7bcc5d656c
38 changed files with 776 additions and 159 deletions

View File

@ -16,7 +16,8 @@ struct SplitDetailView: View {
@State var split: Split
@State private var showingAddSheet: Bool = false
@State private var showingExerciseAddSheet: Bool = false
@State private var showingSplitEditSheet: Bool = false
@State private var itemToEdit: Exercise? = nil
@State private var itemToDelete: Exercise? = nil
@State private var createdWorkout: Workout? = nil
@ -72,24 +73,29 @@ struct SplitDetailView: View {
})
Button {
showingAddSheet = true
showingExerciseAddSheet = true
} label: {
ListItem(title: "Add Exercise")
ListItem(systemName: "plus.circle", title: "Add Exercise")
}
} else {
Text("No exercises added yet.")
Button(action: { showingAddSheet.toggle() }) {
Button(action: { showingExerciseAddSheet.toggle() }) {
ListItem(title: "Add Exercise")
}
}
}
}
Button ("Delete This Split", role: .destructive) {
showingDeleteConfirmation = true
Section {
Button ("Edit") {
showingSplitEditSheet = true
}
Button ("Delete", role: .destructive) {
showingDeleteConfirmation = true
}
}
.tint(.red)
}
.navigationTitle("\(split.name)")
}
@ -122,7 +128,7 @@ struct SplitDetailView: View {
.navigationDestination(item: $createdWorkout, destination: { workout in
WorkoutLogListView(workout: workout)
})
.sheet (isPresented: $showingAddSheet) {
.sheet (isPresented: $showingExerciseAddSheet) {
ExercisePickerView(onExerciseSelected: { exerciseNames in
let splitId = split.persistentModelID
print("exerciseNames: \(exerciseNames)")
@ -164,7 +170,10 @@ struct SplitDetailView: View {
try? modelContext.save()
}, allowMultiSelect: true)
}
.sheet(item: $itemToEdit) { item in
.sheet (isPresented: $showingSplitEditSheet) {
SplitAddEditView(model: split)
}
.sheet (item: $itemToEdit) { item in
ExerciseAddEditView(model: item)
}
.confirmationDialog(

View File

@ -0,0 +1,56 @@
//
// SplitPickerView.swift
// Workouts
//
// Created by rzen on 7/25/25 at 6:24PM.
//
// Copyright 2025 Rouslan Zenetl. All Rights Reserved.
//
import SwiftUI
import SwiftData
struct SplitListView: View {
@Environment(\.modelContext) private var modelContext
@State var splits: [Split]
@State private var allowSorting: Bool = true
var body: some View {
ScrollView {
LazyVGrid(columns: [GridItem(.flexible()), GridItem(.flexible())], spacing: 16) {
SortableForEach($splits, allowReordering: $allowSorting) { split, dragging in
NavigationLink {
SplitDetailView(split: split)
} label: {
SplitItem(
name: split.name,
color: Color.color(from: split.color),
systemImageName: split.systemImage,
exerciseCount: split.exercises?.count ?? 0
)
.overlay(dragging ? Color.white.opacity(0.8) : Color.clear)
}
}
}
.padding()
}
.onAppear(perform: loadSplits)
}
func loadSplits () {
print("Loading splits")
do {
self.splits = try modelContext.fetch(FetchDescriptor<Split>(
sortBy: [
SortDescriptor(\Split.order),
SortDescriptor(\Split.name)
]
))
print("Loaded \(splits.count) splits")
} catch {
print("ERROR: failed to load splits \(error)")
}
}
}

View File

@ -17,54 +17,22 @@ struct SplitsView: View {
@State var splits: [Split] = []
@State private var showingAddSheet: Bool = false
@State private var allowSorting: Bool = true
var body: some View {
NavigationStack {
ScrollView {
LazyVGrid(columns: [GridItem(.flexible()), GridItem(.flexible())], spacing: 16) {
SortableForEach($splits, allowReordering: $allowSorting) { split, dragging in
NavigationLink {
SplitDetailView(split: split)
} label: {
SplitItem(
name: split.name,
color: Color.color(from: split.color),
systemImageName: split.systemImage,
exerciseCount: split.exercises?.count ?? 0
)
.overlay(dragging ? Color.white.opacity(0.8) : Color.clear)
SplitListView(splits: splits)
.navigationTitle("Splits")
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
Button(action: { showingAddSheet.toggle() }) {
Image(systemName: "plus")
}
}
}
.padding()
}
.navigationTitle("Splits")
.onAppear(perform: loadSplits)
.toolbar {
ToolbarItem(placement: .navigationBarTrailing) {
Button(action: { showingAddSheet.toggle() }) {
Image(systemName: "plus")
}
}
}
}
.sheet (isPresented: $showingAddSheet) {
SplitAddEditView(model: Split(name: "New Split"))
}
}
func loadSplits () {
do {
self.splits = try modelContext.fetch(FetchDescriptor<Split>(
sortBy: [
SortDescriptor(\Split.order),
SortDescriptor(\Split.name)
]
))
} catch {
print("ERROR: failed to load splits \(error)")
}
}
}