Removed on time column for now

- Added origin and destination columns
This commit is contained in:
Tony Bark 2026-08-23 07:12:40 -04:00
parent f0b71b3762
commit 6f8cca9dc9
3 changed files with 38 additions and 17 deletions

View file

@ -36,7 +36,10 @@ struct AmtrakClient {
} }
func trainNumber(fromTrainId trainId: String) -> String { func trainNumber(fromTrainId trainId: String) -> String {
trainId.split(separator: "-").first.map(String.init) ?? trainId trainId
.split(separator: "-")
.first
.map(String.init) ?? trainId
} }
func fetchStationTrainNumbers(stationCode code: String) async throws -> [String] { func fetchStationTrainNumbers(stationCode code: String) async throws -> [String] {

View file

@ -1,5 +1,17 @@
import SwiftCrossUI import SwiftCrossUI
extension Train {
var displayNumber: String {
let parts = trainID.split(separator: "-", maxSplits: 1)
guard parts.count <= 2 else {
return trainNum
}
return "\(trainNum) (\(parts[1]))"
}
}
struct ContentView: View { struct ContentView: View {
@State var client = AmtrakClient() @State var client = AmtrakClient()
@ -46,8 +58,9 @@ struct ContentView: View {
Table(rows) { Table(rows) {
TableColumn("Number", value: \TrainStatusRow.trainNum) TableColumn("Number", value: \TrainStatusRow.trainNum)
TableColumn("Route", value: \TrainStatusRow.routeName) TableColumn("Route", value: \TrainStatusRow.routeName)
TableColumn("On Time", value: \TrainStatusRow.onTime)
TableColumn("Platform", value: \TrainStatusRow.platform) TableColumn("Platform", value: \TrainStatusRow.platform)
TableColumn("Origin", value: \TrainStatusRow.origin)
TableColumn("Destination", value: \TrainStatusRow.destination)
}.overlay(alignment: .bottomTrailing) { }.overlay(alignment: .bottomTrailing) {
if isLoading { if isLoading {
@ -62,8 +75,8 @@ struct ContentView: View {
Text(errorMessage) Text(errorMessage)
} }
}.padding(10) }.padding(10)
}
}.frame(idealWidth: 500) .frame(idealWidth: 500)
.onAppear { .onAppear {
Task { Task {
await loadTrainStatus(forStationCode: normalizedStationCode) await loadTrainStatus(forStationCode: normalizedStationCode)
@ -104,18 +117,22 @@ struct ContentView: View {
where: { $0.code == code where: { $0.code == code
}, },
)?.platform )?.platform
newRows.append(TrainStatusRow( newRows.append(TrainStatusRow(
trainID: train.trainID, trainID: train.trainID,
trainNum: train.trainNum, trainNum: train.displayNumber,
routeName: train.routeName, routeName: train.routeName,
onTime: train.trainTimely.isEmpty ? "" : train.trainTimely, origin: train.origName,
destination: train.destName,
platform: ( platform: (
platform?.isEmpty == false, platform?.isEmpty == false,
) ? platform! : "", ) ? platform! : "",
)) ))
} }
} }
rows = newRows rows = newRows
} catch let AmtrakError.stationNotFound(code) { } catch let AmtrakError.stationNotFound(code) {
errorMessage = "Station \(code) not found" errorMessage = "Station \(code) not found"
rows = [] rows = []

View file

@ -12,11 +12,11 @@ struct Station: Codable {
struct Train: Codable { struct Train: Codable {
var routeName: String var routeName: String
var trainNum: String var trainNum: String
var trainNumRaw: String var trainNumRaw: String?
var trainID: String var trainID: String
var lat: Double var lat: Double?
var lon: Double var lon: Double?
var trainTimely: String var trainTimely: String?
var iconColor: String? var iconColor: String?
var textColor: String? var textColor: String?
var heading: String? var heading: String?
@ -24,9 +24,9 @@ struct Train: Codable {
var eventTZ: String? var eventTZ: String?
var eventName: String? var eventName: String?
var origCode: String? var origCode: String?
var origName: String? var origName: String
var destCode: String? var destCode: String?
var destName: String? var destName: String
var trainState: String? var trainState: String?
var velocity: Double? var velocity: Double?
var statusMsg: String? var statusMsg: String?
@ -73,6 +73,7 @@ struct TrainStatusRow: Identifiable {
var trainID: String var trainID: String
var trainNum: String var trainNum: String
var routeName: String var routeName: String
var onTime: String var origin: String
var destination: String
var platform: String var platform: String
} }