// // CreateWorkoutView.swift // Werkout_ios // // Created by Trey Tartt on 6/15/23. // import SwiftUI struct CreateWorkoutMainView: View { @StateObject var viewModel = WorkoutViewModel() @State var selectedCreateWorkoutSuperSet: CreateWorkoutSuperSet? @State private var showAddExercise = false private var canSubmit: Bool { viewModel.title.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty == false && viewModel.isUploading == false } var body: some View { VStack(spacing: 0) { VStack(spacing: WerkoutTheme.sm) { TextField("Title", text: $viewModel.title) .werkoutTextField() .padding(.horizontal, WerkoutTheme.md) TextField("Description", text: $viewModel.description) .werkoutTextField() .padding(.horizontal, WerkoutTheme.md) } .padding(.vertical, WerkoutTheme.md) .background(WerkoutTheme.surfaceCard) ScrollViewReader { proxy in List() { ForEach(viewModel.superSets) { superset in CreateWorkoutSupersetView( selectedCreateWorkoutSuperSet: $selectedCreateWorkoutSuperSet, showAddExercise: $showAddExercise, superset: superset, viewModel: viewModel) } .listRowBackground(WerkoutTheme.surfaceCard) // after adding new exercise we have to scroll to the bottom // where the new exercise is sooo keep this so we can scroll // to id 999 Color.clear .frame(height: 1) .accessibilityHidden(true) .id(999) .listRowSeparator(.hidden) .listRowBackground(Color.clear) } .scrollContentBackground(.hidden) .background(WerkoutTheme.background) .onChange(of: viewModel.randomValueForUpdatingValue) { _, _ in withAnimation { proxy.scrollTo(999, anchor: .bottom) } } } .sheet(isPresented: $showAddExercise) { AddExerciseView(selectedExercise: { exercise in if let superset = selectedCreateWorkoutSuperSet { viewModel.addExercise(exercise, to: superset) } selectedCreateWorkoutSuperSet = nil }) } Divider() .overlay(WerkoutTheme.divider) GlassEffectContainer { HStack(spacing: WerkoutTheme.md) { Button(action: { viewModel.addNewSuperset() }) { Label("Add Superset", systemImage: "plus.circle.fill") .font(.system(size: 15, weight: .bold)) .foregroundStyle(WerkoutTheme.textPrimary) .frame(maxWidth: .infinity) .frame(height: 44) } .glassEffect(.regular.interactive()) .tint(WerkoutTheme.accent) .accessibilityLabel("Add superset") .accessibilityHint("Adds a new superset section to this workout") Button(action: { viewModel.uploadWorkout() }, label: { if viewModel.isUploading { ProgressView() .progressViewStyle(.circular) .tint(WerkoutTheme.textPrimary) } else { Text("Done") .font(.system(size: 15, weight: .bold)) .foregroundStyle(WerkoutTheme.textPrimary) } }) .frame(maxWidth: .infinity) .frame(height: 44) .glassEffect(.regular.interactive()) .tint(WerkoutTheme.success) .disabled(canSubmit == false) .accessibilityLabel("Upload workout") .accessibilityHint("Uploads this workout to your account") } .padding(.horizontal, WerkoutTheme.md) .padding(.vertical, WerkoutTheme.sm) } } .background(WerkoutTheme.background) .alert("Create Workout", isPresented: Binding( get: { viewModel.validationError != nil }, set: { _ in viewModel.validationError = nil } )) { Button("OK", role: .cancel) {} } message: { Text(viewModel.validationError ?? "") } } } //struct CreateWorkoutView_Previews: PreviewProvider { // static var previews: some View { // CreateWorkoutView() // } //}