mirror of
https://github.com/cssgunc/compass.git
synced 2025-04-10 06:10:17 -04:00
Clean up search code
This commit is contained in:
parent
2f44ff5d2d
commit
ca9234afa1
|
@ -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 (
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Reference in New Issue
Block a user