material-react-table 2.0.0-alpha.0 → 2.0.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/README.md +2 -2
  2. package/dist/cjs/index.js +2480 -2392
  3. package/dist/cjs/index.js.map +1 -1
  4. package/dist/cjs/types/MaterialReactTable.d.ts +1 -1
  5. package/dist/cjs/types/body/MRT_TableBodyRow.d.ts +3 -2
  6. package/dist/cjs/types/body/MRT_TableBodyRowPinButton.d.ts +7 -0
  7. package/dist/cjs/types/body/index.d.ts +1 -0
  8. package/dist/cjs/types/buttons/MRT_GrabHandleButton.d.ts +1 -1
  9. package/dist/cjs/types/buttons/MRT_RowPinButton.d.ts +9 -0
  10. package/dist/cjs/types/buttons/index.d.ts +2 -1
  11. package/dist/cjs/types/column.utils.d.ts +7 -6
  12. package/dist/cjs/types/filterFns.d.ts +14 -14
  13. package/dist/cjs/types/head/MRT_TableHeadCellFilterLabel.d.ts +1 -1
  14. package/dist/cjs/types/head/MRT_TableHeadCellSortLabel.d.ts +1 -1
  15. package/dist/cjs/types/hooks/useMRT_DisplayColumns.d.ts +3 -3
  16. package/dist/cjs/types/icons.d.ts +1 -1
  17. package/dist/cjs/types/inputs/MRT_FilterRangeSlider.d.ts +1 -1
  18. package/dist/cjs/types/menus/MRT_ColumnActionMenu.d.ts +4 -4
  19. package/dist/cjs/types/menus/MRT_ShowHideColumnsMenuItems.d.ts +1 -1
  20. package/dist/cjs/types/toolbar/MRT_TablePagination.d.ts +2 -2
  21. package/dist/cjs/types/toolbar/MRT_TopToolbar.d.ts +1 -1
  22. package/dist/cjs/types/types.d.ts +203 -197
  23. package/dist/esm/material-react-table.esm.js +2442 -2358
  24. package/dist/esm/material-react-table.esm.js.map +1 -1
  25. package/dist/esm/types/MaterialReactTable.d.ts +1 -1
  26. package/dist/esm/types/body/MRT_TableBodyRow.d.ts +3 -2
  27. package/dist/esm/types/body/MRT_TableBodyRowPinButton.d.ts +7 -0
  28. package/dist/esm/types/body/index.d.ts +1 -0
  29. package/dist/esm/types/buttons/MRT_GrabHandleButton.d.ts +1 -1
  30. package/dist/esm/types/buttons/MRT_RowPinButton.d.ts +9 -0
  31. package/dist/esm/types/buttons/index.d.ts +2 -1
  32. package/dist/esm/types/column.utils.d.ts +7 -6
  33. package/dist/esm/types/filterFns.d.ts +14 -14
  34. package/dist/esm/types/head/MRT_TableHeadCellFilterLabel.d.ts +1 -1
  35. package/dist/esm/types/head/MRT_TableHeadCellSortLabel.d.ts +1 -1
  36. package/dist/esm/types/hooks/useMRT_DisplayColumns.d.ts +3 -3
  37. package/dist/esm/types/icons.d.ts +1 -1
  38. package/dist/esm/types/inputs/MRT_FilterRangeSlider.d.ts +1 -1
  39. package/dist/esm/types/menus/MRT_ColumnActionMenu.d.ts +4 -4
  40. package/dist/esm/types/menus/MRT_ShowHideColumnsMenuItems.d.ts +1 -1
  41. package/dist/esm/types/toolbar/MRT_TablePagination.d.ts +2 -2
  42. package/dist/esm/types/toolbar/MRT_TopToolbar.d.ts +1 -1
  43. package/dist/esm/types/types.d.ts +203 -197
  44. package/dist/index.d.ts +293 -272
  45. package/locales/en.esm.js +1 -0
  46. package/locales/en.esm.js.map +1 -1
  47. package/locales/en.js +1 -0
  48. package/locales/en.js.map +1 -1
  49. package/locales/fr.esm.js +1 -1
  50. package/locales/fr.esm.js.map +1 -1
  51. package/locales/fr.js +1 -1
  52. package/locales/fr.js.map +1 -1
  53. package/package.json +10 -9
  54. package/src/MaterialReactTable.tsx +2 -2
  55. package/src/body/MRT_TableBody.tsx +180 -76
  56. package/src/body/MRT_TableBodyCell.tsx +45 -43
  57. package/src/body/MRT_TableBodyCellValue.tsx +5 -5
  58. package/src/body/MRT_TableBodyRow.tsx +117 -29
  59. package/src/body/MRT_TableBodyRowGrabHandle.tsx +6 -5
  60. package/src/body/MRT_TableBodyRowPinButton.tsx +46 -0
  61. package/src/body/MRT_TableDetailPanel.tsx +16 -22
  62. package/src/body/index.ts +2 -1
  63. package/src/buttons/MRT_CopyButton.tsx +14 -20
  64. package/src/buttons/MRT_EditActionButtons.tsx +4 -4
  65. package/src/buttons/MRT_ExpandAllButton.tsx +7 -9
  66. package/src/buttons/MRT_ExpandButton.tsx +6 -7
  67. package/src/buttons/MRT_GrabHandleButton.tsx +12 -13
  68. package/src/buttons/MRT_RowPinButton.tsx +74 -0
  69. package/src/buttons/MRT_ShowHideColumnsButton.tsx +1 -1
  70. package/src/buttons/MRT_ToggleFullScreenButton.tsx +2 -2
  71. package/src/buttons/MRT_ToggleRowActionMenuButton.tsx +9 -10
  72. package/src/buttons/index.ts +2 -1
  73. package/src/column.utils.ts +33 -21
  74. package/src/filterFns.ts +29 -29
  75. package/src/footer/MRT_TableFooter.tsx +14 -8
  76. package/src/footer/MRT_TableFooterCell.tsx +8 -21
  77. package/src/footer/MRT_TableFooterRow.tsx +7 -8
  78. package/src/head/MRT_TableHead.tsx +12 -8
  79. package/src/head/MRT_TableHeadCell.tsx +18 -25
  80. package/src/head/MRT_TableHeadCellColumnActionsButton.tsx +18 -23
  81. package/src/head/MRT_TableHeadCellFilterContainer.tsx +11 -4
  82. package/src/head/MRT_TableHeadCellFilterLabel.tsx +106 -61
  83. package/src/head/MRT_TableHeadCellGrabHandle.tsx +8 -15
  84. package/src/head/MRT_TableHeadCellResizeHandle.tsx +11 -11
  85. package/src/head/MRT_TableHeadCellSortLabel.tsx +8 -8
  86. package/src/head/MRT_TableHeadRow.tsx +7 -8
  87. package/src/hooks/useMRT_DisplayColumns.tsx +17 -4
  88. package/src/hooks/useMRT_Effects.ts +3 -3
  89. package/src/hooks/useMRT_TableInstance.ts +17 -10
  90. package/src/hooks/useMRT_TableOptions.ts +9 -5
  91. package/src/icons.ts +2 -2
  92. package/src/inputs/MRT_EditCellTextField.tsx +23 -31
  93. package/src/inputs/MRT_FilterCheckbox.tsx +17 -29
  94. package/src/inputs/MRT_FilterRangeFields.tsx +1 -1
  95. package/src/inputs/MRT_FilterRangeSlider.tsx +12 -29
  96. package/src/inputs/MRT_FilterTextField.tsx +83 -99
  97. package/src/inputs/MRT_GlobalFilterTextField.tsx +29 -29
  98. package/src/inputs/MRT_SelectCheckbox.tsx +35 -21
  99. package/src/locales/en.ts +1 -1
  100. package/src/locales/fr.ts +1 -1
  101. package/src/menus/MRT_ColumnActionMenu.tsx +14 -14
  102. package/src/menus/MRT_FilterOptionMenu.tsx +35 -35
  103. package/src/menus/MRT_RowActionMenu.tsx +17 -18
  104. package/src/menus/MRT_ShowHideColumnsMenu.tsx +6 -6
  105. package/src/menus/MRT_ShowHideColumnsMenuItems.tsx +5 -5
  106. package/src/modals/MRT_EditRowModal.tsx +12 -20
  107. package/src/sortingFns.ts +1 -1
  108. package/src/table/MRT_Table.tsx +14 -19
  109. package/src/table/MRT_TableContainer.tsx +14 -20
  110. package/src/table/MRT_TablePaper.tsx +16 -20
  111. package/src/toolbar/MRT_BottomToolbar.tsx +18 -24
  112. package/src/toolbar/MRT_LinearProgressBar.tsx +8 -7
  113. package/src/toolbar/MRT_TablePagination.tsx +23 -25
  114. package/src/toolbar/MRT_ToolbarAlertBanner.tsx +11 -14
  115. package/src/toolbar/MRT_ToolbarDropZone.tsx +6 -6
  116. package/src/toolbar/MRT_ToolbarInternalButtons.tsx +8 -5
  117. package/src/toolbar/MRT_TopToolbar.tsx +14 -20
  118. package/src/types.ts +269 -252
  119. package/src/useMaterialReactTable.ts +1 -1
@@ -33,23 +33,23 @@ export const MRT_TableHeadCellResizeHandle = <
33
33
  }}
34
34
  onMouseDown={header.getResizeHandler()}
35
35
  onTouchStart={header.getResizeHandler()}
36
- sx={(theme) => ({
37
- cursor: 'col-resize',
38
- mr: density === 'compact' ? '-0.75rem' : '-1rem',
39
- position: 'absolute',
40
- right: '4px',
41
- px: '4px',
42
- '&:active > hr': {
43
- backgroundColor: theme.palette.info.main,
44
- opacity: 1,
45
- },
46
- })}
47
36
  style={{
48
37
  transform:
49
38
  column.getIsResizing() && columnResizeMode === 'onEnd'
50
39
  ? `translateX(${getState().columnSizingInfo.deltaOffset ?? 0}px)`
51
40
  : undefined,
52
41
  }}
42
+ sx={(theme) => ({
43
+ '&:active > hr': {
44
+ backgroundColor: theme.palette.info.main,
45
+ opacity: 1,
46
+ },
47
+ cursor: 'col-resize',
48
+ mr: density === 'compact' ? '-0.75rem' : '-1rem',
49
+ position: 'absolute',
50
+ px: '4px',
51
+ right: '4px',
52
+ })}
53
53
  >
54
54
  <Divider
55
55
  className="Mui-TableHeadCell-ResizeHandle-Divider"
@@ -1,8 +1,8 @@
1
1
  import Badge from '@mui/material/Badge';
2
+ import { type TableCellProps } from '@mui/material/TableCell';
2
3
  import TableSortLabel from '@mui/material/TableSortLabel';
3
4
  import Tooltip from '@mui/material/Tooltip';
4
5
  import { type MRT_Header, type MRT_TableInstance } from '../types';
5
- import { type TableCellProps } from '@mui/material/TableCell';
6
6
 
7
7
  interface Props<TData extends Record<string, any>> {
8
8
  header: MRT_Header<TData>;
@@ -41,25 +41,25 @@ export const MRT_TableHeadCellSortLabel = <TData extends Record<string, any>>({
41
41
  overlap="circular"
42
42
  >
43
43
  <TableSortLabel
44
- aria-label={sortTooltip}
44
+ IconComponent={ArrowDownwardIcon}
45
45
  active={!!column.getIsSorted()}
46
+ aria-label={sortTooltip}
46
47
  direction={
47
48
  column.getIsSorted()
48
49
  ? (column.getIsSorted() as 'asc' | 'desc')
49
50
  : undefined
50
51
  }
52
+ onClick={(e) => {
53
+ e.stopPropagation();
54
+ header.column.getToggleSortingHandler()?.(e);
55
+ }}
51
56
  sx={{
52
57
  flex: '0 0',
53
- width: '2.4ch',
54
58
  transform:
55
59
  tableCellProps?.align !== 'right'
56
60
  ? 'translateX(-0.5ch)'
57
61
  : undefined,
58
- }}
59
- IconComponent={ArrowDownwardIcon}
60
- onClick={(e) => {
61
- e.stopPropagation();
62
- header.column.getToggleSortingHandler()?.(e);
62
+ width: '2.4ch',
63
63
  }}
64
64
  />
65
65
  </Badge>
@@ -1,7 +1,8 @@
1
+ import { type VirtualItem } from '@tanstack/react-virtual';
1
2
  import TableRow from '@mui/material/TableRow';
2
3
  import { alpha, lighten } from '@mui/material/styles';
3
4
  import { MRT_TableHeadCell } from './MRT_TableHeadCell';
4
- import { type VirtualItem } from '@tanstack/react-virtual';
5
+ import { parseFromValuesOrFunc } from '../column.utils';
5
6
  import {
6
7
  type MRT_Header,
7
8
  type MRT_HeaderGroup,
@@ -27,10 +28,10 @@ export const MRT_TableHeadRow = <TData extends Record<string, any>>({
27
28
  options: { layoutMode, muiTableHeadRowProps },
28
29
  } = table;
29
30
 
30
- const tableRowProps =
31
- muiTableHeadRowProps instanceof Function
32
- ? muiTableHeadRowProps({ headerGroup, table })
33
- : muiTableHeadRowProps;
31
+ const tableRowProps = parseFromValuesOrFunc(muiTableHeadRowProps, {
32
+ headerGroup,
33
+ table,
34
+ });
34
35
 
35
36
  return (
36
37
  <TableRow
@@ -40,9 +41,7 @@ export const MRT_TableHeadRow = <TData extends Record<string, any>>({
40
41
  boxShadow: `4px 0 8px ${alpha(theme.palette.common.black, 0.1)}`,
41
42
  display: layoutMode === 'grid' ? 'flex' : 'table-row',
42
43
  top: 0,
43
- ...(tableRowProps?.sx instanceof Function
44
- ? tableRowProps?.sx(theme)
45
- : (tableRowProps?.sx as any)),
44
+ ...(parseFromValuesOrFunc(tableRowProps?.sx, theme) as any),
46
45
  })}
47
46
  >
48
47
  {virtualPaddingLeft ? (
@@ -1,28 +1,29 @@
1
1
  import { type RefObject, useMemo } from 'react';
2
- import { showExpandColumn } from '../column.utils';
3
2
  import { MRT_TableBodyRowGrabHandle } from '../body';
3
+ import { MRT_TableBodyRowPinButton } from '../body/MRT_TableBodyRowPinButton';
4
4
  import { MRT_ExpandAllButton } from '../buttons/MRT_ExpandAllButton';
5
5
  import { MRT_ExpandButton } from '../buttons/MRT_ExpandButton';
6
6
  import { MRT_ToggleRowActionMenuButton } from '../buttons/MRT_ToggleRowActionMenuButton';
7
+ import { showExpandColumn } from '../column.utils';
7
8
  import { MRT_SelectCheckbox } from '../inputs/MRT_SelectCheckbox';
8
9
  import {
9
10
  type MRT_ColumnDef,
10
11
  type MRT_ColumnOrderState,
11
- type MRT_GroupingState,
12
12
  type MRT_DefinedTableOptions,
13
+ type MRT_GroupingState,
13
14
  type MRT_Row,
14
15
  } from '../types';
15
16
 
16
17
  interface Params<TData extends Record<string, any>> {
17
- creatingRow: MRT_Row<TData> | null;
18
18
  columnOrder: MRT_ColumnOrderState;
19
+ creatingRow: MRT_Row<TData> | null;
19
20
  grouping: MRT_GroupingState;
20
21
  tableOptions: MRT_DefinedTableOptions<TData>;
21
22
  }
22
23
 
23
24
  export const useMRT_DisplayColumns = <TData extends Record<string, any>>({
24
- creatingRow,
25
25
  columnOrder,
26
+ creatingRow,
26
27
  grouping,
27
28
  tableOptions,
28
29
  }: Params<TData>) => {
@@ -30,6 +31,18 @@ export const useMRT_DisplayColumns = <TData extends Record<string, any>>({
30
31
  () =>
31
32
  (
32
33
  [
34
+ (tableOptions.state?.columnOrder ?? columnOrder).includes(
35
+ 'mrt-row-pin',
36
+ ) && {
37
+ Cell: ({ row, table }) => (
38
+ <MRT_TableBodyRowPinButton row={row} table={table} />
39
+ ),
40
+ header: tableOptions.localization.pin,
41
+ size: 60,
42
+ ...tableOptions.defaultDisplayColumn,
43
+ ...tableOptions.displayColumnDefOptions?.['mrt-row-pin'],
44
+ id: 'mrt-row-pin',
45
+ },
33
46
  (tableOptions.state?.columnOrder ?? columnOrder).includes(
34
47
  'mrt-row-drag',
35
48
  ) && {
@@ -12,10 +12,10 @@ export const useMRT_Effects = <TData extends Record<string, any> = {}>(
12
12
  const {
13
13
  globalFilter,
14
14
  isFullScreen,
15
- pagination,
16
- sorting,
17
15
  isLoading,
16
+ pagination,
18
17
  showSkeletons,
18
+ sorting,
19
19
  } = getState();
20
20
 
21
21
  const isMounted = useRef(false);
@@ -38,8 +38,8 @@ export const useMRT_Effects = <TData extends Record<string, any> = {}>(
38
38
  if (!previousTop.current) return;
39
39
  //restore scroll position
40
40
  window.scrollTo({
41
- top: -1 * (previousTop.current as number),
42
41
  behavior: 'instant',
42
+ top: -1 * (previousTop.current as number),
43
43
  });
44
44
  }
45
45
  }
@@ -19,16 +19,14 @@ import {
19
19
  getDefaultColumnOrderIds,
20
20
  prepareColumns,
21
21
  } from '../column.utils';
22
- import { useMRT_DisplayColumns } from './useMRT_DisplayColumns';
23
- import { useMRT_Effects } from './useMRT_Effects';
24
22
  import {
25
23
  type MRT_Cell,
26
24
  type MRT_Column,
27
25
  type MRT_ColumnDef,
26
+ type MRT_ColumnFilterFnsState,
28
27
  type MRT_ColumnOrderState,
29
28
  type MRT_DefinedTableOptions,
30
29
  type MRT_DensityState,
31
- type MRT_ColumnFilterFnsState,
32
30
  type MRT_FilterOption,
33
31
  type MRT_GroupingState,
34
32
  type MRT_Row,
@@ -36,6 +34,8 @@ import {
36
34
  type MRT_TableState,
37
35
  type MRT_Updater,
38
36
  } from '../types';
37
+ import { useMRT_DisplayColumns } from './useMRT_DisplayColumns';
38
+ import { useMRT_Effects } from './useMRT_Effects';
39
39
 
40
40
  export const useMRT_TableInstance: <TData extends Record<string, any>>(
41
41
  tableOptions: MRT_DefinedTableOptions<TData>,
@@ -50,6 +50,8 @@ export const useMRT_TableInstance: <TData extends Record<string, any>>(
50
50
  const tableHeadCellRefs = useRef<Record<string, HTMLTableCellElement>>({});
51
51
  const tablePaperRef = useRef<HTMLDivElement>(null);
52
52
  const topToolbarRef = useRef<HTMLDivElement>(null);
53
+ const tableHeadRef = useRef<HTMLTableSectionElement>(null);
54
+ const tableFooterRef = useRef<HTMLTableSectionElement>(null);
53
55
 
54
56
  const initialState: Partial<MRT_TableState<TData>> = useMemo(() => {
55
57
  const initState = tableOptions.initialState ?? {};
@@ -102,10 +104,10 @@ export const useMRT_TableInstance: <TData extends Record<string, any>>(
102
104
  initialState.grouping ?? [],
103
105
  );
104
106
  const [hoveredColumn, setHoveredColumn] = useState<
105
- MRT_Column<TData> | { id: string } | null
107
+ { id: string } | MRT_Column<TData> | null
106
108
  >(initialState.hoveredColumn ?? null);
107
109
  const [hoveredRow, setHoveredRow] = useState<
108
- MRT_Row<TData> | { id: string } | null
110
+ { id: string } | MRT_Row<TData> | null
109
111
  >(initialState.hoveredRow ?? null);
110
112
  const [isFullScreen, setIsFullScreen] = useState<boolean>(
111
113
  initialState?.isFullScreen ?? false,
@@ -205,9 +207,9 @@ export const useMRT_TableInstance: <TData extends Record<string, any>>(
205
207
  getSortedRowModel: tableOptions.enableSorting
206
208
  ? getSortedRowModel()
207
209
  : undefined,
210
+ getSubRows: (row) => row?.subRows,
208
211
  onColumnOrderChange: setColumnOrder,
209
212
  onGroupingChange: setGrouping,
210
- getSubRows: (row) => row?.subRows,
211
213
  ...tableOptions,
212
214
  //@ts-ignore
213
215
  columns: columnDefs,
@@ -215,9 +217,9 @@ export const useMRT_TableInstance: <TData extends Record<string, any>>(
215
217
  globalFilterFn: tableOptions.filterFns?.[globalFilterFn ?? 'fuzzy'],
216
218
  initialState,
217
219
  state: {
218
- creatingRow,
219
220
  columnFilterFns,
220
221
  columnOrder,
222
+ creatingRow,
221
223
  density,
222
224
  draggingColumn,
223
225
  draggingRow,
@@ -246,19 +248,24 @@ export const useMRT_TableInstance: <TData extends Record<string, any>>(
246
248
  searchInputRef,
247
249
  // @ts-ignore
248
250
  tableContainerRef,
251
+ // @ts-ignore
252
+ tableFooterRef,
249
253
  tableHeadCellRefs,
250
254
  // @ts-ignore
255
+ tableHeadRef,
256
+ // @ts-ignore
251
257
  tablePaperRef,
252
258
  // @ts-ignore
253
259
  topToolbarRef,
254
260
  };
255
261
 
256
262
  const setCreatingRow = (row: MRT_Updater<MRT_Row<TData> | null | true>) => {
263
+ let _row = row;
257
264
  if (row === true) {
258
- table.setCreatingRow(createRow(table));
259
- } else {
260
- _setCreatingRow(row as MRT_Row<TData> | null);
265
+ _row = createRow(table);
261
266
  }
267
+ tableOptions?.onCreatingRowChange?.(_row as MRT_Row<TData> | null) ??
268
+ _setCreatingRow(_row as MRT_Row<TData> | null);
262
269
  };
263
270
 
264
271
  table.setCreatingRow = setCreatingRow;
@@ -1,10 +1,10 @@
1
1
  import { useMemo } from 'react';
2
2
  import { MRT_AggregationFns } from '../aggregationFns';
3
- import { MRT_FilterFns } from '../filterFns';
4
- import { MRT_SortingFns } from '../sortingFns';
5
3
  import { MRT_DefaultColumn, MRT_DefaultDisplayColumn } from '../column.utils';
6
- import { MRT_Localization_EN } from '../locales/en';
4
+ import { MRT_FilterFns } from '../filterFns';
7
5
  import { MRT_Default_Icons } from '../icons';
6
+ import { MRT_Localization_EN } from '../locales/en';
7
+ import { MRT_SortingFns } from '../sortingFns';
8
8
  import { type MRT_DefinedTableOptions, type MRT_TableOptions } from '../types';
9
9
 
10
10
  export const useMRT_TableOptions: <TData extends Record<string, any>>(
@@ -22,6 +22,7 @@ export const useMRT_TableOptions: <TData extends Record<string, any>>(
22
22
  enableColumnActions = true,
23
23
  enableColumnFilters = true,
24
24
  enableColumnOrdering = false,
25
+ enableColumnPinning = false,
25
26
  enableColumnResizing = false,
26
27
  enableDensityToggle = true,
27
28
  enableExpandAll = true,
@@ -36,7 +37,7 @@ export const useMRT_TableOptions: <TData extends Record<string, any>>(
36
37
  enableMultiRowSelection = true,
37
38
  enableMultiSort = true,
38
39
  enablePagination = true,
39
- enableColumnPinning = false,
40
+ enableRowPinning = false,
40
41
  enableRowSelection = false,
41
42
  enableSelectAll = true,
42
43
  enableSorting = true,
@@ -61,6 +62,7 @@ export const useMRT_TableOptions: <TData extends Record<string, any>>(
61
62
  positionToolbarAlertBanner = 'top',
62
63
  positionToolbarDropZone = 'top',
63
64
  rowNumberMode = 'static',
65
+ rowPinningDisplayMode = 'sticky',
64
66
  selectAllMode = 'page',
65
67
  sortingFns,
66
68
  ...rest
@@ -123,6 +125,7 @@ export const useMRT_TableOptions: <TData extends Record<string, any>>(
123
125
  enableColumnActions,
124
126
  enableColumnFilters,
125
127
  enableColumnOrdering,
128
+ enableColumnPinning,
126
129
  enableColumnResizing,
127
130
  enableDensityToggle,
128
131
  enableExpandAll,
@@ -137,7 +140,7 @@ export const useMRT_TableOptions: <TData extends Record<string, any>>(
137
140
  enableMultiRowSelection,
138
141
  enableMultiSort,
139
142
  enablePagination,
140
- enableColumnPinning,
143
+ enableRowPinning,
141
144
  enableRowSelection,
142
145
  enableSelectAll,
143
146
  enableSorting,
@@ -162,6 +165,7 @@ export const useMRT_TableOptions: <TData extends Record<string, any>>(
162
165
  positionToolbarAlertBanner,
163
166
  positionToolbarDropZone,
164
167
  rowNumberMode,
168
+ rowPinningDisplayMode,
165
169
  selectAllMode,
166
170
  sortingFns: _sortingFns,
167
171
  ...rest,
package/src/icons.ts CHANGED
@@ -13,8 +13,8 @@ import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
13
13
  import FilterAltIcon from '@mui/icons-material/FilterAlt';
14
14
  import FilterListIcon from '@mui/icons-material/FilterList';
15
15
  import FilterListOffIcon from '@mui/icons-material/FilterListOff';
16
- import FullscreenExitIcon from '@mui/icons-material/FullscreenExit';
17
16
  import FullscreenIcon from '@mui/icons-material/Fullscreen';
17
+ import FullscreenExitIcon from '@mui/icons-material/FullscreenExit';
18
18
  import KeyboardDoubleArrowDownIcon from '@mui/icons-material/KeyboardDoubleArrowDown';
19
19
  import MoreHorizIcon from '@mui/icons-material/MoreHoriz';
20
20
  import MoreVertIcon from '@mui/icons-material/MoreVert';
@@ -36,7 +36,6 @@ export interface MRT_Icons {
36
36
  DensityLargeIcon: any;
37
37
  DensityMediumIcon: any;
38
38
  DensitySmallIcon: any;
39
- KeyboardDoubleArrowDownIcon: any;
40
39
  DragHandleIcon: any;
41
40
  DynamicFeedIcon: any;
42
41
  EditIcon: any;
@@ -46,6 +45,7 @@ export interface MRT_Icons {
46
45
  FilterListOffIcon: any;
47
46
  FullscreenExitIcon: any;
48
47
  FullscreenIcon: any;
48
+ KeyboardDoubleArrowDownIcon: any;
49
49
  MoreHorizIcon: any;
50
50
  MoreVertIcon: any;
51
51
  PushPinIcon: any;
@@ -4,9 +4,10 @@ import {
4
4
  type KeyboardEvent,
5
5
  useState,
6
6
  } from 'react';
7
- import TextField from '@mui/material/TextField';
8
7
  import MenuItem from '@mui/material/MenuItem';
8
+ import TextField from '@mui/material/TextField';
9
9
  import { type TextFieldProps } from '@mui/material/TextField';
10
+ import { parseFromValuesOrFunc } from '../column.utils';
10
11
  import { type MRT_Cell, type MRT_TableInstance } from '../types';
11
12
 
12
13
  interface Props<TData extends Record<string, any>> {
@@ -22,9 +23,9 @@ export const MRT_EditCellTextField = <TData extends Record<string, any>>({
22
23
  getState,
23
24
  options: { createDisplayMode, editDisplayMode, muiEditTextFieldProps },
24
25
  refs: { editInputRefs },
26
+ setCreatingRow,
25
27
  setEditingCell,
26
28
  setEditingRow,
27
- setCreatingRow,
28
29
  } = table;
29
30
  const { column, row } = cell;
30
31
  const { columnDef } = column;
@@ -36,24 +37,19 @@ export const MRT_EditCellTextField = <TData extends Record<string, any>>({
36
37
 
37
38
  const [value, setValue] = useState(() => cell.getValue<string>());
38
39
 
39
- const mTableBodyCellEditTextFieldProps =
40
- muiEditTextFieldProps instanceof Function
41
- ? muiEditTextFieldProps({ cell, column, row, table })
42
- : muiEditTextFieldProps;
43
-
44
- const mcTableBodyCellEditTextFieldProps =
45
- columnDef.muiEditTextFieldProps instanceof Function
46
- ? columnDef.muiEditTextFieldProps({
47
- cell,
48
- column,
49
- row,
50
- table,
51
- })
52
- : columnDef.muiEditTextFieldProps;
53
-
54
40
  const textFieldProps: TextFieldProps = {
55
- ...mTableBodyCellEditTextFieldProps,
56
- ...mcTableBodyCellEditTextFieldProps,
41
+ ...parseFromValuesOrFunc(muiEditTextFieldProps, {
42
+ cell,
43
+ column,
44
+ row,
45
+ table,
46
+ }),
47
+ ...parseFromValuesOrFunc(columnDef.muiEditTextFieldProps, {
48
+ cell,
49
+ column,
50
+ row,
51
+ table,
52
+ }),
57
53
  };
58
54
 
59
55
  const saveInputValueToRowCache = (newValue: string) => {
@@ -93,11 +89,7 @@ export const MRT_EditCellTextField = <TData extends Record<string, any>>({
93
89
 
94
90
  return (
95
91
  <TextField
96
- disabled={
97
- (columnDef.enableEditing instanceof Function
98
- ? columnDef.enableEditing(row)
99
- : columnDef.enableEditing) === false
100
- }
92
+ disabled={parseFromValuesOrFunc(columnDef.enableEditing, row) === false}
101
93
  fullWidth
102
94
  inputRef={(inputRef) => {
103
95
  if (inputRef) {
@@ -108,7 +100,7 @@ export const MRT_EditCellTextField = <TData extends Record<string, any>>({
108
100
  }
109
101
  }}
110
102
  label={
111
- ['modal', 'custom'].includes(
103
+ ['custom', 'modal'].includes(
112
104
  (isCreating ? createDisplayMode : editDisplayMode) as string,
113
105
  )
114
106
  ? column.columnDef.header
@@ -117,7 +109,7 @@ export const MRT_EditCellTextField = <TData extends Record<string, any>>({
117
109
  margin="none"
118
110
  name={column.id}
119
111
  placeholder={
120
- !['modal', 'custom'].includes(
112
+ !['custom', 'modal'].includes(
121
113
  (isCreating ? createDisplayMode : editDisplayMode) as string,
122
114
  )
123
115
  ? columnDef.header
@@ -127,17 +119,17 @@ export const MRT_EditCellTextField = <TData extends Record<string, any>>({
127
119
  value={value}
128
120
  variant="standard"
129
121
  {...textFieldProps}
122
+ onBlur={handleBlur}
123
+ onChange={handleChange}
130
124
  onClick={(e) => {
131
125
  e.stopPropagation();
132
126
  textFieldProps?.onClick?.(e);
133
127
  }}
134
- onBlur={handleBlur}
135
- onChange={handleChange}
136
128
  onKeyDown={handleEnterKeyDown}
137
129
  >
138
130
  {textFieldProps.children ??
139
131
  columnDef?.editSelectOptions?.map(
140
- (option: string | { text: string; value: string }) => {
132
+ (option: { text: string; value: string } | string) => {
141
133
  let value: string;
142
134
  let text: string;
143
135
  if (typeof option !== 'object') {
@@ -151,10 +143,10 @@ export const MRT_EditCellTextField = <TData extends Record<string, any>>({
151
143
  <MenuItem
152
144
  key={value}
153
145
  sx={{
154
- display: 'flex',
155
- m: 0,
156
146
  alignItems: 'center',
147
+ display: 'flex',
157
148
  gap: '0.5rem',
149
+ m: 0,
158
150
  }}
159
151
  value={value}
160
152
  >
@@ -1,7 +1,7 @@
1
1
  import Checkbox from '@mui/material/Checkbox';
2
2
  import FormControlLabel from '@mui/material/FormControlLabel';
3
3
  import Tooltip from '@mui/material/Tooltip';
4
- import { type CheckboxProps } from '@mui/material/Checkbox';
4
+ import { parseFromValuesOrFunc } from '../column.utils';
5
5
  import { type MRT_Column, type MRT_TableInstance } from '../types';
6
6
 
7
7
  interface Props<TData extends Record<string, any>> {
@@ -20,26 +20,16 @@ export const MRT_FilterCheckbox = <TData extends Record<string, any>>({
20
20
  const { density } = getState();
21
21
  const { columnDef } = column;
22
22
 
23
- const mTableHeadCellFilterCheckboxProps =
24
- muiFilterCheckboxProps instanceof Function
25
- ? muiFilterCheckboxProps({
26
- column,
27
- table,
28
- })
29
- : muiFilterCheckboxProps;
30
-
31
- const mcTableHeadCellFilterCheckboxProps =
32
- columnDef.muiFilterCheckboxProps instanceof Function
33
- ? columnDef.muiFilterCheckboxProps({
34
- column,
35
- table,
36
- })
37
- : columnDef.muiFilterCheckboxProps;
38
-
39
23
  const checkboxProps = {
40
- ...mTableHeadCellFilterCheckboxProps,
41
- ...mcTableHeadCellFilterCheckboxProps,
42
- } as CheckboxProps;
24
+ ...parseFromValuesOrFunc(muiFilterCheckboxProps, {
25
+ column,
26
+ table,
27
+ }),
28
+ ...parseFromValuesOrFunc(columnDef.muiFilterCheckboxProps, {
29
+ column,
30
+ table,
31
+ }),
32
+ };
43
33
 
44
34
  const filterLabel = localization.filterByColumn?.replace(
45
35
  '{column}',
@@ -57,16 +47,12 @@ export const MRT_FilterCheckbox = <TData extends Record<string, any>>({
57
47
  control={
58
48
  <Checkbox
59
49
  checked={column.getFilterValue() === 'true'}
60
- indeterminate={column.getFilterValue() === undefined}
61
50
  color={
62
51
  column.getFilterValue() === undefined ? 'default' : 'primary'
63
52
  }
53
+ indeterminate={column.getFilterValue() === undefined}
64
54
  size={density === 'compact' ? 'small' : 'medium'}
65
55
  {...checkboxProps}
66
- onClick={(e) => {
67
- e.stopPropagation();
68
- checkboxProps?.onClick?.(e);
69
- }}
70
56
  onChange={(e, checked) => {
71
57
  column.setFilterValue(
72
58
  column.getFilterValue() === undefined
@@ -77,18 +63,20 @@ export const MRT_FilterCheckbox = <TData extends Record<string, any>>({
77
63
  );
78
64
  checkboxProps?.onChange?.(e, checked);
79
65
  }}
66
+ onClick={(e) => {
67
+ e.stopPropagation();
68
+ checkboxProps?.onClick?.(e);
69
+ }}
80
70
  sx={(theme) => ({
81
71
  height: '2.5rem',
82
72
  width: '2.5rem',
83
- ...(checkboxProps?.sx instanceof Function
84
- ? checkboxProps.sx(theme)
85
- : (checkboxProps?.sx as any)),
73
+ ...(parseFromValuesOrFunc(checkboxProps?.sx, theme) as any),
86
74
  })}
87
75
  />
88
76
  }
89
77
  disableTypography
90
78
  label={checkboxProps.title ?? filterLabel}
91
- sx={{ color: 'text.secondary', mt: '-4px', fontWeight: 'normal' }}
79
+ sx={{ color: 'text.secondary', fontWeight: 'normal', mt: '-4px' }}
92
80
  title={undefined}
93
81
  />
94
82
  </Tooltip>
@@ -12,7 +12,7 @@ export const MRT_FilterRangeFields = <TData extends Record<string, any>>({
12
12
  table,
13
13
  }: Props<TData>) => {
14
14
  return (
15
- <Box sx={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: '1rem' }}>
15
+ <Box sx={{ display: 'grid', gap: '1rem', gridTemplateColumns: '1fr 1fr' }}>
16
16
  <MRT_FilterTextField header={header} rangeFilterIndex={0} table={table} />
17
17
  <MRT_FilterTextField header={header} rangeFilterIndex={1} table={table} />
18
18
  </Box>
@@ -1,8 +1,9 @@
1
- import Slider, { type SliderProps } from '@mui/material/Slider';
2
- import Stack from '@mui/material/Stack';
3
- import FormHelperText from '@mui/material/FormHelperText';
4
- import { type MRT_TableInstance, type MRT_Header } from '../types';
5
1
  import { useEffect, useRef, useState } from 'react';
2
+ import FormHelperText from '@mui/material/FormHelperText';
3
+ import Slider from '@mui/material/Slider';
4
+ import Stack from '@mui/material/Stack';
5
+ import { parseFromValuesOrFunc } from '../column.utils';
6
+ import { type MRT_Header, type MRT_TableInstance } from '../types';
6
7
 
7
8
  interface Props<TData extends Record<string, any>> {
8
9
  header: MRT_Header<TData>;
@@ -14,7 +15,7 @@ export const MRT_FilterRangeSlider = <TData extends Record<string, any>>({
14
15
  table,
15
16
  }: Props<TData>) => {
16
17
  const {
17
- options: { localization, muiFilterSliderProps, enableColumnFilterModes },
18
+ options: { enableColumnFilterModes, localization, muiFilterSliderProps },
18
19
  refs: { filterInputRefs },
19
20
  } = table;
20
21
  const { column } = header;
@@ -25,26 +26,10 @@ export const MRT_FilterRangeSlider = <TData extends Record<string, any>>({
25
26
  const showChangeModeButton =
26
27
  enableColumnFilterModes && columnDef.enableColumnFilterModes !== false;
27
28
 
28
- const mFilterSliderProps =
29
- muiFilterSliderProps instanceof Function
30
- ? muiFilterSliderProps({
31
- column,
32
- table,
33
- })
34
- : muiFilterSliderProps;
35
-
36
- const mcFilterSliderProps =
37
- columnDef.muiFilterSliderProps instanceof Function
38
- ? columnDef.muiFilterSliderProps({
39
- column,
40
- table,
41
- })
42
- : columnDef.muiFilterSliderProps;
43
-
44
29
  const sliderProps = {
45
- ...mFilterSliderProps,
46
- ...mcFilterSliderProps,
47
- } as SliderProps;
30
+ ...parseFromValuesOrFunc(muiFilterSliderProps, { column, table }),
31
+ ...parseFromValuesOrFunc(columnDef.muiFilterSliderProps, { column, table }),
32
+ };
48
33
 
49
34
  let [min, max] =
50
35
  sliderProps.min !== undefined && sliderProps.max !== undefined
@@ -77,8 +62,8 @@ export const MRT_FilterRangeSlider = <TData extends Record<string, any>>({
77
62
  <Stack>
78
63
  <Slider
79
64
  disableSwap
80
- min={min}
81
65
  max={max}
66
+ min={min}
82
67
  onChange={(_event, values) => {
83
68
  setFilterValues(values as [number, number]);
84
69
  }}
@@ -114,17 +99,15 @@ export const MRT_FilterRangeSlider = <TData extends Record<string, any>>({
114
99
  mt: !showChangeModeButton ? '10px' : '6px',
115
100
  px: '4px',
116
101
  width: 'calc(100% - 8px)',
117
- ...(sliderProps?.sx instanceof Function
118
- ? sliderProps.sx(theme)
119
- : (sliderProps?.sx as any)),
102
+ ...(parseFromValuesOrFunc(sliderProps?.sx, theme) as any),
120
103
  })}
121
104
  />
122
105
  {showChangeModeButton ? (
123
106
  <FormHelperText
124
107
  sx={{
125
- m: '-3px -6px',
126
108
  fontSize: '0.75rem',
127
109
  lineHeight: '0.8rem',
110
+ m: '-3px -6px',
128
111
  whiteSpace: 'nowrap',
129
112
  }}
130
113
  >