diff --git a/src/lib/ldb/public-ldb.svelte b/src/lib/ldb/public-ldb.svelte index ca81a9e..d01a71b 100644 --- a/src/lib/ldb/public-ldb.svelte +++ b/src/lib/ldb/public-ldb.svelte @@ -7,7 +7,8 @@ let jsonData = null; let services = []; - let dataAge = ""; + let dataAge = null; + let isLoading = true; $: { if (jsonData === null && requestedStation) { @@ -15,20 +16,66 @@ } if (jsonData && jsonData.GetStationBoardResult && jsonData.GetStationBoardResult.generatedAt) { - dataAge = [...jsonData.GetStationBoardResult.generatedAt]; + dataAge = new Date(jsonData.GetStationBoardResult.generatedAt); } if (jsonData && jsonData.GetStationBoardResult && jsonData.GetStationBoardResult.trainServices && jsonData.GetStationBoardResult.trainServices.service) { - services = [...jsonData.GetStationBoardResult.trainServices.service]; + services = jsonData.GetStationBoardResult.trainServices.service; } else { services = []; } } async function fetchData() { - console.log(`Requested Station: ${requestedStation}`); - const data = await fetch(`https://owlboard.info/api/v1/ldb/${requestedStation}`); - jsonData = await data.json(); + isLoading = true; // Set loading state + try { + console.log(`Requested Station: ${requestedStation}`); + const data = await fetch(`https://owlboard.info/api/v1/ldb/${requestedStation}`); + jsonData = await data.json(); + } catch (error) { + console.error("Error fetching data:", error); + } finally { + isLoading = false; // Clear loading state + } + } + + function parseTime(string){ + let output + let change + switch (string) { + case 'Delayed': + output = 'LATE' + change = "changed" + break + case 'Cancelled': + output = 'CANC' + change = "cancelled" + break + case 'On time': + output = 'RT' + change = "" + break + case '': + output = '-' + change = "" + break + case undefined: + output = '-' + change = "" + break + case 'No report': + output = '-' + change = "" + break + case 'undefined': + output = false + change = "" + break + default: + output = string + change = "changed" + } + return {data: output, changed: change} } onMount(() => { @@ -38,58 +85,82 @@ }); -{#if dataAge} - -
Data From: {dataAge}
-{/if} +{#if isLoading} +Loading...
+{:else} +Updated: {dataAge.toLocaleTimeString()}
-From | -To | -Plat. | -Sch Arr. | -Exp Arr. | -Sch Dep. | -Exp Dep. | -
---|
{service.origin?.location?.locationName || ''} | -{service.destination?.location?.locationName || ''} | -{service.platform || '-'} | -{service.sta || '-'} | -{service.eta || '-'} | -{service.std || '-'} | -{service.etd || '-'} | +From | +To | +Plat. | +Sch Arr. | +Exp Arr. | +Sch Dep. | +Exp Dep. |
---|
+ A {service.operator || 'Unknown'} service + {#if service['length']} + with {service['length'] || 'some'} coaches + {/if} +
+ {#if service.delayReason} +{service.delayReason}
+ {/if} + {#if service.cancelReason} +{service.cancelReason}
+ {/if} +