From 68333b809962a84e6f710702d4175ec0e6b34b5c Mon Sep 17 00:00:00 2001 From: Ronni Skansing Date: Wed, 28 Jan 2026 19:07:37 +0100 Subject: [PATCH] Fix complete frontend reload from links in profile menu.\n Improved loading spinner timing Signed-off-by: Ronni Skansing --- .../lib/components/header/MobileMenu.svelte | 2 +- .../lib/components/header/ProfileMenu.svelte | 2 +- frontend/src/lib/store/loading.js | 22 +++++++++++++++---- frontend/src/routes/+layout.svelte | 7 ++++-- 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/frontend/src/lib/components/header/MobileMenu.svelte b/frontend/src/lib/components/header/MobileMenu.svelte index fbecadb..3d2bbf5 100644 --- a/frontend/src/lib/components/header/MobileMenu.svelte +++ b/frontend/src/lib/components/header/MobileMenu.svelte @@ -220,7 +220,7 @@ : 'hover:bg-highlight-blue/30 hover:shadow-md dark:hover:bg-highlight-blue/20'}" class:hidden={shouldHideMenuItem(link.route)} on:click={() => (visible = false)} - target={link.external ? '_blank' : '_self'} + target={link.external ? '_blank' : undefined} rel={link.external ? 'noreferrer' : undefined} href={link.route} > diff --git a/frontend/src/lib/components/header/ProfileMenu.svelte b/frontend/src/lib/components/header/ProfileMenu.svelte index e8c6e96..5e7e88a 100644 --- a/frontend/src/lib/components/header/ProfileMenu.svelte +++ b/frontend/src/lib/components/header/ProfileMenu.svelte @@ -119,7 +119,7 @@ ? 'bg-active-blue shadow-md dark:bg-active-blue' : 'hover:shadow-md hover:bg-highlight-blue/80 dark:hover:bg-highlight-blue/20'}" class:hidden={shouldHideMenuItem(item.route)} - target={item.external ? '_blank' : '_self'} + target={item.external ? '_blank' : undefined} rel={item.external ? 'noreferrer' : undefined} draggable="false" on:click={() => { diff --git a/frontend/src/lib/store/loading.js b/frontend/src/lib/store/loading.js index ade04ab..ff3ab70 100644 --- a/frontend/src/lib/store/loading.js +++ b/frontend/src/lib/store/loading.js @@ -1,11 +1,25 @@ -import { writable } from 'svelte/store'; +import { writable, derived } from 'svelte/store'; -export const isLoading = writable(false); +// manual loading state (from explicit showIsLoading/hideIsLoading calls) +const manualLoading = writable(false); + +// navigation loading state (from sveltekit navigation) +export const navigationLoading = writable(false); + +// combined loading state - true if either manual or navigation is loading +export const isLoading = derived( + [manualLoading, navigationLoading], + ([$manual, $navigation]) => $manual || $navigation +); export const showIsLoading = () => { - isLoading.set(true); + manualLoading.set(true); }; export const hideIsLoading = () => { - isLoading.set(false); + manualLoading.set(false); +}; + +export const setNavigationLoading = (value) => { + navigationLoading.set(value); }; diff --git a/frontend/src/routes/+layout.svelte b/frontend/src/routes/+layout.svelte index 724490f..0076629 100644 --- a/frontend/src/routes/+layout.svelte +++ b/frontend/src/routes/+layout.svelte @@ -1,7 +1,7 @@