diff --git a/src/panels/Fahrplan/FahrplanPanel.tsx b/src/panels/Fahrplan/FahrplanPanel.tsx index 4e47efda7e63b4213f2b690ad3937ec3b2357cbe..dfdf3d7ad392a71d52a91940373f0b1c22d88180 100644 --- a/src/panels/Fahrplan/FahrplanPanel.tsx +++ b/src/panels/Fahrplan/FahrplanPanel.tsx @@ -21,8 +21,10 @@ type Route = { stops: { name: string, arrival: Date, - delay?: number - }[] + delay?: number, + countdown: number + }[], + countdown: number } const FahrplanPanel = (props: {definition: FahrplanPanelDefinition}) => { @@ -44,12 +46,11 @@ const FahrplanPanel = (props: {definition: FahrplanPanelDefinition}) => { } // Find existing route with same uid - const existing_ind = newRoutes.findIndex(r => r.uid === departure.lineref.identifier) + const existing_ind = newRoutes.findIndex(r => r.uid === departure.key) // Pre-compute values that will be needed regardless const delay = stringToDelay(departure.delay); const arrival = processArrival(departure.sched_date, departure.time); - console.log(arrival) if(existing_ind === -1) { // If it does not exist, create a new route @@ -61,21 +62,27 @@ const FahrplanPanel = (props: {definition: FahrplanPanelDefinition}) => { { name: departure.internal.stop, arrival, - delay + delay, + countdown: parseInt(departure.countdown) } - ] + ], + countdown: parseInt(departure.countdown) }) } else { // If it doesn't, just add a stop to the existing route newRoutes[existing_ind].stops.push({ name: departure.internal.stop, arrival, - delay: stringToDelay(departure.delay) + delay: stringToDelay(departure.delay), + countdown: parseInt(departure.countdown) }) + + newRoutes[existing_ind].stops = newRoutes[existing_ind].stops.sort((a, b) => a.countdown - b.countdown) } } // Sort the output + newRoutes = newRoutes.sort((a, b) => a.countdown - b.countdown) // Write to the display setRoutes(newRoutes); @@ -150,42 +157,18 @@ async function getStopData(stop: string): Promise<StationResponse> { } function stringToDelay(input: string): number | undefined { - try { - const delay = parseInt(input); - if(delay === 0) { - return undefined; - } - return delay; - } catch (e) { - console.warn("While parsing delay, the string was not interpretable", input); + const delay = parseInt(input); + if(delay === 0) { + return undefined; + } + if(delay === Number.NaN) { + console.warn("While parsing delay, the string was not interpretable as number", input); return undefined; } + return delay; } function processArrival(date: string, time: string): Date { const d_parts = date.split("."); - - console.log(date, time, "to", `${d_parts[2]}-${d_parts[1]}-${d_parts[0]} ${time}`); return new Date(`${d_parts[2]}-${d_parts[1]}-${d_parts[0]} ${time}`); } - -// function sortData(data: any) { -// for (var i = 0; i < data.length; ++i) { -// data[i]['stops'] = data[i]['stops'].sort(sortFn); -// data[i]['timeValue'] = data[i]['stops'][0]['timeValue']; -// } -// return data.sort(sortFn); -// } -// -// function sortFn(a: any, b: any) { -// return a['timeValue'] - b['timeValue']; -// } -// -// function calcDateValue(_year: string, _month: string, _day: string, _hour: string, _minute: string): number { -// const year = parseInt(_year) * 12 * 31 * 24 * 60; -// const month = parseInt(_month) * 31 * 24 * 60; -// const day = parseInt(_day) * 24 * 60; -// const hour = parseInt(_hour) * 60; -// const minute = parseInt(_minute); -// return year+month+day+hour+minute; -// }