Merge pull request 'fix: Save to Collection button not responding (#1)' (#3) from fix/issue-1-save-to-collection into master

Reviewed-on: #3
This commit was merged in pull request #3.
This commit is contained in:
2026-04-12 10:14:14 -05:00

View File

@@ -19,6 +19,11 @@ struct IdentificationView: View {
/// Tracks whether we've announced results to avoid duplicate announcements
@State private var hasAnnouncedResults = false
/// Local state to reliably drive the save button's enabled/disabled state.
/// Works around an @Observable + @State tracking issue where computed
/// properties in view modifiers don't always trigger re-renders.
@State private var saveEnabled = false
// MARK: - Scaled Metrics for Dynamic Type
@ScaledMetric(relativeTo: .body) private var closeIconSize: CGFloat = 16
@@ -76,8 +81,10 @@ struct IdentificationView: View {
announceStateChange(from: oldValue, to: newValue)
}
.onChange(of: viewModel.selectedPrediction?.id) { _, _ in
// Force view update when selection changes
// This ensures SwiftUI tracks @Observable property changes correctly
saveEnabled = viewModel.canSaveToCollection
}
.onChange(of: viewModel.saveState) { _, _ in
saveEnabled = viewModel.canSaveToCollection
}
.accessibilityIdentifier(AccessibilityIdentifiers.Identification.identificationView)
.alert("Plant Saved!", isPresented: .init(
@@ -406,12 +413,12 @@ struct IdentificationView: View {
.padding(.vertical, 14)
.background(
RoundedRectangle(cornerRadius: 12)
.fill(viewModel.canSaveToCollection ? Color.accentColor : Color.gray)
.fill(saveEnabled ? Color.accentColor : Color.gray)
)
}
.disabled(!viewModel.canSaveToCollection)
.disabled(!saveEnabled)
.accessibilityLabel(viewModel.saveState == .saving ? "Saving plant" : "Save to Collection")
.accessibilityHint(viewModel.canSaveToCollection ? "Saves the selected plant to your collection" : "Select a plant first")
.accessibilityHint(saveEnabled ? "Saves the selected plant to your collection" : "Select a plant first")
.accessibilityIdentifier(AccessibilityIdentifiers.Identification.saveToCollectionButton)
}
.padding(.horizontal, 20)