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}
+