material-react-table 0.4.9 → 0.5.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 (50) hide show
  1. package/dist/MaterialReactTable.d.ts +5 -4
  2. package/dist/body/MRT_TableBodyCell.d.ts +10 -3
  3. package/dist/body/MRT_TableBodyRow.d.ts +1 -16
  4. package/dist/head/MRT_TableHeadCell.d.ts +8 -4
  5. package/dist/material-react-table.cjs.development.js +448 -518
  6. package/dist/material-react-table.cjs.development.js.map +1 -1
  7. package/dist/material-react-table.cjs.production.min.js +1 -1
  8. package/dist/material-react-table.cjs.production.min.js.map +1 -1
  9. package/dist/material-react-table.esm.js +453 -523
  10. package/dist/material-react-table.esm.js.map +1 -1
  11. package/dist/useMRT.d.ts +0 -5
  12. package/package.json +4 -4
  13. package/src/@types/react-table-config.d.ts +3 -3
  14. package/src/MaterialReactTable.tsx +5 -4
  15. package/src/body/MRT_TableBody.tsx +6 -7
  16. package/src/body/MRT_TableBodyCell.tsx +23 -13
  17. package/src/body/MRT_TableBodyRow.tsx +17 -13
  18. package/src/body/MRT_TableDetailPanel.tsx +9 -26
  19. package/src/buttons/MRT_EditActionButtons.tsx +5 -10
  20. package/src/buttons/MRT_ExpandAllButton.tsx +7 -8
  21. package/src/buttons/MRT_ExpandButton.tsx +13 -11
  22. package/src/buttons/MRT_FullScreenToggleButton.tsx +3 -1
  23. package/src/buttons/MRT_ShowHideColumnsButton.tsx +9 -9
  24. package/src/buttons/MRT_ToggleColumnActionMenuButton.tsx +11 -12
  25. package/src/buttons/MRT_ToggleDensePaddingButton.tsx +3 -1
  26. package/src/buttons/MRT_ToggleFiltersButton.tsx +2 -2
  27. package/src/buttons/MRT_ToggleRowActionMenuButton.tsx +23 -16
  28. package/src/buttons/MRT_ToggleSearchButton.tsx +1 -1
  29. package/src/footer/MRT_TableFooterCell.tsx +17 -19
  30. package/src/footer/MRT_TableFooterRow.tsx +1 -1
  31. package/src/head/MRT_TableHeadCell.tsx +51 -57
  32. package/src/head/MRT_TableHeadCellActions.tsx +11 -5
  33. package/src/head/MRT_TableHeadRow.tsx +10 -4
  34. package/src/inputs/MRT_EditCellTextField.tsx +3 -1
  35. package/src/inputs/MRT_SearchTextField.tsx +3 -13
  36. package/src/inputs/MRT_SelectCheckbox.tsx +4 -5
  37. package/src/menus/MRT_ColumnActionMenu.tsx +17 -6
  38. package/src/menus/MRT_RowActionMenu.tsx +2 -7
  39. package/src/menus/MRT_ShowHideColumnsMenu.tsx +1 -1
  40. package/src/table/MRT_Table.tsx +1 -1
  41. package/src/table/MRT_TableContainer.tsx +18 -42
  42. package/src/table/MRT_TableSpacerCell.tsx +4 -3
  43. package/src/toolbar/MRT_TablePagination.tsx +6 -1
  44. package/src/toolbar/MRT_ToolbarAlertBanner.tsx +19 -29
  45. package/src/toolbar/MRT_ToolbarBottom.tsx +23 -21
  46. package/src/toolbar/MRT_ToolbarInternalButtons.tsx +13 -12
  47. package/src/toolbar/MRT_ToolbarTop.tsx +38 -36
  48. package/src/useMRT.tsx +38 -23
  49. package/dist/table/MRT_TableButtonCell.d.ts +0 -3
  50. package/src/table/MRT_TableButtonCell.tsx +0 -9
@@ -1,31 +1,7 @@
1
1
  import React, { FC, Fragment } from 'react';
2
- import {
3
- Alert as MuiAlert,
4
- Chip,
5
- Collapse,
6
- styled,
7
- useMediaQuery,
8
- } from '@mui/material';
2
+ import { Alert, Box, Chip, Collapse, useMediaQuery } from '@mui/material';
9
3
  import { useMRT } from '../useMRT';
10
4
 
11
- const Alert = styled(MuiAlert, {
12
- shouldForwardProp: (prop) =>
13
- prop !== 'displayAbsolute' && prop !== 'toolbarPosition',
14
- })<{ displayAbsolute?: boolean; toolbarPosition?: 'top' | 'bottom' }>(
15
- ({ displayAbsolute, toolbarPosition }) => ({
16
- borderRadius: 0,
17
- fontSize: '1rem',
18
- left: 0,
19
- marginLeft: !displayAbsolute ? '-0.5rem' : undefined,
20
- padding: toolbarPosition === 'bottom' ? '0 1rem' : '0.5rem 1.25rem',
21
- position: displayAbsolute ? 'absolute' : 'relative',
22
- right: 0,
23
- top: 0,
24
- width: `calc(100% - ${displayAbsolute ? '2.5rem' : '1.5rem'})`,
25
- zIndex: 2,
26
- }),
27
- );
28
-
29
5
  interface Props {}
30
6
 
31
7
  export const MRT_ToolbarAlertBanner: FC<Props> = () => {
@@ -89,13 +65,27 @@ export const MRT_ToolbarAlertBanner: FC<Props> = () => {
89
65
  timeout={displayAbsolute ? 0 : 200}
90
66
  >
91
67
  <Alert
92
- displayAbsolute={displayAbsolute}
93
- icon={false}
94
68
  color="info"
69
+ icon={false}
70
+ sx={{
71
+ borderRadius: 0,
72
+ fontSize: '1rem',
73
+ left: 0,
74
+ p: 0,
75
+ position: displayAbsolute ? 'absolute' : 'relative',
76
+ right: 0,
77
+ minHeight: '3.5rem',
78
+ top: 0,
79
+ width: '100%',
80
+ zIndex: 2,
81
+ ...alertProps?.sx,
82
+ }}
95
83
  {...alertProps}
96
84
  >
97
- {selectMessage}
98
- {groupedByMessage}
85
+ <Box sx={{ p: '0.5rem 1rem' }}>
86
+ {selectMessage}
87
+ {groupedByMessage}
88
+ </Box>
99
89
  </Alert>
100
90
  </Collapse>
101
91
  );
@@ -1,28 +1,10 @@
1
1
  import React, { FC } from 'react';
2
- import { alpha, styled, Toolbar as MuiToolbar } from '@mui/material';
2
+ import { alpha, Toolbar } from '@mui/material';
3
3
  import { useMRT } from '../useMRT';
4
4
  import { MRT_TablePagination } from './MRT_TablePagination';
5
5
  import { MRT_ToolbarInternalButtons } from './MRT_ToolbarInternalButtons';
6
6
  import { MRT_ToolbarAlertBanner } from './MRT_ToolbarAlertBanner';
7
7
 
8
- const Toolbar = styled(MuiToolbar, {
9
- shouldForwardProp: (prop) => prop !== 'fullScreen',
10
- })<{ fullScreen?: boolean }>(({ fullScreen, theme }) => ({
11
- backgroundColor: theme.palette.background.default,
12
- backgroundImage: `linear-gradient(${alpha(
13
- theme.palette.common.white,
14
- 0.05,
15
- )},${alpha(theme.palette.common.white, 0.05)})`,
16
- bottom: fullScreen ? '0' : undefined,
17
- display: 'flex',
18
- justifyContent: 'space-between',
19
- overflowY: 'hidden',
20
- padding: '0 0.5rem !important',
21
- position: fullScreen ? 'fixed' : undefined,
22
- width: 'calc(100% - 1rem)',
23
- zIndex: 1,
24
- }));
25
-
26
8
  interface Props {}
27
9
 
28
10
  export const MRT_ToolbarBottom: FC<Props> = () => {
@@ -31,7 +13,6 @@ export const MRT_ToolbarBottom: FC<Props> = () => {
31
13
  manualPagination,
32
14
  muiTableToolbarBottomProps,
33
15
  positionPagination,
34
- fullScreen,
35
16
  positionToolbarActions,
36
17
  positionToolbarAlertBanner,
37
18
  tableInstance,
@@ -43,7 +24,28 @@ export const MRT_ToolbarBottom: FC<Props> = () => {
43
24
  : muiTableToolbarBottomProps;
44
25
 
45
26
  return (
46
- <Toolbar fullScreen={fullScreen} variant="dense" {...toolbarProps}>
27
+ <Toolbar
28
+ variant="dense"
29
+ {...toolbarProps}
30
+ sx={(theme) =>
31
+ ({
32
+ backgroundColor: theme.palette.background.default,
33
+ backgroundImage: `linear-gradient(${alpha(
34
+ theme.palette.common.white,
35
+ 0.05,
36
+ )},${alpha(theme.palette.common.white, 0.05)})`,
37
+ bottom: tableInstance.state.fullScreen ? '0' : undefined,
38
+ display: 'flex',
39
+ justifyContent: 'space-between',
40
+ overflowY: 'hidden',
41
+ p: '0 0.5rem !important',
42
+ position: tableInstance.state.fullScreen ? 'fixed' : undefined,
43
+ width: 'calc(100% - 1rem)',
44
+ zIndex: 1,
45
+ ...toolbarProps?.sx,
46
+ } as any)
47
+ }
48
+ >
47
49
  {!hideToolbarInternalActions && positionToolbarActions === 'bottom' ? (
48
50
  <MRT_ToolbarInternalButtons />
49
51
  ) : (
@@ -1,17 +1,11 @@
1
1
  import React, { FC } from 'react';
2
- import { styled } from '@mui/material';
3
- import { MRT_ToggleFiltersButton } from '../buttons/MRT_ToggleFiltersButton';
2
+ import { Box } from '@mui/material';
3
+ import { MRT_FullScreenToggleButton } from '../buttons/MRT_FullScreenToggleButton';
4
4
  import { MRT_ShowHideColumnsButton } from '../buttons/MRT_ShowHideColumnsButton';
5
- import { useMRT } from '../useMRT';
6
5
  import { MRT_ToggleDensePaddingButton } from '../buttons/MRT_ToggleDensePaddingButton';
6
+ import { MRT_ToggleFiltersButton } from '../buttons/MRT_ToggleFiltersButton';
7
7
  import { MRT_ToggleSearchButton } from '../buttons/MRT_ToggleSearchButton';
8
- import { MRT_FullScreenToggleButton } from '../buttons/MRT_FullScreenToggleButton';
9
-
10
- const ToolbarButtonsContainer = styled('div')({
11
- display: 'flex',
12
- gap: '0.5rem',
13
- alignItems: 'center',
14
- });
8
+ import { useMRT } from '../useMRT';
15
9
 
16
10
  interface Props {}
17
11
 
@@ -41,12 +35,19 @@ export const MRT_ToolbarInternalButtons: FC<Props> = () => {
41
35
  }
42
36
 
43
37
  return (
44
- <ToolbarButtonsContainer>
38
+ <Box
39
+ sx={{
40
+ display: 'flex',
41
+ gap: '0.5rem',
42
+ alignItems: 'center',
43
+ p: '0 0.5rem',
44
+ }}
45
+ >
45
46
  {!disableGlobalFilter && <MRT_ToggleSearchButton />}
46
47
  {!disableFilters && <MRT_ToggleFiltersButton />}
47
48
  {!disableColumnHiding && <MRT_ShowHideColumnsButton />}
48
49
  {!disableDensePaddingToggle && <MRT_ToggleDensePaddingButton />}
49
50
  {!disableFullScreenToggle && <MRT_FullScreenToggleButton />}
50
- </ToolbarButtonsContainer>
51
+ </Box>
51
52
  );
52
53
  };
@@ -1,40 +1,11 @@
1
1
  import React, { FC } from 'react';
2
- import { alpha, styled, Toolbar as MuiToolbar } from '@mui/material';
2
+ import { alpha, Box, Toolbar } from '@mui/material';
3
3
  import { MRT_SearchTextField } from '../inputs/MRT_SearchTextField';
4
4
  import { useMRT } from '../useMRT';
5
5
  import { MRT_ToolbarInternalButtons } from './MRT_ToolbarInternalButtons';
6
6
  import { MRT_TablePagination } from './MRT_TablePagination';
7
7
  import { MRT_ToolbarAlertBanner } from './MRT_ToolbarAlertBanner';
8
8
 
9
- const Toolbar = styled(MuiToolbar, {
10
- shouldForwardProp: (prop) => prop !== 'fullScreen',
11
- })<{ fullScreen?: boolean }>(({ fullScreen, theme }) => ({
12
- backgroundColor: theme.palette.background.default,
13
- backgroundImage: `linear-gradient(${alpha(
14
- theme.palette.common.white,
15
- 0.05,
16
- )},${alpha(theme.palette.common.white, 0.05)})`,
17
- display: 'grid',
18
- padding: '0 0.5rem !important',
19
- position: fullScreen ? 'sticky' : undefined,
20
- top: fullScreen ? '0' : undefined,
21
- width: 'calc(100% - 1rem)',
22
- zIndex: 1,
23
- }));
24
-
25
- const ToolbarTopRow = styled('div')({
26
- padding: '0.5rem',
27
- display: 'flex',
28
- justifyContent: 'space-between',
29
- });
30
-
31
- const ToolbarActionsContainer = styled('div')({
32
- display: 'flex',
33
- gap: '0.5rem',
34
- position: 'relative',
35
- zIndex: 3,
36
- });
37
-
38
9
  interface Props {}
39
10
 
40
11
  export const MRT_ToolbarTop: FC<Props> = () => {
@@ -45,7 +16,6 @@ export const MRT_ToolbarTop: FC<Props> = () => {
45
16
  muiTableToolbarTopProps,
46
17
  positionPagination,
47
18
  positionToolbarActions,
48
- fullScreen,
49
19
  positionToolbarAlertBanner,
50
20
  renderToolbarCustomActions,
51
21
  tableInstance,
@@ -57,17 +27,49 @@ export const MRT_ToolbarTop: FC<Props> = () => {
57
27
  : muiTableToolbarTopProps;
58
28
 
59
29
  return (
60
- <Toolbar fullScreen={fullScreen} variant="dense" {...toolbarProps}>
30
+ <Toolbar
31
+ variant="dense"
32
+ {...toolbarProps}
33
+ sx={(theme) =>
34
+ ({
35
+ backgroundColor: theme.palette.background.default,
36
+ backgroundImage: `linear-gradient(${alpha(
37
+ theme.palette.common.white,
38
+ 0.05,
39
+ )},${alpha(theme.palette.common.white, 0.05)})`,
40
+ display: 'grid',
41
+ p: '0 !important',
42
+ position: tableInstance.state.fullScreen ? 'sticky' : undefined,
43
+ top: tableInstance.state.fullScreen ? '0' : undefined,
44
+ width: '100%',
45
+ zIndex: 1,
46
+ ...toolbarProps?.sx,
47
+ } as any)
48
+ }
49
+ >
61
50
  {positionToolbarAlertBanner === 'top' && <MRT_ToolbarAlertBanner />}
62
- <ToolbarTopRow>
51
+ <Box
52
+ sx={{
53
+ p: '0.5rem',
54
+ display: 'flex',
55
+ justifyContent: 'space-between',
56
+ }}
57
+ >
63
58
  {renderToolbarCustomActions?.(tableInstance) ?? <span />}
64
- <ToolbarActionsContainer>
59
+ <Box
60
+ sx={{
61
+ display: 'flex',
62
+ gap: '0.5rem',
63
+ position: 'relative',
64
+ zIndex: 3,
65
+ }}
66
+ >
65
67
  {!disableGlobalFilter && <MRT_SearchTextField />}
66
68
  {!hideToolbarInternalActions && positionToolbarActions === 'top' && (
67
69
  <MRT_ToolbarInternalButtons />
68
70
  )}
69
- </ToolbarActionsContainer>
70
- </ToolbarTopRow>
71
+ </Box>
72
+ </Box>
71
73
  <div>
72
74
  {!manualPagination &&
73
75
  ['top', 'both'].includes(positionPagination ?? '') && (
package/src/useMRT.tsx CHANGED
@@ -27,9 +27,6 @@ import { MaterialReactTableProps } from './MaterialReactTable';
27
27
  export type UseMRT<D extends {} = {}> = MaterialReactTableProps<D> & {
28
28
  anyRowsCanExpand: boolean;
29
29
  anyRowsExpanded: boolean;
30
- currentEditingRow: MRT_Row<D> | null;
31
- densePadding: boolean;
32
- fullScreen: boolean;
33
30
  icons: MRT_Icons;
34
31
  localization: MRT_Localization;
35
32
  setCurrentEditingRow: (currentRowEditingId: MRT_Row<D> | null) => void;
@@ -37,8 +34,6 @@ export type UseMRT<D extends {} = {}> = MaterialReactTableProps<D> & {
37
34
  setFullScreen: (fullScreen: boolean) => void;
38
35
  setShowFilters: (showFilters: boolean) => void;
39
36
  setShowSearch: (showSearch: boolean) => void;
40
- showFilters: boolean;
41
- showSearch: boolean;
42
37
  tableInstance: MRT_TableInstance<D>;
43
38
  };
44
39
 
@@ -61,18 +56,6 @@ export const MaterialReactTableProvider = <D extends {}>(
61
56
  if (props.enableColumnResizing)
62
57
  hooks.unshift(useResizeColumns, useFlexLayout);
63
58
 
64
- const tableInstance = useTable<D>(props, ...hooks) as MRT_TableInstance<D>;
65
-
66
- const anyRowsCanExpand = useMemo(
67
- // @ts-ignore
68
- () => tableInstance.rows.some((row: MRT_Row) => row.canExpand),
69
- [tableInstance.rows],
70
- );
71
- const anyRowsExpanded = useMemo(
72
- // @ts-ignore
73
- () => tableInstance.rows.some((row: MRT_Row) => row.isExpanded),
74
- [tableInstance.rows],
75
- );
76
59
  const [currentEditingRow, setCurrentEditingRow] = useState<MRT_Row | null>(
77
60
  null,
78
61
  );
@@ -86,7 +69,44 @@ export const MaterialReactTableProvider = <D extends {}>(
86
69
  props.initialState?.showFilters ?? false,
87
70
  );
88
71
  const [showSearch, setShowSearch] = useState(
89
- props.initialState?.showSearchTextField ?? false,
72
+ props.initialState?.showSearch ?? false,
73
+ );
74
+
75
+ const tableInstance = useTable<D>(
76
+ {
77
+ ...props,
78
+ useControlledState: (state) =>
79
+ useMemo(
80
+ () => ({
81
+ ...state,
82
+ currentEditingRow,
83
+ densePadding,
84
+ fullScreen,
85
+ showFilters,
86
+ showSearch,
87
+ //@ts-ignore
88
+ ...props?.useControlledState?.(state),
89
+ }),
90
+ [
91
+ currentEditingRow,
92
+ densePadding,
93
+ fullScreen,
94
+ showFilters,
95
+ showSearch,
96
+ state,
97
+ ],
98
+ ),
99
+ },
100
+ ...hooks,
101
+ ) as MRT_TableInstance<D>;
102
+
103
+ const anyRowsCanExpand = useMemo(
104
+ () => tableInstance.rows.some((row) => row.canExpand),
105
+ [tableInstance.rows],
106
+ );
107
+ const anyRowsExpanded = useMemo(
108
+ () => tableInstance.rows.some((row) => row.isExpanded),
109
+ [tableInstance.rows],
90
110
  );
91
111
 
92
112
  return (
@@ -95,16 +115,11 @@ export const MaterialReactTableProvider = <D extends {}>(
95
115
  ...props,
96
116
  anyRowsCanExpand,
97
117
  anyRowsExpanded,
98
- currentEditingRow,
99
- densePadding,
100
118
  setCurrentEditingRow,
101
119
  setDensePadding,
102
- fullScreen,
103
120
  setFullScreen,
104
121
  setShowFilters,
105
122
  setShowSearch,
106
- showFilters,
107
- showSearch,
108
123
  //@ts-ignore
109
124
  tableInstance,
110
125
  }}
@@ -1,3 +0,0 @@
1
- export declare const MRT_TableButtonCell: import("@emotion/styled").StyledComponent<import("@mui/material").TableCellProps & import("@mui/system").MUIStyledCommonProps<import("@mui/material").Theme> & {
2
- densePadding?: boolean | undefined;
3
- }, {}, {}>;
@@ -1,9 +0,0 @@
1
- import { styled, TableCell as MuiTableCell } from '@mui/material';
2
-
3
- export const MRT_TableButtonCell = styled(MuiTableCell, {
4
- shouldForwardProp: (prop) => prop !== 'densePadding',
5
- })<{ densePadding?: boolean }>(({ densePadding }) => ({
6
- padding: densePadding ? '1px' : '0.6rem',
7
- textAlign: 'center',
8
- transition: 'all 0.2s ease-in-out',
9
- }));