diff --git a/src/lib/ldb/staff/staff-ldb.svelte b/src/lib/ldb/staff/staff-ldb.svelte index 099845b..b54ae9a 100644 --- a/src/lib/ldb/staff/staff-ldb.svelte +++ b/src/lib/ldb/staff/staff-ldb.svelte @@ -3,63 +3,93 @@ export let title = 'Loading...'; import { onMount } from 'svelte'; import AlertBar from '$lib/ldb/nrcc/alert-bar.svelte'; - //import ServiceRow from './service-row.svelte'; import StaffTrainDetail from '$lib/ldb/staff/train-detail.svelte'; - import Reason from '$lib/raw-fetchers/reason.svelte'; import Loading from '$lib/navigation/loading.svelte'; - import Nav from '$lib/navigation/nav.svelte'; import { uuid } from '$lib/stores/uuid'; - import Error from '../../../routes/+error.svelte'; import Island from '$lib/islands/island.svelte'; + import TableGenerator from './table/table-generator.svelte'; - let requestedStation; + let requestedStation = ''; $: requestedStation = station; let jsonData = {}; - let services = [], - busServices = [], - ferryServices = []; - let dataAge = null; + /** + * @type {string | any[]} + */ + let trainServices = []; + /** + * @type {string | any[]} + */ + let busServices = []; + /** + * @type {string | any[]} + */ + let ferryServices = []; + let dataAge = new Date(0); let isLoading = true; let isErr = false; - let errMsg; - let alerts = []; + let errMsg = ''; + let alerts = ['']; let detail = { show: false, rid: '', uid: '', headcode: '' }; $: { + // @ts-ignore if (jsonData?.GetBoardResult?.generatedAt) { + // @ts-ignore dataAge = new Date(jsonData.GetBoardResult.generatedAt); } + // @ts-ignore if (jsonData?.GetBoardResult?.trainServices?.service) { - services = jsonData.GetBoardResult.trainServices.service; + // @ts-ignore + trainServices = ensureArray((trainServices = jsonData.GetBoardResult.trainServices.service)); } else { - services = []; + trainServices = []; } + // @ts-ignore if (jsonData?.GetBoardResult?.busServices?.service) { - busServices = jsonData.GetBoardResult.busServices.service; + // @ts-ignore + busServices = ensureArray((busServices = jsonData.GetBoardResult.busServices.service)); } else { busServices = []; } + // @ts-ignore if (jsonData?.GetBoardResult?.ferryServices?.service) { - ferryServices = jsonData.GetBoardResult.ferryServices.service; + // @ts-ignore + ensureArray((ferryServices = jsonData.GetBoardResult.ferryServices.service)); } else { ferryServices = []; } + // @ts-ignore if (jsonData?.GetBoardResult?.locationName) { + // @ts-ignore title = jsonData.GetBoardResult.locationName; } else { title = 'Loading Board'; } + // @ts-ignore if (jsonData?.GetBoardResult?.nrccMessages) { + // @ts-ignore alerts = processNrcc(jsonData.GetBoardResult?.nrccMessages?.message); + } else { + alerts = []; } } + /** + * @param {any} item + */ + function ensureArray(item) { + if (Array.isArray(item)) { + return item; + } + return [item]; + } + async function fetchData() { isLoading = true; // Set loading state try { @@ -89,148 +119,9 @@ } } - async function generateServiceData(service) { - const timeDetails = await parseTimes(service); - let serviceData = { - from: await parseLocation(service.origin), - to: await parseLocation(service.destination), - length: await getTrainLength(service), - platform: await parsePlatform(service?.platform || 'undefined'), - platformHidden: service?.platformIsHidden === 'true', - schArr: timeDetails.schArr, - expArr: timeDetails.expArr, - schDep: timeDetails.schDep, - expDep: timeDetails.expDep, - isEarlyArr: timeDetails.earArr, - isLateArr: timeDetails.delArr, - isEarlyDep: timeDetails.earDep, - isLateDep: timeDetails.delDep, - isCancelledDep: false, - isCancelled: Boolean(service?.isCancelled), - canArr: timeDetails.canArr, - canDep: timeDetails.canDep, - isDelayed: service?.arrivalType === 'Delayed', - isArrDelayed: service?.arrivalType === 'Delayed', - isDepDelayed: service?.departureType === 'Delayed', - isNonPublic: service?.isPassengerService === 'false' ? true : false - }; - return serviceData; - } - - async function getTrainLength(service) { - if (service?.length) { - return parseInt(service?.length); - } else if (service?.formation?.coaches) { - return service.formation.coaches.coach.length; - } - return null; - } - - async function parseLocation(location) { - if (!Array.isArray(location.location)) { - return location.location?.tiploc; - } - let locations = []; - for (const singleLocation of location?.location) { - locations.push(singleLocation?.tiploc); - } - return locations.join(' & '); - } - - async function parsePlatform(platform) { - if (!platform) { - return '-'; - } - if (platform === 'TBC' || platform == 'undefined') { - return '-'; - } - return { - number: platform - }; - } - - function parseTimes(service) { - let schArr = new Date(service?.sta); - let expArr = new Date(service?.eta || service?.ata); - let schDep = new Date(service?.std); - let expDep = new Date(service?.etd || service?.atd); - let isEarlyArr = false, - isDelayedArr = false, - isArr = false, - canArr = false; - let isEarlyDep = false, - isDelayedDep = false, - isDep = false, - canDep = false; - const timeDifferenceThreshold = 60 * 1000; // 60 seconds in milliseconds - if (expArr - schArr < -timeDifferenceThreshold) { - isEarlyArr = true; - isArr = true; - } else if (expArr - schArr > timeDifferenceThreshold) { - isDelayedArr = true; - isArr = true; - } - - if (expDep - schDep < -timeDifferenceThreshold) { - isEarlyDep = true; - isDep = true; - } else if (expDep - schDep > timeDifferenceThreshold) { - isDelayedDep = true; - isDep = true; - } - let parsedExpArr; - if (expArr instanceof Date && !isNaN(expArr)) { - if (!isEarlyArr && !isDelayedArr) { - parsedExpArr = 'RT'; - } else { - parsedExpArr = parseIndividualTime(expArr); - } - } else if (service.isCancelled === 'true') { - parsedExpArr = 'CANC'; - canArr = true; - } else { - parsedExpArr = '-'; - } - - let parsedExpDep; - if (expDep instanceof Date && !isNaN(expDep)) { - if (!isEarlyDep && !isDelayedDep) { - parsedExpDep = 'RT'; - } else { - parsedExpDep = parseIndividualTime(expDep); - } - } else if (service.isCancelled === 'true') { - parsedExpDep = 'CANC'; - canDep = true; - } else { - parsedExpDep = '-'; - } - return { - schArr: parseIndividualTime(schArr), - expArr: parsedExpArr, - schDep: parseIndividualTime(schDep), - expDep: parsedExpDep, - earArr: isEarlyArr, - delArr: isDelayedArr, - earDep: isEarlyDep, - delDep: isDelayedDep, - canArr: canArr, - canDep: canDep - }; - } - - function parseIndividualTime(input) { - const dt = new Date(input); - const output = dt.toLocaleTimeString([], { - hour: '2-digit', - minute: '2-digit' - }); - if (output !== 'Invalid Date') { - return output; - } - return '-'; - } - + /** + * @param {any} messages + */ function processNrcc(messages) { // Remove newlines and then
tags from input and append to array
let arrMessages;
@@ -247,7 +138,7 @@
return processedMessages;
}
- async function showDetails(rid, uid, tid) {
+ function showDetail(rid='', uid='', tid='') {
detail = {
rid: rid,
uid: uid,
@@ -286,339 +177,45 @@
{#if alerts.length}
Updated: {dataAge.toLocaleTimeString()} - Staff Boards under development | |||||||
- | Arrival | -Departure | -|||||
---|---|---|---|---|---|---|---|
ID | -From | -To | -Plat | -Sch | -Exp | -Sch | -Exp | -
No Scheduled Train Services | |||||||
Loading... | -|||||||
{service.trainid} | -{serviceStats.from} | -{serviceStats.to} | -{serviceStats.platform.number || '-'} | -{serviceStats.schArr} | -{serviceStats.isArrDelayed ? 'LATE' : serviceStats.expArr} | -{serviceStats.schDep} | -{serviceStats.isDepDelayed ? 'LATE' : serviceStats.expDep} | -
- {service.operator}
- {#if serviceStats.length} | {serviceStats.length} carriages{/if}
- - {#if service.cancelReason} - - {/if} - {#if service?.delayReason && !service.isCancelled} - |
- |||||||
Unable to load service | -
- | Arrival | -Departure | -|||||
---|---|---|---|---|---|---|---|
ID | -From | -To | -Plat | -Sch | -Exp | -Sch | -Exp | -
Loading... | -|||||||
{service.trainid} | -{serviceStats.from} | -{serviceStats.to} | -{serviceStats.platform.number || '-'} | -{serviceStats.schArr} | -{serviceStats.isArrDelayed ? 'LATE' : serviceStats.expArr} | -{serviceStats.schDep} | -{serviceStats.isDepDelayed ? 'LATE' : serviceStats.expDep} | -
- {service.operator}
- {#if serviceStats.length} | {serviceStats.length} carriages{/if}
- - {#if service.cancelReason} - |
- |||||||
Unable to load service | -
Data from: {dataAge.toLocaleString([])}
+ {#if trainServices && trainServices.length} +There are no scheduled train services in the next two hours
{/if} - {#if ferryServices.length} -- | Arrival | -Departure | -|||||
---|---|---|---|---|---|---|---|
ID | -From | -To | -Plat | -Sch | -Exp | -Sch | -Exp | -
Loading... | -|||||||
{service.trainid} | -{serviceStats.from} | -{serviceStats.to} | -{serviceStats.platform.number || '-'} | -{serviceStats.schArr} | -{serviceStats.isArrDelayed ? 'LATE' : serviceStats.expArr} | -{serviceStats.schDep} | -{serviceStats.isDepDelayed ? 'LATE' : serviceStats.expDep} | -
- {service.operator}
- {#if serviceStats.length} | {serviceStats.length} carriages{/if}
- - {#if service.cancelReason} - |
- |||||||
Unable to load service | -
+ | Arrival | +Departure | +|||||
---|---|---|---|---|---|---|---|
ID | +From | +To | +Plat | +Sch | +Exp | +Sch | +Exp | +
Loading Service Data... | |||||||
{service.trainid} | +{serviceData.from} | +{serviceData.to} | +{serviceData.platform.number || '-'} | +{serviceData.schArr} | +{serviceData.isArrDelayed ? 'LATE' : serviceData.expArr} | +{serviceData.schDep} | +{serviceData.isDepDelayed ? 'LATE' : serviceData.expDep} | +
+ {service.operator}
+ {#if serviceData.length} | {serviceData.length} carriages{/if}
+ {#if service.delayReason}
+ + + |
+ |||||||
Unable to display service | +
Everything else has moved to the 'More' menu, where you'll find the Reference Code lookup and software details." +
'
' +
- "
You will only see this welcome page again when there are new updates
" + 'You will only see this welcome page again when there are new updates
' ];