From b63893963bc1cc50b6e211d29ef6faf89958c32f Mon Sep 17 00:00:00 2001 From: JNNJ <95310130+CodeName-Anti@users.noreply.github.com> Date: Mon, 3 Mar 2025 22:02:56 +0100 Subject: [PATCH 1/3] refactoring(frontend): merge duplicated layouts --- .../{(custom-group) => (root)}/+error.svelte | 0 .../{(custom-group) => (root)}/+layout.svelte | 2 +- .../{(custom-group) => (root)}/+page.svelte | 0 .../[evaNumber]/[type=type]/+error.svelte | 0 .../[evaNumber]/[type=type]/+layout.server.ts | 0 .../[evaNumber]/[type=type]/+layout.svelte | 59 +++++++++---------- .../[evaNumber]/[type=type]/+page.server.ts | 0 .../[evaNumber]/[type=type]/+page.svelte | 0 .../journey/coach-sequence/+error.svelte | 0 .../journey/coach-sequence/+page.server.ts | 0 .../journey/coach-sequence/+page.svelte | 0 .../journey/coach-sequence/+layout.svelte | 12 ---- 12 files changed, 28 insertions(+), 45 deletions(-) rename frontend/src/routes/{(custom-group) => (root)}/+error.svelte (100%) rename frontend/src/routes/{(custom-group) => (root)}/+layout.svelte (79%) rename frontend/src/routes/{(custom-group) => (root)}/+page.svelte (100%) rename frontend/src/routes/{ => (root)}/[evaNumber]/[type=type]/+error.svelte (100%) rename frontend/src/routes/{ => (root)}/[evaNumber]/[type=type]/+layout.server.ts (100%) rename frontend/src/routes/{ => (root)}/[evaNumber]/[type=type]/+layout.svelte (66%) rename frontend/src/routes/{ => (root)}/[evaNumber]/[type=type]/+page.server.ts (100%) rename frontend/src/routes/{ => (root)}/[evaNumber]/[type=type]/+page.svelte (100%) rename frontend/src/routes/{ => (root)}/journey/coach-sequence/+error.svelte (100%) rename frontend/src/routes/{ => (root)}/journey/coach-sequence/+page.server.ts (100%) rename frontend/src/routes/{ => (root)}/journey/coach-sequence/+page.svelte (100%) delete mode 100644 frontend/src/routes/journey/coach-sequence/+layout.svelte diff --git a/frontend/src/routes/(custom-group)/+error.svelte b/frontend/src/routes/(root)/+error.svelte similarity index 100% rename from frontend/src/routes/(custom-group)/+error.svelte rename to frontend/src/routes/(root)/+error.svelte diff --git a/frontend/src/routes/(custom-group)/+layout.svelte b/frontend/src/routes/(root)/+layout.svelte similarity index 79% rename from frontend/src/routes/(custom-group)/+layout.svelte rename to frontend/src/routes/(root)/+layout.svelte index 18820c4..dd23b8b 100644 --- a/frontend/src/routes/(custom-group)/+layout.svelte +++ b/frontend/src/routes/(root)/+layout.svelte @@ -6,7 +6,7 @@ let { children }: LayoutProps = $props(); -
+
{@render children()}
diff --git a/frontend/src/routes/(custom-group)/+page.svelte b/frontend/src/routes/(root)/+page.svelte similarity index 100% rename from frontend/src/routes/(custom-group)/+page.svelte rename to frontend/src/routes/(root)/+page.svelte diff --git a/frontend/src/routes/[evaNumber]/[type=type]/+error.svelte b/frontend/src/routes/(root)/[evaNumber]/[type=type]/+error.svelte similarity index 100% rename from frontend/src/routes/[evaNumber]/[type=type]/+error.svelte rename to frontend/src/routes/(root)/[evaNumber]/[type=type]/+error.svelte diff --git a/frontend/src/routes/[evaNumber]/[type=type]/+layout.server.ts b/frontend/src/routes/(root)/[evaNumber]/[type=type]/+layout.server.ts similarity index 100% rename from frontend/src/routes/[evaNumber]/[type=type]/+layout.server.ts rename to frontend/src/routes/(root)/[evaNumber]/[type=type]/+layout.server.ts diff --git a/frontend/src/routes/[evaNumber]/[type=type]/+layout.svelte b/frontend/src/routes/(root)/[evaNumber]/[type=type]/+layout.svelte similarity index 66% rename from frontend/src/routes/[evaNumber]/[type=type]/+layout.svelte rename to frontend/src/routes/(root)/[evaNumber]/[type=type]/+layout.svelte index 419fe47..893e1b5 100644 --- a/frontend/src/routes/[evaNumber]/[type=type]/+layout.svelte +++ b/frontend/src/routes/(root)/[evaNumber]/[type=type]/+layout.svelte @@ -1,6 +1,5 @@ - -
- - {@render children()} -
From 7c020413932d3d98705006c6eb338b911814bbaa Mon Sep 17 00:00:00 2001 From: JNNJ <95310130+CodeName-Anti@users.noreply.github.com> Date: Thu, 6 Mar 2025 21:32:28 +0100 Subject: [PATCH 2/3] frontend: fix error boundaries and check if evaNumber is numerical --- .../ui/controls/StationSearch.svelte | 2 +- .../components/ui/controls/TimePicker.svelte | 2 +- frontend/src/params/int.ts | 5 ++ frontend/src/routes/(root)/+error.svelte | 2 +- frontend/src/routes/(root)/+layout.svelte | 1 - .../(root)/[...missing]/+page.server.ts | 7 +++ .../(root)/[evaNumber=int]/+page.server.ts | 6 +++ .../[type=type]/+layout.server.ts | 5 +- .../[type=type]/+layout.svelte | 3 +- .../[type=type]/+page.server.ts | 0 .../[type=type]/+page.svelte | 0 .../[evaNumber]/[type=type]/+error.svelte | 12 ----- frontend/src/routes/+layout.svelte | 8 ++++ frontend/src/routes/login/+layout.svelte | 42 ---------------- frontend/src/routes/login/+page.svelte | 48 ++++++++++++++++--- 15 files changed, 75 insertions(+), 68 deletions(-) create mode 100644 frontend/src/params/int.ts create mode 100644 frontend/src/routes/(root)/[...missing]/+page.server.ts create mode 100644 frontend/src/routes/(root)/[evaNumber=int]/+page.server.ts rename frontend/src/routes/(root)/{[evaNumber] => [evaNumber=int]}/[type=type]/+layout.server.ts (79%) rename frontend/src/routes/(root)/{[evaNumber] => [evaNumber=int]}/[type=type]/+layout.svelte (96%) rename frontend/src/routes/(root)/{[evaNumber] => [evaNumber=int]}/[type=type]/+page.server.ts (100%) rename frontend/src/routes/(root)/{[evaNumber] => [evaNumber=int]}/[type=type]/+page.svelte (100%) delete mode 100644 frontend/src/routes/(root)/[evaNumber]/[type=type]/+error.svelte create mode 100644 frontend/src/routes/+layout.svelte delete mode 100644 frontend/src/routes/login/+layout.svelte diff --git a/frontend/src/components/ui/controls/StationSearch.svelte b/frontend/src/components/ui/controls/StationSearch.svelte index b000711..6ed890d 100644 --- a/frontend/src/components/ui/controls/StationSearch.svelte +++ b/frontend/src/components/ui/controls/StationSearch.svelte @@ -2,7 +2,7 @@ import type { Station } from "$models/station"; import { onMount } from "svelte"; import { env } from "$env/dynamic/public"; - import { Search } from "lucide-svelte"; + import Search from "lucide-svelte/icons/search"; let { station = $bindable(undefined) }: { station?: Station } = $props(); let open = $state(false); diff --git a/frontend/src/components/ui/controls/TimePicker.svelte b/frontend/src/components/ui/controls/TimePicker.svelte index ad06205..6333647 100644 --- a/frontend/src/components/ui/controls/TimePicker.svelte +++ b/frontend/src/components/ui/controls/TimePicker.svelte @@ -1,7 +1,7 @@ - -
-
-

- {page.status} -

-

This station does not exist. Maybe you want to try a different?

-
-
diff --git a/frontend/src/routes/+layout.svelte b/frontend/src/routes/+layout.svelte new file mode 100644 index 0000000..4fafff3 --- /dev/null +++ b/frontend/src/routes/+layout.svelte @@ -0,0 +1,8 @@ + + +{@render children()} diff --git a/frontend/src/routes/login/+layout.svelte b/frontend/src/routes/login/+layout.svelte deleted file mode 100644 index 37822dc..0000000 --- a/frontend/src/routes/login/+layout.svelte +++ /dev/null @@ -1,42 +0,0 @@ - - - - -
- - - - -
-
- Login - Please login to continue. -
- - {@render children()} -
-
diff --git a/frontend/src/routes/login/+page.svelte b/frontend/src/routes/login/+page.svelte index 5565dbc..3305761 100644 --- a/frontend/src/routes/login/+page.svelte +++ b/frontend/src/routes/login/+page.svelte @@ -1,12 +1,46 @@ - + + +
+ + + + +
+
+ Login + Please login to continue. +
+ + +
+
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 3/3] 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}