added fuzzy search for table

This commit is contained in:
Polaris
2024-08-21 13:34:23 -04:00
parent 7fe79979b5
commit 007b23783a
5 changed files with 226 additions and 96 deletions

View File

@ -1,10 +1,14 @@
"use client";
// https://github.com/dracor-org/einakter/blob/466ca1663098a16cc1141129a6ba22628135b04c/src/components/Table.tsx#L26
// used the above for reference on how to fuzzy search
import { useState } from "react";
import { Button } from "@/components/ui/button";
import {
ColumnDef,
SortingState,
getSortedRowModel,
flexRender,
getFilteredRowModel,
getCoreRowModel,
getPaginationRowModel,
useReactTable,
@ -18,8 +22,7 @@ import {
TableHeader,
TableRow,
} from "@/components/ui/table";
import { useState } from "react";
import DebouncedInput from "./DebouncedInput";
interface DataTableProps<TData, TValue> {
columns: ColumnDef<TData, TValue>[];
data: TData[];
@ -30,21 +33,32 @@ export function DataTable<TData, TValue>({
data,
}: DataTableProps<TData, TValue>) {
const [sorting, setSorting] = useState<SortingState>([]);
const [globalFilter, setGlobalFilter] = useState("");
const table = useReactTable({
data,
columns,
getCoreRowModel: getCoreRowModel(),
getPaginationRowModel: getPaginationRowModel(),
onSortingChange: setSorting,
getSortedRowModel: getSortedRowModel(),
state: {
sorting,
globalFilter,
},
onSortingChange: setSorting,
onGlobalFilterChange: setGlobalFilter,
getCoreRowModel: getCoreRowModel(),
getPaginationRowModel: getPaginationRowModel(),
getSortedRowModel: getSortedRowModel(),
getFilteredRowModel: getFilteredRowModel(),
});
return (
<div className="rounded-md border ">
<div className="rounded-md border">
<div className="mb-2">
<DebouncedInput
value={globalFilter ?? ""}
onChange={(value) => setGlobalFilter(String(value))}
placeholder={`Search`}
/>
</div>
<Table>
<TableHeader>
{table.getHeaderGroups().map((headerGroup) => (
@ -55,7 +69,7 @@ export function DataTable<TData, TValue>({
? null
: flexRender(
header.column.columnDef.header,
header.getContext()
header.getContext(),
)}
</TableHead>
))}
@ -85,7 +99,7 @@ export function DataTable<TData, TValue>({
)}
</TableBody>
</Table>
<div className="flex items-center justify-end space-x-2 py- p-4">
<div className="py- flex items-center justify-end space-x-2 p-4">
<Button
variant="outline"
size="sm"