Datatable Example
Translate in French
1 - 50 / 500
0 selected
First name | lastName | Age | Visits | Status | Description | Profile Progress | ||
|---|---|---|---|---|---|---|---|---|
| Merritt | Lesch | 3 | 93 | single | 72 | |||
| Hershel | Klein | 30 | 446 | relationship | 94 | |||
| Brigitte | Stanton | 19 | 599 | relationship | 94 | |||
| Dudley | O'Connell | 4 | 845 | complicated | 64 | |||
| Gregoria | Gutkowski | 18 | 861 | relationship | 4 | |||
| Albina | Bahringer | 6 | 533 | relationship | 66 | |||
| Andreane | Shields-Tillman | 31 | 720 | relationship | 87 | |||
| Stewart | Barton | 10 | 605 | complicated | 81 | |||
| Dominick | Schamberger | 38 | 77 | complicated | 11 | |||
| Jared | Heaney | 11 | 200 | complicated | 52 | |||
| Elbert | Hintz | 22 | 358 | relationship | 30 | |||
| Yvette | Gutkowski | 34 | 765 | relationship | 36 | |||
| Sanford | Herman | 30 | 591 | complicated | 70 | |||
| Mollie | Franecki | 39 | 42 | single | 70 | |||
| Tyree | Miller | 22 | 937 | single | 6 | |||
| Sylvester | Zieme | 15 | 560 | relationship | 21 | |||
| Duane | Hyatt | 31 | 236 | single | 73 | |||
| Golda | Metz | 18 | 375 | complicated | 17 | |||
| Jennifer | Jacobs | 7 | 457 | complicated | 41 | |||
| Charlie | McKenzie | 26 | 424 | single | 90 | |||
| Giovani | Ankunding | 13 | 672 | single | 84 | |||
| Hubert | Graham | 39 | 965 | single | 51 | |||
| Kelvin | Roberts | 12 | 782 | relationship | 66 | |||
| Deanna | Wilkinson | 34 | 645 | complicated | 55 | |||
| Valentine | Bosco | 1 | 367 | relationship | 72 | |||
| Shaun | Buckridge | 2 | 688 | single | 37 | |||
| Arch | Botsford | 39 | 525 | complicated | 10 | |||
| Koby | Hayes | 25 | 17 | relationship | 43 | |||
| Elijah | Breitenberg | 40 | 460 | complicated | 75 | |||
| Brendan | Kshlerin | 14 | 826 | single | 88 | |||
| Micheal | Gusikowski | 10 | 776 | relationship | 68 | |||
| Aleen | Lemke | 4 | 760 | complicated | 70 | |||
| Stella | Reinger | 27 | 937 | complicated | 61 | |||
| Herman | Krajcik | 3 | 548 | complicated | 75 | |||
| Norwood | Turner | 27 | 529 | relationship | 21 | |||
| Sherri | Gleason | 22 | 879 | complicated | 41 | |||
| Adrienne | Morar | 14 | 303 | single | 49 | |||
| Fred | Cruickshank | 17 | 55 | complicated | 90 | |||
| Shane | Tromp | 32 | 399 | relationship | 87 | |||
| Patrick | Bayer | 4 | 83 | relationship | 21 | |||
| Hannah | Kub | 0 | 112 | single | 2 | |||
| Leopoldo | Moen | 39 | 311 | complicated | 23 | |||
| Osvaldo | Koepp | 11 | 650 | relationship | 2 | |||
| Bradford | Towne | 9 | 472 | single | 69 | |||
| Gloria | Reinger | 29 | 902 | relationship | 77 | |||
| Berenice | Conroy | 25 | 119 | relationship | 24 | |||
| Alberta | Parisian | 34 | 32 | complicated | 72 | |||
| Rosemarie | Jaskolski | 37 | 211 | single | 95 | |||
| Candace | Aufderhar | 13 | 361 | single | 10 | |||
| Jaquan | Sawayn | 8 | 369 | complicated | 50 |
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 />