import InputAdornment from "@mui/material/InputAdornment"; import Paper from "@mui/material/Paper"; import Table from "@mui/material/Table"; import TableBody from "@mui/material/TableBody"; import TableContainer from "@mui/material/TableContainer"; import TableCell from "@mui/material/TableCell"; import TableHead from "@mui/material/TableHead"; import TableRow from "@mui/material/TableRow"; import TablePagination from "@mui/material/TablePagination"; import TextField from "@mui/material/TextField"; import Box from "@mui/material/Box"; import { flexRender, useReactTable, ColumnDef, getCoreRowModel, getSortedRowModel, getFilteredRowModel, getPaginationRowModel, SortingState, ColumnFiltersState, } from "@tanstack/react-table"; import { useState } from "react"; import { SearchNormal } from "iconsax-react"; interface ReactTableProps { columns: ColumnDef[]; data: T[]; striped?: boolean; title?: string; } function ComponentReactTable({ columns, data, striped, title, }: ReactTableProps) { const [sorting, setSorting] = useState([]); const [columnFilters, setColumnFilters] = useState([]); const [globalFilter, setGlobalFilter] = useState(""); const table = useReactTable({ data, columns, state: { sorting, columnFilters, globalFilter, }, onSortingChange: setSorting, onColumnFiltersChange: setColumnFilters, onGlobalFilterChange: setGlobalFilter, getCoreRowModel: getCoreRowModel(), getSortedRowModel: getSortedRowModel(), getFilteredRowModel: getFilteredRowModel(), getPaginationRowModel: getPaginationRowModel(), }); return ( setGlobalFilter(e.target.value)} placeholder="Search all columns..." sx={{ mb: 2 }} slotProps={{ input: { startAdornment: , }, }} /> {table.getHeaderGroups().map((headerGroup) => ( {headerGroup.headers.map((header) => ( {header.isPlaceholder ? null : ( {flexRender( header.column.columnDef.header, header.getContext() )} {{ asc: " 🔼", desc: " 🔽", }[header.column.getIsSorted() as string] ?? null} )} ))} ))} {table.getRowModel().rows.map((row) => ( {row.getVisibleCells().map((cell) => ( {flexRender(cell.column.columnDef.cell, cell.getContext())} ))} ))}
table.setPageIndex(page)} rowsPerPage={table.getState().pagination.pageSize} onRowsPerPageChange={(e) => table.setPageSize(Number(e.target.value))} rowsPerPageOptions={[5, 10, 25, 50]} />
); } export default function ReactTable({ striped, title, data, columns, }: ReactTableProps) { return ; }