@mshafiqyajid/react-table

Headless table hook and styled component. Sort, filter, paginate, select rows. Generic TypeScript, sticky header, loading skeleton, empty state.

Playground #

NameRoleStatusJoined
Alice JohnsonEngineerActive2022-01
Bob ChenDesignerActive2021-06
Carol WilliamsManagerOn leave2020-03
David KimEngineerActive2023-02
1 / 2
Props
TSX
import { TableStyled } from "@mshafiqyajid/react-table/styled";
import "@mshafiqyajid/react-table/styles.css";

<TableStyled
  data={DATA}
  columns={COLUMNS}
/>

Install #

npm install @mshafiqyajid/react-table

Quick start #

import { TableStyled } from "@mshafiqyajid/react-table/styled";
import type { ColumnDef } from "@mshafiqyajid/react-table";
import "@mshafiqyajid/react-table/styles.css";

type User = { id: number; name: string; email: string };
const columns: ColumnDef<User>[] = [
  { key: "name",  header: "Name",  sortable: true },
  { key: "email", header: "Email", filterable: true },
];
<TableStyled data={users} columns={columns} sortable filterable paginate pageSize={10} hoverable />

API #

PropTypeDefaultDescription
dataT[]β€”Array of row objects
columnsColumnDef<T>[]β€”Column definitions
sortablebooleanfalseEnable column sorting
filterablebooleanfalseEnable per-column filter inputs
selectablebooleanfalseEnable row checkboxes
paginatebooleanfalseEnable pagination
pageSizenumber10Rows per page
size"sm" | "md" | "lg""md"Row density
tone"neutral" | "primary""neutral"Accent color
stripedbooleanfalseAlternating row background
borderedbooleanfalseCell borders
hoverablebooleantrueRow hover highlight
stickyHeaderbooleanfalseFreeze header on scroll
loadingbooleanfalseShow skeleton rows
emptyTextReactNode"No data"Empty state content
captionstringβ€”Accessible table caption
onRowClick(row) => voidβ€”Row click handler
rowKey(row) => stringβ€”Custom key extractor
toolbarReactNodeβ€”Slot rendered above the table
pagenumberβ€”Controlled current page
onPageChange(page) => voidβ€”Controlled page change callback

ColumnDef fields #

FieldTypeDefaultDescription
keystringβ€”Data key to read from row object
headerstringβ€”Column header label
sortablebooleanfalseEnable sorting on this column
filterablebooleanfalsePer-column filter input
align"left" | "center" | "right"β€”Column text alignment
sticky"left" | "right"β€”Sticky column position
render(value, row) => ReactNodeβ€”Custom cell renderer
Edit this page on GitHub