feat: honour Tap station action in widgets

Small widgetURL and medium list Links route through
StationTapAction via FuelStation.tapDestinationURL: Open map
keeps the Maps URL, More info uses a fuelboard://station
deep link (stationID plus coordinate/name fallback).

Deep link carries fallback coords; ContentView presents the
detail sheet when the station is cached, else the map sheet.
Live Activity detailURL upgraded to the same rich link.
This commit is contained in:
FuelBoard Contributor
2026-09-16 16:15:07 +01:00
parent 465e6cd4d4
commit 20fe251b8e
6 changed files with 80 additions and 15 deletions
+15 -3
View File
@@ -243,9 +243,21 @@ struct ContentView: View {
)
}
.onReceive(NotificationCenter.default.publisher(for: .fuelBoardShowStationDetail)) { note in
guard let id = note.userInfo?["stationID"] as? String,
let station = stations.first(where: { $0.id == id }) else { return }
monitor.pendingDetailStation = station
let info = note.userInfo ?? [:]
if let id = info["stationID"] as? String,
let station = stations.first(where: { $0.id == id }) {
monitor.pendingDetailStation = station
return
}
// Station left the cache fall back to the map sheet so
// the tap still shows something.
if let lat = info["stationLat"] as? Double,
let lng = info["stationLng"] as? Double {
let name = info["stationName"] as? String ?? "Station"
monitor.pendingStationMap = StationMapRequest(
name: name, latitude: lat, longitude: lng
)
}
}
)
}