material-react-table 2.11.3 → 2.12.0

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.
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "2.11.3",
2
+ "version": "2.12.0",
3
3
  "license": "MIT",
4
4
  "name": "material-react-table",
5
5
  "description": "A fully featured Material UI V5 implementation of TanStack React Table V8, written from the ground up in TypeScript.",
@@ -71,17 +71,17 @@
71
71
  "@mui/x-date-pickers": "^6.19.4",
72
72
  "@rollup/plugin-typescript": "^11.1.6",
73
73
  "@size-limit/preset-small-lib": "^11.0.2",
74
- "@storybook/addon-a11y": "^7.6.15",
75
- "@storybook/addon-essentials": "^7.6.15",
76
- "@storybook/addon-interactions": "^7.6.15",
77
- "@storybook/addon-links": "^7.6.15",
78
- "@storybook/addon-storysource": "^7.6.15",
79
- "@storybook/blocks": "^7.6.15",
80
- "@storybook/react": "^7.6.15",
81
- "@storybook/react-vite": "^7.6.15",
74
+ "@storybook/addon-a11y": "^7.6.16",
75
+ "@storybook/addon-essentials": "^7.6.16",
76
+ "@storybook/addon-interactions": "^7.6.16",
77
+ "@storybook/addon-links": "^7.6.16",
78
+ "@storybook/addon-storysource": "^7.6.16",
79
+ "@storybook/blocks": "^7.6.16",
80
+ "@storybook/react": "^7.6.16",
81
+ "@storybook/react-vite": "^7.6.16",
82
82
  "@storybook/testing-library": "^0.2.2",
83
- "@types/node": "^20.11.17",
84
- "@types/react": "^18.2.55",
83
+ "@types/node": "^20.11.19",
84
+ "@types/react": "^18.2.56",
85
85
  "@types/react-dom": "^18.2.19",
86
86
  "@typescript-eslint/eslint-plugin": "^7.0.1",
87
87
  "@typescript-eslint/parser": "^7.0.1",
@@ -99,11 +99,11 @@
99
99
  "rollup-plugin-dts": "^6.1.0",
100
100
  "rollup-plugin-peer-deps-external": "^2.2.4",
101
101
  "size-limit": "^11.0.2",
102
- "storybook": "^7.6.15",
102
+ "storybook": "^7.6.16",
103
103
  "storybook-dark-mode": "^3.0.3",
104
104
  "tslib": "^2.6.2",
105
105
  "typescript": "^5.3.3",
106
- "vite": "^5.1.1"
106
+ "vite": "^5.1.3"
107
107
  },
108
108
  "peerDependencies": {
109
109
  "@emotion/react": ">=11.11",
@@ -111,13 +111,13 @@
111
111
  "@mui/icons-material": ">=5.11",
112
112
  "@mui/material": ">=5.13",
113
113
  "@mui/x-date-pickers": ">=6.15.0",
114
- "react": ">=18.0",
115
- "react-dom": ">=18.0"
114
+ "react": ">=17.0",
115
+ "react-dom": ">=17.0"
116
116
  },
117
117
  "dependencies": {
118
118
  "@tanstack/match-sorter-utils": "8.11.8",
119
119
  "@tanstack/react-table": "8.12.0",
120
- "@tanstack/react-virtual": "3.0.4",
120
+ "@tanstack/react-virtual": "3.1.1",
121
121
  "highlight-words": "1.2.2"
122
122
  }
123
123
  }
@@ -210,6 +210,12 @@ export const MRT_TableBodyCell = <TData extends MRT_RowData>({
210
210
  }
211
211
  };
212
212
 
213
+ const handleDragOver = (e: DragEvent) => {
214
+ if (columnDef.enableColumnOrdering !== false) {
215
+ e.preventDefault();
216
+ }
217
+ };
218
+
213
219
  const handleContextMenu = (e: MouseEvent<HTMLTableCellElement>) => {
214
220
  tableCellProps?.onContextMenu?.(e);
215
221
  if (isRightClickable) {
@@ -228,6 +234,7 @@ export const MRT_TableBodyCell = <TData extends MRT_RowData>({
228
234
  onContextMenu={handleContextMenu}
229
235
  onDoubleClick={handleDoubleClick}
230
236
  onDragEnter={handleDragEnter}
237
+ onDragOver={handleDragOver}
231
238
  sx={(theme) => ({
232
239
  '&:hover': {
233
240
  outline:
@@ -140,6 +140,10 @@ export const MRT_TableBodyRow = <TData extends MRT_RowData>({
140
140
  }
141
141
  };
142
142
 
143
+ const handleDragOver = (e: DragEvent) => {
144
+ e.preventDefault();
145
+ };
146
+
143
147
  const rowRef = useRef<HTMLTableRowElement | null>(null);
144
148
 
145
149
  const cellHighlightColor = isRowSelected
@@ -164,6 +168,7 @@ export const MRT_TableBodyRow = <TData extends MRT_RowData>({
164
168
  data-pinned={!!isRowPinned || undefined}
165
169
  data-selected={isRowSelected || undefined}
166
170
  onDragEnter={handleDragEnter}
171
+ onDragOver={handleDragOver}
167
172
  ref={(node: HTMLTableRowElement) => {
168
173
  if (node) {
169
174
  rowRef.current = node;
@@ -34,7 +34,6 @@ export const MRT_TableDetailPanel = <TData extends MRT_RowData>({
34
34
  getState,
35
35
  getVisibleLeafColumns,
36
36
  options: {
37
- enableRowVirtualization,
38
37
  layoutMode,
39
38
  mrtTheme: { baseBackgroundColor },
40
39
  muiDetailPanelProps,
@@ -93,14 +92,12 @@ export const MRT_TableDetailPanel = <TData extends MRT_RowData>({
93
92
  borderBottom: !row.getIsExpanded() ? 'none' : undefined,
94
93
  display: layoutMode?.startsWith('grid') ? 'flex' : undefined,
95
94
  py: !!DetailPanel && row.getIsExpanded() ? '1rem' : 0,
96
- transition: !enableRowVirtualization
97
- ? 'all 150ms ease-in-out'
98
- : undefined,
95
+ transition: !virtualRow ? 'all 150ms ease-in-out' : undefined,
99
96
  width: `100%`,
100
97
  ...(parseFromValuesOrFunc(tableCellProps?.sx, theme) as any),
101
98
  })}
102
99
  >
103
- {enableRowVirtualization ? (
100
+ {virtualRow ? (
104
101
  row.getIsExpanded() && DetailPanel
105
102
  ) : (
106
103
  <Collapse in={row.getIsExpanded()} mountOnEnter unmountOnExit>
@@ -20,8 +20,6 @@ export const MRT_TableHead = <TData extends MRT_RowData>({
20
20
  ...rest
21
21
  }: MRT_TableHeadProps<TData>) => {
22
22
  const {
23
- getHeaderGroups,
24
- getSelectedRowModel,
25
23
  getState,
26
24
  options: {
27
25
  enableStickyHeader,
@@ -60,7 +58,7 @@ export const MRT_TableHead = <TData extends MRT_RowData>({
60
58
  })}
61
59
  >
62
60
  {positionToolbarAlertBanner === 'head-overlay' &&
63
- (showAlertBanner || getSelectedRowModel().rows.length > 0) ? (
61
+ (showAlertBanner || table.getSelectedRowModel().rows.length > 0) ? (
64
62
  <tr
65
63
  style={{
66
64
  display: layoutMode?.startsWith('grid') ? 'grid' : undefined,
@@ -77,14 +75,16 @@ export const MRT_TableHead = <TData extends MRT_RowData>({
77
75
  </th>
78
76
  </tr>
79
77
  ) : (
80
- getHeaderGroups().map((headerGroup) => (
81
- <MRT_TableHeadRow
82
- columnVirtualizer={columnVirtualizer}
83
- headerGroup={headerGroup as any}
84
- key={headerGroup.id}
85
- table={table}
86
- />
87
- ))
78
+ table
79
+ .getHeaderGroups()
80
+ .map((headerGroup) => (
81
+ <MRT_TableHeadRow
82
+ columnVirtualizer={columnVirtualizer}
83
+ headerGroup={headerGroup as any}
84
+ key={headerGroup.id}
85
+ table={table}
86
+ />
87
+ ))
88
88
  )}
89
89
  </TableHead>
90
90
  );
@@ -141,6 +141,12 @@ export const MRT_TableHeadCell = <TData extends MRT_RowData>({
141
141
  }
142
142
  };
143
143
 
144
+ const handleDragOver = (e: DragEvent) => {
145
+ if (columnDef.enableColumnOrdering !== false) {
146
+ e.preventDefault();
147
+ }
148
+ };
149
+
144
150
  const HeaderElement =
145
151
  parseFromValuesOrFunc(columnDef.Header, {
146
152
  column,
@@ -161,6 +167,7 @@ export const MRT_TableHeadCell = <TData extends MRT_RowData>({
161
167
  data-index={staticColumnIndex}
162
168
  data-pinned={!!isColumnPinned || undefined}
163
169
  onDragEnter={handleDragEnter}
170
+ onDragOver={handleDragOver}
164
171
  ref={(node: HTMLTableCellElement) => {
165
172
  if (node) {
166
173
  tableHeadCellRefs.current[column.id] = node;
@@ -4,6 +4,7 @@ import {
4
4
  type MRT_RowData,
5
5
  type MRT_TableInstance,
6
6
  } from '../../types';
7
+ import { getColumnFilterInfo } from '../../utils/column.utils';
7
8
  import { MRT_FilterCheckbox } from '../inputs/MRT_FilterCheckbox';
8
9
  import { MRT_FilterRangeFields } from '../inputs/MRT_FilterRangeFields';
9
10
  import { MRT_FilterRangeSlider } from '../inputs/MRT_FilterRangeSlider';
@@ -28,6 +29,7 @@ export const MRT_TableHeadCellFilterContainer = <TData extends MRT_RowData>({
28
29
  const { showColumnFilters } = getState();
29
30
  const { column } = header;
30
31
  const { columnDef } = column;
32
+ const { isRangeFilter } = getColumnFilterInfo({ header, table });
31
33
 
32
34
  return (
33
35
  <Collapse
@@ -40,10 +42,7 @@ export const MRT_TableHeadCellFilterContainer = <TData extends MRT_RowData>({
40
42
  <MRT_FilterCheckbox column={column} table={table} />
41
43
  ) : columnDef.filterVariant === 'range-slider' ? (
42
44
  <MRT_FilterRangeSlider header={header} table={table} />
43
- ) : columnDef.filterVariant?.includes('range') ||
44
- ['between', 'betweenInclusive', 'inNumberRange'].includes(
45
- columnDef._filterFn,
46
- ) ? (
45
+ ) : isRangeFilter ? (
47
46
  <MRT_FilterRangeFields header={header} table={table} />
48
47
  ) : (
49
48
  <MRT_FilterTextField header={header} table={table} />
@@ -10,7 +10,11 @@ import {
10
10
  type MRT_RowData,
11
11
  type MRT_TableInstance,
12
12
  } from '../../types';
13
- import { parseFromValuesOrFunc } from '../../utils/utils';
13
+ import {
14
+ getColumnFilterInfo,
15
+ useDropdownOptions,
16
+ } from '../../utils/column.utils';
17
+ import { getValueAndLabel, parseFromValuesOrFunc } from '../../utils/utils';
14
18
 
15
19
  export interface MRT_TableHeadCellFilterLabelProps<TData extends MRT_RowData>
16
20
  extends IconButtonProps {
@@ -35,20 +39,32 @@ export const MRT_TableHeadCellFilterLabel = <TData extends MRT_RowData = {}>({
35
39
  const { column } = header;
36
40
  const { columnDef } = column;
37
41
 
38
- const filterValue = column.getFilterValue();
42
+ const filterValue = column.getFilterValue() as [string, string] | string;
39
43
 
40
44
  const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null);
41
45
 
46
+ const {
47
+ currentFilterOption,
48
+ isMultiSelectFilter,
49
+ isRangeFilter,
50
+ isSelectFilter,
51
+ } = getColumnFilterInfo({ header, table });
52
+
53
+ const dropdownOptions = useDropdownOptions({ header, table });
54
+
55
+ const getSelectLabel = (index?: number) =>
56
+ getValueAndLabel(
57
+ dropdownOptions?.find(
58
+ (option) =>
59
+ getValueAndLabel(option).value ===
60
+ (index !== undefined ? filterValue[index] : filterValue),
61
+ ),
62
+ ).label;
63
+
42
64
  const isFilterActive =
43
65
  (Array.isArray(filterValue) && filterValue.some(Boolean)) ||
44
66
  (!!filterValue && !Array.isArray(filterValue));
45
67
 
46
- const isRangeFilter =
47
- columnDef.filterVariant?.includes('range') ||
48
- ['between', 'betweenInclusive', 'inNumberRange'].includes(
49
- columnDef._filterFn,
50
- );
51
- const currentFilterOption = columnDef._filterFn;
52
68
  const filterTooltip =
53
69
  columnFilterDisplayMode === 'popover' && !isFilterActive
54
70
  ? localization.filterByColumn?.replace(
@@ -73,10 +89,16 @@ export const MRT_TableHeadCellFilterLabel = <TData extends MRT_RowData = {}>({
73
89
  '{filterValue}',
74
90
  `"${
75
91
  Array.isArray(filterValue)
76
- ? (filterValue as [string, string]).join(
77
- `" ${isRangeFilter ? localization.and : localization.or} "`,
78
- )
79
- : (filterValue as string)
92
+ ? (filterValue as [string, string])
93
+ .map((value, index) =>
94
+ isMultiSelectFilter ? getSelectLabel(index) : value,
95
+ )
96
+ .join(
97
+ `" ${isRangeFilter ? localization.and : localization.or} "`,
98
+ )
99
+ : isSelectFilter
100
+ ? getSelectLabel()
101
+ : (filterValue as string)
80
102
  }"`,
81
103
  )
82
104
  .replace('" "', '');
@@ -126,31 +148,33 @@ export const MRT_TableHeadCellFilterLabel = <TData extends MRT_RowData = {}>({
126
148
  </Tooltip>
127
149
  </Box>
128
150
  </Grow>
129
- <Popover
130
- anchorEl={anchorEl}
131
- anchorOrigin={{
132
- horizontal: 'center',
133
- vertical: 'top',
134
- }}
135
- disableScrollLock
136
- onClick={(event) => event.stopPropagation()}
137
- onClose={(event) => {
138
- //@ts-ignore
139
- event.stopPropagation();
140
- setAnchorEl(null);
141
- }}
142
- onKeyDown={(event) => event.key === 'Enter' && setAnchorEl(null)}
143
- open={!!anchorEl}
144
- slotProps={{ paper: { sx: { overflow: 'visible' } } }}
145
- transformOrigin={{
146
- horizontal: 'center',
147
- vertical: 'bottom',
148
- }}
149
- >
150
- <Box sx={{ p: '1rem' }}>
151
- <MRT_TableHeadCellFilterContainer header={header} table={table} />
152
- </Box>
153
- </Popover>
151
+ {columnFilterDisplayMode === 'popover' && (
152
+ <Popover
153
+ anchorEl={anchorEl}
154
+ anchorOrigin={{
155
+ horizontal: 'center',
156
+ vertical: 'top',
157
+ }}
158
+ disableScrollLock
159
+ onClick={(event) => event.stopPropagation()}
160
+ onClose={(event) => {
161
+ //@ts-ignore
162
+ event.stopPropagation();
163
+ setAnchorEl(null);
164
+ }}
165
+ onKeyDown={(event) => event.key === 'Enter' && setAnchorEl(null)}
166
+ open={!!anchorEl}
167
+ slotProps={{ paper: { sx: { overflow: 'visible' } } }}
168
+ transformOrigin={{
169
+ horizontal: 'center',
170
+ vertical: 'bottom',
171
+ }}
172
+ >
173
+ <Box sx={{ p: '1rem' }}>
174
+ <MRT_TableHeadCellFilterContainer header={header} table={table} />
175
+ </Box>
176
+ </Popover>
177
+ )}
154
178
  </>
155
179
  );
156
180
  };
@@ -28,8 +28,14 @@ export const MRT_FilterRangeFields = <TData extends MRT_RowData>({
28
28
  ...(parseFromValuesOrFunc(rest?.sx, theme) as any),
29
29
  })}
30
30
  >
31
- <MRT_FilterTextField header={header} rangeFilterIndex={0} table={table} />
32
- <MRT_FilterTextField header={header} rangeFilterIndex={1} table={table} />
31
+ {[0, 1].map((rangeFilterIndex) => (
32
+ <MRT_FilterTextField
33
+ header={header}
34
+ key={rangeFilterIndex}
35
+ rangeFilterIndex={rangeFilterIndex}
36
+ table={table}
37
+ />
38
+ ))}
33
39
  </Box>
34
40
  );
35
41
  };
@@ -3,7 +3,6 @@ import {
3
3
  type MouseEvent,
4
4
  useCallback,
5
5
  useEffect,
6
- useMemo,
7
6
  useRef,
8
7
  useState,
9
8
  } from 'react';
@@ -35,6 +34,10 @@ import {
35
34
  type MRT_RowData,
36
35
  type MRT_TableInstance,
37
36
  } from '../../types';
37
+ import {
38
+ getColumnFilterInfo,
39
+ useDropdownOptions,
40
+ } from '../../utils/column.utils';
38
41
  import { getValueAndLabel, parseFromValuesOrFunc } from '../../utils/utils';
39
42
  import { MRT_FilterOptionMenu } from '../menus/MRT_FilterOptionMenu';
40
43
 
@@ -53,7 +56,6 @@ export const MRT_FilterTextField = <TData extends MRT_RowData>({
53
56
  }: MRT_FilterTextFieldProps<TData>) => {
54
57
  const {
55
58
  options: {
56
- columnFilterModeOptions,
57
59
  enableColumnFilterModes,
58
60
  icons: { CloseIcon, FilterListIcon },
59
61
  localization,
@@ -112,17 +114,20 @@ export const MRT_FilterTextField = <TData extends MRT_RowData>({
112
114
  }),
113
115
  };
114
116
 
115
- const isDateFilter =
116
- filterVariant?.startsWith('date') || filterVariant?.startsWith('time');
117
- const isAutocompleteFilter = filterVariant === 'autocomplete';
118
- const isRangeFilter =
119
- filterVariant?.includes('range') || rangeFilterIndex !== undefined;
120
- const isSelectFilter = filterVariant === 'select';
121
- const isMultiSelectFilter = filterVariant === 'multi-select';
122
- const isTextboxFilter =
123
- ['autocomplete', 'text'].includes(filterVariant!) ||
124
- (!isSelectFilter && !isMultiSelectFilter);
125
- const currentFilterOption = columnDef._filterFn;
117
+ const {
118
+ allowedColumnFilterOptions,
119
+ currentFilterOption,
120
+ facetedUniqueValues,
121
+ isAutocompleteFilter,
122
+ isDateFilter,
123
+ isMultiSelectFilter,
124
+ isRangeFilter,
125
+ isSelectFilter,
126
+ isTextboxFilter,
127
+ } = getColumnFilterInfo({ header, table });
128
+
129
+ const dropdownOptions = useDropdownOptions({ header, table });
130
+
126
131
  const filterChipLabel = ['empty', 'notEmpty'].includes(currentFilterOption)
127
132
  ? //@ts-ignore
128
133
  localization[
@@ -132,6 +137,7 @@ export const MRT_FilterTextField = <TData extends MRT_RowData>({
132
137
  }`
133
138
  ]
134
139
  : '';
140
+
135
141
  const filterPlaceholder = !isRangeFilter
136
142
  ? textFieldProps?.placeholder ??
137
143
  localization.filterByColumn?.replace('{column}', String(columnDef.header))
@@ -140,16 +146,14 @@ export const MRT_FilterTextField = <TData extends MRT_RowData>({
140
146
  : rangeFilterIndex === 1
141
147
  ? localization.max
142
148
  : '';
143
- const allowedColumnFilterOptions =
144
- columnDef?.columnFilterModeOptions ?? columnFilterModeOptions;
145
- const showChangeModeButton =
149
+
150
+ const showChangeModeButton = !!(
146
151
  enableColumnFilterModes &&
147
152
  columnDef.enableColumnFilterModes !== false &&
148
153
  !rangeFilterIndex &&
149
154
  (allowedColumnFilterOptions === undefined ||
150
- !!allowedColumnFilterOptions?.length);
151
-
152
- const facetedUniqueValues = column.getFacetedUniqueValues();
155
+ !!allowedColumnFilterOptions?.length)
156
+ );
153
157
 
154
158
  const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);
155
159
  const [filterValue, setFilterValue] = useState<string | string[]>(() =>
@@ -257,23 +261,6 @@ export const MRT_FilterTextField = <TData extends MRT_RowData>({
257
261
  );
258
262
  }
259
263
 
260
- const dropdownOptions = useMemo(
261
- () =>
262
- columnDef.filterSelectOptions ??
263
- ((isSelectFilter || isMultiSelectFilter || isAutocompleteFilter) &&
264
- facetedUniqueValues
265
- ? Array.from(facetedUniqueValues.keys())
266
- .filter((value) => value !== null && value !== undefined)
267
- .sort((a, b) => a.localeCompare(b))
268
- : undefined),
269
- [
270
- columnDef.filterSelectOptions,
271
- facetedUniqueValues,
272
- isMultiSelectFilter,
273
- isSelectFilter,
274
- ],
275
- );
276
-
277
264
  const endAdornment =
278
265
  !isAutocompleteFilter && !isDateFilter && !filterChipLabel ? (
279
266
  <InputAdornment
@@ -447,8 +434,12 @@ export const MRT_FilterTextField = <TData extends MRT_RowData>({
447
434
  ) : isAutocompleteFilter ? (
448
435
  <Autocomplete
449
436
  freeSolo
450
- getOptionLabel={(option) => getValueAndLabel(option).label}
451
- onChange={(_e, newValue) => handleAutocompleteChange(newValue)}
437
+ getOptionLabel={(option: DropdownOption) =>
438
+ getValueAndLabel(option).label
439
+ }
440
+ onChange={(_e, newValue: DropdownOption) =>
441
+ handleAutocompleteChange(newValue)
442
+ }
452
443
  options={
453
444
  dropdownOptions?.map((option) => getValueAndLabel(option)) ?? []
454
445
  }
@@ -48,16 +48,16 @@ export const MRT_TablePaper = <TData extends MRT_RowData>({
48
48
  ...(isFullScreen
49
49
  ? {
50
50
  bottom: 0,
51
- height: '100vh',
51
+ height: '100dvh',
52
52
  left: 0,
53
53
  margin: 0,
54
- maxHeight: '100vh',
55
- maxWidth: '100vw',
54
+ maxHeight: '100dvh',
55
+ maxWidth: '100dvw',
56
56
  padding: 0,
57
57
  position: 'fixed',
58
58
  right: 0,
59
59
  top: 0,
60
- width: '100vw',
60
+ width: '100dvw',
61
61
  zIndex: 999,
62
62
  }
63
63
  : {}),
@@ -29,6 +29,10 @@ export const MRT_ToolbarDropZone = <TData extends MRT_RowData>({
29
29
  setHoveredColumn({ id: 'drop-zone' });
30
30
  };
31
31
 
32
+ const handleDragOver = (e: DragEvent) => {
33
+ e.preventDefault();
34
+ };
35
+
32
36
  useEffect(() => {
33
37
  if (table.options.state?.showToolbarDropZone !== undefined) {
34
38
  setShowToolbarDropZone(
@@ -45,6 +49,7 @@ export const MRT_ToolbarDropZone = <TData extends MRT_RowData>({
45
49
  <Box
46
50
  className="Mui-ToolbarDropZone"
47
51
  onDragEnter={handleDragEnter}
52
+ onDragOver={handleDragOver}
48
53
  {...rest}
49
54
  sx={(theme) => ({
50
55
  alignItems: 'center',
@@ -8,7 +8,7 @@ import { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';
8
8
 
9
9
  export const getMRT_RowActionsColumnDef = <TData extends MRT_RowData>(
10
10
  tableOptions: MRT_StatefulTableOptions<TData>,
11
- ): MRT_ColumnDef<TData> | null => {
11
+ ): MRT_ColumnDef<TData> => {
12
12
  return {
13
13
  Cell: ({ cell, row, staticRowIndex, table }) => (
14
14
  <MRT_ToggleRowActionMenuButton
@@ -9,7 +9,7 @@ import { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';
9
9
 
10
10
  export const getMRT_RowDragColumnDef = <TData extends MRT_RowData>(
11
11
  tableOptions: MRT_StatefulTableOptions<TData>,
12
- ): MRT_ColumnDef<TData> | null => {
12
+ ): MRT_ColumnDef<TData> => {
13
13
  return {
14
14
  Cell: ({ row, rowRef, table }) => (
15
15
  <MRT_TableBodyRowGrabHandle
@@ -13,7 +13,7 @@ import { getCommonTooltipProps } from '../../utils/style.utils';
13
13
 
14
14
  export const getMRT_RowExpandColumnDef = <TData extends MRT_RowData>(
15
15
  tableOptions: MRT_StatefulTableOptions<TData>,
16
- ): MRT_ColumnDef<TData> | null => {
16
+ ): MRT_ColumnDef<TData> => {
17
17
  const {
18
18
  defaultColumn,
19
19
  enableExpandAll,
@@ -7,7 +7,7 @@ import { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';
7
7
 
8
8
  export const getMRT_RowNumbersColumnDef = <TData extends MRT_RowData>(
9
9
  tableOptions: MRT_StatefulTableOptions<TData>,
10
- ): MRT_ColumnDef<TData> | null => {
10
+ ): MRT_ColumnDef<TData> => {
11
11
  const { localization, rowNumberDisplayMode } = tableOptions;
12
12
  const {
13
13
  pagination: { pageIndex, pageSize },
@@ -8,7 +8,7 @@ import { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';
8
8
 
9
9
  export const getMRT_RowPinningColumnDef = <TData extends MRT_RowData>(
10
10
  tableOptions: MRT_StatefulTableOptions<TData>,
11
- ): MRT_ColumnDef<TData> | null => {
11
+ ): MRT_ColumnDef<TData> => {
12
12
  return {
13
13
  Cell: ({ row, table }) => (
14
14
  <MRT_TableBodyRowPinButton row={row} table={table} />
@@ -8,7 +8,7 @@ import { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';
8
8
 
9
9
  export const getMRT_RowSelectColumnDef = <TData extends MRT_RowData>(
10
10
  tableOptions: MRT_StatefulTableOptions<TData>,
11
- ): MRT_ColumnDef<TData> | null => {
11
+ ): MRT_ColumnDef<TData> => {
12
12
  const { enableMultiRowSelection, enableSelectAll } = tableOptions;
13
13
 
14
14
  return {
@@ -17,7 +17,7 @@ const blankColProps = {
17
17
 
18
18
  export const getMRT_RowSpacerColumnDef = <TData extends MRT_RowData>(
19
19
  tableOptions: MRT_StatefulTableOptions<TData>,
20
- ): MRT_ColumnDef<TData> | null => {
20
+ ): MRT_ColumnDef<TData> => {
21
21
  return {
22
22
  ...defaultDisplayColumnProps({
23
23
  id: 'mrt-row-spacer',