feat: add toggle to search

This commit is contained in:
DecafDev 2024-09-09 22:44:50 -06:00
parent e8be31cc85
commit f43da081ca
2 changed files with 54 additions and 23 deletions

View file

@ -1,36 +1,67 @@
<script lang="ts">
import IconButton from "src/svelte/shared/components/icon-button.svelte";
import Stack from "src/svelte/shared/components/stack.svelte";
import { createEventDispatcher } from "svelte";
export let value: string;
let inputRef: HTMLInputElement | null;
let hidden: boolean = true;
const dispatch = createEventDispatcher();
function handleClearClick() {
dispatch("clear", { value: "" });
}
function handleIconClick() {
hidden = !hidden;
if (!hidden) {
requestAnimationFrame(() => {
inputRef?.focus();
});
}
}
</script>
<div class="vault-explorer-search-filter">
<input type="text" placeholder="Search..." {value} on:input />
{#if value.length > 0}
<div
tabindex="0"
role="button"
aria-label="Clear search"
class="search-input-clear-button"
on:click={() => handleClearClick()}
on:keydown={(e) => {
if (e.key === "Enter") {
handleClearClick();
}
}}
<Stack spacing="sm">
<div
class="vault-explorer-search-filter"
style="display: {hidden ? 'none' : 'block'};"
>
<input
bind:this={inputRef}
type="text"
placeholder="Search..."
{value}
on:input
/>
{/if}
</div>
{#if value.length > 0}
<div
tabindex="0"
role="button"
aria-label="Clear search"
class="search-input-clear-button"
on:click={() => handleClearClick()}
on:keydown={(e) => {
if (e.key === "Enter") {
handleClearClick();
}
}}
/>
{/if}
</div>
<IconButton
iconId="search"
ariaLabel="Search"
on:click={() => handleIconClick()}
/>
</Stack>
<style>
.vault-explorer-search-filter input[type="text"] {
width: 100%;
height: 24px;
}
.vault-explorer-search-filter {

View file

@ -952,13 +952,6 @@
<Stack spacing="sm"></Stack>
</Flex>
</Stack>
{#if searchFilter.isEnabled}
<SearchFilter
value={searchFilter.value}
on:input={debounceSearchFilterChange}
on:clear={() => (searchFilter.value = "")}
/>
{/if}
</Stack>
<Spacer size="md" />
</div>
@ -991,6 +984,13 @@
<!-- </Stack> -->
</div>
<Flex>
{#if searchFilter.isEnabled}
<SearchFilter
value={searchFilter.value}
on:input={debounceSearchFilterChange}
on:clear={() => (searchFilter.value = "")}
/>
{/if}
{#if sortFilter.isEnabled}
<SortFilter
value={sortFilter.value}