From 8a8baf7f8f45471c301b636a0f9c3cb15fdebb95 Mon Sep 17 00:00:00 2001 From: John O'Keefe Date: Sat, 21 Mar 2026 13:25:43 -0400 Subject: [PATCH] feat: implement smart watchlist refresh on navigation Added intelligent watchlist refresh mechanism that only refetches data when changes are actually made, preventing unnecessary API calls and improving performance. Changes: - Added watchlistNeedsRefresh store to track when watchlist data has changed - Implemented reactive watcher in App.svelte that uses svelte-spa-router's loc store to detect navigation to home - Set dirty flag in Anime.svelte after successful status updates and entry deletions - Added conditional refresh logic that checks user's primary service (AniList, MAL, or Simkl) - Parallel refresh support for multiple services when logged in This resolves the issue where clicking the logo would cause full page reloads and unnecessary re-authentication checks, while also ensuring watchlist data stays current when users make changes. Technical details: - Uses $loc.location to detect route changes - IIFE pattern for async operations in reactive statements - Only refreshes for logged-in primary services - Flag resets after successful refresh Related to: Header.svelte client-side routing fix --- frontend/src/App.svelte | 95 ++++-- frontend/src/helperComponents/Anime.svelte | 4 + .../GlobalVariablesAndHelperFunctions.svelte | 321 ++++++++++-------- 3 files changed, 238 insertions(+), 182 deletions(-) diff --git a/frontend/src/App.svelte b/frontend/src/App.svelte index d9015ba..8e71712 100644 --- a/frontend/src/App.svelte +++ b/frontend/src/App.svelte @@ -1,42 +1,69 @@
- import('./routes/AnimeRoutePage.svelte'), - conditions: [async () => await CheckIfAniListLoggedIn()], - loadingComponent: Spinner + import("./routes/AnimeRoutePage.svelte"), + conditions: [async () => await CheckIfAniListLoggedIn()], + loadingComponent: Spinner, }), // '*': "Not Found" -}} /> + }} +/> diff --git a/frontend/src/helperComponents/Anime.svelte b/frontend/src/helperComponents/Anime.svelte index 43e4d6a..e6e70cf 100644 --- a/frontend/src/helperComponents/Anime.svelte +++ b/frontend/src/helperComponents/Anime.svelte @@ -6,6 +6,7 @@ malLoggedIn, simklAnime, simklLoggedIn, + watchlistNeedsRefresh, } from "../helperModules/GlobalVariablesAndHelperFunctions.svelte"; import { push } from "svelte-spa-router"; import WebsiteLink from "./WebsiteLink.svelte"; @@ -362,6 +363,7 @@ } finally { submitting.set(false); submitSuccess.set(true); + watchlistNeedsRefresh.set(true); setTimeout(() => submitSuccess.set(false), 2000); } }; @@ -422,6 +424,7 @@ } finally { submitting.set(false); submitSuccess.set(true); + watchlistNeedsRefresh.set(true); setTimeout(() => submitSuccess.set(false), 2000); } }; @@ -702,6 +705,7 @@ Sync Changes