Further work on staff LDB

This commit is contained in:
Fred Boniface 2023-07-06 12:26:57 +01:00
parent 9dae8671ff
commit aa004155d4

View File

@ -2,6 +2,7 @@
export let station = ""; export let station = "";
export let title = "Loading..."; export let title = "Loading...";
import { onMount } from 'svelte' import { onMount } from 'svelte'
import AlertBar from './alert-bar.svelte';
import StaffTrainDetail from '$lib/ldb/staff-train-detail.svelte'; import StaffTrainDetail from '$lib/ldb/staff-train-detail.svelte';
import Loading from '$lib/navigation/loading.svelte'; import Loading from '$lib/navigation/loading.svelte';
import Nav from '$lib/navigation/nav.svelte'; import Nav from '$lib/navigation/nav.svelte';
@ -14,6 +15,7 @@
let services = []; let services = [];
let dataAge = null; let dataAge = null;
let isLoading = true; let isLoading = true;
let alerts = [];
$: { $: {
if (jsonData?.GetBoardResult?.generatedAt) { if (jsonData?.GetBoardResult?.generatedAt) {
@ -31,6 +33,10 @@
} else { } else {
title = "Loading Board" title = "Loading Board"
} }
if (jsonData?.GetBoardResult?.nrccMessages) {
alerts = processNrcc(jsonData.GetBoardResult?.nrccMessages?.message)
}
} }
async function fetchData() { async function fetchData() {
@ -66,15 +72,43 @@
return '-' return '-'
} }
async function getReasonCodeData(code) {
const url = `https://owlboard.info/api/v2/ref/reasonCode/${code}`
const res = await fetch(url);
const json = await res.json();
return json
}
async function generateServiceStats(service) {
return;
}
function processNrcc(messages) { // Remove newlines and then <p> tags from input and append to array
let arrMessages;
if (!Array.isArray(messages)) {
arrMessages = [messages];
} else {
arrMessages = messages;
}
let processedMessages = [];
for (const message of arrMessages) {
const msgText = message.xhtmlMessage
processedMessages.push(msgText.replace(/[\n\r]/g, '').replace(/<\/?p[^>]*>/g, ''));
}
return processedMessages;
}
onMount(() => { onMount(() => {
fetchData(); fetchData();
}); });
</script> </script>
<p>Staff Boards not yet implemented</p> <p>Staff Boards not yet fully implemented</p>
{#if isLoading} {#if isLoading}
<Loading /> <Loading />
{:else} {:else}
{#if alerts.length}
<AlertBar {alerts} />
{/if}
<p id="timestamp">Updated: {dataAge.toLocaleTimeString()}</p> <p id="timestamp">Updated: {dataAge.toLocaleTimeString()}</p>
<table> <table>
<tr> <tr>
@ -88,25 +122,42 @@
<th class="time">Exp Dep</th> <th class="time">Exp Dep</th>
</tr> </tr>
{#each services as service} {#each services as service}
{#await generateServiceStats(service)}
<tr>
<td colspan="8">
Loading...
</td>
</tr>
{:then serviceStats}
<!-- Await a 'Generate Stats' function here which can evaluate the data and provide
relevant BOOLs like isCancelled, isEarly, isLate, isNonPassenger and calculate train length
where 'length' is not provided but 'formation' is. -->
<tr> <tr>
<th class="id id-data data">{service.trainid}</th> <th class="id id-data data">{service.trainid}</th>
<th class="from from-data data">{service.origin.location.tiploc}</th> <th class="from from-data data">{service.origin.location.tiploc}</th> <!-- From and To fields are arrays if more than one origin/destination is served -->
<th class="to to-data data">{service.destination.location.tiploc}</th> <th class="to to-data data">{service.destination.location.tiploc}</th>
<th class="plat plat-data data">{service.platform || '-'}</th> <th class="plat plat-data data">{service.platform || '-'}</th>
<th class="time time-data data">{parseDateTime(service.sta)}</th> <th class="time time-data data">{parseDateTime(service.sta)}</th>
<th class="time time-data data">{parseDateTime(service.ata || service.eta)}</th> <th class="time time-data data">{parseDateTime(service.ata || service.eta)}</th>
<th class="time time-data data">{parseDateTime(service.std)}</th> <th class="time time-data data">{parseDateTime(service.std)}</th>
{#if service.isCancelled}
<th class="time time-data data can-time">CAN</th>
{:else}
<th class="time time-data data">{parseDateTime(service.atd || service.etd)}</th> <th class="time time-data data">{parseDateTime(service.atd || service.etd)}</th>
{/if}
</tr> </tr>
<tr class="text-row"> <tr class="text-row">
<td colspan="8" class="text-data"> <td colspan="8" class="text-data">
{service.operator} {service.operator} {#if service.length} - {service.length} carriages{/if}
<br>
{#if service.isCancelled}
{#await getReasonCodeData(service.cancelReason)}
This train has been cancelled
{:then reasonCode}
{reasonCode[0].cancReason}
<br>
{/await}
{/if}
</td> </td>
</tr> </tr>
{/await}
{/each} {/each}
</table> </table>
{/if} {/if}
@ -143,6 +194,7 @@
.text-data { .text-data {
text-align: left; text-align: left;
color: cyan; color: cyan;
font-size: smaller;
} }
.can-time { .can-time {