Add initial departure board table 'skeleton', very basic at present

This commit is contained in:
2026-05-10 20:57:50 +01:00
parent 59e8a77d3d
commit 13d22d7b73
8 changed files with 157 additions and 13 deletions

View File

@@ -1,4 +1,7 @@
import type { ApiTrainsTrainDetails } from '@owlboard/owlboard-ts';
export const estClass = (act: any, est: any) => (!act && est ? 'est' : 'act');
/**
* Converts ISO/JSON time to UK-formatted HH:MM string, with optional (default off) seconds
* Ensures Europe/London timezone irrespective of browser timezone.
@@ -49,21 +52,40 @@ export function formatUkDateTime(
.replace(',', '');
}
/**
* Specific type that can handle the TrainDetails.ServiceLocation and the ApiStationsBoard.BoardService types for delay calculation
*/
interface DelayInput {
// Board types
sta?: string | null; std?: string | null;
eta?: string | null; etd?: string | null;
ata?: string | null; atd?: string | null;
// Journey types
pta?: string | null; ptd?: string | null;
wta?: string | null; wtd?: string | null;
atp?: string | null; wtp?: string | null;
etp?: string | null;
}
/**
* Calculates a 'delay' value, in the formats:
* RT, 1E, 7L, etc.
* @param 'Schedule Location' object
* @param 'Schedule Location' or 'Board Service' object
* @returns Delay string for departure boards
*/
export function calculateDelay(loc: ApiTrainsTrainDetails.ServiceLocation): {
export function calculateDelay(loc: DelayInput): {
val: string;
type: string;
} {
const pairs = [
{ actual: loc.atd, sched: loc.ptd ?? loc.wtd },
{ actual: loc.ata, sched: loc.pta ?? loc.wta },
{ actual: loc.atp, sched: loc.wtp }
];
// Departure check (Board: atd/etd vs std | Journey: atd vs ptd/wtd)
{ actual: loc.atd || loc.etd, sched: loc.std || loc.ptd || loc.wtd },
// Arrival check (Board: ata/eta vs sta | Journey: ata vs pta/wta)
{ actual: loc.ata || loc.eta, sched: loc.sta || loc.pta || loc.wta },
// Passing check
{ actual: loc.atp || loc.etp, sched: loc.wtp }
];
const match = pairs.find((p) => p.actual && p.sched);