diff --git a/src/components/search.svelte b/src/components/search.svelte index 8559ec6..d625110 100644 --- a/src/components/search.svelte +++ b/src/components/search.svelte @@ -2,12 +2,9 @@ import { cn } from "@/utils/cn"; import { onMount } from "svelte"; - import { page } from "$app/state"; - import { goto } from "$app/navigation"; - + import { addParams } from "@/utils/searchParams"; import SearchIcon from "@lucide/svelte/icons/search"; import CommandIcon from "@lucide/svelte/icons/command"; - import { SvelteURLSearchParams } from "svelte/reactivity"; interface Props { searchValue: string; @@ -19,19 +16,12 @@ let inputElement: HTMLInputElement; const onInput = (event: Event) => { - const param = "search"; const value = (event.target as HTMLInputElement).value; onSearch(value); - const params = new SvelteURLSearchParams(page.url.searchParams); - if (value) { - params.set(param, value); - } else { - params.delete(param); - } - goto(`?${params.toString()}`, { - keepFocus: true, - noScroll: true, - replaceState: true, + addParams({ + params: { + search: value, + }, }); }; diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 1f680ae..86e30f1 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -3,6 +3,7 @@ import type { PageProps } from "./$types"; import { cn } from "@/utils/cn"; + import { deleteParam } from "@/utils/searchParams"; import { svgsData } from "@/data"; import { searchWithFuse } from "@/utils/searchWithFuse"; @@ -12,11 +13,12 @@ import SvgCard from "@/components/svgs/svgCard.svelte"; import SortSvgs from "@/components/svgs/sortSvgs.svelte"; import Container from "@/components/container.svelte"; + import SearchXIcon from "@lucide/svelte/icons/search-x"; import PageCard from "@/components/pageCard.svelte"; - import PageHeader from "@/components/pageHeader.svelte"; import FolderIcon from "@lucide/svelte/icons/folder"; - import FolderSearchIcon from "@lucide/svelte/icons/folder-search"; + import PageHeader from "@/components/pageHeader.svelte"; + import Button from "@/components/ui/button/button.svelte"; // SSR Data: let { data }: PageProps = $props(); @@ -60,6 +62,13 @@ searchSvgs(); }; + const handleClearSearch = () => { + searchTerm = ""; + filteredSvgs = sorted ? alphabeticallySorted : latestSorted; + deleteParam("search"); + updateDisplaySvgs(); + }; + $effect(() => { updateDisplaySvgs(); }); @@ -87,7 +96,14 @@ logos
{:else} -
{filteredSvgs.length}
logos
diff --git a/src/routes/directory/[category]/+page.svelte b/src/routes/directory/[category]/+page.svelte
index 6e84561..d0900de 100644
--- a/src/routes/directory/[category]/+page.svelte
+++ b/src/routes/directory/[category]/+page.svelte
@@ -3,7 +3,6 @@
import type { PageProps } from "./$types";
import { page } from "$app/state";
- import { goto } from "$app/navigation";
import { SvelteURLSearchParams } from "svelte/reactivity";
import { cn } from "@/utils/cn";
@@ -14,68 +13,70 @@
import Search from "@/components/search.svelte";
import SvgCard from "@/components/svgs/svgCard.svelte";
import Container from "@/components/container.svelte";
+ import SearchXIcon from "@lucide/svelte/icons/search-x";
import PageCard from "@/components/pageCard.svelte";
import PageHeader from "@/components/pageHeader.svelte";
import FolderIcon from "@lucide/svelte/icons/folder-open";
import ArrowLeftIcon from "@lucide/svelte/icons/arrow-left";
- import { buttonVariants } from "@/components/ui/button";
+ import { Button, buttonVariants } from "@/components/ui/button";
+ import SortSvgs from "@/components/svgs/sortSvgs.svelte";
+ import { deleteParam } from "@/utils/searchParams";
// SSR Data:
let { data }: PageProps = $props();
const directoryData = $derived(data);
// States:
+ let maxDisplay = 30;
let searchTerm = $state
- {formatCategory(directoryData.category)}
+ {directoryData.category}
- {data.svgs.length} SVGs
+ {data.initialSvgs.length} SVGs
@@ -117,6 +123,14 @@