# Top Level Props
## MUITable Props
The ****[**configurable example**](https://parkerself22.github.io/mui-tables/) is a great way to see all of the options in action.
```jsx
```
| Prop | Type | Required | Default |
| :--- | :--- | :--- | :--- |
| title | `ReactNode` | ✅ | n/a |
| data | `Object[]` | ✅ | n/a |
| loading | `boolean` | ❌ | `false` |
| [columns](options.md#columnoptions) | `ColumnOptions` | ✅ | n/a |
| [display](options.md#displayoptions) | `DisplayOptions` | ❌ | `DisplayOptionsDefault` |
| [toolbar](options.md#toolbaroptions) | `ToolbarOptions` | ❌ | `ToolbarOptionsDefault` |
| [rows](options.md#rowoptions) | `RowOptions` | ❌ | `RowOptionsDefault` |
| [pagination](options.md#paginationoptions) | `PaginationOptions` | ❌ | `PaginationOptionsDefault` |
| [translations](translationoptions.md) | `TranslationOptions` | ❌ | `TranslationOptionsDefault` |
| [hooks](options.md#hookoptions) | `HookOptions` | ❌ | `HookOptionsDefault` |
## `ColumnOptions`
[Expanded in Column Options page](column-options.md)
| Prop | Type | Description | Required | Default |
| :--- | :--- | :--- | :--- | :--- |
| [static](column-options.md#columnprop) | `ColumnProp[]` | Column definitions | ✅ | n/a |
| [generated](column-options.md#generatedcolumn) | `GeneratedColumn[]` | Define columns generated from the data set | ❌ | `[]` |
| sortColumns | `(columns: StateColumn[]) => StateColumn[]` | Function to sort the order of the columns once generated. Especially useful with `GeneratedColumns` | ❌ | `[]` |
## `DisplayOptions`
**None of these are required.**
These are all of the highest level functionality options
| Prop |
Type |
Description |
Default |
| sort |
boolean
|
Allow sorting |
true
|
| paginate |
boolean
|
Pagination footer |
true
|
| filter |
boolean
|
Filter toolbar |
true
|
| fixedSearch |
boolean
|
Fixed search bar under title |
false
|
| search |
boolean
|
Button to toggle search bar |
true
|
| download |
boolean
|
Download button |
false
|
| fixedHeader |
boolean
|
Fixed column headers |
true
|
| viewColumns |
boolean
|
Ability to toggle column visibility |
true
|
| elevation |
number
|
Paper elevation for entire table |
4
|
| responsive |
"stacked" |
"scroll"
|
Wrap or horizontal scroll overflow |
'scroll'
|
| filterValues |
boolean
|
Show current filters as chips under top toolbar |
true
|
## `ToolbarOptions`
| Prop | Type | Description | Required | Default |
| :--- | :--- | :--- | :--- | :--- |
| showDates | `boolean` | Show the date toolbar? | ✅ | `false` |
| startDate | `Date` | If `showDates` and not provided, start date picker won't render | ❌ | `undefined` |
| endDate | `Date` | If `showDates` and not provided, end date picker won't render | ❌ | `undefined` |
| handleDateChange | `(isStart: boolean) => (value: Date) => void` | Called first with `isStart`, and should return change handler. | `showDates === true` | n/a |
| startLabel | `string` | Label for start date picker | ❌ | `"Start Date"` |
| endLabel | `string` | Label for end date picker | ❌ | `"End Date"` |
| customToolbarRight | `(context: MUITableContext) => ReactNode` | [See Custom Components.](../features/custom-components.md) | ❌ | `undefined` |
| customToolbarLeft | `(context: MUITableContext) => ReactNode` | [See Custom Components.](../features/custom-components.md) | ❌ | `undefined` |
| customToolbarBottom | `(context: MUITableContext) => ReactNode` | [See Custom Components.](../features/custom-components.md) | ❌ | `undefined` |
| customToolbarFull | `(context: MUITableContext) => ReactNode` | [See Custom Components.](../features/custom-components.md) | ❌ | `undefined` |
## `RowOptions`
None of these are required.
| Prop | Type | Description | Default |
| :--- | :--- | :--- | :--- |
| rowHover | `boolean` | Shade rows on hover | `false` |
| showSummaryRow | `boolean` | Show summary row | `false` |
| selectable | `boolean` | Selectable rows? | `false` |
| summaryTop | `boolean` | Show summary at top? | `true` |
| setRowProps | `(row: Row, rowIndex: number) => Object` | Set props on the standard MUI TableRow component | `undefined` |
| customToolbarSelect | `(selectedRows: Row[], context: MUITableContext) => ReactNode` | Render a custom toolbar when rows selected | `"End Date"` |
| selectBarTop | `boolean` | Show the selected rows toolbar in top of table | `true` |
| selectBarActions | `(context: MUITableContext) => ReactNode` | [See Custom Components.](../features/custom-components.md) | `undefined` |
| hideSelectDelete | `boolean` | Hide the default delete button in selected toolbar | `false` |
| skipDuplicates | `boolean` | See Row Merging / Duplication | `false` |
| mergeDuplicates | `boolean` | See Row Merging / Duplication | `false` |
| mergeFunction | `(rows: Row[]) => Row` | See Row Merging / Duplication | `undefined` |
| hiddenColumnMerge | `boolean` | See Row Merging / Duplication | `false` |
## `PaginationOptions`
None of these are required.
| Prop | Type | Description | Default |
| :--- | :--- | :--- | :--- |
| page | `number` | Initial page. Will not affect subsequent renders if changed. | `0` |
| rowsPerPage | `boolean` | Initial rowsPerPage. Will not affect subsequent renders if changed. | `5` |
| rowsPerPageOptions | `number[]` | Choices for rowsPerPage | `[5,25,50]` |
| customFooter | `(context: MUITableContext) => ReactNode` | Render a custom footer instead of pagination. | `undefined` |
## `TranslationOptions`
[See the TranslationOptions page for all the text labels.](translationoptions.md)
## `HookOptions`
None of these are required.
```typescript
{
onSearchChange?: (searchText: string) => void;
onRowsSelect?: (
newSelections: Row[],
removedSelections: Row[],
currentSelections: Row[]
) => void;
onRowsDelete?: (rowsDeleted: Row[]) => void;
onFilterChange?: (change: string | string[], filterList: string[][]) => void;
onRowClick?: (row: Row, rowIndex: number) => void;
onCellClick?: (cell: Cell, row: Row, rowIndex: number) => void;
onColumnSortChange?: (changedColumn: StateColumn, direction: 'asc' | 'desc' | null) => void;
onColumnViewChange?: (changedColumn: StateColumn, visible: boolean) => void;
onChangePage?: (currentPage: number) => void;
onChangeRowsPerPage?: (numberOfRows: number) => void;
}
```