import {useListSearch} from "@/hooks/useListSearch"; import usePagination from "@/hooks/usePagination"; import {Column, flexRender, getCoreRowModel, getSortedRowModel, useReactTable} from "@tanstack/react-table"; import clsx from "clsx"; import {useMemo, useState} from "react"; import Button from "./Low/Button"; const SIZE = 25; export default function List({ data, columns, searchFields = [], pageSize = SIZE, }: { data: T[]; columns: any[]; searchFields?: string[][]; pageSize?: number; }) { const {rows, renderSearch} = useListSearch(searchFields, data); const {items, page, renderMinimal} = usePagination(rows, pageSize); const table = useReactTable({ data: items, columns: columns, getCoreRowModel: getCoreRowModel(), getSortedRowModel: getSortedRowModel(), }); return (
{searchFields.length > 0 && renderSearch()} {renderMinimal()}
{table.getHeaderGroups().map((headerGroup) => ( {headerGroup.headers.map((header) => ( ))} ))} {table.getRowModel().rows.map((row) => ( {row.getVisibleCells().map((cell) => ( ))} ))}
{header.isPlaceholder ? null : ( <>
{flexRender(header.column.columnDef.header, header.getContext())} {{ asc: " 🔼", desc: " 🔽", }[header.column.getIsSorted() as string] ?? null}
)}
{flexRender(cell.column.columnDef.cell, cell.getContext())}
); }