Tanstack Table
När du behöver mer avancerade funktioner för tabeller rekommenderar vi att du använder Tanstack Table. Det är ett kraftfullt "headless"-verktyg, vilket innebär att det inte renderar någon markup eller stilar åt dig. Detta ger dig full kontroll över tabellens utseende, och vi har tillhandahållit stilar för att säkerställa att den matchar Midas utseende och känsla.
Stilarna för Tanstack Table är just nu i en tidig version och är ett arbete som pågår. Tanstack Table är inte en del av kärnbiblioteket i Midas, vilket innebär att supporten är begränsad. Vi är öppna för kodbidrag till vårt repo och tar gärna emot förslag på stilar som saknas när du implementerar Tanstack Table.
När du ska använda Tanstack Table
Använd Tanstack Table när du behöver funktioner som:
- Paginering
- Sortering
- Filtrering
- Radmarkering
- Kolumnordning
- Och mycket mer!
För enklare tabeller som inte kräver denna funktionalitet kan du använda den grundläggande Midas-tabellkomponenten.
Komma igång
För att använda Tanstack Table med Midas-stilar måste du först installera de nödvändiga beroendena:
npm install @tanstack/react-table @midas-ds/table-styles
Importera sedan Midas-stilarna för tabellen:
@import '@midas-ds/table-styles/tanstack-table.css';
Använd class midas-tanstack-table:
<table className={'midas-tanstack-table'}>...</table>
Här är ett minimalt exempel för att komma igång:
import { useReactTable, getCoreRowModel, flexRender, ColumnDef } from '@tanstack/react-table'
import '@midas-ds/table-styles/tanstack-table.css'
type Person = {
name: string
age: number
}
const columns: ColumnDef<Person>[] = [
{ accessorKey: 'name', header: 'Namn' },
{ accessorKey: 'age', header: 'Ålder' },
]
const data: Person[] = [
{ name: 'Anna', age: 28 },
{ name: 'Erik', age: 35 },
]
function MyTable() {
const table = useReactTable({
data,
columns,
getCoreRowModel: getCoreRowModel(),
})
return (
<table className='midas-tanstack-table'>
<thead>
{table.getHeaderGroups().map(headerGroup => (
<tr key={headerGroup.id}>
{headerGroup.headers.map(header => (
<th key={header.id}>{flexRender(header.column.columnDef.header, header.getContext())}</th>
))}
</tr>
))}
</thead>
<tbody>
{table.getRowModel().rows.map(row => (
<tr key={row.id}>
{row.getVisibleCells().map(cell => (
<td key={cell.id}>{flexRender(cell.column.columnDef.cell, cell.getContext())}</td>
))}
</tr>
))}
</tbody>
</table>
)
}
Användbara länkar
Här är några resurser som hjälper dig att komma igång med TanStack Table:
- TanStack Table v8 Docs: Den officiella dokumentationen är den bästa platsen att lära sig om alla funktioner och hur man använder dem.
- Exempel: En stor samling exempel som visar hur man implementerar olika funktioner.
Exempel
Sortering
Tanstack Table har inbyggt stöd för sortering med getSortedRowModel. Klicka på kolumnrubrikerna för att sortera tabellen.
ID | Förnamn | Efternamn | E-post | Avdelning | Status |
|---|---|---|---|---|---|
| 1 | Anna | Andersson | anna.andersson@example.com | Engineering | Active |
| 2 | Erik | Eriksson | erik.eriksson@example.com | Marketing | Active |
| 3 | Maria | Svensson | maria.svensson@example.com | HR | Inactive |
| 4 | Lars | Larsson | lars.larsson@example.com | Sales | Active |
| 5 | Karin | Nilsson | karin.nilsson@example.com | Engineering | Pending |
| 6 | Johan | Johansson | johan.johansson@example.com | Finance | Active |
| 7 | Emma | Karlsson | emma.karlsson@example.com | Marketing | Inactive |
| 8 | Sofia | Pettersson | sofia.pettersson@example.com | Engineering | Pending |
I detta exempel används:
sortingstate för att hålla reda på vilka kolumner som är sorterade och i vilken riktninggetSortedRowModel()för att hantera sorteringencolumn.getToggleSortingHandler()för att växla sorteringsriktning vid klickcolumn.getIsSorted()för att visa rätt sorteringsikonArrowUp,ArrowDown, ochArrowUpDownfrånlucide-reactsom sorteringsindikatorer- Klasserna
sortable-headerochsort-icon-neutralför att få rätt hover-beteende
Viktigt att notera: Sorteringsikonen (ArrowUpDown) är dold som standard och visas automatiskt vid hover tack vare stilarna i tanstack-table.css. När en kolumn är sorterad visas ArrowUp eller ArrowDown istället.
Läs mer om sortering i Tanstack Table's dokumentation.
Filtrering
Tanstack Table har inbyggt stöd för filtrering med getFilteredRowModel. Du kan använda alla standardformulärkomponenter från Midas för att skapa filterkontrollen.
| ID | Förnamn | Efternamn | E-post | Avdelning | Status |
|---|---|---|---|---|---|
| 1 | Anna | Andersson | anna.andersson@example.com | Engineering | Active |
| 2 | Erik | Eriksson | erik.eriksson@example.com | Marketing | Active |
| 3 | Maria | Svensson | maria.svensson@example.com | HR | Inactive |
| 4 | Lars | Larsson | lars.larsson@example.com | Sales | Active |
| 5 | Karin | Nilsson | karin.nilsson@example.com | Engineering | Pending |
| 6 | Johan | Johansson | johan.johansson@example.com | Finance | Active |
| 7 | Emma | Karlsson | emma.karlsson@example.com | Marketing | Inactive |
| 8 | Sofia | Pettersson | sofia.pettersson@example.com | Engineering | Pending |
I detta exempel används:
globalFilterför textsökning över flera kolumnercolumnFiltersför att filtrera på specifika kolumnergetFilteredRowModel()för att hantera filtreringen
Läs mer om filtrering i Tanstack Table's dokumentation.
Kolumnsynlighet
Tanstack Table gör det enkelt att låta användare välja vilka kolumner som ska visas med columnVisibility state.
{
table.getAllLeafColumns().map(column => (
<Checkbox
key={column.id}
isSelected={column.getIsVisible()}
onChange={isSelected => column.toggleVisibility(isSelected)}
>
{typeof column.columnDef.header === 'string' ? column.columnDef.header : column.id}
</Checkbox>
))
}
| ID | Förnamn | Efternamn | E-post | Avdelning | Status |
|---|---|---|---|---|---|
| 1 | Anna | Andersson | anna.andersson@example.com | Engineering | Active |
| 2 | Erik | Eriksson | erik.eriksson@example.com | Marketing | Active |
| 3 | Maria | Svensson | maria.svensson@example.com | HR | Inactive |
| 4 | Lars | Larsson | lars.larsson@example.com | Sales | Active |
| 5 | Karin | Nilsson | karin.nilsson@example.com | Engineering | Pending |
| 6 | Johan | Johansson | johan.johansson@example.com | Finance | Active |
| 7 | Emma | Karlsson | emma.karlsson@example.com | Marketing | Inactive |
| 8 | Sofia | Pettersson | sofia.pettersson@example.com | Engineering | Pending |
I detta exempel används:
columnVisibilitystate för att hålla reda på vilka kolumner som är synligacolumn.getIsVisible()för att kontrollera om en kolumn är synligcolumn.getToggleVisibilityHandler()för att växla synlighet
Läs mer om kolumnsynlighet i Tanstack Table's dokumentation.
Drag and Drop-kolumner
Med hjälp av @dnd-kit kan du låta användare ordna om kolumner genom att dra och släppa dem. Detta ger en intuitiv och användarvänlig upplevelse för att anpassa tabellens layout.
Först, installera de nödvändiga beroendena:
npm install @dnd-kit/core @dnd-kit/sortable @dnd-kit/utilities @dnd-kit/modifiers
ID | Förnamn | Efternamn | E-post | Avdelning | Status |
|---|---|---|---|---|---|
| 1 | Anna | Andersson | anna.andersson@example.com | Engineering | Active |
| 2 | Erik | Eriksson | erik.eriksson@example.com | Marketing | Active |
| 3 | Maria | Svensson | maria.svensson@example.com | HR | Inactive |
| 4 | Lars | Larsson | lars.larsson@example.com | Sales | Active |
| 5 | Karin | Nilsson | karin.nilsson@example.com | Engineering | Pending |
| 6 | Johan | Johansson | johan.johansson@example.com | Finance | Active |
| 7 | Emma | Karlsson | emma.karlsson@example.com | Marketing | Inactive |
| 8 | Sofia | Pettersson | sofia.pettersson@example.com | Engineering | Pending |
I detta exempel används:
columnOrderstate för att hålla reda på ordningen av kolumnernaDndContextför att hantera drag and drop-funktionalitetSortableContextför att göra kolumner sorterbarauseSortablehook för att göra individuella kolumner draggbaraarrayMovefrån@dnd-kit/sortableför att ordna om kolumnernaGripVerticalfrånlucide-reactsom drag-ikon som visas vid hover- Klassen
drag-handleför att få rätt hover-beteende
Viktigt att notera: Drag-ikonen är dold som standard och visas automatiskt vid hover över kolumnrubriken tack vare stilarna i tanstack-table.css.
Läs mer om column ordering i Tanstack Table's dokumentation.