From f2ef34358c59308ac7478328605c3a91c96ed0fc Mon Sep 17 00:00:00 2001 From: JNNJ <95310130+CodeName-Anti@users.noreply.github.com> Date: Thu, 6 Mar 2025 22:35:44 +0100 Subject: [PATCH] frontend: stream journeys to frontend and add loading spinner --- frontend/src/components/Loader.svelte | 72 +++++++++++++++++++ .../[type=type]/+page.server.ts | 4 +- .../[evaNumber=int]/[type=type]/+page.svelte | 44 +++++++----- 3 files changed, 101 insertions(+), 19 deletions(-) create mode 100644 frontend/src/components/Loader.svelte diff --git a/frontend/src/components/Loader.svelte b/frontend/src/components/Loader.svelte new file mode 100644 index 0000000..27160c3 --- /dev/null +++ b/frontend/src/components/Loader.svelte @@ -0,0 +1,72 @@ + + + diff --git a/frontend/src/routes/(root)/[evaNumber=int]/[type=type]/+page.server.ts b/frontend/src/routes/(root)/[evaNumber=int]/[type=type]/+page.server.ts index 95f1e1c..aa66c4f 100644 --- a/frontend/src/routes/(root)/[evaNumber=int]/[type=type]/+page.server.ts +++ b/frontend/src/routes/(root)/[evaNumber=int]/[type=type]/+page.server.ts @@ -4,8 +4,8 @@ import type { Journey } from "$models/connection"; import { DateTime } from "luxon"; import { env } from "$env/dynamic/private"; -export const load: PageServerLoad = async ({ params, url }): Promise<{ journeys: Journey[] }> => { - const journeys = await loadJourneys( +export const load: PageServerLoad = async ({ params, url }): Promise<{ journeys: Promise }> => { + const journeys = loadJourneys( params.evaNumber, params.type, url.searchParams.get("startDate") ?? DateTime.now().set({ second: 0, millisecond: 0 }).toISO() diff --git a/frontend/src/routes/(root)/[evaNumber=int]/[type=type]/+page.svelte b/frontend/src/routes/(root)/[evaNumber=int]/[type=type]/+page.svelte index 111467d..125d284 100644 --- a/frontend/src/routes/(root)/[evaNumber=int]/[type=type]/+page.svelte +++ b/frontend/src/routes/(root)/[evaNumber=int]/[type=type]/+page.svelte @@ -1,13 +1,16 @@ -
- {#each data.journeys as journey} - {#if !matchesFilter(journey)}{:else if journey.connections.length > 1} - - {:else} - - {/if} - {/each} -
- -
- -
+{#await data.journeys} +
+ +
+{:then journeys} +
+ {#each journeys as journey} + {#if !matchesFilter(journey)}{:else if journey.connections.length > 1} + + {:else} + + {/if} + {/each} +
+ +
+ +
+{/await}