material-react-table 2.0.0-alpha.5 → 2.0.0-beta.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.
Files changed (207) hide show
  1. package/dist/cjs/index.js +141 -68
  2. package/dist/cjs/index.js.map +1 -1
  3. package/dist/cjs/types/buttons/MRT_GrabHandleButton.d.ts +2 -1
  4. package/dist/cjs/types/column.utils.d.ts +2 -0
  5. package/dist/cjs/types/head/MRT_TableHeadCellSortLabel.d.ts +1 -1
  6. package/dist/cjs/types/icons.d.ts +1 -0
  7. package/dist/cjs/types/types.d.ts +12 -19
  8. package/dist/esm/material-react-table.esm.js +139 -68
  9. package/dist/esm/material-react-table.esm.js.map +1 -1
  10. package/dist/esm/types/buttons/MRT_GrabHandleButton.d.ts +2 -1
  11. package/dist/esm/types/column.utils.d.ts +2 -0
  12. package/dist/esm/types/head/MRT_TableHeadCellSortLabel.d.ts +1 -1
  13. package/dist/esm/types/icons.d.ts +1 -0
  14. package/dist/esm/types/types.d.ts +12 -19
  15. package/dist/index.d.ts +19 -23
  16. package/locales/ar.esm.js +1 -0
  17. package/locales/ar.esm.js.map +1 -1
  18. package/locales/ar.js +1 -0
  19. package/locales/ar.js.map +1 -1
  20. package/locales/bg.esm.js +1 -0
  21. package/locales/bg.esm.js.map +1 -1
  22. package/locales/bg.js +1 -0
  23. package/locales/bg.js.map +1 -1
  24. package/locales/cs.esm.js +1 -0
  25. package/locales/cs.esm.js.map +1 -1
  26. package/locales/cs.js +1 -0
  27. package/locales/cs.js.map +1 -1
  28. package/locales/da.esm.js +1 -0
  29. package/locales/da.esm.js.map +1 -1
  30. package/locales/da.js +1 -0
  31. package/locales/da.js.map +1 -1
  32. package/locales/de.esm.js +1 -0
  33. package/locales/de.esm.js.map +1 -1
  34. package/locales/de.js +1 -0
  35. package/locales/de.js.map +1 -1
  36. package/locales/es.esm.js +1 -0
  37. package/locales/es.esm.js.map +1 -1
  38. package/locales/es.js +1 -0
  39. package/locales/es.js.map +1 -1
  40. package/locales/et.esm.js +1 -0
  41. package/locales/et.esm.js.map +1 -1
  42. package/locales/et.js +1 -0
  43. package/locales/et.js.map +1 -1
  44. package/locales/fa.esm.js +1 -0
  45. package/locales/fa.esm.js.map +1 -1
  46. package/locales/fa.js +1 -0
  47. package/locales/fa.js.map +1 -1
  48. package/locales/fi.esm.js +1 -0
  49. package/locales/fi.esm.js.map +1 -1
  50. package/locales/fi.js +1 -0
  51. package/locales/fi.js.map +1 -1
  52. package/locales/fr.esm.js +1 -0
  53. package/locales/fr.esm.js.map +1 -1
  54. package/locales/fr.js +1 -0
  55. package/locales/fr.js.map +1 -1
  56. package/locales/hu.esm.js +1 -0
  57. package/locales/hu.esm.js.map +1 -1
  58. package/locales/hu.js +1 -0
  59. package/locales/hu.js.map +1 -1
  60. package/locales/hy.esm.js +1 -0
  61. package/locales/hy.esm.js.map +1 -1
  62. package/locales/hy.js +1 -0
  63. package/locales/hy.js.map +1 -1
  64. package/locales/id.esm.js +1 -0
  65. package/locales/id.esm.js.map +1 -1
  66. package/locales/id.js +1 -0
  67. package/locales/id.js.map +1 -1
  68. package/locales/it.esm.js +1 -0
  69. package/locales/it.esm.js.map +1 -1
  70. package/locales/it.js +1 -0
  71. package/locales/it.js.map +1 -1
  72. package/locales/ja.esm.js +1 -0
  73. package/locales/ja.esm.js.map +1 -1
  74. package/locales/ja.js +1 -0
  75. package/locales/ja.js.map +1 -1
  76. package/locales/ko.esm.js +1 -0
  77. package/locales/ko.esm.js.map +1 -1
  78. package/locales/ko.js +1 -0
  79. package/locales/ko.js.map +1 -1
  80. package/locales/nl.esm.js +1 -0
  81. package/locales/nl.esm.js.map +1 -1
  82. package/locales/nl.js +1 -0
  83. package/locales/nl.js.map +1 -1
  84. package/locales/no.esm.js +1 -0
  85. package/locales/no.esm.js.map +1 -1
  86. package/locales/no.js +1 -0
  87. package/locales/no.js.map +1 -1
  88. package/locales/np.esm.js +1 -1
  89. package/locales/np.esm.js.map +1 -1
  90. package/locales/np.js +1 -1
  91. package/locales/np.js.map +1 -1
  92. package/locales/pl.esm.js +1 -0
  93. package/locales/pl.esm.js.map +1 -1
  94. package/locales/pl.js +1 -0
  95. package/locales/pl.js.map +1 -1
  96. package/locales/pt-BR.esm.js +1 -0
  97. package/locales/pt-BR.esm.js.map +1 -1
  98. package/locales/pt-BR.js +1 -0
  99. package/locales/pt-BR.js.map +1 -1
  100. package/locales/pt.esm.js +1 -0
  101. package/locales/pt.esm.js.map +1 -1
  102. package/locales/pt.js +1 -0
  103. package/locales/pt.js.map +1 -1
  104. package/locales/ro.esm.js +1 -0
  105. package/locales/ro.esm.js.map +1 -1
  106. package/locales/ro.js +1 -0
  107. package/locales/ro.js.map +1 -1
  108. package/locales/ru.esm.js +1 -0
  109. package/locales/ru.esm.js.map +1 -1
  110. package/locales/ru.js +1 -0
  111. package/locales/ru.js.map +1 -1
  112. package/locales/sk.esm.js +1 -0
  113. package/locales/sk.esm.js.map +1 -1
  114. package/locales/sk.js +1 -0
  115. package/locales/sk.js.map +1 -1
  116. package/locales/sr-Cyrl-RS.esm.js +1 -0
  117. package/locales/sr-Cyrl-RS.esm.js.map +1 -1
  118. package/locales/sr-Cyrl-RS.js +1 -0
  119. package/locales/sr-Cyrl-RS.js.map +1 -1
  120. package/locales/sr-Latn-RS.esm.js +1 -0
  121. package/locales/sr-Latn-RS.esm.js.map +1 -1
  122. package/locales/sr-Latn-RS.js +1 -0
  123. package/locales/sr-Latn-RS.js.map +1 -1
  124. package/locales/sv.esm.js +3 -2
  125. package/locales/sv.esm.js.map +1 -1
  126. package/locales/sv.js +3 -2
  127. package/locales/sv.js.map +1 -1
  128. package/locales/tr.esm.js +1 -0
  129. package/locales/tr.esm.js.map +1 -1
  130. package/locales/tr.js +1 -0
  131. package/locales/tr.js.map +1 -1
  132. package/locales/uk.esm.js +1 -0
  133. package/locales/uk.esm.js.map +1 -1
  134. package/locales/uk.js +1 -0
  135. package/locales/uk.js.map +1 -1
  136. package/locales/vi.esm.js +1 -0
  137. package/locales/vi.esm.js.map +1 -1
  138. package/locales/vi.js +1 -0
  139. package/locales/vi.js.map +1 -1
  140. package/locales/zh-Hans.esm.js +1 -0
  141. package/locales/zh-Hans.esm.js.map +1 -1
  142. package/locales/zh-Hans.js +1 -0
  143. package/locales/zh-Hans.js.map +1 -1
  144. package/locales/zh-Hant.esm.js +1 -0
  145. package/locales/zh-Hant.esm.js.map +1 -1
  146. package/locales/zh-Hant.js +1 -0
  147. package/locales/zh-Hant.js.map +1 -1
  148. package/package.json +11 -11
  149. package/src/body/MRT_TableBody.tsx +20 -4
  150. package/src/body/MRT_TableBodyCell.tsx +4 -3
  151. package/src/body/MRT_TableBodyRow.tsx +7 -5
  152. package/src/body/MRT_TableBodyRowGrabHandle.tsx +1 -0
  153. package/src/body/index.ts +1 -1
  154. package/src/buttons/MRT_ExpandButton.tsx +1 -0
  155. package/src/buttons/MRT_GrabHandleButton.tsx +3 -1
  156. package/src/column.utils.ts +22 -2
  157. package/src/filterFns.ts +3 -3
  158. package/src/footer/MRT_TableFooterCell.tsx +5 -1
  159. package/src/footer/MRT_TableFooterRow.tsx +2 -2
  160. package/src/head/MRT_TableHead.tsx +5 -1
  161. package/src/head/MRT_TableHeadCell.tsx +11 -6
  162. package/src/head/MRT_TableHeadCellColumnActionsButton.tsx +2 -2
  163. package/src/head/MRT_TableHeadCellFilterLabel.tsx +6 -1
  164. package/src/head/MRT_TableHeadCellSortLabel.tsx +18 -12
  165. package/src/head/MRT_TableHeadRow.tsx +2 -2
  166. package/src/hooks/useMRT_DisplayColumns.tsx +20 -0
  167. package/src/hooks/useMRT_TableInstance.ts +6 -6
  168. package/src/icons.ts +3 -0
  169. package/src/inputs/MRT_FilterTextField.tsx +4 -3
  170. package/src/locales/ar.ts +1 -1
  171. package/src/locales/bg.ts +1 -0
  172. package/src/locales/cs.ts +1 -0
  173. package/src/locales/da.ts +1 -0
  174. package/src/locales/de.ts +1 -0
  175. package/src/locales/es.ts +1 -0
  176. package/src/locales/et.ts +1 -0
  177. package/src/locales/fa.ts +1 -0
  178. package/src/locales/fi.ts +1 -0
  179. package/src/locales/fr.ts +1 -0
  180. package/src/locales/hu.ts +1 -0
  181. package/src/locales/hy.ts +1 -0
  182. package/src/locales/id.ts +1 -0
  183. package/src/locales/it.ts +1 -0
  184. package/src/locales/ja.ts +1 -0
  185. package/src/locales/ko.ts +1 -0
  186. package/src/locales/nl.ts +1 -0
  187. package/src/locales/no.ts +1 -0
  188. package/src/locales/np.ts +3 -2
  189. package/src/locales/pl.ts +1 -0
  190. package/src/locales/pt-BR.ts +1 -0
  191. package/src/locales/pt.ts +1 -0
  192. package/src/locales/ro.ts +1 -0
  193. package/src/locales/ru.ts +1 -0
  194. package/src/locales/sk.ts +1 -0
  195. package/src/locales/sr-Cyrl-RS.ts +1 -0
  196. package/src/locales/sr-Latn-RS.ts +1 -0
  197. package/src/locales/sv.ts +3 -2
  198. package/src/locales/tr.ts +1 -0
  199. package/src/locales/uk.ts +1 -0
  200. package/src/locales/vi.ts +1 -0
  201. package/src/locales/zh-Hans.ts +1 -0
  202. package/src/locales/zh-Hant.ts +1 -0
  203. package/src/table/MRT_Table.tsx +24 -10
  204. package/src/table/MRT_TableContainer.tsx +50 -1
  205. package/src/toolbar/MRT_LinearProgressBar.tsx +2 -2
  206. package/src/toolbar/MRT_TablePagination.tsx +3 -4
  207. package/src/types.ts +12 -11
@@ -1,5 +1,8 @@
1
1
  import { useEffect, useLayoutEffect, useState } from 'react';
2
+ import Box from '@mui/material/Box';
3
+ import CircularProgress from '@mui/material/CircularProgress';
2
4
  import TableContainer from '@mui/material/TableContainer';
5
+ import { alpha, lighten } from '@mui/material/styles';
3
6
  import { MRT_Table } from './MRT_Table';
4
7
  import { parseFromValuesOrFunc } from '../column.utils';
5
8
  import { MRT_EditRowModal } from '../modals';
@@ -21,11 +24,22 @@ export const MRT_TableContainer = <TData extends Record<string, any>>({
21
24
  createDisplayMode,
22
25
  editDisplayMode,
23
26
  enableStickyHeader,
27
+ localization,
28
+ muiCircularProgressProps,
24
29
  muiTableContainerProps,
25
30
  },
26
31
  refs: { bottomToolbarRef, tableContainerRef, topToolbarRef },
27
32
  } = table;
28
- const { creatingRow, editingRow, isFullScreen } = getState();
33
+ const {
34
+ creatingRow,
35
+ editingRow,
36
+ isFullScreen,
37
+ isLoading,
38
+ showLoadingOverlay,
39
+ } = getState();
40
+
41
+ const loading =
42
+ (isLoading || showLoadingOverlay) && showLoadingOverlay !== false;
29
43
 
30
44
  const [totalToolbarHeight, setTotalToolbarHeight] = useState(0);
31
45
 
@@ -33,6 +47,11 @@ export const MRT_TableContainer = <TData extends Record<string, any>>({
33
47
  table,
34
48
  });
35
49
 
50
+ const circularProgressProps = parseFromValuesOrFunc(
51
+ muiCircularProgressProps,
52
+ { table },
53
+ );
54
+
36
55
  useIsomorphicLayoutEffect(() => {
37
56
  const topToolbarHeight =
38
57
  typeof document !== 'undefined'
@@ -52,6 +71,8 @@ export const MRT_TableContainer = <TData extends Record<string, any>>({
52
71
 
53
72
  return (
54
73
  <TableContainer
74
+ aria-busy={loading}
75
+ aria-describedby="mrt-progress"
55
76
  {...tableContainerProps}
56
77
  ref={(node: HTMLDivElement) => {
57
78
  if (node) {
@@ -74,9 +95,37 @@ export const MRT_TableContainer = <TData extends Record<string, any>>({
74
95
  : undefined,
75
96
  maxWidth: '100%',
76
97
  overflow: 'auto',
98
+ position: 'relative',
77
99
  ...(parseFromValuesOrFunc(tableContainerProps?.sx, theme) as any),
78
100
  })}
79
101
  >
102
+ {loading ? (
103
+ <Box
104
+ sx={(theme) => ({
105
+ alignItems: 'center',
106
+ backgroundColor: alpha(
107
+ lighten(theme.palette.background.paper, 0.05),
108
+ 0.5,
109
+ ),
110
+ bottom: 0,
111
+ display: 'flex',
112
+ justifyContent: 'center',
113
+ left: 0,
114
+ maxHeight: '100vh',
115
+ position: 'absolute',
116
+ right: 0,
117
+ top: 0,
118
+ width: '100%',
119
+ zIndex: 2,
120
+ })}
121
+ >
122
+ <CircularProgress
123
+ aria-label={localization.noRecordsToDisplay}
124
+ id="mrt-progress"
125
+ {...circularProgressProps}
126
+ />
127
+ </Box>
128
+ ) : null}
80
129
  <MRT_Table table={table} />
81
130
  {(createModalOpen || editModalOpen) && (
82
131
  <MRT_EditRowModal open table={table} />
@@ -16,7 +16,7 @@ export const MRT_LinearProgressBar = <TData extends Record<string, any>>({
16
16
  getState,
17
17
  options: { muiLinearProgressProps },
18
18
  } = table;
19
- const { isLoading, showProgressBars } = getState();
19
+ const { showProgressBars } = getState();
20
20
 
21
21
  const linearProgressProps = parseFromValuesOrFunc(muiLinearProgressProps, {
22
22
  isTopToolbar,
@@ -25,7 +25,7 @@ export const MRT_LinearProgressBar = <TData extends Record<string, any>>({
25
25
 
26
26
  return (
27
27
  <Collapse
28
- in={isLoading || showProgressBars}
28
+ in={showProgressBars}
29
29
  mountOnEnter
30
30
  sx={{
31
31
  bottom: isTopToolbar ? 0 : undefined,
@@ -50,11 +50,10 @@ export const MRT_TablePagination = <TData extends Record<string, any> = {}>({
50
50
  const lastRowIndex = Math.min(pageIndex * pageSize + pageSize, totalRowCount);
51
51
 
52
52
  const {
53
- showRowsPerPage = true,
54
53
  rowsPerPageOptions = defaultRowsPerPage,
55
54
  showFirstButton = showFirstLastPageButtons,
56
55
  showLastButton = showFirstLastPageButtons,
57
-
56
+ showRowsPerPage = true,
58
57
  ...rest
59
58
  } = paginationProps ?? {};
60
59
 
@@ -84,8 +83,8 @@ export const MRT_TablePagination = <TData extends Record<string, any> = {}>({
84
83
  {localization.rowsPerPage}
85
84
  </InputLabel>
86
85
  <Select
87
- inputProps={{ 'aria-label': localization.rowsPerPage }}
88
86
  id="mrt-rows-per-page"
87
+ inputProps={{ 'aria-label': localization.rowsPerPage }}
89
88
  label={localization.rowsPerPage}
90
89
  onChange={(event) => setPageSize(+event.target.value)}
91
90
  sx={{ '&::before': { border: 'none' }, mb: 0 }}
@@ -123,7 +122,7 @@ export const MRT_TablePagination = <TData extends Record<string, any> = {}>({
123
122
  ) : paginationDisplayMode === 'default' ? (
124
123
  <>
125
124
  <Typography
126
- sx={{ mb: 0, mx: '4px', minWidth: '10ch' }}
125
+ sx={{ mb: 0, minWidth: '10ch', mx: '4px' }}
127
126
  variant="body2"
128
127
  >{`${
129
128
  lastRowIndex === 0 ? 0 : (firstRowIndex + 1).toLocaleString()
package/src/types.ts CHANGED
@@ -43,6 +43,7 @@ import { type AutocompleteProps } from '@mui/material/Autocomplete';
43
43
  import { type ButtonProps } from '@mui/material/Button';
44
44
  import { type CheckboxProps } from '@mui/material/Checkbox';
45
45
  import { type ChipProps } from '@mui/material/Chip';
46
+ import { type CircularProgressProps } from '@mui/material/CircularProgress';
46
47
  import { type DialogProps } from '@mui/material/Dialog';
47
48
  import { type IconButtonProps } from '@mui/material/IconButton';
48
49
  import { type LinearProgressProps } from '@mui/material/LinearProgress';
@@ -158,7 +159,7 @@ export interface MRT_Localization {
158
159
  noResultsFound: string;
159
160
  of: string;
160
161
  or: string;
161
- pin?: string;
162
+ pin: string;
162
163
  pinToLeft: string;
163
164
  pinToRight: string;
164
165
  resetColumnSize: string;
@@ -260,12 +261,8 @@ export type MRT_TableInstance<TData extends Record<string, any>> = Omit<
260
261
  setEditingCell: Dispatch<SetStateAction<MRT_Cell<TData> | null>>;
261
262
  setEditingRow: Dispatch<SetStateAction<MRT_Row<TData> | null>>;
262
263
  setGlobalFilterFn: Dispatch<SetStateAction<MRT_FilterOption>>;
263
- setHoveredColumn: Dispatch<
264
- SetStateAction<{ id: string } | MRT_Column<TData> | null>
265
- >;
266
- setHoveredRow: Dispatch<
267
- SetStateAction<{ id: string } | MRT_Row<TData> | null>
268
- >;
264
+ setHoveredColumn: Dispatch<SetStateAction<Partial<MRT_Column<TData>> | null>>;
265
+ setHoveredRow: Dispatch<SetStateAction<Partial<MRT_Row<TData>> | null>>;
269
266
  setIsFullScreen: Dispatch<SetStateAction<boolean>>;
270
267
  setShowAlertBanner: Dispatch<SetStateAction<boolean>>;
271
268
  setShowColumnFilters: Dispatch<SetStateAction<boolean>>;
@@ -288,14 +285,15 @@ export type MRT_TableState<TData extends Record<string, any>> = TableState & {
288
285
  editingCell: MRT_Cell<TData> | null;
289
286
  editingRow: MRT_Row<TData> | null;
290
287
  globalFilterFn: MRT_FilterOption;
291
- hoveredColumn: { id: string } | MRT_Column<TData> | null;
292
- hoveredRow: { id: string } | MRT_Row<TData> | null;
288
+ hoveredColumn: Partial<MRT_Column<TData>> | null;
289
+ hoveredRow: Partial<MRT_Row<TData>> | null;
293
290
  isFullScreen: boolean;
294
291
  isLoading: boolean;
295
292
  isSaving: boolean;
296
293
  showAlertBanner: boolean;
297
294
  showColumnFilters: boolean;
298
295
  showGlobalFilter: boolean;
296
+ showLoadingOverlay: boolean;
299
297
  showProgressBars: boolean;
300
298
  showSkeletons: boolean;
301
299
  showToolbarDropZone: boolean;
@@ -745,6 +743,9 @@ export type MRT_TableOptions<TData extends Record<string, any>> = Omit<
745
743
  muiBottomToolbarProps?:
746
744
  | ((props: { table: MRT_TableInstance<TData> }) => ToolbarProps)
747
745
  | ToolbarProps;
746
+ muiCircularProgressProps?:
747
+ | ((props: { table: MRT_TableInstance<TData> }) => CircularProgressProps)
748
+ | CircularProgressProps;
748
749
  muiColumnActionsButtonProps?:
749
750
  | ((props: {
750
751
  column: MRT_Column<TData>;
@@ -972,8 +973,8 @@ export type MRT_TableOptions<TData extends Record<string, any>> = Omit<
972
973
  values: Record<LiteralUnion<string & DeepKeys<TData>>, any>;
973
974
  }) => Promise<void> | void;
974
975
  onGlobalFilterFnChange?: OnChangeFn<MRT_FilterOption>;
975
- onHoveredColumnChange?: OnChangeFn<{ id: string } | MRT_Column<TData> | null>;
976
- onHoveredRowChange?: OnChangeFn<{ id: string } | MRT_Row<TData> | null>;
976
+ onHoveredColumnChange?: OnChangeFn<Partial<MRT_Column<TData>> | null>;
977
+ onHoveredRowChange?: OnChangeFn<Partial<MRT_Row<TData>> | null>;
977
978
  onIsFullScreenChange?: OnChangeFn<boolean>;
978
979
  onShowAlertBannerChange?: OnChangeFn<boolean>;
979
980
  onShowColumnFiltersChange?: OnChangeFn<boolean>;