feat: patches search url params

This commit is contained in:
afn 2023-04-20 22:20:26 -04:00
parent 336f949dcc
commit 80ae15bb18
3 changed files with 22 additions and 11 deletions

View File

@ -1,13 +1,14 @@
<script lang="ts"> <script lang="ts">
export let title: string; export let title: string;
export let searchTerm: string | null; export let searchTerm: string | null;
export let searchTermFiltered: string | null; export let searchTermFiltered: string | undefined;
import { fade } from 'svelte/transition'; import { fade } from 'svelte/transition';
import { quintOut } from 'svelte/easing'; import { quintOut } from 'svelte/easing';
function clear() { function clear() {
searchTerm = null; searchTerm = '';
searchTermFiltered = null; searchTermFiltered = '';
window.history.pushState(null, '', window.location.href.split('?')[0])
} }
</script> </script>
@ -68,10 +69,9 @@
background-color: var(--grey-ten); background-color: var(--grey-ten);
} }
input::placeholder { input::placeholder {
color: var(--grey-five); color: var(--grey-five);
font-size: 0.92rem; font-size: 0.9rem;
font-weight: 500; font-weight: 500;
transition: all 0.2s var(--bezier-one); transition: all 0.2s var(--bezier-one);
} }

View File

@ -3,6 +3,7 @@
export let selectedPkg: string | undefined; export let selectedPkg: string | undefined;
export let name: string; export let name: string;
export let searchTerm: string | null;
function handleClick() { function handleClick() {
// Assign the selected package. If it's already selected, deselect it. // Assign the selected package. If it's already selected, deselect it.
@ -10,6 +11,9 @@
if (selectedPkg !== name && name !== 'All packages') { if (selectedPkg !== name && name !== 'All packages') {
path += `/${name}`; path += `/${name}`;
} }
if (searchTerm) {
path += `?s=${searchTerm}`
};
goto(path); goto(path);
window.scrollTo({ top: 0, behavior: 'smooth' }); window.scrollTo({ top: 0, behavior: 'smooth' });
} }

View File

@ -1,6 +1,7 @@
<script lang="ts"> <script lang="ts">
import { fly } from 'svelte/transition'; import { fly } from 'svelte/transition';
import { quintOut } from 'svelte/easing'; import { quintOut } from 'svelte/easing';
import { page } from '$app/stores';
import type { PageData } from './$types'; import type { PageData } from './$types';
import type { Patch } from '$lib/types'; import type { Patch } from '$lib/types';
@ -23,8 +24,12 @@
export let data: PageData; export let data: PageData;
$: ({ selectedPkg } = data); $: ({ selectedPkg } = data);
let searchTerm: string; let searchTerm = $page.url.searchParams.get('s');
let searchTermFiltered: string; let searchTermFiltered = searchTerm
?.replace(/\./g, '')
.replace(/\s/g, '')
.replace(/-/g, '')
.toLowerCase();
let timeout: ReturnType<typeof setTimeout>; let timeout: ReturnType<typeof setTimeout>;
let mobilePackages = false; let mobilePackages = false;
@ -72,6 +77,8 @@
.replace(/\s/g, '') .replace(/\s/g, '')
.replace(/-/g, '') .replace(/-/g, '')
.toLowerCase(); .toLowerCase();
// Update search URL params
window.history.pushState(null, '', `${window.location.href.split('?')[0]}${searchTerm ? '?s=' + searchTerm : ''}`)
}, 500); }, 500);
}; };
</script> </script>
@ -112,14 +119,14 @@
on:click={() => (mobilePackages = !mobilePackages)} on:click={() => (mobilePackages = !mobilePackages)}
on:keypress={() => (mobilePackages = !mobilePackages)} on:keypress={() => (mobilePackages = !mobilePackages)}
> >
<Package {selectedPkg} name="All packages" /> <Package {selectedPkg} name="All packages" bind:searchTerm/>
</span> </span>
{#each data.packages as pkg} {#each data.packages as pkg}
<span <span
on:click={() => (mobilePackages = !mobilePackages)} on:click={() => (mobilePackages = !mobilePackages)}
on:keypress={() => (mobilePackages = !mobilePackages)} on:keypress={() => (mobilePackages = !mobilePackages)}
> >
<Package {selectedPkg} name={pkg} /> <Package {selectedPkg} name={pkg} bind:searchTerm/>
</span> </span>
{/each} {/each}
</div> </div>
@ -129,9 +136,9 @@
<aside in:fly={{ y: 10, easing: quintOut, duration: 750 }}> <aside in:fly={{ y: 10, easing: quintOut, duration: 750 }}>
<PackageMenu> <PackageMenu>
<span class="packages"> <span class="packages">
<Package {selectedPkg} name="All packages" /> <Package {selectedPkg} name="All packages" bind:searchTerm/>
{#each data.packages as pkg} {#each data.packages as pkg}
<Package {selectedPkg} name={pkg} /> <Package {selectedPkg} name={pkg} bind:searchTerm />
{/each} {/each}
</span> </span>
</PackageMenu> </PackageMenu>