material-react-table 0.8.15 → 0.9.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/README.md +1 -1
- package/dist/MaterialReactTable.d.ts +37 -36
- package/dist/material-react-table.cjs.development.js +97 -75
- package/dist/material-react-table.cjs.development.js.map +1 -1
- package/dist/material-react-table.cjs.production.min.js +1 -1
- package/dist/material-react-table.cjs.production.min.js.map +1 -1
- package/dist/material-react-table.esm.js +97 -75
- package/dist/material-react-table.esm.js.map +1 -1
- package/dist/toolbar/MRT_LinearProgressBar.d.ts +1 -0
- package/dist/utils.d.ts +1 -1
- package/package.json +1 -1
- package/src/MaterialReactTable.tsx +50 -47
- package/src/body/MRT_TableBodyCell.tsx +4 -4
- package/src/body/MRT_TableBodyRow.tsx +2 -2
- package/src/body/MRT_TableDetailPanel.tsx +2 -2
- package/src/buttons/MRT_EditActionButtons.tsx +2 -2
- package/src/buttons/MRT_ExpandButton.tsx +2 -2
- package/src/buttons/MRT_FullScreenToggleButton.tsx +2 -2
- package/src/buttons/MRT_ToggleDensePaddingButton.tsx +2 -2
- package/src/buttons/MRT_ToggleFiltersButton.tsx +2 -2
- package/src/buttons/MRT_ToggleGlobalFilterButton.tsx +4 -4
- package/src/head/MRT_TableHeadCellFilterLabel.tsx +1 -0
- package/src/inputs/MRT_EditCellTextField.tsx +8 -8
- package/src/inputs/MRT_FilterTextField.tsx +2 -2
- package/src/inputs/MRT_SearchTextField.tsx +4 -4
- package/src/inputs/MRT_SelectCheckbox.tsx +4 -4
- package/src/menus/MRT_ColumnActionMenu.tsx +2 -2
- package/src/menus/MRT_ShowHideColumnsMenu.tsx +1 -1
- package/src/menus/MRT_ShowHideColumnsMenuItems.tsx +2 -2
- package/src/table/MRT_TableContainer.tsx +3 -3
- package/src/table/MRT_TableRoot.tsx +11 -11
- package/src/toolbar/MRT_LinearProgressBar.tsx +17 -2
- package/src/toolbar/MRT_ToolbarBottom.tsx +4 -4
- package/src/toolbar/MRT_ToolbarInternalButtons.tsx +2 -1
- package/src/toolbar/MRT_ToolbarTop.tsx +13 -6
- package/src/utils.ts +1 -1
|
@@ -21,7 +21,7 @@ export const MRT_ShowHideColumnsMenuItems: FC<Props> = ({
|
|
|
21
21
|
}) => {
|
|
22
22
|
const {
|
|
23
23
|
getState,
|
|
24
|
-
options: { enableColumnOrdering,
|
|
24
|
+
options: { enableColumnOrdering, onMrtToggleColumnVisibility },
|
|
25
25
|
setColumnOrder,
|
|
26
26
|
} = tableInstance;
|
|
27
27
|
|
|
@@ -56,7 +56,7 @@ export const MRT_ShowHideColumnsMenuItems: FC<Props> = ({
|
|
|
56
56
|
} else {
|
|
57
57
|
column.toggleVisibility();
|
|
58
58
|
}
|
|
59
|
-
|
|
59
|
+
onMrtToggleColumnVisibility?.({
|
|
60
60
|
column,
|
|
61
61
|
columnVisibility,
|
|
62
62
|
tableInstance,
|
|
@@ -13,7 +13,7 @@ interface Props {
|
|
|
13
13
|
export const MRT_TableContainer: FC<Props> = ({ tableInstance }) => {
|
|
14
14
|
const {
|
|
15
15
|
getState,
|
|
16
|
-
options: { enableStickyHeader,
|
|
16
|
+
options: { enableStickyHeader, tableId, muiTableContainerProps },
|
|
17
17
|
} = tableInstance;
|
|
18
18
|
|
|
19
19
|
const { isFullScreen } = getState();
|
|
@@ -28,13 +28,13 @@ export const MRT_TableContainer: FC<Props> = ({ tableInstance }) => {
|
|
|
28
28
|
useIsomorphicLayoutEffect(() => {
|
|
29
29
|
const topToolbarHeight =
|
|
30
30
|
typeof document !== 'undefined'
|
|
31
|
-
? document?.getElementById(`mrt-${
|
|
31
|
+
? document?.getElementById(`mrt-${tableId}-toolbar-top`)
|
|
32
32
|
?.offsetHeight ?? 0
|
|
33
33
|
: 0;
|
|
34
34
|
|
|
35
35
|
const bottomToolbarHeight =
|
|
36
36
|
typeof document !== 'undefined'
|
|
37
|
-
? document?.getElementById(`mrt-${
|
|
37
|
+
? document?.getElementById(`mrt-${tableId}-toolbar-bottom`)
|
|
38
38
|
?.offsetHeight ?? 0
|
|
39
39
|
: 0;
|
|
40
40
|
|
|
@@ -41,11 +41,11 @@ import { Box, Dialog, Grow } from '@mui/material';
|
|
|
41
41
|
export const MRT_TableRoot = <D extends Record<string, any> = {}>(
|
|
42
42
|
props: MaterialReactTableProps<D>,
|
|
43
43
|
) => {
|
|
44
|
-
const [
|
|
44
|
+
const [tableId, setIdPrefix] = useState(props.tableId);
|
|
45
45
|
useEffect(
|
|
46
46
|
() =>
|
|
47
|
-
setIdPrefix(props.
|
|
48
|
-
[props.
|
|
47
|
+
setIdPrefix(props.tableId ?? Math.random().toString(36).substring(2, 9)),
|
|
48
|
+
[props.tableId],
|
|
49
49
|
);
|
|
50
50
|
|
|
51
51
|
const showActionColumn =
|
|
@@ -71,7 +71,7 @@ export const MRT_TableRoot = <D extends Record<string, any> = {}>(
|
|
|
71
71
|
].filter(Boolean) as string[])
|
|
72
72
|
: [];
|
|
73
73
|
|
|
74
|
-
if (!props.enablePersistentState || !props.
|
|
74
|
+
if (!props.enablePersistentState || !props.tableId) {
|
|
75
75
|
return initState;
|
|
76
76
|
}
|
|
77
77
|
if (typeof window === 'undefined') {
|
|
@@ -84,9 +84,9 @@ export const MRT_TableRoot = <D extends Record<string, any> = {}>(
|
|
|
84
84
|
}
|
|
85
85
|
const storedState =
|
|
86
86
|
props.persistentStateMode === 'localStorage'
|
|
87
|
-
? localStorage.getItem(`mrt-${
|
|
87
|
+
? localStorage.getItem(`mrt-${tableId}-table-state`)
|
|
88
88
|
: props.persistentStateMode === 'sessionStorage'
|
|
89
|
-
? sessionStorage.getItem(`mrt-${
|
|
89
|
+
? sessionStorage.getItem(`mrt-${tableId}-table-state`)
|
|
90
90
|
: '{}';
|
|
91
91
|
if (storedState) {
|
|
92
92
|
const parsedState = JSON.parse(storedState);
|
|
@@ -149,7 +149,7 @@ export const MRT_TableRoot = <D extends Record<string, any> = {}>(
|
|
|
149
149
|
getPaginationRowModel: getPaginationRowModel(),
|
|
150
150
|
getSortedRowModel: getSortedRowModel(),
|
|
151
151
|
getSubRows: (row) => (row as MRT_Row)?.subRows,
|
|
152
|
-
|
|
152
|
+
tableId,
|
|
153
153
|
initialState,
|
|
154
154
|
}) as Table<D>,
|
|
155
155
|
[],
|
|
@@ -300,14 +300,14 @@ export const MRT_TableRoot = <D extends Record<string, any> = {}>(
|
|
|
300
300
|
if (typeof window === 'undefined' || !props.enablePersistentState) {
|
|
301
301
|
return;
|
|
302
302
|
}
|
|
303
|
-
if (!props.
|
|
303
|
+
if (!props.tableId && process.env.NODE_ENV !== 'production') {
|
|
304
304
|
console.warn(
|
|
305
|
-
'a unique
|
|
305
|
+
'a unique tableId prop is required for persistent table state to work',
|
|
306
306
|
);
|
|
307
307
|
return;
|
|
308
308
|
}
|
|
309
309
|
const itemArgs: [string, string] = [
|
|
310
|
-
`mrt-${
|
|
310
|
+
`mrt-${tableId}-table-state`,
|
|
311
311
|
JSON.stringify(tableInstance.getState()),
|
|
312
312
|
];
|
|
313
313
|
if (props.persistentStateMode === 'localStorage') {
|
|
@@ -317,7 +317,7 @@ export const MRT_TableRoot = <D extends Record<string, any> = {}>(
|
|
|
317
317
|
}
|
|
318
318
|
}, [
|
|
319
319
|
props.enablePersistentState,
|
|
320
|
-
props.
|
|
320
|
+
props.tableId,
|
|
321
321
|
props.persistentStateMode,
|
|
322
322
|
tableInstance,
|
|
323
323
|
]);
|
|
@@ -3,10 +3,14 @@ import { Collapse, LinearProgress } from '@mui/material';
|
|
|
3
3
|
import { MRT_TableInstance } from '..';
|
|
4
4
|
|
|
5
5
|
interface Props {
|
|
6
|
+
alignTo: 'bottom' | 'top';
|
|
6
7
|
tableInstance: MRT_TableInstance;
|
|
7
8
|
}
|
|
8
9
|
|
|
9
|
-
export const MRT_LinearProgressBar: FC<Props> = ({
|
|
10
|
+
export const MRT_LinearProgressBar: FC<Props> = ({
|
|
11
|
+
alignTo,
|
|
12
|
+
tableInstance,
|
|
13
|
+
}) => {
|
|
10
14
|
const {
|
|
11
15
|
options: { muiLinearProgressProps },
|
|
12
16
|
getState,
|
|
@@ -20,10 +24,21 @@ export const MRT_LinearProgressBar: FC<Props> = ({ tableInstance }) => {
|
|
|
20
24
|
: muiLinearProgressProps;
|
|
21
25
|
|
|
22
26
|
return (
|
|
23
|
-
<Collapse
|
|
27
|
+
<Collapse
|
|
28
|
+
in={isLoading || showProgressBars}
|
|
29
|
+
mountOnEnter
|
|
30
|
+
unmountOnExit
|
|
31
|
+
sx={{
|
|
32
|
+
bottom: alignTo === 'bottom' ? 0 : undefined,
|
|
33
|
+
position: 'absolute',
|
|
34
|
+
top: alignTo === 'top' ? 0 : undefined,
|
|
35
|
+
width: '100%',
|
|
36
|
+
}}
|
|
37
|
+
>
|
|
24
38
|
<LinearProgress
|
|
25
39
|
aria-label="Loading"
|
|
26
40
|
aria-busy="true"
|
|
41
|
+
sx={{ position: 'relative' }}
|
|
27
42
|
{...linearProgressProps}
|
|
28
43
|
/>
|
|
29
44
|
</Collapse>
|
|
@@ -16,7 +16,7 @@ export const MRT_ToolbarBottom: FC<Props> = ({ tableInstance }) => {
|
|
|
16
16
|
getState,
|
|
17
17
|
options: {
|
|
18
18
|
enableToolbarInternalActions,
|
|
19
|
-
|
|
19
|
+
tableId,
|
|
20
20
|
enablePagination,
|
|
21
21
|
muiTableToolbarBottomProps,
|
|
22
22
|
positionPagination,
|
|
@@ -45,20 +45,20 @@ export const MRT_ToolbarBottom: FC<Props> = ({ tableInstance }) => {
|
|
|
45
45
|
|
|
46
46
|
return (
|
|
47
47
|
<Toolbar
|
|
48
|
-
id={`mrt-${
|
|
48
|
+
id={`mrt-${tableId}-toolbar-bottom`}
|
|
49
49
|
variant="dense"
|
|
50
50
|
{...toolbarProps}
|
|
51
51
|
sx={(theme) =>
|
|
52
52
|
({
|
|
53
53
|
...commonToolbarStyles({ theme }),
|
|
54
54
|
bottom: isFullScreen ? '0' : undefined,
|
|
55
|
-
position: isFullScreen ? 'fixed' : undefined,
|
|
56
55
|
boxShadow: `-3px 0 6px ${alpha(theme.palette.common.black, 0.1)}`,
|
|
56
|
+
position: isFullScreen ? 'fixed' : 'relative',
|
|
57
57
|
...toolbarProps?.sx,
|
|
58
58
|
} as any)
|
|
59
59
|
}
|
|
60
60
|
>
|
|
61
|
-
<MRT_LinearProgressBar tableInstance={tableInstance} />
|
|
61
|
+
<MRT_LinearProgressBar alignTo='top' tableInstance={tableInstance} />
|
|
62
62
|
{positionToolbarAlertBanner === 'bottom' && (
|
|
63
63
|
<MRT_ToolbarAlertBanner tableInstance={tableInstance} />
|
|
64
64
|
)}
|
|
@@ -21,6 +21,7 @@ export const MRT_ToolbarInternalButtons: FC<Props> = ({ tableInstance }) => {
|
|
|
21
21
|
enableFullScreenToggle,
|
|
22
22
|
enableGlobalFilter,
|
|
23
23
|
enableHiding,
|
|
24
|
+
positionGlobalFilter,
|
|
24
25
|
renderToolbarInternalActions,
|
|
25
26
|
},
|
|
26
27
|
} = tableInstance;
|
|
@@ -42,7 +43,7 @@ export const MRT_ToolbarInternalButtons: FC<Props> = ({ tableInstance }) => {
|
|
|
42
43
|
tableInstance,
|
|
43
44
|
}) ?? (
|
|
44
45
|
<>
|
|
45
|
-
{enableGlobalFilter && (
|
|
46
|
+
{enableGlobalFilter && positionGlobalFilter === 'right' && (
|
|
46
47
|
<MRT_SearchTextField tableInstance={tableInstance} />
|
|
47
48
|
)}
|
|
48
49
|
{enableFilters && enableGlobalFilter && (
|
|
@@ -5,6 +5,7 @@ import { MRT_TablePagination } from './MRT_TablePagination';
|
|
|
5
5
|
import { MRT_ToolbarAlertBanner } from './MRT_ToolbarAlertBanner';
|
|
6
6
|
import { MRT_LinearProgressBar } from './MRT_LinearProgressBar';
|
|
7
7
|
import { MRT_TableInstance } from '..';
|
|
8
|
+
import { MRT_SearchTextField } from '../inputs/MRT_SearchTextField';
|
|
8
9
|
|
|
9
10
|
export const commonToolbarStyles = ({ theme }: { theme: Theme }) => ({
|
|
10
11
|
backgroundColor: lighten(theme.palette.background.default, 0.04),
|
|
@@ -26,18 +27,20 @@ export const MRT_ToolbarTop: FC<Props> = ({ tableInstance }) => {
|
|
|
26
27
|
const {
|
|
27
28
|
getState,
|
|
28
29
|
options: {
|
|
30
|
+
enableGlobalFilter,
|
|
29
31
|
enablePagination,
|
|
30
32
|
enableToolbarInternalActions,
|
|
31
|
-
|
|
33
|
+
tableId,
|
|
32
34
|
muiTableToolbarTopProps,
|
|
33
35
|
positionPagination,
|
|
36
|
+
positionGlobalFilter,
|
|
34
37
|
positionToolbarActions,
|
|
35
38
|
positionToolbarAlertBanner,
|
|
36
39
|
renderToolbarCustomActions,
|
|
37
40
|
},
|
|
38
41
|
} = tableInstance;
|
|
39
42
|
|
|
40
|
-
const { isFullScreen } = getState();
|
|
43
|
+
const { isFullScreen, showGlobalFilter } = getState();
|
|
41
44
|
|
|
42
45
|
const isMobile = useMediaQuery('(max-width:720px)');
|
|
43
46
|
|
|
@@ -48,11 +51,12 @@ export const MRT_ToolbarTop: FC<Props> = ({ tableInstance }) => {
|
|
|
48
51
|
|
|
49
52
|
const stackAlertBanner =
|
|
50
53
|
isMobile ||
|
|
51
|
-
(positionToolbarAlertBanner === 'top' &&
|
|
54
|
+
(positionToolbarAlertBanner === 'top' &&
|
|
55
|
+
(!!renderToolbarCustomActions || showGlobalFilter));
|
|
52
56
|
|
|
53
57
|
return (
|
|
54
58
|
<Toolbar
|
|
55
|
-
id={`mrt-${
|
|
59
|
+
id={`mrt-${tableId}-toolbar-top`}
|
|
56
60
|
variant="dense"
|
|
57
61
|
{...toolbarProps}
|
|
58
62
|
sx={(theme) =>
|
|
@@ -78,9 +82,12 @@ export const MRT_ToolbarTop: FC<Props> = ({ tableInstance }) => {
|
|
|
78
82
|
position: stackAlertBanner ? 'relative' : 'absolute',
|
|
79
83
|
right: 0,
|
|
80
84
|
top: 0,
|
|
81
|
-
width: '
|
|
85
|
+
width: renderToolbarCustomActions ? '100%' : undefined,
|
|
82
86
|
}}
|
|
83
87
|
>
|
|
88
|
+
{enableGlobalFilter && positionGlobalFilter === 'left' && (
|
|
89
|
+
<MRT_SearchTextField tableInstance={tableInstance} />
|
|
90
|
+
)}
|
|
84
91
|
{renderToolbarCustomActions?.({ tableInstance }) ?? <span />}
|
|
85
92
|
{enableToolbarInternalActions && positionToolbarActions === 'top' && (
|
|
86
93
|
<MRT_ToolbarInternalButtons tableInstance={tableInstance} />
|
|
@@ -92,7 +99,7 @@ export const MRT_ToolbarTop: FC<Props> = ({ tableInstance }) => {
|
|
|
92
99
|
<MRT_TablePagination tableInstance={tableInstance} />
|
|
93
100
|
)}
|
|
94
101
|
</div>
|
|
95
|
-
<MRT_LinearProgressBar tableInstance={tableInstance} />
|
|
102
|
+
<MRT_LinearProgressBar alignTo="bottom" tableInstance={tableInstance} />
|
|
96
103
|
</Toolbar>
|
|
97
104
|
);
|
|
98
105
|
};
|
package/src/utils.ts
CHANGED
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
Table,
|
|
5
5
|
Updater,
|
|
6
6
|
} from '@tanstack/react-table';
|
|
7
|
-
import { MRT_Column, MRT_ColumnDef, MRT_FilterFn
|
|
7
|
+
import { MRT_Column, MRT_ColumnDef, MRT_FilterFn } from '.';
|
|
8
8
|
import { MRT_FILTER_OPTION } from './enums';
|
|
9
9
|
import { defaultFilterFNs } from './filtersFNs';
|
|
10
10
|
|