Datatable Example
Translate in French
1 - 50 / 500
0 selected
First name | lastName | Age | Visits | Status | Description | Profile Progress | ||
|---|---|---|---|---|---|---|---|---|
| Fannie | Gottlieb | 31 | 326 | single | 77 | |||
| Gideon | Mann | 33 | 342 | complicated | 99 | |||
| Daniel | Jacobi | 28 | 379 | complicated | 45 | |||
| Ashton | Torphy | 3 | 802 | complicated | 82 | |||
| Nathan | Pfeffer | 7 | 17 | relationship | 97 | |||
| Belinda | Spinka | 18 | 992 | relationship | 66 | |||
| Winifred | Schinner | 30 | 174 | complicated | 16 | |||
| Kirk | Hudson | 14 | 198 | single | 32 | |||
| Jacob | Casper | 5 | 686 | single | 93 | |||
| Stella | Miller | 1 | 661 | complicated | 31 | |||
| Alison | Cole | 7 | 813 | complicated | 3 | |||
| Duncan | Bradtke | 25 | 518 | relationship | 44 | |||
| Tristian | Ferry | 12 | 781 | relationship | 99 | |||
| Jerome | Flatley-Waters | 40 | 718 | complicated | 79 | |||
| Rosemary | Barton | 22 | 312 | relationship | 70 | |||
| Ollie | Cole | 2 | 978 | complicated | 29 | |||
| Tessie | Kertzmann | 31 | 292 | single | 34 | |||
| Maryann | Bernier | 34 | 927 | relationship | 40 | |||
| Jordane | Hoeger | 3 | 300 | relationship | 98 | |||
| Rhett | Hyatt | 22 | 173 | single | 66 | |||
| Wesley | Cremin | 31 | 768 | relationship | 1 | |||
| Hermann | Windler | 20 | 168 | relationship | 58 | |||
| Kaleb | Upton | 3 | 893 | single | 54 | |||
| Kara | Willms | 4 | 880 | relationship | 49 | |||
| Benjamin | Denesik | 7 | 757 | complicated | 45 | |||
| Kristy | Blick | 40 | 849 | single | 11 | |||
| Annalise | Mann | 12 | 300 | complicated | 89 | |||
| Paolo | Medhurst | 19 | 283 | single | 47 | |||
| Samuel | Krajcik-Stiedemann | 22 | 152 | complicated | 52 | |||
| Fred | Rosenbaum-Funk | 29 | 140 | complicated | 49 | |||
| Erin | Schumm | 25 | 211 | relationship | 95 | |||
| Hugh | Considine | 6 | 404 | single | 36 | |||
| Britney | Becker | 38 | 748 | relationship | 84 | |||
| Orlando | McClure | 18 | 951 | relationship | 67 | |||
| Ernesto | Brown-Flatley | 25 | 298 | single | 7 | |||
| Maye | Haley | 21 | 14 | single | 75 | |||
| Ruben | Grant | 37 | 550 | complicated | 61 | |||
| Walter | Flatley | 0 | 483 | single | 73 | |||
| Fernando | Prosacco | 2 | 756 | relationship | 36 | |||
| Adolph | Osinski | 7 | 997 | single | 61 | |||
| Chester | Greenfelder | 19 | 337 | single | 81 | |||
| Calvin | Schuster | 35 | 615 | single | 95 | |||
| Kristie | Ratke | 28 | 752 | complicated | 42 | |||
| Sadye | Ruecker | 31 | 134 | single | 54 | |||
| Modesto | O'Hara | 34 | 968 | single | 26 | |||
| Ora | O'Reilly | 31 | 761 | relationship | 36 | |||
| Jonathan | Fay | 8 | 916 | complicated | 6 | |||
| Harry | Kovacek | 8 | 578 | complicated | 5 | |||
| Porter | Corkery | 28 | 763 | single | 59 | |||
| Alba | Hand | 40 | 644 | relationship | 97 |
Selected
{
"selectAll": false,
"selectedIds": [],
"excludedIds": []
}How to use this separator
Props
| Name | Type | Default | Description |
|---|---|---|---|
| data | MyCustomType[] | - | The data displayed in the tab. |
| columns | <ColumnDef<MyCustomType>[]> | - | The name of the colomns, how to get it, actions on column... |
| isLoading | boolean | - | Displays a skeleton on rows while loading. |
| tableOptions | {onRowSelectionChange, getSortedRowModel, getPaginationRowModel, onPaginationChange, enableRowSelection, onColumnOrderChange } | - | Change the default rendered element for the one passed as a child, merging their props and behavior. |
| tableState | {columnVisibility, columnOrder: string[], columnPinning:{left: string[], right: string[] }, rowPinning{bottom: string[], top: string[] }, columnFilters: {id: string, value: unknown }[], globalFilter: any, sorting: {desc: boolean, id: string }[], expanded:?, grouping: string[], columnSizing:?, columnSizingInfo: { columnSizingStart: [string, number][], deltaOffset: null | number,deltaPercentage: null | number,isResizingColumn: false | string, startOffset: null | number, startSize: null | number } } | - | Change the default rendered element for the one passed as a child, merging their props and behavior. |
| onClickRow | (row: Row<TData>) => void | - | Action function triggered when the user clicks on a row. |
| onResetTable | () => void | - | Reset localStorage used for preferences (order table, number of rows...). |
| toolbar | ReactNode | - | Put anything in this toolbar : button, text, select... |
| selection | { createSelectionColumn?: boolean, totalSelectableCount?: number,selectionState?: {state, onSelectionChange}, handlers?: {isRowSelected?,toggleRow?,toggleSelectAll?,getSelectionCount?,clearSelection?,isAllSelected?,isSomeSelected?},selectionHeader?: {custom?: (props: {selectionState: SelectionState}) => ReactNode, actions?: (props: {selectionState: SelectionState}) => ReactNode} } | - | Activate and changes the default display or behavior of the table selection |
Playground
Import from @filigran/ui :
Import {Separator} from '@filigran/ui'
Everything possible for declaring columns :
const columns = useMemo<ColumnDef<Person>[]>( () => [ { id: 'select', size: 20, header: ({table}) => ( <Checkbox className="flex" checked={ table.getIsAllPageRowsSelected() || (table.getIsSomePageRowsSelected() && 'indeterminate') } onCheckedChange={(value) => table.toggleAllPageRowsSelected(!!value) } aria-label="Select all" /> ), cell: ({row}) => ( <Checkbox className="flex" checked={row.getIsSelected()} onClick={(e) => e.stopPropagation()} onCheckedChange={(value) => { row.toggleSelected(!!value) }} aria-label="Select row" /> ), enableSorting: false, enableHiding: false, enableResizing: false }, { id: 'firstName', accessorKey: 'firstName', enableHiding: true, enableSorting: false, cell: (info) => ( <HighlightSearchTerm text={info.getValue() as string} /> ), header: 'First name' }, { accessorFn: (row) => row.lastName, id: 'lastName', enableHiding: false, cell: (info) => ( <HighlightSearchTerm text={info.getValue() as string} /> ), header: (header) => ( <DataTableOptionsHeader column={header.column} title={'Last name'} menuItems={ <> <DropdownMenuItem onClick={() => console.log(header.column)}> Log column </DropdownMenuItem> <DropdownMenuItem onClick={() => console.log(header.column)}> Log column 2 </DropdownMenuItem> </> } /> ) }, { id: 'age', accessorKey: 'age', header: 'Age' }], [])
<DataTable data={data} columns={columns} isLoading={loading} i18nKey={isCheckedI18n ? frenchI18nKey : {}} tableOptions={{ onRowSelectionChange: setRowSelection, getSortedRowModel: getSortedRowModel(), getPaginationRowModel: getPaginationRowModel(), onPaginationChange: setPagination, enableRowSelection: (row) => row.original.age > 18, //only enable row selection for adults onColumnOrderChange: setColumnOrder }} tableState={{ rowSelection, pagination, columnOrder, columnPinning: { left: ['select'] } //Force left column on the left, can not be pinned. }} selection={{ createDefaultSelectionColumn: true, totalSelectableCount: totalSelectable, defaultSelectionHeaderActions: ({ selectionState }) => ( <> <Button variant="ghost-destructive" size="icon" className="border" onClick={() => console.log(selectionState)}> <Trash className="size-4" /> </Button> </> ), }} onClickRow={(row) => console.log(row)} // Action on click />