Clean up search code

This commit is contained in:
Andy Chan (12beesinatrenchcoat) 2024-04-05 12:23:57 -04:00
parent 2f44ff5d2d
commit ca9234afa1
2 changed files with 3 additions and 32 deletions

View File

@ -3,14 +3,11 @@
import usersImport from "./users.json"; import usersImport from "./users.json";
import { import {
ColumnDef, ColumnDef,
ColumnFiltersState,
GlobalFilterTableState,
Row, Row,
createColumnHelper, createColumnHelper,
flexRender, flexRender,
getCoreRowModel, getCoreRowModel,
getFilteredRowModel, getFilteredRowModel,
getSortedRowModel,
sortingFns, sortingFns,
useReactTable, useReactTable,
} from "@tanstack/react-table"; } from "@tanstack/react-table";
@ -19,7 +16,7 @@ import { RowOptionMenu } from "./RowOptionMenu";
import { RowOpenAction } from "./RowOpenAction"; import { RowOpenAction } from "./RowOpenAction";
import { TableAction } from "./TableAction"; import { TableAction } from "./TableAction";
import { Bars2Icon, AtSymbolIcon, HashtagIcon, ArrowDownCircleIcon } from "@heroicons/react/24/solid"; import { Bars2Icon, AtSymbolIcon, HashtagIcon, ArrowDownCircleIcon } from "@heroicons/react/24/solid";
import { compareItems, rankItem } from "@tanstack/match-sorter-utils"; import { rankItem } from "@tanstack/match-sorter-utils";
const usersExample = usersImport as unknown as User[]; const usersExample = usersImport as unknown as User[];
@ -34,6 +31,7 @@ type User = {
group?: string; group?: string;
}; };
// For search
const fuzzyFilter = (row: Row<any>, columnId: string, value: any, addMeta: (meta: any) => void) => { const fuzzyFilter = (row: Row<any>, columnId: string, value: any, addMeta: (meta: any) => void) => {
// Rank the item // Rank the item
const itemRank = rankItem(row.getValue(columnId), value) const itemRank = rankItem(row.getValue(columnId), value)
@ -45,21 +43,6 @@ const fuzzyFilter = (row: Row<any>, columnId: string, value: any, addMeta: (meta
return itemRank.passed return itemRank.passed
} }
const fuzzySort = (rowA, rowB, columnId) => {
let dir = 0
// Only sort by rank if the column has ranking information
if (rowA.columnFiltersMeta[columnId]) {
dir = compareItems(
rowA.columnFiltersMeta[columnId]!,
rowB.columnFiltersMeta[columnId]!
)
}
// Provide an alphanumeric fallback for when the item ranks are equal
return dir === 0 ? sortingFns.alphanumeric(rowA, rowB, columnId) : dir
}
export const Table = () => { export const Table = () => {
const columnHelper = createColumnHelper<User>(); const columnHelper = createColumnHelper<User>();
@ -71,7 +54,6 @@ export const Table = () => {
columnHelper.accessor("username", { columnHelper.accessor("username", {
header: () => <><Bars2Icon className="inline align-top h-4" /> Username</>, header: () => <><Bars2Icon className="inline align-top h-4" /> Username</>,
cell: (info) => <RowOpenAction title={info.getValue()} />, cell: (info) => <RowOpenAction title={info.getValue()} />,
sortingFn: fuzzySort,
}), }),
columnHelper.accessor("role", { columnHelper.accessor("role", {
header: () => <><ArrowDownCircleIcon className="inline align-top h-4" /> Role</>, header: () => <><ArrowDownCircleIcon className="inline align-top h-4" /> Role</>,
@ -88,21 +70,12 @@ export const Table = () => {
]; ];
const [data, setData] = useState<User[]>([...usersExample]); const [data, setData] = useState<User[]>([...usersExample]);
// const [globalFilter, setGlobalFilter] = useState<GlobalFilterTableState>();
// Searching // Searching
const [query, setQuery] = useState(""); const [query, setQuery] = useState("");
const handleSearchChange = (e: ChangeEvent) => { const handleSearchChange = (e: ChangeEvent) => {
const target = e.target as HTMLInputElement; const target = e.target as HTMLInputElement;
setQuery(String(target.value)); setQuery(String(target.value));
console.log(query);
// setColumnFilters([
// {
// id: "username",
// value: query
// }
// ])
} }
// TODO: Filtering // TODO: Filtering
@ -121,8 +94,6 @@ export const Table = () => {
globalFilterFn: fuzzyFilter, globalFilterFn: fuzzyFilter,
getCoreRowModel: getCoreRowModel(), getCoreRowModel: getCoreRowModel(),
getFilteredRowModel: getFilteredRowModel(), getFilteredRowModel: getFilteredRowModel(),
getSortedRowModel: getSortedRowModel(),
// onColumnFiltersChange: setColumnFilters,
}); });
return ( return (

View File

@ -38,7 +38,7 @@ export const TableAction: FunctionComponent<TableActionProps> = ({query, handleC
type="text" type="text"
name="search" name="search"
placeholder="Type to search..." placeholder="Type to search..."
value={query} value={query ?? ""}
onChange={handleChange} onChange={handleChange}
/> />
</div> </div>