Skip to main content
Version: Next

DataTable

DataTable wraps ui-data-table. Like Table, it expects real HTML table markup as children. The React wrapper adds the event and attribute bridge for sorting, paging, filtering, virtualization, and selection.

Basic Usage

import { Badge, DataTable } from '@editora/ui-react';

function UsersTable() {
return (
<DataTable sortable striped hover page={1} pageSize={6}>
<table>
<thead>
<tr>
<th data-key="name">Name</th>
<th data-key="email">Email</th>
<th data-key="status">Status</th>
</tr>
</thead>
<tbody>
<tr>
<td>Ava Johnson</td>
<td>ava@acme.com</td>
<td><Badge tone="success" variant="soft">Active</Badge></td>
</tr>
</tbody>
</table>
</DataTable>
);
}

Core Props

PropTypeDescription
sortablebooleanEnable sorting
selectablebooleanEnable row selection
multiSelectbooleanAllow multi-select
shape'default' | 'square' | 'soft'Surface shape
variant'default' | 'flat' | 'contrast'Surface variant
elevation'default' | 'none' | 'low' | 'high'Elevation token
stripedbooleanZebra-strip rows
hoverbooleanHover feedback
compactbooleanCompact density
borderedbooleanStronger borders
stickyHeaderbooleanSticky header
stickyFooterbooleanSticky footer
loadingbooleanLoading flag
state'idle' | 'loading' | 'error' | 'success'Visual state
stateTextstringState label
headlessbooleanRemove default styling
hideSummarybooleanHide summary footer
emptyTextstringEmpty-state copy
pagenumberCurrent page
pageSizenumberPage size
paginationIdstringPagination target id
filterQuerystringGlobal search query
filterColumnstring | numberFocus a single filter column
filterRulesDataTableFilterRule[]Structured filters
columnOrderstringColumn order serialization
pinColumnsstring | { left?: Array<string | number>; right?: Array<string | number> }Pinned columns
draggableColumnsbooleanDrag-reorder headers
resizableColumnsbooleanResize columns
bulkActionsLabelstringBulk action label
bulkClearLabelstringBulk clear label
virtualizebooleanEnable virtualization
rowHeightnumberVirtual row height
overscannumberVirtual overscan window

Events

PropDetail
onSortChangecolumnIndex, key, direction, page
onRowSelectindex, selected, indices, rows, page
onPageChangepage, count, pageSize, total, start, end
onFilterChangequery, filters, total, filtered, page, count
onColumnResizecolumnIndex, key, width
onVirtualRangeChangestart, end, visible, total
onColumnOrderChangesourceIndex, targetIndex, order, keys
onBulkClearcount, page

Paginated + Selectable

<DataTable
sortable
selectable
multiSelect
page={page}
pageSize={6}
paginationId="users-pagination"
onPageChange={(detail) => setPage(detail.page)}
onRowSelect={(detail) => setSelected(detail.indices)}
>
<table>{/* thead / tbody / tfoot */}</table>
</DataTable>

Notes

  • Use header th[data-key] values so sort and order-change events carry stable keys.
  • Use Table when you only need lightweight sorting/selection without paging or filters.