omnidash/src/routes/(user)/dashboard/(components)/data-table-toolbar.svelte

69 lines
1.7 KiB
Svelte

<script lang="ts">
import { Input } from '$lib/components/ui/input';
import { DataTableFacetedFilter, DataTableViewOptions } from '.';
import type { Ticket } from '../(data)/schemas';
import Button from '$lib/components/ui/button/button.svelte';
import { X } from 'lucide-svelte';
import { statuses, priorities } from '../(data)/data';
import type { Writable } from 'svelte/store';
import type { TableViewModel } from 'svelte-headless-table';
import type { AnyPlugins } from 'svelte-headless-table/plugins';
export let tableModel: TableViewModel<Ticket, AnyPlugins>;
const { pluginStates } = tableModel;
const {
filterValue
}: {
filterValue: Writable<string>;
} = pluginStates.filter;
const {
filterValues
}: {
filterValues: Writable<{
status: string[];
priority: string[];
}>;
} = pluginStates.colFilter;
$: showReset = Object.values({ ...$filterValues, $filterValue }).some((v) => v.length > 0);
</script>
<div class="flex items-center justify-between">
<div class="flex flex-1 items-center space-x-2">
<Input
placeholder="Filter tickets..."
class="h-8 w-[150px] lg:w-[250px]"
type="search"
bind:value={$filterValue}
/>
<DataTableFacetedFilter
bind:filterValues={$filterValues.status}
title="Status"
options={statuses}
/>
<DataTableFacetedFilter
bind:filterValues={$filterValues.priority}
title="Priority"
options={priorities}
/>
{#if showReset}
<Button
on:click={() => {
$filterValue = '';
$filterValues.status = [];
$filterValues.priority = [];
}}
variant="ghost"
class="h-8 px-2 lg:px-3"
>
Reset
<X class="ml-2 h-4 w-4" />
</Button>
{/if}
</div>
<DataTableViewOptions {tableModel} />
</div>