Settings: move Data source section behind debug flag (debug-only)
This commit is contained in:
@@ -9,7 +9,9 @@ import WidgetKit
|
|||||||
/// times to toggle it — no user-facing switch). The first test button uses
|
/// times to toggle it — no user-facing switch). The first test button uses
|
||||||
/// REAL data (the actual cheapest station for the monitored fuel within the
|
/// REAL data (the actual cheapest station for the monitored fuel within the
|
||||||
/// radius, exactly like a live alert) via `onTestAlert`; the second fires
|
/// radius, exactly like a live alert) via `onTestAlert`; the second fires
|
||||||
/// with no criteria at all.
|
/// with no criteria at all. The Data source section (connection/stations/
|
||||||
|
/// freshness) is debug-only too — moved here so release builds don't expose
|
||||||
|
/// relay plumbing.
|
||||||
struct SettingsView: View {
|
struct SettingsView: View {
|
||||||
@Binding var distanceUnit: DistanceUnit
|
@Binding var distanceUnit: DistanceUnit
|
||||||
/// The fuel + radius currently configured for alerts (mirrors the Alerts
|
/// The fuel + radius currently configured for alerts (mirrors the Alerts
|
||||||
@@ -170,27 +172,6 @@ struct SettingsView: View {
|
|||||||
Text("Each beacon is written by the widget extension at the end of every timeline entry for that intent type (keychain, so it survives free-SideStore installs). A missing SMALL beacon after adding the small widget means its timeline never reaches the provider. Installed widgets come from WidgetCenter.")
|
Text("Each beacon is written by the widget extension at the end of every timeline entry for that intent type (keychain, so it survives free-SideStore installs). A missing SMALL beacon after adding the small widget means its timeline never reaches the provider. Installed widgets come from WidgetCenter.")
|
||||||
}
|
}
|
||||||
.onAppear { refreshWidgetDiag() }
|
.onAppear { refreshWidgetDiag() }
|
||||||
}
|
|
||||||
|
|
||||||
Section {
|
|
||||||
Button {
|
|
||||||
Task { await tipStore.purchase() }
|
|
||||||
} label: {
|
|
||||||
HStack {
|
|
||||||
Label("Leave a tip", systemImage: "heart.fill")
|
|
||||||
.foregroundStyle(.pink)
|
|
||||||
Spacer()
|
|
||||||
Text(tipStore.displayPrice)
|
|
||||||
.foregroundStyle(.secondary)
|
|
||||||
.monospacedDigit()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
.disabled(tipStore.purchaseInProgress)
|
|
||||||
} header: {
|
|
||||||
Text("Support FuelBoard")
|
|
||||||
} footer: {
|
|
||||||
Text("A small tip helps keep the data relay and app development going. Thank you!")
|
|
||||||
}
|
|
||||||
|
|
||||||
Section {
|
Section {
|
||||||
HStack {
|
HStack {
|
||||||
@@ -218,6 +199,27 @@ struct SettingsView: View {
|
|||||||
} footer: {
|
} footer: {
|
||||||
Text("Connection shows whether prices come from the official Fuel Finder API or the CSV mirror. Data updated is the latest price change reported by the GOV.UK server itself.")
|
Text("Connection shows whether prices come from the official Fuel Finder API or the CSV mirror. Data updated is the latest price change reported by the GOV.UK server itself.")
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Section {
|
||||||
|
Button {
|
||||||
|
Task { await tipStore.purchase() }
|
||||||
|
} label: {
|
||||||
|
HStack {
|
||||||
|
Label("Leave a tip", systemImage: "heart.fill")
|
||||||
|
.foregroundStyle(.pink)
|
||||||
|
Spacer()
|
||||||
|
Text(tipStore.displayPrice)
|
||||||
|
.foregroundStyle(.secondary)
|
||||||
|
.monospacedDigit()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.disabled(tipStore.purchaseInProgress)
|
||||||
|
} header: {
|
||||||
|
Text("Support FuelBoard")
|
||||||
|
} footer: {
|
||||||
|
Text("A small tip helps keep the data relay and app development going. Thank you!")
|
||||||
|
}
|
||||||
|
|
||||||
Section {
|
Section {
|
||||||
HStack {
|
HStack {
|
||||||
|
|||||||
Reference in New Issue
Block a user