material-react-table 0.6.10 → 0.7.0-alpha.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.
Files changed (103) hide show
  1. package/dist/MaterialReactTable.d.ts +142 -82
  2. package/dist/body/MRT_TableBody.d.ts +3 -0
  3. package/dist/body/MRT_TableBodyCell.d.ts +2 -11
  4. package/dist/body/MRT_TableBodyRow.d.ts +3 -1
  5. package/dist/body/MRT_TableDetailPanel.d.ts +2 -1
  6. package/dist/buttons/MRT_CopyButton.d.ts +4 -2
  7. package/dist/buttons/MRT_EditActionButtons.d.ts +2 -1
  8. package/dist/buttons/MRT_ExpandAllButton.d.ts +2 -0
  9. package/dist/buttons/MRT_ExpandButton.d.ts +2 -1
  10. package/dist/buttons/MRT_FullScreenToggleButton.d.ts +2 -0
  11. package/dist/buttons/MRT_ShowHideColumnsButton.d.ts +2 -0
  12. package/dist/buttons/MRT_ToggleColumnActionMenuButton.d.ts +3 -2
  13. package/dist/buttons/MRT_ToggleDensePaddingButton.d.ts +2 -0
  14. package/dist/buttons/MRT_ToggleFiltersButton.d.ts +2 -0
  15. package/dist/buttons/MRT_ToggleRowActionMenuButton.d.ts +2 -1
  16. package/dist/buttons/MRT_ToggleSearchButton.d.ts +2 -0
  17. package/dist/footer/MRT_TableFooter.d.ts +3 -0
  18. package/dist/footer/MRT_TableFooterCell.d.ts +3 -2
  19. package/dist/footer/MRT_TableFooterRow.d.ts +2 -1
  20. package/dist/head/MRT_TableHead.d.ts +3 -0
  21. package/dist/head/MRT_TableHeadCell.d.ts +4 -18
  22. package/dist/head/MRT_TableHeadRow.d.ts +2 -1
  23. package/dist/icons.d.ts +1 -1
  24. package/dist/inputs/MRT_EditCellTextField.d.ts +2 -1
  25. package/dist/inputs/MRT_FilterTextField.d.ts +3 -2
  26. package/dist/inputs/MRT_SearchTextField.d.ts +2 -0
  27. package/dist/inputs/MRT_SelectCheckbox.d.ts +2 -1
  28. package/dist/localization.d.ts +7 -2
  29. package/dist/material-react-table.cjs.development.js +2142 -1729
  30. package/dist/material-react-table.cjs.development.js.map +1 -1
  31. package/dist/material-react-table.cjs.production.min.js +1 -1
  32. package/dist/material-react-table.cjs.production.min.js.map +1 -1
  33. package/dist/material-react-table.esm.js +2143 -1730
  34. package/dist/material-react-table.esm.js.map +1 -1
  35. package/dist/menus/MRT_ColumnActionMenu.d.ts +3 -2
  36. package/dist/menus/MRT_FilterTypeMenu.d.ts +4 -3
  37. package/dist/menus/MRT_RowActionMenu.d.ts +3 -2
  38. package/dist/menus/MRT_ShowHideColumnsMenu.d.ts +2 -0
  39. package/dist/menus/MRT_ShowHideColumnsMenuItems.d.ts +2 -1
  40. package/dist/table/MRT_Table.d.ts +3 -0
  41. package/dist/table/MRT_TableContainer.d.ts +2 -0
  42. package/dist/table/MRT_TablePaper.d.ts +7 -0
  43. package/dist/table/MRT_TableRoot.d.ts +3 -0
  44. package/dist/toolbar/MRT_LinearProgressBar.d.ts +2 -0
  45. package/dist/toolbar/MRT_TablePagination.d.ts +2 -0
  46. package/dist/toolbar/MRT_ToolbarAlertBanner.d.ts +2 -0
  47. package/dist/toolbar/MRT_ToolbarBottom.d.ts +2 -0
  48. package/dist/toolbar/MRT_ToolbarInternalButtons.d.ts +2 -0
  49. package/dist/toolbar/MRT_ToolbarTop.d.ts +4 -2
  50. package/dist/utils.d.ts +12 -2
  51. package/package.json +27 -28
  52. package/src/MaterialReactTable.tsx +298 -242
  53. package/src/body/MRT_TableBody.tsx +25 -21
  54. package/src/body/MRT_TableBodyCell.tsx +73 -58
  55. package/src/body/MRT_TableBodyRow.tsx +35 -74
  56. package/src/body/MRT_TableDetailPanel.tsx +16 -14
  57. package/src/buttons/MRT_CopyButton.tsx +14 -7
  58. package/src/buttons/MRT_EditActionButtons.tsx +13 -12
  59. package/src/buttons/MRT_ExpandAllButton.tsx +24 -9
  60. package/src/buttons/MRT_ExpandButton.tsx +21 -14
  61. package/src/buttons/MRT_FullScreenToggleButton.tsx +18 -11
  62. package/src/buttons/MRT_ShowHideColumnsButton.tsx +18 -7
  63. package/src/buttons/MRT_ToggleColumnActionMenuButton.tsx +17 -9
  64. package/src/buttons/MRT_ToggleDensePaddingButton.tsx +18 -11
  65. package/src/buttons/MRT_ToggleFiltersButton.tsx +16 -9
  66. package/src/buttons/MRT_ToggleRowActionMenuButton.tsx +26 -21
  67. package/src/buttons/MRT_ToggleSearchButton.tsx +18 -11
  68. package/src/footer/MRT_TableFooter.tsx +23 -7
  69. package/src/footer/MRT_TableFooterCell.tsx +32 -24
  70. package/src/footer/MRT_TableFooterRow.tsx +20 -38
  71. package/src/head/MRT_TableHead.tsx +23 -7
  72. package/src/head/MRT_TableHeadCell.tsx +201 -152
  73. package/src/head/MRT_TableHeadRow.tsx +15 -103
  74. package/src/icons.ts +3 -3
  75. package/src/inputs/MRT_EditCellTextField.tsx +23 -24
  76. package/src/inputs/MRT_FilterTextField.tsx +51 -30
  77. package/src/inputs/MRT_SearchTextField.tsx +38 -21
  78. package/src/inputs/MRT_SelectCheckbox.tsx +34 -24
  79. package/src/localization.ts +13 -2
  80. package/src/menus/MRT_ColumnActionMenu.tsx +129 -69
  81. package/src/menus/MRT_FilterTypeMenu.tsx +28 -22
  82. package/src/menus/MRT_RowActionMenu.tsx +16 -11
  83. package/src/menus/MRT_ShowHideColumnsMenu.tsx +52 -20
  84. package/src/menus/MRT_ShowHideColumnsMenuItems.tsx +28 -17
  85. package/src/table/MRT_Table.tsx +24 -14
  86. package/src/table/MRT_TableContainer.tsx +109 -44
  87. package/src/table/MRT_TablePaper.tsx +61 -0
  88. package/src/table/MRT_TableRoot.tsx +236 -0
  89. package/src/toolbar/MRT_LinearProgressBar.tsx +9 -6
  90. package/src/toolbar/MRT_TablePagination.tsx +28 -18
  91. package/src/toolbar/MRT_ToolbarAlertBanner.tsx +31 -19
  92. package/src/toolbar/MRT_ToolbarBottom.tsx +31 -20
  93. package/src/toolbar/MRT_ToolbarInternalButtons.tsx +29 -16
  94. package/src/toolbar/MRT_ToolbarTop.tsx +34 -27
  95. package/src/utils.ts +37 -8
  96. package/dist/head/MRT_TableHeadCellActions.d.ts +0 -5
  97. package/dist/table/MRT_TableSpacerCell.d.ts +0 -6
  98. package/dist/useMRT.d.ts +0 -28
  99. package/src/@types/faker.d.ts +0 -4
  100. package/src/@types/react-table-config.d.ts +0 -53
  101. package/src/head/MRT_TableHeadCellActions.tsx +0 -29
  102. package/src/table/MRT_TableSpacerCell.tsx +0 -20
  103. package/src/useMRT.tsx +0 -226
@@ -1,37 +1,45 @@
1
1
  import React, { FC } from 'react';
2
2
  import { FormControlLabel, MenuItem, Switch } from '@mui/material';
3
- import { ColumnInstance } from 'react-table';
4
- import type { MRT_ColumnInstance } from '..';
3
+ import type { MRT_ColumnInstance, MRT_TableInstance } from '..';
5
4
  import { commonMenuItemStyles } from './MRT_ColumnActionMenu';
6
- import { useMRT } from '../useMRT';
7
5
 
8
6
  interface Props {
9
7
  column: MRT_ColumnInstance;
10
8
  isSubMenu?: boolean;
9
+ tableInstance: MRT_TableInstance;
11
10
  }
12
11
 
13
12
  export const MRT_ShowHideColumnsMenuItems: FC<Props> = ({
14
13
  column,
15
14
  isSubMenu,
15
+ tableInstance,
16
16
  }) => {
17
- const { onColumnHide, tableInstance } = useMRT();
18
- const isParentHeader = !!column?.columns?.length;
17
+ const {
18
+ getState,
19
+ options: { onColumnHide },
20
+ } = tableInstance;
19
21
 
20
- const allChildColumnsVisible =
21
- isParentHeader &&
22
- !!column.columns?.every((childColumn) => childColumn.isVisible);
22
+ const { columnVisibility } = getState();
23
23
 
24
- const switchChecked = column.isVisible ?? allChildColumnsVisible;
24
+ const switchChecked =
25
+ (column.columnDefType !== 'group' && column.getIsVisible()) ||
26
+ (column.columnDefType === 'group' &&
27
+ column.getLeafColumns().some((col) => col.getIsVisible()));
25
28
 
26
- const handleToggleColumnHidden = (column: ColumnInstance) => {
27
- if (isParentHeader) {
28
- column?.columns?.forEach?.((childColumn) => {
29
- childColumn.toggleHidden(switchChecked);
29
+ const handleToggleColumnHidden = (column: MRT_ColumnInstance) => {
30
+ if (column.columnDefType === 'group') {
31
+ column?.columns?.forEach?.((childColumn: MRT_ColumnInstance) => {
32
+ childColumn.toggleVisibility(!switchChecked);
30
33
  });
31
34
  } else {
32
- column.toggleHidden();
35
+ column.toggleVisibility();
33
36
  }
34
- onColumnHide?.(column, tableInstance.state.hiddenColumns);
37
+ onColumnHide?.(
38
+ column,
39
+ Object.entries(columnVisibility)
40
+ .filter((entry) => entry[1])
41
+ .map((entry) => entry[0]),
42
+ );
35
43
  };
36
44
 
37
45
  return (
@@ -43,8 +51,10 @@ export const MRT_ShowHideColumnsMenuItems: FC<Props> = ({
43
51
  componentsProps={{ typography: { sx: { marginBottom: 0 } } }}
44
52
  checked={switchChecked}
45
53
  control={<Switch />}
46
- disabled={(isSubMenu && switchChecked) || column.disableColumnHiding}
47
- label={column.Header as string}
54
+ disabled={
55
+ (isSubMenu && switchChecked) || column.enableHiding === false
56
+ }
57
+ label={column.header}
48
58
  onChange={() => handleToggleColumnHidden(column)}
49
59
  />
50
60
  </MenuItem>
@@ -53,6 +63,7 @@ export const MRT_ShowHideColumnsMenuItems: FC<Props> = ({
53
63
  key={`${i}-${c.id}`}
54
64
  column={c}
55
65
  isSubMenu={isSubMenu}
66
+ tableInstance={tableInstance}
56
67
  />
57
68
  ))}
58
69
  </>
@@ -3,13 +3,23 @@ import { Table } from '@mui/material';
3
3
  import { MRT_TableHead } from '../head/MRT_TableHead';
4
4
  import { MRT_TableBody } from '../body/MRT_TableBody';
5
5
  import { MRT_TableFooter } from '../footer/MRT_TableFooter';
6
- import { useMRT } from '../useMRT';
6
+ import { MRT_TableInstance } from '..';
7
7
 
8
- interface Props {}
8
+ interface Props {
9
+ pinned: 'left' | 'center' | 'right' | 'none';
10
+ tableInstance: MRT_TableInstance;
11
+ }
9
12
 
10
- export const MRT_Table: FC<Props> = () => {
11
- const { tableInstance, muiTableProps, hideTableHead, hideTableFooter } =
12
- useMRT();
13
+ export const MRT_Table: FC<Props> = ({ pinned, tableInstance }) => {
14
+ const {
15
+ getTableProps,
16
+ options: {
17
+ enableStickyHeader,
18
+ hideTableFooter,
19
+ hideTableHead,
20
+ muiTableProps,
21
+ },
22
+ } = tableInstance;
13
23
 
14
24
  const mTableProps =
15
25
  muiTableProps instanceof Function
@@ -17,19 +27,19 @@ export const MRT_Table: FC<Props> = () => {
17
27
  : muiTableProps;
18
28
 
19
29
  const tableProps = {
30
+ ...getTableProps(),
20
31
  ...mTableProps,
21
- ...tableInstance.getTableProps(),
22
- style: {
23
- ...tableInstance.getTableProps().style,
24
- ...mTableProps?.style,
25
- },
26
32
  };
27
33
 
28
34
  return (
29
- <Table {...tableProps}>
30
- {!hideTableHead && <MRT_TableHead />}
31
- <MRT_TableBody />
32
- {!hideTableFooter && <MRT_TableFooter />}
35
+ <Table stickyHeader={enableStickyHeader} {...tableProps}>
36
+ {!hideTableHead && (
37
+ <MRT_TableHead pinned={pinned} tableInstance={tableInstance} />
38
+ )}
39
+ <MRT_TableBody pinned={pinned} tableInstance={tableInstance} />
40
+ {!hideTableFooter && (
41
+ <MRT_TableFooter pinned={pinned} tableInstance={tableInstance} />
42
+ )}
33
43
  </Table>
34
44
  );
35
45
  };
@@ -1,65 +1,130 @@
1
- import React, { FC, useEffect } from 'react';
2
- import { Paper, TableContainer, Box } from '@mui/material';
3
- import { useMRT } from '../useMRT';
1
+ import React, { FC, useLayoutEffect, useState } from 'react';
2
+ import { alpha, Box, SxProps, TableContainer, Theme } from '@mui/material';
4
3
  import { MRT_Table } from './MRT_Table';
5
- import { MRT_ToolbarTop } from '../toolbar/MRT_ToolbarTop';
6
- import { MRT_ToolbarBottom } from '../toolbar/MRT_ToolbarBottom';
4
+ import { MRT_TableInstance } from '..';
7
5
 
8
- interface Props {}
6
+ const commonBoxStyles = ({
7
+ pinned,
8
+ theme,
9
+ visible,
10
+ }: {
11
+ pinned?: 'left' | 'right';
12
+ theme: Theme;
13
+ visible?: boolean;
14
+ }) =>
15
+ ({
16
+ display: 'grid',
17
+ minWidth: visible ? '200px' : 0,
18
+ overflowX: 'auto',
19
+ boxShadow:
20
+ pinned === 'left'
21
+ ? `0 1px 12px ${alpha(theme.palette.common.black, 0.5)}`
22
+ : pinned === 'right'
23
+ ? `0 -1px 12px ${alpha(theme.palette.common.black, 0.5)}`
24
+ : 'none',
25
+ } as SxProps<Theme>);
9
26
 
10
- export const MRT_TableContainer: FC<Props> = () => {
27
+ interface Props {
28
+ tableInstance: MRT_TableInstance;
29
+ }
30
+
31
+ export const MRT_TableContainer: FC<Props> = ({ tableInstance }) => {
11
32
  const {
12
- hideToolbarBottom,
13
- hideToolbarTop,
14
- muiTableContainerProps,
15
- tableInstance,
16
- } = useMRT();
17
- const fullScreen = tableInstance.state.fullScreen;
33
+ getCenterTableWidth,
34
+ getIsSomeColumnsPinned,
35
+ getLeftTableWidth,
36
+ getRightTableWidth,
37
+ getState,
38
+ options: {
39
+ enableColumnPinning,
40
+ enableStickyHeader,
41
+ idPrefix,
42
+ muiTableContainerProps,
43
+ },
44
+ } = tableInstance;
45
+
46
+ const { isFullScreen, columnPinning } = getState();
18
47
 
19
- useEffect(() => {
20
- if (typeof window !== 'undefined') {
21
- if (fullScreen) {
22
- document.body.style.overflow = 'hidden';
23
- } else {
24
- document.body.style.overflow = 'auto';
25
- }
26
- }
27
- }, [fullScreen]);
48
+ const [totalToolbarHeight, setTotalToolbarHeight] = useState(0);
28
49
 
29
50
  const tableContainerProps =
30
51
  muiTableContainerProps instanceof Function
31
52
  ? muiTableContainerProps(tableInstance)
32
53
  : muiTableContainerProps;
33
54
 
55
+ useLayoutEffect(() => {
56
+ const topToolbarHeight =
57
+ typeof document !== 'undefined'
58
+ ? document?.getElementById(`mrt-${idPrefix}-toolbar-top`)
59
+ ?.offsetHeight ?? 0
60
+ : 0;
61
+
62
+ const bottomToolbarHeight =
63
+ typeof document !== 'undefined'
64
+ ? document?.getElementById(`mrt-${idPrefix}-toolbar-bottom`)
65
+ ?.offsetHeight ?? 0
66
+ : 0;
67
+
68
+ setTotalToolbarHeight(topToolbarHeight + bottomToolbarHeight);
69
+ });
70
+
34
71
  return (
35
72
  <TableContainer
36
- component={Paper}
37
73
  {...tableContainerProps}
38
74
  sx={{
39
- bottom: fullScreen ? '0' : undefined,
40
- height: fullScreen ? '100%' : undefined,
41
- left: fullScreen ? '0' : undefined,
42
- m: fullScreen ? '0' : undefined,
43
- overflowY: !fullScreen ? 'hidden' : undefined,
44
- position: fullScreen ? 'fixed' : undefined,
45
- right: fullScreen ? '0' : undefined,
46
- top: fullScreen ? '0' : undefined,
47
- transition: 'all 0.2s ease-in-out',
48
- width: fullScreen ? '100vw' : undefined,
49
- zIndex: fullScreen ? 1200 : 1,
75
+ maxWidth: '100%',
76
+ maxHeight: enableStickyHeader
77
+ ? `clamp(350px, calc(100vh - ${totalToolbarHeight}px), 2000px)`
78
+ : undefined,
79
+ overflow: 'auto',
50
80
  ...tableContainerProps?.sx,
51
81
  }}
82
+ style={{
83
+ maxHeight: isFullScreen
84
+ ? `calc(100vh - ${totalToolbarHeight}px)`
85
+ : undefined,
86
+ }}
52
87
  >
53
- {!hideToolbarTop && <MRT_ToolbarTop />}
54
- <Box
55
- sx={{
56
- maxWidth: '100%',
57
- overflowX: 'auto',
58
- }}
59
- >
60
- <MRT_Table />
61
- </Box>
62
- {!hideToolbarBottom && <MRT_ToolbarBottom />}
88
+ {enableColumnPinning && getIsSomeColumnsPinned() ? (
89
+ <Box
90
+ sx={{
91
+ display: 'grid',
92
+ gridTemplateColumns: `${getLeftTableWidth()}fr ${getCenterTableWidth()}fr ${getRightTableWidth()}fr`,
93
+ }}
94
+ >
95
+ <Box
96
+ // @ts-ignore
97
+ sx={(theme: Theme) =>
98
+ commonBoxStyles({
99
+ pinned: 'left',
100
+ theme,
101
+ visible: !!columnPinning.left?.length,
102
+ })
103
+ }
104
+ >
105
+ <MRT_Table pinned="left" tableInstance={tableInstance} />
106
+ </Box>
107
+ <Box // @ts-ignore
108
+ sx={(theme: Theme) => commonBoxStyles({ theme })}
109
+ >
110
+ <MRT_Table pinned="center" tableInstance={tableInstance} />
111
+ </Box>
112
+ <Box
113
+ // @ts-ignore
114
+ sx={(theme: Theme) =>
115
+ commonBoxStyles({
116
+ pinned: 'right',
117
+ theme,
118
+ visible: !!columnPinning.right?.length,
119
+ })
120
+ }
121
+ >
122
+ <MRT_Table pinned="right" tableInstance={tableInstance} />
123
+ </Box>
124
+ </Box>
125
+ ) : (
126
+ <MRT_Table pinned="none" tableInstance={tableInstance} />
127
+ )}
63
128
  </TableContainer>
64
129
  );
65
130
  };
@@ -0,0 +1,61 @@
1
+ import React, { FC, useEffect } from 'react';
2
+ import { Paper } from '@mui/material';
3
+ import { MRT_ToolbarTop } from '../toolbar/MRT_ToolbarTop';
4
+ import { MRT_ToolbarBottom } from '../toolbar/MRT_ToolbarBottom';
5
+ import { MRT_TableContainer } from './MRT_TableContainer';
6
+ import { MRT_TableInstance } from '..';
7
+
8
+ interface Props {
9
+ tableInstance: MRT_TableInstance;
10
+ }
11
+
12
+ export const MRT_TablePaper: FC<Props> = ({ tableInstance }) => {
13
+ const {
14
+ getState,
15
+ options: { hideToolbarBottom, hideToolbarTop, muiTablePaperProps },
16
+ } = tableInstance;
17
+
18
+ const { isFullScreen } = getState();
19
+
20
+ useEffect(() => {
21
+ if (typeof window !== 'undefined') {
22
+ if (isFullScreen) {
23
+ document.body.style.overflow = 'hidden';
24
+ } else {
25
+ document.body.style.overflow = 'auto';
26
+ }
27
+ }
28
+ }, [isFullScreen]);
29
+
30
+ const tablePaperProps =
31
+ muiTablePaperProps instanceof Function
32
+ ? muiTablePaperProps(tableInstance)
33
+ : muiTablePaperProps;
34
+
35
+ return (
36
+ <Paper
37
+ elevation={2}
38
+ {...tablePaperProps}
39
+ sx={{
40
+ bottom: isFullScreen ? '0' : undefined,
41
+ height: isFullScreen ? '100%' : undefined,
42
+ left: isFullScreen ? '0' : undefined,
43
+ m: isFullScreen ? '0' : undefined,
44
+ overflowY: !isFullScreen ? 'hidden' : undefined,
45
+ position: isFullScreen ? 'fixed' : undefined,
46
+ right: isFullScreen ? '0' : undefined,
47
+ top: isFullScreen ? '0' : undefined,
48
+ transition: 'all 0.2s ease-in-out',
49
+ width: isFullScreen ? '100vw' : undefined,
50
+ zIndex: isFullScreen ? 1200 : 1,
51
+ ...tablePaperProps?.sx,
52
+ }}
53
+ >
54
+ {!hideToolbarTop && <MRT_ToolbarTop tableInstance={tableInstance} />}
55
+ <MRT_TableContainer tableInstance={tableInstance} />
56
+ {!hideToolbarBottom && (
57
+ <MRT_ToolbarBottom tableInstance={tableInstance} />
58
+ )}
59
+ </Paper>
60
+ );
61
+ };
@@ -0,0 +1,236 @@
1
+ import {
2
+ columnFilterRowsFn,
3
+ createTable,
4
+ expandRowsFn,
5
+ functionalUpdate,
6
+ globalFilterRowsFn,
7
+ groupRowsFn,
8
+ paginateRowsFn,
9
+ PaginationState,
10
+ sortRowsFn,
11
+ Table,
12
+ useTable,
13
+ } from '@tanstack/react-table';
14
+ import React, { useMemo, useState } from 'react';
15
+ import {
16
+ MRT_ColumnInterface,
17
+ MRT_FilterType,
18
+ MRT_Row,
19
+ MRT_TableInstance,
20
+ } from '..';
21
+ import { MRT_ExpandAllButton } from '../buttons/MRT_ExpandAllButton';
22
+ import { MRT_ExpandButton } from '../buttons/MRT_ExpandButton';
23
+ import { MRT_ToggleRowActionMenuButton } from '../buttons/MRT_ToggleRowActionMenuButton';
24
+ import { MRT_SelectCheckbox } from '../inputs/MRT_SelectCheckbox';
25
+ import { MaterialReactTableProps } from '../MaterialReactTable';
26
+ import { MRT_TablePaper } from './MRT_TablePaper';
27
+ import {
28
+ createDataColumn,
29
+ createDisplayColumn,
30
+ createGroup,
31
+ getAllLeafColumnDefs,
32
+ } from '../utils';
33
+ import { defaultFilterFNs } from '../filtersFNs';
34
+ import { MRT_FILTER_TYPE } from '../enums';
35
+
36
+ export const MRT_TableRoot = <D extends Record<string, any> = {}>(
37
+ props: MaterialReactTableProps<D>,
38
+ ) => {
39
+ const idPrefix = useMemo(
40
+ () => props.idPrefix ?? Math.random().toString(36).substring(2, 9),
41
+ [props.idPrefix],
42
+ );
43
+ const [currentEditingRow, setCurrentEditingRow] = useState<MRT_Row | null>(
44
+ null,
45
+ );
46
+ const [isDensePadding, setIsDensePadding] = useState(
47
+ props.initialState?.isDensePadding ?? false,
48
+ );
49
+ const [isFullScreen, setIsFullScreen] = useState(
50
+ props.initialState?.isFullScreen ?? false,
51
+ );
52
+ const [showFilters, setShowFilters] = useState(
53
+ props.initialState?.showFilters ?? false,
54
+ );
55
+ const [showSearch, setShowSearch] = useState(
56
+ props.initialState?.showSearch ?? false,
57
+ );
58
+
59
+ const [pagination, setPagination] = useState<PaginationState>({
60
+ pageIndex: props.initialState?.pagination?.pageIndex ?? 0,
61
+ pageSize: props.initialState?.pagination?.pageSize ?? 10,
62
+ pageCount: props.initialState?.pagination?.pageCount ?? -1,
63
+ });
64
+
65
+ const [currentFilterTypes, setCurrentFilterTypes] = useState<{
66
+ [key: string]: MRT_FilterType;
67
+ }>(() =>
68
+ Object.assign(
69
+ {},
70
+ ...getAllLeafColumnDefs(props.columns as MRT_ColumnInterface[]).map(
71
+ (c) => ({
72
+ [c.id as string]:
73
+ c.filter ??
74
+ props?.initialState?.columnFilters?.[c.id as any] ??
75
+ (!!c.filterSelectOptions?.length
76
+ ? MRT_FILTER_TYPE.EQUALS
77
+ : MRT_FILTER_TYPE.BEST_MATCH),
78
+ }),
79
+ ),
80
+ ),
81
+ );
82
+
83
+ const [currentGlobalFilterType, setCurrentGlobalFilterType] = useState(
84
+ props.globalFilterType ?? MRT_FILTER_TYPE.BEST_MATCH_FIRST,
85
+ );
86
+
87
+ const table = useMemo(
88
+ () => createTable<{ Row: D }>(),
89
+ [],
90
+ ) as unknown as Table<D>;
91
+
92
+ const displayColumns = useMemo(
93
+ () =>
94
+ [
95
+ (props.enableRowActions || props.enableRowEditing) &&
96
+ createDisplayColumn(table, {
97
+ Cell: ({ cell }) => (
98
+ <MRT_ToggleRowActionMenuButton
99
+ row={cell.row as any}
100
+ tableInstance={tableInstance}
101
+ />
102
+ ),
103
+ header: props.localization?.actions,
104
+ id: 'mrt-row-actions',
105
+ maxWidth: 60,
106
+ width: 60,
107
+ }),
108
+ (props.enableExpanded || props.enableGrouping) &&
109
+ createDisplayColumn(table, {
110
+ Cell: ({ cell }) => (
111
+ <MRT_ExpandButton
112
+ row={cell.row as any}
113
+ tableInstance={tableInstance}
114
+ />
115
+ ),
116
+ Header: () =>
117
+ props.enableExpandAll ? (
118
+ <MRT_ExpandAllButton tableInstance={tableInstance} />
119
+ ) : null,
120
+ header: props.localization?.expand,
121
+ id: 'mrt-expand',
122
+ maxWidth: 40,
123
+ width: 40,
124
+ }),
125
+ props.enableRowSelection &&
126
+ createDisplayColumn(table, {
127
+ Cell: ({ cell }) => (
128
+ <MRT_SelectCheckbox
129
+ row={cell.row as any}
130
+ tableInstance={tableInstance}
131
+ />
132
+ ),
133
+ Header: () =>
134
+ props.enableSelectAll ? (
135
+ <MRT_SelectCheckbox selectAll tableInstance={tableInstance} />
136
+ ) : null,
137
+ header: props.localization?.select,
138
+ id: 'mrt-select',
139
+ maxWidth: 40,
140
+ width: 40,
141
+ }),
142
+ props.enableRowNumbers &&
143
+ createDisplayColumn(table, {
144
+ Cell: ({ cell }) => cell.row.index + 1,
145
+ Header: () => '#',
146
+ header: props.localization?.rowNumbers,
147
+ id: 'mrt-row-numbers',
148
+ maxWidth: 40,
149
+ width: 40,
150
+ minWidth: 40,
151
+ }),
152
+ ].filter(Boolean),
153
+ [
154
+ props.enableExpandAll,
155
+ props.enableExpanded,
156
+ props.enableRowActions,
157
+ props.enableRowEditing,
158
+ props.enableRowNumbers,
159
+ props.enableRowSelection,
160
+ props.enableSelectAll,
161
+ props.localization,
162
+ ],
163
+ );
164
+
165
+ const columns = useMemo(
166
+ () =>
167
+ table.createColumns([
168
+ ...displayColumns,
169
+ ...props.columns.map((column) =>
170
+ column.columns
171
+ ? createGroup(table, column, currentFilterTypes)
172
+ : createDataColumn(table, column, currentFilterTypes),
173
+ ),
174
+ ] as any),
175
+ [table, props.columns, currentFilterTypes],
176
+ );
177
+
178
+ const data = useMemo(
179
+ () =>
180
+ props.isLoading && !props.data.length
181
+ ? [...Array(10).fill(null)].map((_) =>
182
+ Object.assign(
183
+ {},
184
+ ...getAllLeafColumnDefs(
185
+ props.columns as MRT_ColumnInterface[],
186
+ ).map((c) => ({
187
+ [c.id]: null,
188
+ })),
189
+ ),
190
+ )
191
+ : props.data,
192
+ [props.data, props.isLoading],
193
+ );
194
+
195
+ //@ts-ignore
196
+ const tableInstance: MRT_TableInstance<{}> = useTable(table, {
197
+ ...props,
198
+ //@ts-ignore
199
+ filterTypes: defaultFilterFNs,
200
+ globalFilterType: currentGlobalFilterType,
201
+ columnFilterRowsFn: columnFilterRowsFn,
202
+ columns,
203
+ data,
204
+ expandRowsFn: expandRowsFn,
205
+ getSubRows: props.getSubRows ?? ((originalRow: D) => originalRow.subRows),
206
+ globalFilterRowsFn: globalFilterRowsFn,
207
+ groupRowsFn: groupRowsFn,
208
+ idPrefix,
209
+ onPaginationChange: (updater: any) =>
210
+ setPagination((old) => functionalUpdate(updater, old)),
211
+ paginateRowsFn: paginateRowsFn,
212
+ setCurrentEditingRow,
213
+ setCurrentFilterTypes,
214
+ setCurrentGlobalFilterType,
215
+ setIsDensePadding,
216
+ setIsFullScreen,
217
+ setShowFilters,
218
+ setShowSearch,
219
+ sortRowsFn,
220
+ state: {
221
+ ...props.initialState,
222
+ currentEditingRow,
223
+ currentFilterTypes,
224
+ currentGlobalFilterType,
225
+ isDensePadding,
226
+ isFullScreen,
227
+ //@ts-ignore
228
+ pagination,
229
+ showFilters,
230
+ showSearch,
231
+ ...props.state,
232
+ },
233
+ });
234
+
235
+ return <MRT_TablePaper tableInstance={tableInstance} />;
236
+ };
@@ -1,12 +1,15 @@
1
1
  import React, { FC } from 'react';
2
2
  import { Collapse, LinearProgress } from '@mui/material';
3
- import { useMRT } from '../useMRT';
3
+ import { MRT_TableInstance } from '..';
4
4
 
5
- interface Props {}
5
+ interface Props {
6
+ tableInstance: MRT_TableInstance;
7
+ }
6
8
 
7
- export const MRT_LinearProgressBar: FC<Props> = () => {
8
- const { muiLinearProgressProps, isFetching, isLoading, tableInstance } =
9
- useMRT();
9
+ export const MRT_LinearProgressBar: FC<Props> = ({ tableInstance }) => {
10
+ const {
11
+ options: { muiLinearProgressProps, isReloading, isLoading },
12
+ } = tableInstance;
10
13
 
11
14
  const linearProgressProps =
12
15
  muiLinearProgressProps instanceof Function
@@ -14,7 +17,7 @@ export const MRT_LinearProgressBar: FC<Props> = () => {
14
17
  : muiLinearProgressProps;
15
18
 
16
19
  return (
17
- <Collapse in={isFetching || isLoading} unmountOnExit>
20
+ <Collapse in={isReloading || isLoading} unmountOnExit>
18
21
  <LinearProgress
19
22
  aria-label="Loading"
20
23
  aria-busy="true"