Data Table
optics/data-tableFreeComponent
Powerful table and datagrid built with TanStack Table.
See it running
Open the demo on optics
optics.agusmayol.com.ar/components/data-tableInstall it
npx shadcn@latest add https://optics.agusmayol.com.ar/r/data-table.jsonSource
1"use client";23import * as React from "react";4import {5 flexRender,6 getCoreRowModel,7 getFilteredRowModel,8 getPaginationRowModel,9 getSortedRowModel,10 useReactTable,11} from "@tanstack/react-table";1213import {14 Table,15 TableBody,16 TableCell,17 TableHead,18 TableHeader,19 TableRow,20} from "@/registry/optics/table";2122function DataTable({ columns = [], data = [], ...props }) {23 const [sorting, setSorting] = React.useState([]);24 const [columnFilters, setColumnFilters] = React.useState([]);25 const [columnVisibility, setColumnVisibility] = React.useState({});26 const [rowSelection, setRowSelection] = React.useState({});2728 const table = useReactTable({29 data,30 columns,31 onSortingChange: setSorting,32 onColumnFiltersChange: setColumnFilters,33 getCoreRowModel: getCoreRowModel(),34 getPaginationRowModel: getPaginationRowModel(),35 getSortedRowModel: getSortedRowModel(),36 getFilteredRowModel: getFilteredRowModel(),37 onColumnVisibilityChange: setColumnVisibility,38 onRowSelectionChange: setRowSelection,39 state: {40 sorting,41 columnFilters,42 columnVisibility,43 rowSelection,44 },45 ...props,46 });4748 return (49 <div className="w-full">50 <div className="overflow-hidden rounded-md border">51 <Table>52 <TableHeader>53 {table.getHeaderGroups().map((headerGroup) => (54 <TableRow key={headerGroup.id}>55 {headerGroup.headers.map((header) => {56 return (57 <TableHead key={header.id}>58 {header.isPlaceholder59 ? null60 : flexRender(61 header.column.columnDef.header,62 header.getContext(),63 )}64 </TableHead>65 );66 })}67 </TableRow>68 ))}69 </TableHeader>70 <TableBody>71 {table.getRowModel().rows?.length ? (72 table.getRowModel().rows.map((row) => (73 <TableRow74 key={row.id}75 data-state={row.getIsSelected() && "selected"}76 >77 {row.getVisibleCells().map((cell) => (78 <TableCell key={cell.id}>79 {flexRender(80 cell.column.columnDef.cell,81 cell.getContext(),82 )}83 </TableCell>84 ))}85 </TableRow>86 ))87 ) : (88 <TableRow>89 <TableCell90 colSpan={columns.length}91 className="h-24 text-center"92 >93 No results.94 </TableCell>95 </TableRow>96 )}97 </TableBody>98 </Table>99 </div>100 </div>101 );102}103104DataTable.displayName = "DataTable";105106export { DataTable };
What it pulls in
npm packages
Other registry items
Files it writes
More from optics
All 79 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Accordionaccordion | optics | Components | Free | 5 deps | |
| Alertalert | optics | Components | Free | 4 deps | |
| Alert Dialogalert-dialog | optics | Components | Free | 4 deps | |
| Aspect Ratioaspect-ratio | optics | Components | Free | 2 deps | |
| Auto Heightauto-height | optics | Components | Free | 3 deps | |
| Avataravatar | optics | Components | Free | 3 deps | |
| Badgebadge | optics | Components | Free | 4 deps | |
| Breadcrumbbreadcrumb | optics | Components | Free | 4 deps |
