Volt UI
ComponentsData Table

API Reference

Complete API reference for DataTable components.

DataTable

The main table component that wraps Tanstack Table.

PropTypeDefaultDescription
columnsColumnDef<TData>[]-Column definitions (required)
dataTData[]-Data array (required)
getRowId(row: TData) => string-Custom row ID accessor
enableRowSelectionboolean | ((row) => boolean)falseEnable checkbox selection
enableSortingbooleanfalseEnable column sorting
manualSortingbooleanfalseSkip client-side sorting (for server-side sorting)
enableFilteringbooleanfalseEnable column filtering
manualFilteringbooleanfalseSkip client-side filtering (for server-side filtering)
enableGlobalFilterbooleanfalseEnable global search
paginationPaginationConfig-Pagination configuration
virtualizationVirtualizationConfig-Virtualization configuration
sortingSortingState-Controlled sorting state
onSortingChange(state) => void-Sorting change callback
defaultSortingSortingState[]Default sorting for uncontrolled mode
rowSelectionRowSelectionState-Controlled selection state
onRowSelectionChange(state) => void-Selection change callback
defaultRowSelectionRowSelectionState{}Default selection for uncontrolled mode
columnFiltersColumnFiltersState-Controlled column filters state
onColumnFiltersChange(filters) => void-Column filters change callback
globalFilterstring-Controlled global filter
onGlobalFilterChange(value) => void-Global filter change callback
onRowClick(row, event) => void-Handler for row clicks (enables clickable mode)
clickableRowClassNamestringhover:bg-accent-a3Custom hover class for clickable rows
selectedRowClassNamestring-Custom class for selected rows (overrides default bg-accent-a3)
cellOverflow"grow" | "wrap" | "truncate""grow"How cells handle overflow. Can be overridden per-column via meta.cellOverflow
disableColumnResizingbooleanfalseDisable column width resizing (enabled by default)
resizeHandleVisibility"always" | "onHeaderHover""onHeaderHover"When resize handles are visible: always or only on header hover
columnResizeMode"onChange" | "onEnd""onChange"When to update sizes: during drag or after
columnSizingColumnSizingState-Controlled column sizing state
onColumnSizingChange(sizing) => void-Callback when column sizes change
defaultColumnSizingColumnSizingState{}Initial sizing for uncontrolled mode
columnPinningColumnPinningState-Controlled column pinning state { left?: string[], right?: string[] }
onColumnPinningChange(pinning) => void-Callback when column pinning changes
defaultColumnPinningColumnPinningState{ left: [], right: [] }Initial pinning for uncontrolled mode
autoPinSelectionbooleanfalseAuto-pin selection column when rows are selected
density"compact" | "normal" | "comfortable""normal"Row height density for headers and cells
classNamestring-Additional CSS classes

DataTablePagination

Pagination controls that integrate with the DataTable context.

PropTypeDefaultDescription
pageSizeOptionsnumber[][10, 25, 50, 100]Page size options
siblingCountnumber2Number of sibling pages to show on each side
classNamestring-Additional CSS classes

DataTableColumnHeader

Sortable column header button with sort indicators.

PropTypeDefaultDescription
columnColumn<TData>-Tanstack column instance (required)
titlestring-Header title (required)
classNamestring-Additional CSS classes

DataTableColumnVisibility

Dropdown menu for toggling column visibility.

PropTypeDefaultDescription
labelstring-Label shown at top of dropdown and as screen reader text (required)
iconReactNodeSettings gearCustom icon for the default trigger button
triggerReactNode-Custom trigger element (overrides default icon button)
align"start" | "center" | "end""end"Dropdown alignment relative to trigger
contentClassNamestring-Additional CSS classes for dropdown content

DataTableToolbar

Container for filters and actions above the table.

PropTypeDefaultDescription
childrenReactNode-Toolbar content
classNamestring-Additional CSS classes

DataTableFooter

Container for custom content between the table and pagination.

PropTypeDefaultDescription
childrenReactNode-Footer content
classNamestring-Additional CSS classes

DataTableHeader

Table header component with support for sticky positioning and custom background.

PropTypeDefaultDescription
stickybooleanfalseMakes header sticky during scroll (auto-enabled with virtualization)
stickyBackgroundstring"var(--volt-gray-2)"Background color for sticky header and pinned header cells
classNamestring-Additional CSS classes

DataTableBody

Table body component with support for loading, error, and empty states.

PropTypeDefaultDescription
isLoadingbooleanfalseWhether to show loading state
loadingStateReactNode-Content to show when loading (typically <DataTableLoading />)
isErrorbooleanfalseWhether to show error state
errorStateReactNode-Content to show on error (typically <DataTableError />)
emptyStateReactNode"No results."Content to show when data is empty
classNamestring-Additional CSS classes

DataTableLoading

Loading state display component for use with DataTableBody.

PropTypeDefaultDescription
childrenReactNode-Custom loading content (overrides default spinner)
classNamestring-Additional CSS classes
// Default loading with spinner
<DataTableLoading />

// Custom loading content (i18n)
<DataTableLoading>
  <Spinner size="lg" />
  <p>{t('loading')}</p>
</DataTableLoading>

DataTableError

Error state display component with optional retry button.

PropTypeDefaultDescription
titlestring"Error loading data"Error title text
descriptionReactNode-Error description or message
retryLabelstring"Retry"Retry button text
onRetry() => void-Retry callback (shows button when provided)
childrenReactNode-Custom error content (overrides default)
classNamestring-Additional CSS classes
// Default error with retry
<DataTableError
  title="Failed to load data"
  description="Please try again."
  onRetry={() => refetch()}
/>

// Custom error content (i18n)
<DataTableError>
  <AlertIcon />
  <p>{t('error.title')}</p>
  <Button onClick={refetch}>{t('retry')}</Button>
</DataTableError>

useDataTable

Hook to access the Tanstack Table instance from child components.

function TableInfo() {
  const { table } = useDataTable()

  return (
    <span>
      {table.getFilteredRowModel().rows.length} rows
    </span>
  )
}

getSelectedRowData

Utility function to extract selected row data from selection state.

import { getSelectedRowData } from "@epilot/volt-ui"

const selectedData = useMemo(
  () => getSelectedRowData(rowSelection, data),
  [rowSelection, data]
)
ParameterTypeDefaultDescription
rowSelectionRowSelectionState-The selection state from DataTable
dataTData[]-Your data array
getRowId(row: TData) => stringrow.idOptional ID accessor

Returns: TData[] - Array of selected data items

Pagination Configuration

type PaginationConfig = {
  pageIndex?: number         // Controlled page index (0-indexed)
  pageSize?: number          // Default: 10
  pageSizeOptions?: number[] // Default: [10, 25, 50, 100]
  totalItems?: number        // Server-side pagination total
  pageCount?: number         // Server-side pagination page count
  onPaginationChange?: (state: PaginationState) => void
}

Virtualization Configuration

type VirtualizationConfig = {
  enabled: boolean
  estimateRowHeight?: number // Default: 48
  overscan?: number          // Default: 10
  containerHeight?: number   // Default: 600
}