From 6e6e655a1977e831abc2a7c089b2f61db46a3e3c Mon Sep 17 00:00:00 2001 From: Fred Boniface Date: Sat, 17 Jun 2023 15:12:30 +0100 Subject: [PATCH] Public-LDB Nearly complete --- src/lib/ldb/public-ldb.svelte | 195 ++++++++++++++++++++++++---------- 1 file changed, 139 insertions(+), 56 deletions(-) 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()}

- - - - - - - - - - - {#each services as service} +
FromToPlat.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} - {/each} -
{service.origin?.location?.locationName || ''}{service.destination?.location?.locationName || ''}{service.platform || '-'}{service.sta || '-'}{service.eta || '-'}{service.std || '-'}{service.etd || '-'}FromToPlat.Sch Arr.Exp Arr.Sch Dep.Exp Dep.
- + {#each services as service} + + {service.origin?.location?.locationName || ''} + {service.destination?.location?.locationName || ''} + {service.platform || '-'} + {parseTime(service.sta).data} + {parseTime(service.eta).data} + {parseTime(service.std).data} + {parseTime(service.etd).data} + + + +

+ 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} + + {/each} + +{/if}