How Best Value works: its own sheet, opened from the Key sheet and More info sheet

The explanation used to be a section inside the Key sheet. It is a standalone
HowBestValueSheet now, opened from a tappable row with a chevron: at the bottom of
the Key sheet, and at the bottom of the More info sheet below the Best Value card.

Gating: the More info row sits INSIDE the same `if let fuelSavings` as the card it
follows, so it disappears with the feature. Verified with Best Value toggled off in
Settings: the More info sheet then shows neither the card nor the row. The Key
sheet row is deliberately ungated — that sheet is the legend and is reachable
whatever the feature is doing.

Copy is unchanged: the same Localizable.strings strings are reused, and the old
section header became the sheet's title. A DEBUG-only `-showBestValueInfo` hook
opens the sheet without a tap.
This commit is contained in:
FuelBoard Contributor
2026-10-14 14:37:18 +01:00
parent 78b43ce6d7
commit 93df94ddc9
3 changed files with 106 additions and 9 deletions
+12
View File
@@ -33,6 +33,9 @@ struct StationDetailView: View {
/// the caption fades out on its own.
@State private var showingCopied = false
@State private var copyResetTask: Task<Void, Never>?
/// The "How Best Value works" sheet, opened from the row at the bottom of the
/// Best Value card (the Key sheet opens the same shared view).
@State private var showBestValueInfo = false
private let reportIssueURL = URL(string: "https://www.gov.uk/guidance/report-an-error-in-fuel-prices-or-forecourt-details")!
@@ -240,6 +243,13 @@ struct StationDetailView: View {
} header: {
Text("Best Value")
}
// The explanation lives in its own sheet now, opened from this
// row. The row sits INSIDE the `if let` so it carries the same
// gate as the card above: no card, no row.
Section {
HowBestValueRow { showBestValueInfo = true }
}
}
#if DEBUG
@@ -265,6 +275,8 @@ struct StationDetailView: View {
} message: {
Text("Are you sure you want to report an error in fuel prices or forecourt details? This will open in your chosen browser.")
}
// Nested sheet: the More info sheet stays put behind the explanation.
.sheet(isPresented: $showBestValueInfo) { HowBestValueSheet() }
.toolbar {
ToolbarItem(placement: .cancellationAction) {
Button("Done") { dismiss() }