32 lines
765 B
Svelte
32 lines
765 B
Svelte
|
<script lang="ts">
|
||
|
import { query as queryFn } from "../lib/entity";
|
||
|
import debounce from "lodash/debounce";
|
||
|
import { Readable, readable } from "svelte/store";
|
||
|
import type { UpListing } from "upend";
|
||
|
export let query: string;
|
||
|
|
||
|
let debouncedQuery = "";
|
||
|
const updateQuery = debounce((query: string) => {
|
||
|
debouncedQuery = query;
|
||
|
}, 200);
|
||
|
$: updateQuery(query);
|
||
|
|
||
|
let result: Readable<UpListing> = readable();
|
||
|
let error: Readable<unknown> = readable();
|
||
|
$: if (debouncedQuery.length) {
|
||
|
({ result, error } = queryFn(
|
||
|
() => `(matches ? ? (contains "${debouncedQuery}"))`
|
||
|
));
|
||
|
}
|
||
|
</script>
|
||
|
|
||
|
<div>
|
||
|
{#if $result}
|
||
|
{#each $result.entries as entry}
|
||
|
{entry.toString()}
|
||
|
{:else}
|
||
|
No results.
|
||
|
{/each}
|
||
|
{/if}
|
||
|
</div>
|