aboutsummaryrefslogtreecommitdiff
path: root/src/frontend/app/api/schema.ts
diff options
context:
space:
mode:
authorAriel Costas Guerrero <ariel@costas.dev>2026-03-13 16:49:10 +0100
committerAriel Costas Guerrero <ariel@costas.dev>2026-03-13 16:49:30 +0100
commitee69c62adc5943a1dbd154df5142c0e726bdd317 (patch)
tree5874249173aa249d4d497733ef9fc410e64ab664 /src/frontend/app/api/schema.ts
parent90ad5395f6310da86fee9a29503e58ea74f3078b (diff)
feat(routes): add realtime estimates panel with pattern-aware styling
- New GET /api/stops/estimates endpoint (nano mode: tripId, patternId, estimate, delay only) - useStopEstimates hook wiring estimates to routes-$id stop panel - Pattern-aware styling: dim schedules and estimates from other patterns - Past scheduled departures shown with strikethrough instead of hidden - Persist selected pattern in URL hash (replace navigation, no history push) - Fix planner arrivals using new estimates endpoint
Diffstat (limited to 'src/frontend/app/api/schema.ts')
-rw-r--r--src/frontend/app/api/schema.ts14
1 files changed, 13 insertions, 1 deletions
diff --git a/src/frontend/app/api/schema.ts b/src/frontend/app/api/schema.ts
index 0c55969..f68d413 100644
--- a/src/frontend/app/api/schema.ts
+++ b/src/frontend/app/api/schema.ts
@@ -64,10 +64,16 @@ export const ArrivalSchema = z.object({
shift: ShiftBadgeSchema.optional().nullable(),
shape: z.any().optional().nullable(),
currentPosition: PositionSchema.optional().nullable(),
- stopShapeIndex: z.number().optional().nullable(),
vehicleInformation: VehicleInformationSchema.optional().nullable(),
});
+export const ArrivalEstimateSchema = z.object({
+ tripId: z.string(),
+ patternId: z.string().optional().nullable(),
+ estimate: ArrivalDetailsSchema,
+ delay: DelayBadgeSchema.optional().nullable(),
+});
+
export const StopArrivalsResponseSchema = z.object({
stopCode: z.string(),
stopName: z.string(),
@@ -77,6 +83,10 @@ export const StopArrivalsResponseSchema = z.object({
usage: z.array(BusStopUsagePointSchema).optional().nullable(),
});
+export const StopEstimatesResponseSchema = z.object({
+ arrivals: z.array(ArrivalEstimateSchema),
+});
+
export type RouteInfo = z.infer<typeof RouteInfoSchema>;
export type HeadsignInfo = z.infer<typeof HeadsignInfoSchema>;
export type ArrivalPrecision = z.infer<typeof ArrivalPrecisionSchema>;
@@ -85,8 +95,10 @@ export type DelayBadge = z.infer<typeof DelayBadgeSchema>;
export type ShiftBadge = z.infer<typeof ShiftBadgeSchema>;
export type Position = z.infer<typeof PositionSchema>;
export type Arrival = z.infer<typeof ArrivalSchema>;
+export type ArrivalEstimate = z.infer<typeof ArrivalEstimateSchema>;
export type BusStopUsagePoint = z.infer<typeof BusStopUsagePointSchema>;
export type StopArrivalsResponse = z.infer<typeof StopArrivalsResponseSchema>;
+export type StopEstimatesResponse = z.infer<typeof StopEstimatesResponseSchema>;
// Transit Routes
export const RouteSchema = z.object({