From 85a1efb1f4ab3cc015df14ce9a449bf0426d7e43 Mon Sep 17 00:00:00 2001 From: Chinu9891 <115806284+Chinu9891@users.noreply.github.com> Date: Thu, 14 Aug 2025 20:28:52 +0100 Subject: [PATCH] Update +page.svelte Added snapshot functionality that retains the search parameters when leaving the page. They are restored if the user navigates back via a back button. --- src/routes/app/search/+page.svelte | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/src/routes/app/search/+page.svelte b/src/routes/app/search/+page.svelte index f40f22c..46d75cf 100644 --- a/src/routes/app/search/+page.svelte +++ b/src/routes/app/search/+page.svelte @@ -6,11 +6,11 @@ import { onDestroy, tick } from 'svelte' import MagnifyingGlass from 'svelte-radix/MagnifyingGlass.svelte' import { toast } from 'svelte-sonner' - import { genres, years, seasons, formats, status, sort, onlist } from './values' import type { Search } from '$lib/modules/anilist/queries' import type { VariablesOf } from 'gql.tada' + import type { Snapshot } from '../$types' import { replaceState } from '$app/navigation' import { page } from '$app/stores' @@ -98,6 +98,21 @@ onList: [] as format[] } + // take a 'snapshot' of the latest search right before leaving the page + // latest search is restored if user clicks back + export const snapshot: Snapshot = { + capture: () => ({ + search: search, + inputText: inputText, + }), + restore: (value) => { + if (value) { + search = value.search; + inputText = value.inputText; + } + } + }; + let pageNumber = 1 let inputText = '' @@ -122,7 +137,7 @@ trace = undefined } - let media: Array> = [] + let media: Array> = []; // these are required, because #each key re-renders when the array changes, this doesnt repaint the ui, but re-triggers any active subscriptions // and this re-runs the anilist queries as @@ -132,9 +147,9 @@ // handlers - function searchChanged (s: typeof search) { - pageNumber = 1 - media = [searchQuery(filterEmpty(s), 1)] + function searchChanged(s: typeof search) { + pageNumber = 1; + media = [searchQuery(filterEmpty(s), 1)]; } function searchQuery (filter: Partial, page: number) { @@ -234,7 +249,7 @@ let pressed = false -
+
@@ -319,7 +334,9 @@ {/each}
+
+
{#each media as query, i (i)} {#if trace} @@ -329,4 +346,5 @@ {/if} {/each}
+