diff --git a/src/lib/components/Dialogue.svelte b/src/lib/components/Dialogue.svelte index 8e39525..733a537 100644 --- a/src/lib/components/Dialogue.svelte +++ b/src/lib/components/Dialogue.svelte @@ -3,6 +3,13 @@ import { quadInOut } from 'svelte/easing'; export let modalOpen = false; export let fullscreen = false; + + let element: HTMLDivElement; + let y = 0; + + function parseScroll() { + y = element.scrollTop; + } {#if modalOpen} @@ -17,13 +24,16 @@ class="modal" role="dialog" class:fullscreen + class:scrolled={y > 10} aria-modal="true" + bind:this={element} + on:scroll={parseScroll} transition:fade={{ easing: quadInOut, duration: 150 }} >
{#if fullscreen} - {/if} @@ -51,7 +61,6 @@
{/if}
- {/if} @@ -74,12 +83,9 @@ } .title { - position: sticky; display: flex; align-items: center; gap: 1rem; - top: 0; - left: 0; width: 100%; background-color: var(--grey-six); margin-bottom: 8px; @@ -93,9 +99,12 @@ width: 100%; } + #back-button { + cursor: pointer; + } .hasIcon { - flex-direction: column; + flex-direction: column; } .modal { @@ -135,12 +144,27 @@ } .fullscreen { + padding: 0; max-height: 100%; width: 100%; border-radius: 0; } + + .fullscreen .slot { + padding: 0 32px 32px; + } + .fullscreen .title { justify-content: flex-start; + position: sticky; + padding: 32px; + padding-bottom: 0.75rem; + top: 0; + left: 0; + } + + .fullscreen.scrolled .title { + border-bottom: 1px solid var(--grey-three); } .slot { @@ -154,5 +178,3 @@ display: none; } - - diff --git a/src/lib/components/Search.svelte b/src/lib/components/Search.svelte index 87b99f2..e34f7c3 100644 --- a/src/lib/components/Search.svelte +++ b/src/lib/components/Search.svelte @@ -11,7 +11,10 @@ function clear() { searchTerm = ''; searchTermFiltered = ''; - goto($page.url.pathname) + + const url = new URL($page.url); + url.searchParams.delete('s'); + goto(url.pathname + url.search); } @@ -85,6 +88,6 @@ input:focus::placeholder { outline: none; - color: var(--accent-color) + color: var(--accent-color); } diff --git a/src/routes/patches/[[package]]/+page.svelte b/src/routes/patches/+page.svelte similarity index 91% rename from src/routes/patches/[[package]]/+page.svelte rename to src/routes/patches/+page.svelte index ae271f7..aad34c9 100644 --- a/src/routes/patches/[[package]]/+page.svelte +++ b/src/routes/patches/+page.svelte @@ -3,16 +3,15 @@ import { quintOut } from 'svelte/easing'; import { page } from '$app/stores'; - import type { PageData } from './$types'; import type { Patch } from '$lib/types'; import { createQuery } from '@tanstack/svelte-query'; import { queries } from '$data/api'; import Meta from '$lib/components/Meta.svelte'; - import PackageMenu from '../PackageMenu.svelte'; - import Package from '../Package.svelte'; - import PatchItem from '../PatchItem.svelte'; + import PackageMenu from './PackageMenu.svelte'; + import Package from './Package.svelte'; + import PatchItem from './PatchItem.svelte'; import Footer from '$layout/Footer/FooterHost.svelte'; import Search from '$lib/components/Search.svelte'; import FilterChip from '$lib/components/FilterChip.svelte'; @@ -21,16 +20,14 @@ const query = createQuery(['patches'], queries.patches); - export let data: PageData; - $: ({ selectedPkg } = data); - - // Search whatever the s query is from the url + $: selectedPkg = $page.url.searchParams.get('pkg'); let searchTerm = $page.url.searchParams.get('s'); let searchTermFiltered = searchTerm ?.replace(/\./g, '') .replace(/\s/g, '') .replace(/-/g, '') .toLowerCase(); + let timeout: ReturnType; let mobilePackages = false; @@ -80,11 +77,19 @@ .toLowerCase(); // Update search URL params // must use history.pushState instead of goto(), as goto() unselects the search bar - window.history.pushState( - null, - '', - `${window.location.href.split('?')[0]}${searchTerm ? '?s=' + searchTerm : ''}` - ); + const url = new URL(window.location.href); + url.pathname = '/patches'; + + const params = new URLSearchParams(); + if (selectedPkg) { + params.set('pkg', selectedPkg); + } + if (searchTerm) { + params.set('s', searchTerm); + } + + url.search = params.toString(); + window.history.pushState(null, '', url.toString()); }, 500); }; diff --git a/src/routes/patches/Package.svelte b/src/routes/patches/Package.svelte index 956ba5e..3a82d3a 100644 --- a/src/routes/patches/Package.svelte +++ b/src/routes/patches/Package.svelte @@ -1,20 +1,25 @@ diff --git a/src/routes/patches/[[package]]/+page.ts b/src/routes/patches/[[package]]/+page.ts deleted file mode 100644 index dc57359..0000000 --- a/src/routes/patches/[[package]]/+page.ts +++ /dev/null @@ -1,8 +0,0 @@ -import type { PageLoad } from './$types'; - -export const prerender = false; - -export const load: PageLoad = async ({ params }) => { - const selectedPkg = params.package || undefined; - return { selectedPkg }; -};