Import/export fixes, icon, and graphing
This commit is contained in:
@@ -76,10 +76,10 @@ struct AddAttemptView: View {
|
||||
.onAppear {
|
||||
setupInitialValues()
|
||||
}
|
||||
.onChange(of: selectedClimbType) { _ in
|
||||
.onChange(of: selectedClimbType) {
|
||||
updateDifficultySystem()
|
||||
}
|
||||
.onChange(of: selectedDifficultySystem) { _ in
|
||||
.onChange(of: selectedDifficultySystem) {
|
||||
resetGradeIfNeeded()
|
||||
}
|
||||
}
|
||||
@@ -182,8 +182,12 @@ struct AddAttemptView: View {
|
||||
}
|
||||
|
||||
if selectedDifficultySystem == .custom {
|
||||
TextField("Grade (Required)", text: $newProblemGrade)
|
||||
TextField("Grade (Required - numbers only)", text: $newProblemGrade)
|
||||
.keyboardType(.numberPad)
|
||||
.onChange(of: newProblemGrade) {
|
||||
// Filter out non-numeric characters
|
||||
newProblemGrade = newProblemGrade.filter { $0.isNumber }
|
||||
}
|
||||
} else {
|
||||
VStack(alignment: .leading, spacing: 8) {
|
||||
Text("Grade (Required)")
|
||||
@@ -526,7 +530,7 @@ struct EditAttemptView: View {
|
||||
}
|
||||
|
||||
private func updateAttempt() {
|
||||
guard let problem = selectedProblem else { return }
|
||||
guard selectedProblem != nil else { return }
|
||||
|
||||
let updatedAttempt = attempt.updated(
|
||||
result: selectedResult,
|
||||
|
||||
@@ -67,7 +67,7 @@ struct AddEditGymView: View {
|
||||
.onAppear {
|
||||
loadExistingGym()
|
||||
}
|
||||
.onChange(of: selectedClimbTypes) { _ in
|
||||
.onChange(of: selectedClimbTypes) {
|
||||
updateAvailableDifficultySystems()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -95,16 +95,16 @@ struct AddEditProblemView: View {
|
||||
loadExistingProblem()
|
||||
setupInitialGym()
|
||||
}
|
||||
.onChange(of: selectedGym) { _ in
|
||||
.onChange(of: selectedGym) {
|
||||
updateAvailableOptions()
|
||||
}
|
||||
.onChange(of: selectedClimbType) { _ in
|
||||
.onChange(of: selectedClimbType) {
|
||||
updateDifficultySystem()
|
||||
}
|
||||
.onChange(of: selectedDifficultySystem) { _ in
|
||||
.onChange(of: selectedDifficultySystem) {
|
||||
resetGradeIfNeeded()
|
||||
}
|
||||
.onChange(of: selectedPhotos) { _ in
|
||||
.onChange(of: selectedPhotos) {
|
||||
Task {
|
||||
await loadSelectedPhotos()
|
||||
}
|
||||
@@ -171,7 +171,7 @@ struct AddEditProblemView: View {
|
||||
|
||||
@ViewBuilder
|
||||
private func ClimbTypeSection() -> some View {
|
||||
if let gym = selectedGym {
|
||||
if selectedGym != nil {
|
||||
Section("Climb Type") {
|
||||
ForEach(availableClimbTypes, id: \.self) { climbType in
|
||||
HStack {
|
||||
@@ -227,8 +227,13 @@ struct AddEditProblemView: View {
|
||||
.font(.headline)
|
||||
|
||||
if selectedDifficultySystem == .custom || availableGrades.isEmpty {
|
||||
TextField("Enter custom grade", text: $difficultyGrade)
|
||||
TextField("Enter custom grade (numbers only)", text: $difficultyGrade)
|
||||
.textFieldStyle(.roundedBorder)
|
||||
.keyboardType(.numberPad)
|
||||
.onChange(of: difficultyGrade) {
|
||||
// Filter out non-numeric characters
|
||||
difficultyGrade = difficultyGrade.filter { $0.isNumber }
|
||||
}
|
||||
} else {
|
||||
Menu {
|
||||
if !difficultyGrade.isEmpty {
|
||||
|
||||
Reference in New Issue
Block a user