material-react-table 3.0.0-alpha.0 → 3.0.0-beta.1
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/README.md +2 -2
- package/dist/index.d.ts +66 -5
- package/dist/index.esm.js +329 -158
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +329 -157
- package/dist/index.js.map +1 -1
- package/package.json +6 -6
- package/src/components/body/MRT_TableBodyCell.tsx +20 -1
- package/src/components/body/MRT_TableBodyRow.tsx +3 -2
- package/src/components/buttons/MRT_ToggleRowActionMenuButton.tsx +5 -1
- package/src/components/footer/MRT_TableFooter.tsx +17 -2
- package/src/components/footer/MRT_TableFooterCell.tsx +18 -1
- package/src/components/head/MRT_TableHeadCell.tsx +16 -0
- package/src/components/inputs/MRT_FilterTextField.tsx +4 -0
- package/src/components/menus/MRT_ActionMenuItem.tsx +1 -0
- package/src/components/menus/MRT_RowActionMenu.tsx +26 -16
- package/src/fns/filterFns.ts +43 -35
- package/src/hooks/useMRT_TableOptions.ts +2 -0
- package/src/types.ts +55 -7
- package/src/utils/cell.utils.ts +137 -0
- package/src/utils/style.utils.ts +5 -0
package/package.json
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
{
|
2
|
-
"version": "3.0.0-
|
2
|
+
"version": "3.0.0-beta.1",
|
3
3
|
"license": "MIT",
|
4
4
|
"name": "material-react-table",
|
5
5
|
"description": "A fully featured Material UI V6 implementation of TanStack React Table V8, written from the ground up in TypeScript.",
|
@@ -35,11 +35,11 @@
|
|
35
35
|
"size-limit": [
|
36
36
|
{
|
37
37
|
"path": "dist/index.js",
|
38
|
-
"limit": "
|
38
|
+
"limit": "55 KB"
|
39
39
|
},
|
40
40
|
{
|
41
41
|
"path": "dist/index.esm.js",
|
42
|
-
"limit": "
|
42
|
+
"limit": "51 KB"
|
43
43
|
}
|
44
44
|
],
|
45
45
|
"engines": {
|
@@ -78,11 +78,11 @@
|
|
78
78
|
"@storybook/preview-api": "^8.2.9",
|
79
79
|
"@storybook/react": "^8.2.9",
|
80
80
|
"@storybook/react-vite": "^8.2.9",
|
81
|
-
"@types/node": "^22.5.
|
81
|
+
"@types/node": "^22.5.2",
|
82
82
|
"@types/react": "^18.3.5",
|
83
83
|
"@types/react-dom": "^18.3.0",
|
84
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
85
|
-
"@typescript-eslint/parser": "^8.
|
84
|
+
"@typescript-eslint/eslint-plugin": "^8.4.0",
|
85
|
+
"@typescript-eslint/parser": "^8.4.0",
|
86
86
|
"@vitejs/plugin-react": "^4.3.1",
|
87
87
|
"eslint": "^9.9.1",
|
88
88
|
"eslint-plugin-mui-path-imports": "^0.0.15",
|
@@ -16,7 +16,11 @@ import {
|
|
16
16
|
type MRT_RowData,
|
17
17
|
type MRT_TableInstance,
|
18
18
|
} from '../../types';
|
19
|
-
import {
|
19
|
+
import {
|
20
|
+
isCellEditable,
|
21
|
+
cellNavigation,
|
22
|
+
openEditingCell,
|
23
|
+
} from '../../utils/cell.utils';
|
20
24
|
import { getCommonMRTCellStyles } from '../../utils/style.utils';
|
21
25
|
import { parseFromValuesOrFunc } from '../../utils/utils';
|
22
26
|
import { MRT_CopyButton } from '../buttons/MRT_CopyButton';
|
@@ -54,6 +58,7 @@ export const MRT_TableBodyCell = <TData extends MRT_RowData>({
|
|
54
58
|
enableColumnOrdering,
|
55
59
|
enableColumnPinning,
|
56
60
|
enableGrouping,
|
61
|
+
enableCellNavigation,
|
57
62
|
layoutMode,
|
58
63
|
mrtTheme: { draggingBorderColor },
|
59
64
|
muiSkeletonProps,
|
@@ -227,12 +232,26 @@ export const MRT_TableBodyCell = <TData extends MRT_RowData>({
|
|
227
232
|
}
|
228
233
|
};
|
229
234
|
|
235
|
+
const handleKeyDown = (event: React.KeyboardEvent<HTMLTableCellElement>) => {
|
236
|
+
if (enableCellNavigation) {
|
237
|
+
cellNavigation({
|
238
|
+
cell,
|
239
|
+
cellValue: cell.getValue<string>(),
|
240
|
+
event,
|
241
|
+
table,
|
242
|
+
});
|
243
|
+
}
|
244
|
+
tableCellProps?.onKeyDown?.(event);
|
245
|
+
};
|
246
|
+
|
230
247
|
return (
|
231
248
|
<TableCell
|
232
249
|
align={theme.direction === 'rtl' ? 'right' : 'left'}
|
233
250
|
data-index={staticColumnIndex}
|
234
251
|
data-pinned={!!isColumnPinned || undefined}
|
252
|
+
tabIndex={enableCellNavigation ? 0 : undefined}
|
235
253
|
{...tableCellProps}
|
254
|
+
onKeyDown={handleKeyDown}
|
236
255
|
onContextMenu={handleContextMenu}
|
237
256
|
onDoubleClick={handleDoubleClick}
|
238
257
|
onDragEnter={handleDragEnter}
|
@@ -248,6 +248,7 @@ export const MRT_TableBodyRow = <TData extends MRT_RowData>({
|
|
248
248
|
staticRowIndex,
|
249
249
|
table,
|
250
250
|
};
|
251
|
+
const key = `${cell.id}-${staticRowIndex}`;
|
251
252
|
return cell ? (
|
252
253
|
memoMode === 'cells' &&
|
253
254
|
cell.column.columnDef.columnDefType === 'data' &&
|
@@ -255,9 +256,9 @@ export const MRT_TableBodyRow = <TData extends MRT_RowData>({
|
|
255
256
|
!draggingRow &&
|
256
257
|
editingCell?.id !== cell.id &&
|
257
258
|
editingRow?.id !== row.id ? (
|
258
|
-
<Memo_MRT_TableBodyCell key={
|
259
|
+
<Memo_MRT_TableBodyCell key={key} {...props} />
|
259
260
|
) : (
|
260
|
-
<MRT_TableBodyCell key={
|
261
|
+
<MRT_TableBodyCell key={key} {...props} />
|
261
262
|
)
|
262
263
|
) : null;
|
263
264
|
},
|
@@ -94,7 +94,11 @@ export const MRT_ToggleRowActionMenuButton = <TData extends MRT_RowData>({
|
|
94
94
|
<EditIcon />
|
95
95
|
</IconButton>
|
96
96
|
</Tooltip>
|
97
|
-
) : renderRowActionMenuItems
|
97
|
+
) : renderRowActionMenuItems?.({
|
98
|
+
row,
|
99
|
+
staticRowIndex,
|
100
|
+
table,
|
101
|
+
} as any)?.length ? (
|
98
102
|
<>
|
99
103
|
<Tooltip {...getCommonTooltipProps()} title={localization.rowActions}>
|
100
104
|
<IconButton
|
@@ -19,7 +19,6 @@ export const MRT_TableFooter = <TData extends MRT_RowData>({
|
|
19
19
|
...rest
|
20
20
|
}: MRT_TableFooterProps<TData>) => {
|
21
21
|
const {
|
22
|
-
getFooterGroups,
|
23
22
|
getState,
|
24
23
|
options: { enableStickyFooter, layoutMode, muiTableFooterProps },
|
25
24
|
refs: { tableFooterRef },
|
@@ -36,6 +35,22 @@ export const MRT_TableFooter = <TData extends MRT_RowData>({
|
|
36
35
|
const stickFooter =
|
37
36
|
(isFullScreen || enableStickyFooter) && enableStickyFooter !== false;
|
38
37
|
|
38
|
+
const footerGroups = table.getFooterGroups();
|
39
|
+
|
40
|
+
//if no footer cells at all, skip footer
|
41
|
+
if (
|
42
|
+
!footerGroups.some((footerGroup) =>
|
43
|
+
footerGroup.headers?.some(
|
44
|
+
(header) =>
|
45
|
+
(typeof header.column.columnDef.footer === 'string' &&
|
46
|
+
!!header.column.columnDef.footer) ||
|
47
|
+
header.column.columnDef.Footer,
|
48
|
+
),
|
49
|
+
)
|
50
|
+
) {
|
51
|
+
return null;
|
52
|
+
}
|
53
|
+
|
39
54
|
return (
|
40
55
|
<TableFooter
|
41
56
|
{...tableFooterProps}
|
@@ -60,7 +75,7 @@ export const MRT_TableFooter = <TData extends MRT_RowData>({
|
|
60
75
|
...(parseFromValuesOrFunc(tableFooterProps?.sx, theme) as any),
|
61
76
|
})}
|
62
77
|
>
|
63
|
-
{
|
78
|
+
{footerGroups.map((footerGroup) => (
|
64
79
|
<MRT_TableFooterRow
|
65
80
|
columnVirtualizer={columnVirtualizer}
|
66
81
|
footerGroup={footerGroup as any}
|
@@ -7,6 +7,7 @@ import {
|
|
7
7
|
} from '../../types';
|
8
8
|
import { getCommonMRTCellStyles } from '../../utils/style.utils';
|
9
9
|
import { parseFromValuesOrFunc } from '../../utils/utils';
|
10
|
+
import { cellNavigation } from '../../utils/cell.utils';
|
10
11
|
|
11
12
|
export interface MRT_TableFooterCellProps<TData extends MRT_RowData>
|
12
13
|
extends TableCellProps {
|
@@ -24,7 +25,11 @@ export const MRT_TableFooterCell = <TData extends MRT_RowData>({
|
|
24
25
|
const theme = useTheme();
|
25
26
|
const {
|
26
27
|
getState,
|
27
|
-
options: {
|
28
|
+
options: {
|
29
|
+
enableColumnPinning,
|
30
|
+
muiTableFooterCellProps,
|
31
|
+
enableCellNavigation,
|
32
|
+
},
|
28
33
|
} = table;
|
29
34
|
const { density } = getState();
|
30
35
|
const { column } = footer;
|
@@ -43,6 +48,17 @@ export const MRT_TableFooterCell = <TData extends MRT_RowData>({
|
|
43
48
|
...rest,
|
44
49
|
};
|
45
50
|
|
51
|
+
const handleKeyDown = (event: React.KeyboardEvent<HTMLTableCellElement>) => {
|
52
|
+
if (enableCellNavigation) {
|
53
|
+
cellNavigation({
|
54
|
+
event,
|
55
|
+
cellValue: footer.column.columnDef.footer,
|
56
|
+
table,
|
57
|
+
});
|
58
|
+
}
|
59
|
+
tableCellProps?.onKeyDown?.(event);
|
60
|
+
};
|
61
|
+
|
46
62
|
return (
|
47
63
|
<TableCell
|
48
64
|
align={
|
@@ -57,6 +73,7 @@ export const MRT_TableFooterCell = <TData extends MRT_RowData>({
|
|
57
73
|
data-pinned={!!isColumnPinned || undefined}
|
58
74
|
variant="footer"
|
59
75
|
{...tableCellProps}
|
76
|
+
onKeyDown={handleKeyDown}
|
60
77
|
sx={(theme) => ({
|
61
78
|
fontWeight: 'bold',
|
62
79
|
p:
|
@@ -17,6 +17,7 @@ import {
|
|
17
17
|
} from '../../types';
|
18
18
|
import { getCommonMRTCellStyles } from '../../utils/style.utils';
|
19
19
|
import { parseFromValuesOrFunc } from '../../utils/utils';
|
20
|
+
import { cellNavigation } from '../../utils/cell.utils';
|
20
21
|
|
21
22
|
export interface MRT_TableHeadCellProps<TData extends MRT_RowData>
|
22
23
|
extends TableCellProps {
|
@@ -45,6 +46,7 @@ export const MRT_TableHeadCell = <TData extends MRT_RowData>({
|
|
45
46
|
enableColumnOrdering,
|
46
47
|
enableColumnPinning,
|
47
48
|
enableGrouping,
|
49
|
+
enableCellNavigation,
|
48
50
|
enableMultiSort,
|
49
51
|
layoutMode,
|
50
52
|
mrtTheme: { draggingBorderColor },
|
@@ -147,6 +149,18 @@ export const MRT_TableHeadCell = <TData extends MRT_RowData>({
|
|
147
149
|
}
|
148
150
|
};
|
149
151
|
|
152
|
+
const handleKeyDown = (event: React.KeyboardEvent<HTMLTableCellElement>) => {
|
153
|
+
if (enableCellNavigation) {
|
154
|
+
cellNavigation({
|
155
|
+
event,
|
156
|
+
cellValue: header.column.columnDef.header,
|
157
|
+
table,
|
158
|
+
header,
|
159
|
+
});
|
160
|
+
}
|
161
|
+
tableCellProps?.onKeyDown?.(event);
|
162
|
+
};
|
163
|
+
|
150
164
|
const HeaderElement =
|
151
165
|
parseFromValuesOrFunc(columnDef.Header, {
|
152
166
|
column,
|
@@ -185,7 +199,9 @@ export const MRT_TableHeadCell = <TData extends MRT_RowData>({
|
|
185
199
|
}
|
186
200
|
}
|
187
201
|
}}
|
202
|
+
tabIndex={enableCellNavigation ? 0 : undefined}
|
188
203
|
{...tableCellProps}
|
204
|
+
onKeyDown={handleKeyDown}
|
189
205
|
sx={(theme: Theme) => ({
|
190
206
|
'& :hover': {
|
191
207
|
'.MuiButtonBase-root': {
|
@@ -338,6 +338,10 @@ export const MRT_FilterTextField = <TData extends MRT_RowData>({
|
|
338
338
|
: filterPlaceholder,
|
339
339
|
variant: 'standard',
|
340
340
|
...textFieldProps,
|
341
|
+
onKeyDown: (e) => {
|
342
|
+
e.stopPropagation();
|
343
|
+
textFieldProps.onKeyDown?.(e);
|
344
|
+
},
|
341
345
|
sx: (theme) => ({
|
342
346
|
minWidth: isDateFilter
|
343
347
|
? '160px'
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { type MouseEvent } from 'react';
|
1
|
+
import { ReactNode, useMemo, type MouseEvent } from 'react';
|
2
2
|
import Menu, { type MenuProps } from '@mui/material/Menu';
|
3
3
|
import { MRT_ActionMenuItem } from './MRT_ActionMenuItem';
|
4
4
|
import {
|
@@ -40,6 +40,30 @@ export const MRT_RowActionMenu = <TData extends MRT_RowData>({
|
|
40
40
|
} = table;
|
41
41
|
const { density } = getState();
|
42
42
|
|
43
|
+
const menuItems = useMemo(() => {
|
44
|
+
const items: ReactNode[] = [];
|
45
|
+
const editItem = parseFromValuesOrFunc(enableEditing, row) &&
|
46
|
+
['modal', 'row'].includes(editDisplayMode!) && (
|
47
|
+
<MRT_ActionMenuItem
|
48
|
+
icon={<EditIcon />}
|
49
|
+
label={localization.edit}
|
50
|
+
onClick={handleEdit}
|
51
|
+
table={table}
|
52
|
+
/>
|
53
|
+
);
|
54
|
+
if (editItem) items.push(editItem);
|
55
|
+
const rowActionMenuItems = renderRowActionMenuItems?.({
|
56
|
+
closeMenu: () => setAnchorEl(null),
|
57
|
+
row,
|
58
|
+
staticRowIndex,
|
59
|
+
table,
|
60
|
+
});
|
61
|
+
if (rowActionMenuItems?.length) items.push(...rowActionMenuItems);
|
62
|
+
return items;
|
63
|
+
}, [renderRowActionMenuItems, row, staticRowIndex, table]);
|
64
|
+
|
65
|
+
if (!menuItems.length) return null;
|
66
|
+
|
43
67
|
return (
|
44
68
|
<Menu
|
45
69
|
MenuListProps={{
|
@@ -55,21 +79,7 @@ export const MRT_RowActionMenu = <TData extends MRT_RowData>({
|
|
55
79
|
open={!!anchorEl}
|
56
80
|
{...rest}
|
57
81
|
>
|
58
|
-
{
|
59
|
-
['modal', 'row'].includes(editDisplayMode!) && (
|
60
|
-
<MRT_ActionMenuItem
|
61
|
-
icon={<EditIcon />}
|
62
|
-
label={localization.edit}
|
63
|
-
onClick={handleEdit}
|
64
|
-
table={table}
|
65
|
-
/>
|
66
|
-
)}
|
67
|
-
{renderRowActionMenuItems?.({
|
68
|
-
closeMenu: () => setAnchorEl(null),
|
69
|
-
row,
|
70
|
-
staticRowIndex,
|
71
|
-
table,
|
72
|
-
})}
|
82
|
+
{menuItems}
|
73
83
|
</Menu>
|
74
84
|
);
|
75
85
|
};
|
package/src/fns/filterFns.ts
CHANGED
@@ -11,10 +11,14 @@ const fuzzy = <TData extends MRT_RowData>(
|
|
11
11
|
columnId: string,
|
12
12
|
filterValue: number | string,
|
13
13
|
addMeta: (item: RankingInfo) => void,
|
14
|
-
) => {
|
15
|
-
const itemRank = rankItem(
|
16
|
-
|
17
|
-
|
14
|
+
): boolean => {
|
15
|
+
const itemRank = rankItem(
|
16
|
+
row.getValue<string | number | null>(columnId),
|
17
|
+
filterValue as string,
|
18
|
+
{
|
19
|
+
threshold: rankings.MATCHES,
|
20
|
+
},
|
21
|
+
);
|
18
22
|
addMeta(itemRank);
|
19
23
|
return itemRank.passed;
|
20
24
|
};
|
@@ -25,10 +29,10 @@ const contains = <TData extends MRT_RowData>(
|
|
25
29
|
row: Row<TData>,
|
26
30
|
id: string,
|
27
31
|
filterValue: number | string,
|
28
|
-
) =>
|
29
|
-
row
|
30
|
-
.getValue<number | string>(id)
|
31
|
-
|
32
|
+
): boolean =>
|
33
|
+
!!row
|
34
|
+
.getValue<number | string | null>(id)
|
35
|
+
?.toString()
|
32
36
|
.toLowerCase()
|
33
37
|
.trim()
|
34
38
|
.includes(filterValue.toString().toLowerCase().trim());
|
@@ -39,10 +43,10 @@ const startsWith = <TData extends MRT_RowData>(
|
|
39
43
|
row: Row<TData>,
|
40
44
|
id: string,
|
41
45
|
filterValue: number | string,
|
42
|
-
) =>
|
43
|
-
row
|
44
|
-
.getValue<number | string>(id)
|
45
|
-
|
46
|
+
): boolean =>
|
47
|
+
!!row
|
48
|
+
.getValue<number | string | null>(id)
|
49
|
+
?.toString()
|
46
50
|
.toLowerCase()
|
47
51
|
.trim()
|
48
52
|
.startsWith(filterValue.toString().toLowerCase().trim());
|
@@ -53,10 +57,10 @@ const endsWith = <TData extends MRT_RowData>(
|
|
53
57
|
row: Row<TData>,
|
54
58
|
id: string,
|
55
59
|
filterValue: number | string,
|
56
|
-
) =>
|
57
|
-
row
|
58
|
-
.getValue<number | string>(id)
|
59
|
-
|
60
|
+
): boolean =>
|
61
|
+
!!row
|
62
|
+
.getValue<number | string | null>(id)
|
63
|
+
?.toString()
|
60
64
|
.toLowerCase()
|
61
65
|
.trim()
|
62
66
|
.endsWith(filterValue.toString().toLowerCase().trim());
|
@@ -67,9 +71,9 @@ const equals = <TData extends MRT_RowData>(
|
|
67
71
|
row: Row<TData>,
|
68
72
|
id: string,
|
69
73
|
filterValue: number | string,
|
70
|
-
) =>
|
71
|
-
row.getValue<number | string>(id)
|
72
|
-
filterValue
|
74
|
+
): boolean =>
|
75
|
+
row.getValue<number | string | null>(id)?.toString().toLowerCase().trim() ===
|
76
|
+
filterValue.toString().toLowerCase().trim();
|
73
77
|
|
74
78
|
equals.autoRemove = (val: any) => !val;
|
75
79
|
|
@@ -77,8 +81,8 @@ const notEquals = <TData extends MRT_RowData>(
|
|
77
81
|
row: Row<TData>,
|
78
82
|
id: string,
|
79
83
|
filterValue: number | string,
|
80
|
-
) =>
|
81
|
-
row.getValue<number | string>(id)
|
84
|
+
): boolean =>
|
85
|
+
row.getValue<number | string | null>(id)?.toString().toLowerCase().trim() !==
|
82
86
|
filterValue.toString().toLowerCase().trim();
|
83
87
|
|
84
88
|
notEquals.autoRemove = (val: any) => !val;
|
@@ -87,11 +91,13 @@ const greaterThan = <TData extends MRT_RowData>(
|
|
87
91
|
row: Row<TData>,
|
88
92
|
id: string,
|
89
93
|
filterValue: number | string,
|
90
|
-
) =>
|
94
|
+
): boolean =>
|
91
95
|
!isNaN(+filterValue) && !isNaN(+row.getValue<number | string>(id))
|
92
|
-
? +row.getValue<number | string>(id) > +filterValue
|
93
|
-
: row.getValue<number | string>(id)
|
94
|
-
|
96
|
+
? +(row.getValue<number | string | null>(id) ?? 0) > +filterValue
|
97
|
+
: (row.getValue<number | string | null>(id) ?? '')
|
98
|
+
?.toString()
|
99
|
+
.toLowerCase()
|
100
|
+
.trim() > filterValue.toString().toLowerCase().trim();
|
95
101
|
|
96
102
|
greaterThan.autoRemove = (val: any) => !val;
|
97
103
|
|
@@ -99,7 +105,7 @@ const greaterThanOrEqualTo = <TData extends MRT_RowData>(
|
|
99
105
|
row: Row<TData>,
|
100
106
|
id: string,
|
101
107
|
filterValue: number | string,
|
102
|
-
) => equals(row, id, filterValue) || greaterThan(row, id, filterValue);
|
108
|
+
): boolean => equals(row, id, filterValue) || greaterThan(row, id, filterValue);
|
103
109
|
|
104
110
|
greaterThanOrEqualTo.autoRemove = (val: any) => !val;
|
105
111
|
|
@@ -107,11 +113,13 @@ const lessThan = <TData extends MRT_RowData>(
|
|
107
113
|
row: Row<TData>,
|
108
114
|
id: string,
|
109
115
|
filterValue: number | string,
|
110
|
-
) =>
|
116
|
+
): boolean =>
|
111
117
|
!isNaN(+filterValue) && !isNaN(+row.getValue<number | string>(id))
|
112
|
-
? +row.getValue<number | string>(id) < +filterValue
|
113
|
-
: row.getValue<number | string>(id)
|
114
|
-
|
118
|
+
? +(row.getValue<number | string | null>(id) ?? 0) < +filterValue
|
119
|
+
: (row.getValue<number | string | null>(id) ?? '')
|
120
|
+
?.toString()
|
121
|
+
.toLowerCase()
|
122
|
+
.trim() < filterValue.toString().toLowerCase().trim();
|
115
123
|
|
116
124
|
lessThan.autoRemove = (val: any) => !val;
|
117
125
|
|
@@ -119,7 +127,7 @@ const lessThanOrEqualTo = <TData extends MRT_RowData>(
|
|
119
127
|
row: Row<TData>,
|
120
128
|
id: string,
|
121
129
|
filterValue: number | string,
|
122
|
-
) => equals(row, id, filterValue) || lessThan(row, id, filterValue);
|
130
|
+
): boolean => equals(row, id, filterValue) || lessThan(row, id, filterValue);
|
123
131
|
|
124
132
|
lessThanOrEqualTo.autoRemove = (val: any) => !val;
|
125
133
|
|
@@ -127,7 +135,7 @@ const between = <TData extends MRT_RowData>(
|
|
127
135
|
row: Row<TData>,
|
128
136
|
id: string,
|
129
137
|
filterValues: [number | string, number | string],
|
130
|
-
) =>
|
138
|
+
): boolean =>
|
131
139
|
((['', undefined] as any[]).includes(filterValues[0]) ||
|
132
140
|
greaterThan(row, id, filterValues[0])) &&
|
133
141
|
((!isNaN(+filterValues[0]) &&
|
@@ -142,7 +150,7 @@ const betweenInclusive = <TData extends MRT_RowData>(
|
|
142
150
|
row: Row<TData>,
|
143
151
|
id: string,
|
144
152
|
filterValues: [number | string, number | string],
|
145
|
-
) =>
|
153
|
+
): boolean =>
|
146
154
|
((['', undefined] as any[]).includes(filterValues[0]) ||
|
147
155
|
greaterThanOrEqualTo(row, id, filterValues[0])) &&
|
148
156
|
((!isNaN(+filterValues[0]) &&
|
@@ -157,7 +165,7 @@ const empty = <TData extends MRT_RowData>(
|
|
157
165
|
row: Row<TData>,
|
158
166
|
id: string,
|
159
167
|
_filterValue: number | string,
|
160
|
-
) => !row.getValue<number | string>(id)
|
168
|
+
): boolean => !row.getValue<number | string | null>(id)?.toString().trim();
|
161
169
|
|
162
170
|
empty.autoRemove = (val: any) => !val;
|
163
171
|
|
@@ -165,7 +173,7 @@ const notEmpty = <TData extends MRT_RowData>(
|
|
165
173
|
row: Row<TData>,
|
166
174
|
id: string,
|
167
175
|
_filterValue: number | string,
|
168
|
-
) => !!row.getValue<number | string>(id)
|
176
|
+
): boolean => !!row.getValue<number | string | null>(id)?.toString().trim();
|
169
177
|
|
170
178
|
notEmpty.autoRemove = (val: any) => !val;
|
171
179
|
|
@@ -76,6 +76,7 @@ export const useMRT_TableOptions: <TData extends MRT_RowData>(
|
|
76
76
|
enableGlobalFilterRankedResults = true,
|
77
77
|
enableGrouping = false,
|
78
78
|
enableHiding = true,
|
79
|
+
enableCellNavigation = true,
|
79
80
|
enableMultiRowSelection = true,
|
80
81
|
enableMultiSort = true,
|
81
82
|
enablePagination = true,
|
@@ -203,6 +204,7 @@ export const useMRT_TableOptions: <TData extends MRT_RowData>(
|
|
203
204
|
enableGlobalFilterRankedResults,
|
204
205
|
enableGrouping,
|
205
206
|
enableHiding,
|
207
|
+
enableCellNavigation,
|
206
208
|
enableMultiRowSelection,
|
207
209
|
enableMultiSort,
|
208
210
|
enablePagination,
|