DataTable
pdfx/data-tableFreeComponent
Convenience API: columns + data array. Uses Table/TableRow/TableCell internally.
See it running
Open the demo on pdfx
pdfx.akashpise.dev/docs/components/data-tableInstall it
npx shadcn@latest add https://pdfx.akashpise.dev/r/data-table.jsonSource
1import { Text as PDFText } from '@react-pdf/renderer';2import type { Style } from '@react-pdf/types';3import { Fragment } from 'react';4import { usePdfxTheme, useSafeMemo } from '../lib/pdfx-theme-context';5import { Table, TableBody, TableCell, TableFooter, TableHeader, TableRow } from '../table/pdfx-table';6import { createCompactStyles, formatValue } from './pdfx-data-table.styles';7import type { DataTableProps } from './pdfx-data-table.types';89export function DataTable<T extends Record<string, unknown>>({10 columns,11 data,12 variant = 'grid',13 footer,14 stripe = false,15 size = 'default',16 noWrap = false,17 style,18}: DataTableProps<T>) {19 const theme = usePdfxTheme();20 const compact = useSafeMemo(() => createCompactStyles(theme), [theme]);21 const isCompact = size === 'compact';2223 return (24 <Table variant={variant} zebraStripe={stripe} noWrap={noWrap} style={style}>25 <TableHeader>26 <TableRow header>27 {columns.map((col) => (28 <TableCell29 key={col.key}30 header31 align={col.align ?? 'left'}32 width={col.width}33 style={isCompact ? compact.cell : undefined}34 >35 {isCompact ? (36 <PDFText37 style={[compact.headerText, col.align ? ({ textAlign: col.align } as Style) : {}]}38 >39 {col.header}40 </PDFText>41 ) : (42 col.header43 )}44 </TableCell>45 ))}46 </TableRow>47 </TableHeader>48 <TableBody>49 {data.map((row, i) => (50 // biome-ignore lint/suspicious/noArrayIndexKey: DataTable has no row id; order is stable for static data51 <Fragment key={i}>52 <TableRow>53 {columns.map((col) => {54 const value = row[col.key];55 const rendered = col.render ? col.render(value, row) : null;56 const text = rendered === null ? formatValue(value) : null;57 return (58 <TableCell59 key={col.key}60 align={col.align ?? 'left'}61 width={col.width}62 style={isCompact ? compact.cell : undefined}63 >64 {isCompact ? (65 rendered !== null ? (66 rendered67 ) : (68 <PDFText69 style={[70// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from pdfx
All 34 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Alertalert | pdfx | Components | Free | 1 dep | |
| Badgebadge | pdfx | Components | Free | 1 dep | |
| Cardcard | pdfx | Components | Free | 1 dep | |
| Dividerdivider | pdfx | Components | Free | 1 dep | |
| Formform | pdfx | Components | Free | 1 dep · 3 files | |
| Graphgraph | pdfx | Components | Free | 1 dep · 4 files | |
| Headingheading | pdfx | Components | Free | 1 dep | |
| KeepTogetherkeep-together | pdfx | Components | Free | 1 dep |
