mirror of
https://github.com/bartvdbraak/omnidash.git
synced 2025-04-26 15:01:20 +00:00
69 lines
1.7 KiB
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>
|