Cerca...

Cerca nella documentazione...

Data Table

Data Table

Un wrapper per TanStack Table — ordinamento, filtri per colonna, ricerca globale, visibilità delle colonne, blocco (pinning), trascinamento per riordinare, trascinamento per ridimensionare, selezione righe e paginazione, tutto controllabile o lasciato non controllato. columns usa la forma ColumnDef propria di TanStack.

import {
  DataTable,
  DataTableColumnHeader,
  type ColumnDef,
} from "@pompeitech/vesuvius-ui";

Default

ORD-001Ada Lovelacedelivered$128.50
ORD-002Grace Hopperprocessing$64.00
ORD-003Alan Turingpending$245.75
ORD-004Margaret Hamiltonshipped$89.99
4 row(s) total.
Rows per page
Page 1 of 1

Clicca un'intestazione di colonna per ordinare — cicla tra ascendente → discendente → non ordinato.

Costruirci sopra

ElementoAggiunge
createSelectionColumn()Una colonna checkbox per la selezione delle righe — anteponila a columns.
DataTableToolbarUn input di ricerca globale + un menu di visibilità "Columns", sopra la tabella.
DataTableFacetedFilterUn filtro multi-select a faccette per una colonna, inserito nella toolbar.
DataTableColumnHeaderCella di intestazione ordinabile — clicca per ordinare, include l'icona di direzione dell'ordinamento.
DataTablePaginationDimensione pagina + controlli precedente/successivo, sotto la tabella.
useDataTable(props)L'hook che DataTable stesso usa — chiamalo direttamente per il pieno controllo sull'istanza table (ad es. per guidare tu stesso DataTableToolbar/DataTablePagination attorno a un layout personalizzato).

API

DataTable

PropTipoDescrizione
columnsColumnDef<TData>[]Obbligatorio — la forma di definizione colonna propria di TanStack.
dataTData[]Obbligatorio.
getRowId(row: TData) => stringIdentità di riga stabile tra ri-ordinamenti/ri-filtri — senza, TanStack ripiega sull'indice di riga, il che rompe lo stato di selezione/pinning quando l'ordine delle righe cambia.
enableRowSelectionbooleanNecessario insieme a createSelectionColumn() perché le checkbox commutino davvero.
enableColumnPinningboolean
enableColumnResizingbooleanAttiva la maniglia di trascinamento-per-ridimensionare sui bordi delle colonne.
manualSorting / manualFilteringbooleanDa impostare quando ordinamento/filtro avvengono lato server — TanStack allora smette di ordinare/filtrare data da solo e traccia solo lo stato richiesto perché tu agisca di conseguenza.
enableExportbooleanAggiunge l'azione Export CSV per le righe visibili e filtrate.
exportFilenamestringNome del file CSV scaricato. Default export.csv.
exportSelectedOnlybooleanEsporta solo le righe selezionate invece di tutte quelle filtrate.
bulkActionsReactNode | ({ rows, table }) => ReactNodeAzioni mostrate quando una o più righe sono selezionate.

Ognuno dei seguenti segue la stessa forma a coppia non controllata/controllata — una prop default* per il valore iniziale, più */on*Change per una versione pienamente controllata (stesso pattern di defaultValue/value/onValueChange di Select):

La tabella occupa sempre tutta la larghezza del contenitore. Se la somma delle larghezze delle colonne supera lo spazio disponibile, scorre orizzontalmente solo l'area della tabella senza tagliare il layout della pagina.

StatoProp non controllataProp controllataGestore di cambiamento
OrdinamentodefaultSortingsortingonSortingChange
Filtri colonnadefaultColumnFilterscolumnFiltersonColumnFiltersChange
Ricerca globaledefaultGlobalFilterglobalFilteronGlobalFilterChange
Visibilità colonnedefaultColumnVisibilitycolumnVisibilityonColumnVisibilityChange
Blocco colonnedefaultColumnPinningcolumnPinningonColumnPinningChange
Ordine colonnedefaultColumnOrdercolumnOrderonColumnOrderChange
Dimensione colonnedefaultColumnSizingcolumnSizingonColumnSizingChange
Selezione righedefaultRowSelectionrowSelectiononRowSelectionChange
PaginazionedefaultPaginationpaginationonPaginationChange

Accessibilità

Renderizza sotto un vero <table> (stessa semantica di Table). La maniglia di ridimensionamento su ogni bordo di colonna è un vero elemento role="slider" con aria-valuenow/aria-valuemin/aria-valuemax e un aria-label descrittivo — il ridimensionamento delle colonne non è solo-puntatore, a differenza del trascinamento-per-riordinare, che al momento non ha un equivalente da tastiera; l'ordine delle colonne è comunque solo stato, non l'unico modo per raggiungere i dati di una colonna, quindi un ordine fisso resta pienamente utilizzabile.