material-react-table 2.10.0 → 2.11.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 (187) hide show
  1. package/README.md +3 -2
  2. package/dist/index.d.ts +144 -125
  3. package/dist/index.esm.js +201 -152
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/index.js +201 -149
  6. package/dist/index.js.map +1 -1
  7. package/locales/ar/index.esm.js +1 -0
  8. package/locales/ar/index.js +1 -0
  9. package/locales/az/index.esm.js +1 -0
  10. package/locales/az/index.js +1 -0
  11. package/locales/bg/index.esm.js +1 -0
  12. package/locales/bg/index.js +1 -0
  13. package/locales/cs/index.esm.js +1 -0
  14. package/locales/cs/index.js +1 -0
  15. package/locales/da/index.esm.js +1 -0
  16. package/locales/da/index.js +1 -0
  17. package/locales/de/index.esm.js +1 -0
  18. package/locales/de/index.js +1 -0
  19. package/locales/en/index.esm.js +1 -0
  20. package/locales/en/index.js +1 -0
  21. package/locales/es/index.esm.js +1 -0
  22. package/locales/es/index.js +1 -0
  23. package/locales/et/index.esm.js +1 -0
  24. package/locales/et/index.js +1 -0
  25. package/locales/fa/index.esm.js +1 -0
  26. package/locales/fa/index.js +1 -0
  27. package/locales/fi/index.esm.js +1 -0
  28. package/locales/fi/index.js +1 -0
  29. package/locales/fr/index.esm.js +1 -0
  30. package/locales/fr/index.js +1 -0
  31. package/locales/he/index.esm.js +1 -0
  32. package/locales/he/index.js +1 -0
  33. package/locales/hu/index.esm.js +1 -0
  34. package/locales/hu/index.js +1 -0
  35. package/locales/hy/index.esm.js +1 -0
  36. package/locales/hy/index.js +1 -0
  37. package/locales/id/index.esm.js +1 -0
  38. package/locales/id/index.js +1 -0
  39. package/locales/it/index.esm.js +1 -0
  40. package/locales/it/index.js +1 -0
  41. package/locales/ja/index.esm.js +1 -0
  42. package/locales/ja/index.js +1 -0
  43. package/locales/ko/index.esm.js +1 -0
  44. package/locales/ko/index.js +1 -0
  45. package/locales/nl/index.esm.js +1 -0
  46. package/locales/nl/index.js +1 -0
  47. package/locales/no/index.esm.js +1 -0
  48. package/locales/no/index.js +1 -0
  49. package/locales/np/index.esm.js +1 -0
  50. package/locales/np/index.js +1 -0
  51. package/locales/pl/index.esm.js +1 -0
  52. package/locales/pl/index.js +1 -0
  53. package/locales/pt/index.esm.js +1 -0
  54. package/locales/pt/index.js +1 -0
  55. package/locales/pt-BR/index.esm.js +1 -0
  56. package/locales/pt-BR/index.js +1 -0
  57. package/locales/ro/index.esm.js +1 -0
  58. package/locales/ro/index.js +1 -0
  59. package/locales/ru/index.esm.js +1 -0
  60. package/locales/ru/index.js +1 -0
  61. package/locales/sk/index.esm.js +1 -0
  62. package/locales/sk/index.js +1 -0
  63. package/locales/sr-Cyrl-RS/index.esm.js +1 -0
  64. package/locales/sr-Cyrl-RS/index.js +1 -0
  65. package/locales/sr-Latn-RS/index.esm.js +1 -0
  66. package/locales/sr-Latn-RS/index.js +1 -0
  67. package/locales/sv/index.esm.js +1 -0
  68. package/locales/sv/index.js +1 -0
  69. package/locales/tr/index.esm.js +1 -0
  70. package/locales/tr/index.js +1 -0
  71. package/locales/uk/index.esm.js +1 -0
  72. package/locales/uk/index.js +1 -0
  73. package/locales/vi/index.esm.js +1 -0
  74. package/locales/vi/index.js +1 -0
  75. package/locales/zh-Hans/index.esm.js +1 -0
  76. package/locales/zh-Hans/index.js +1 -0
  77. package/locales/zh-Hant/index.esm.js +1 -0
  78. package/locales/zh-Hant/index.js +1 -0
  79. package/package.json +18 -18
  80. package/src/components/MaterialReactTable.tsx +3 -3
  81. package/src/components/body/MRT_TableBody.tsx +3 -2
  82. package/src/components/body/MRT_TableBodyCell.tsx +4 -2
  83. package/src/components/body/MRT_TableBodyCellValue.tsx +5 -2
  84. package/src/components/body/MRT_TableBodyRow.tsx +13 -8
  85. package/src/components/body/MRT_TableBodyRowGrabHandle.tsx +4 -3
  86. package/src/components/body/MRT_TableBodyRowPinButton.tsx +3 -2
  87. package/src/components/body/MRT_TableDetailPanel.tsx +3 -2
  88. package/src/components/buttons/MRT_ColumnPinningButtons.tsx +3 -2
  89. package/src/components/buttons/MRT_CopyButton.tsx +3 -2
  90. package/src/components/buttons/MRT_EditActionButtons.tsx +3 -2
  91. package/src/components/buttons/MRT_ExpandAllButton.tsx +3 -2
  92. package/src/components/buttons/MRT_ExpandButton.tsx +3 -2
  93. package/src/components/buttons/MRT_GrabHandleButton.tsx +9 -15
  94. package/src/components/buttons/MRT_RowPinButton.tsx +3 -2
  95. package/src/components/buttons/MRT_ShowHideColumnsButton.tsx +3 -2
  96. package/src/components/buttons/MRT_ToggleDensePaddingButton.tsx +3 -2
  97. package/src/components/buttons/MRT_ToggleFiltersButton.tsx +3 -2
  98. package/src/components/buttons/MRT_ToggleFullScreenButton.tsx +3 -2
  99. package/src/components/buttons/MRT_ToggleGlobalFilterButton.tsx +3 -2
  100. package/src/components/buttons/MRT_ToggleRowActionMenuButton.tsx +3 -2
  101. package/src/components/footer/MRT_TableFooter.tsx +3 -2
  102. package/src/components/footer/MRT_TableFooterCell.tsx +3 -2
  103. package/src/components/footer/MRT_TableFooterRow.tsx +5 -3
  104. package/src/components/head/MRT_TableHead.tsx +3 -2
  105. package/src/components/head/MRT_TableHeadCell.tsx +3 -5
  106. package/src/components/head/MRT_TableHeadCellColumnActionsButton.tsx +4 -2
  107. package/src/components/head/MRT_TableHeadCellFilterContainer.tsx +4 -2
  108. package/src/components/head/MRT_TableHeadCellFilterLabel.tsx +3 -2
  109. package/src/components/head/MRT_TableHeadCellGrabHandle.tsx +4 -3
  110. package/src/components/head/MRT_TableHeadCellResizeHandle.tsx +3 -2
  111. package/src/components/head/MRT_TableHeadCellSortLabel.tsx +3 -2
  112. package/src/components/head/MRT_TableHeadRow.tsx +3 -2
  113. package/src/components/inputs/MRT_EditCellTextField.tsx +3 -2
  114. package/src/components/inputs/MRT_FilterCheckbox.tsx +3 -2
  115. package/src/components/inputs/MRT_FilterRangeFields.tsx +3 -2
  116. package/src/components/inputs/MRT_FilterRangeSlider.tsx +3 -2
  117. package/src/components/inputs/MRT_FilterTextField.tsx +15 -6
  118. package/src/components/inputs/MRT_GlobalFilterTextField.tsx +3 -2
  119. package/src/components/inputs/MRT_SelectCheckbox.tsx +26 -33
  120. package/src/components/menus/MRT_ActionMenuItem.tsx +3 -2
  121. package/src/components/menus/MRT_CellActionMenu.tsx +5 -4
  122. package/src/components/menus/MRT_ColumnActionMenu.tsx +5 -4
  123. package/src/components/menus/MRT_FilterOptionMenu.tsx +3 -2
  124. package/src/components/menus/MRT_RowActionMenu.tsx +3 -2
  125. package/src/components/menus/MRT_ShowHideColumnsMenu.tsx +8 -2
  126. package/src/components/menus/MRT_ShowHideColumnsMenuItems.tsx +7 -5
  127. package/src/components/modals/MRT_EditRowModal.tsx +3 -2
  128. package/src/components/table/MRT_Table.tsx +2 -2
  129. package/src/components/table/MRT_TableContainer.tsx +3 -2
  130. package/src/components/table/MRT_TableLoadingOverlay.tsx +11 -8
  131. package/src/components/table/MRT_TablePaper.tsx +3 -2
  132. package/src/components/toolbar/MRT_BottomToolbar.tsx +3 -2
  133. package/src/components/toolbar/MRT_LinearProgressBar.tsx +3 -2
  134. package/src/components/toolbar/MRT_TablePagination.tsx +2 -2
  135. package/src/components/toolbar/MRT_ToolbarAlertBanner.tsx +30 -13
  136. package/src/components/toolbar/MRT_ToolbarDropZone.tsx +3 -2
  137. package/src/components/toolbar/MRT_ToolbarInternalButtons.tsx +3 -2
  138. package/src/components/toolbar/MRT_TopToolbar.tsx +2 -2
  139. package/src/hooks/useMRT_Effects.ts +11 -11
  140. package/src/hooks/useMRT_Rows.ts +11 -79
  141. package/src/hooks/useMRT_TableInstance.ts +2 -0
  142. package/src/hooks/useMRT_TableOptions.ts +2 -0
  143. package/src/locales/ar.ts +1 -0
  144. package/src/locales/az.ts +1 -0
  145. package/src/locales/bg.ts +1 -0
  146. package/src/locales/cs.ts +1 -0
  147. package/src/locales/da.ts +1 -0
  148. package/src/locales/de.ts +1 -0
  149. package/src/locales/en.ts +1 -0
  150. package/src/locales/es.ts +1 -0
  151. package/src/locales/et.ts +1 -0
  152. package/src/locales/fa.ts +1 -0
  153. package/src/locales/fi.ts +1 -0
  154. package/src/locales/fr.ts +1 -0
  155. package/src/locales/he.ts +1 -0
  156. package/src/locales/hu.ts +1 -0
  157. package/src/locales/hy.ts +1 -0
  158. package/src/locales/id.ts +1 -0
  159. package/src/locales/it.ts +1 -0
  160. package/src/locales/ja.ts +1 -0
  161. package/src/locales/ko.ts +1 -0
  162. package/src/locales/nl.ts +1 -0
  163. package/src/locales/no.ts +1 -0
  164. package/src/locales/np.ts +1 -0
  165. package/src/locales/pl.ts +1 -0
  166. package/src/locales/pt-BR.ts +1 -0
  167. package/src/locales/pt.ts +1 -0
  168. package/src/locales/ro.ts +1 -0
  169. package/src/locales/ru.ts +1 -0
  170. package/src/locales/sk.ts +1 -0
  171. package/src/locales/sr-Cyrl-RS.ts +1 -0
  172. package/src/locales/sr-Latn-RS.ts +1 -0
  173. package/src/locales/sv.ts +1 -0
  174. package/src/locales/tr.ts +1 -0
  175. package/src/locales/uk.ts +1 -0
  176. package/src/locales/vi.ts +1 -0
  177. package/src/locales/zh-Hans.ts +1 -0
  178. package/src/locales/zh-Hant.ts +1 -0
  179. package/src/types.ts +10 -4
  180. package/src/utils/column.utils.ts +4 -6
  181. package/src/utils/displayColumn.utils.ts +1 -1
  182. package/src/utils/row.utils.ts +179 -21
  183. package/locales/am/index.d.ts +0 -3
  184. package/locales/am/index.esm.d.ts +0 -3
  185. package/locales/am/index.esm.js +0 -93
  186. package/locales/am/index.js +0 -97
  187. package/locales/am/package.json +0 -6
@@ -13,7 +13,8 @@ import {
13
13
  import { getDefaultColumnOrderIds } from '../../utils/displayColumn.utils';
14
14
  import { getMRTTheme } from '../../utils/style.utils';
15
15
 
16
- interface Props<TData extends MRT_RowData> extends Partial<MenuProps> {
16
+ export interface MRT_ShowHideColumnsMenuProps<TData extends MRT_RowData>
17
+ extends Partial<MenuProps> {
17
18
  anchorEl: HTMLElement | null;
18
19
  isSubMenu?: boolean;
19
20
  setAnchorEl: (anchorEl: HTMLElement | null) => void;
@@ -25,7 +26,7 @@ export const MRT_ShowHideColumnsMenu = <TData extends MRT_RowData>({
25
26
  setAnchorEl,
26
27
  table,
27
28
  ...rest
28
- }: Props<TData>) => {
29
+ }: MRT_ShowHideColumnsMenuProps<TData>) => {
29
30
  const {
30
31
  getAllColumns,
31
32
  getAllLeafColumns,
@@ -75,6 +76,10 @@ export const MRT_ShowHideColumnsMenu = <TData extends MRT_RowData>({
75
76
  getRightLeafColumns(),
76
77
  ]) as MRT_Column<TData>[];
77
78
 
79
+ const isNestedColumns = allColumns.some(
80
+ (col) => col.columnDef.columnDefType === 'group',
81
+ );
82
+
78
83
  const [hoveredColumn, setHoveredColumn] = useState<MRT_Column<TData> | null>(
79
84
  null,
80
85
  );
@@ -146,6 +151,7 @@ export const MRT_ShowHideColumnsMenu = <TData extends MRT_RowData>({
146
151
  allColumns={allColumns}
147
152
  column={column}
148
153
  hoveredColumn={hoveredColumn}
154
+ isNestedColumns={isNestedColumns}
149
155
  key={`${index}-${column.id}`}
150
156
  setHoveredColumn={setHoveredColumn}
151
157
  table={table}
@@ -22,10 +22,12 @@ import { parseFromValuesOrFunc } from '../../utils/utils';
22
22
  import { MRT_ColumnPinningButtons } from '../buttons/MRT_ColumnPinningButtons';
23
23
  import { MRT_GrabHandleButton } from '../buttons/MRT_GrabHandleButton';
24
24
 
25
- interface Props<TData extends MRT_RowData> extends MenuItemProps {
25
+ export interface MRT_ShowHideColumnsMenuItemsProps<TData extends MRT_RowData>
26
+ extends MenuItemProps {
26
27
  allColumns: MRT_Column<TData>[];
27
28
  column: MRT_Column<TData>;
28
29
  hoveredColumn: MRT_Column<TData> | null;
30
+ isNestedColumns: boolean;
29
31
  setHoveredColumn: Dispatch<SetStateAction<MRT_Column<TData> | null>>;
30
32
  table: MRT_TableInstance<TData>;
31
33
  }
@@ -34,10 +36,11 @@ export const MRT_ShowHideColumnsMenuItems = <TData extends MRT_RowData>({
34
36
  allColumns,
35
37
  column,
36
38
  hoveredColumn,
39
+ isNestedColumns,
37
40
  setHoveredColumn,
38
41
  table,
39
42
  ...rest
40
- }: Props<TData>) => {
43
+ }: MRT_ShowHideColumnsMenuItemsProps<TData>) => {
41
44
  const {
42
45
  getState,
43
46
  options: {
@@ -130,9 +133,7 @@ export const MRT_ShowHideColumnsMenuItems = <TData extends MRT_RowData>({
130
133
  >
131
134
  {columnDefType !== 'group' &&
132
135
  enableColumnOrdering &&
133
- !allColumns.some(
134
- (col) => col.columnDef.columnDefType === 'group',
135
- ) &&
136
+ !isNestedColumns &&
136
137
  (columnDef.enableColumnOrdering !== false ? (
137
138
  <MRT_GrabHandleButton
138
139
  onDragEnd={handleDragEnd}
@@ -183,6 +184,7 @@ export const MRT_ShowHideColumnsMenuItems = <TData extends MRT_RowData>({
183
184
  allColumns={allColumns}
184
185
  column={c}
185
186
  hoveredColumn={hoveredColumn}
187
+ isNestedColumns={isNestedColumns}
186
188
  key={`${i}-${c.id}`}
187
189
  setHoveredColumn={setHoveredColumn}
188
190
  table={table}
@@ -12,7 +12,8 @@ import { parseFromValuesOrFunc } from '../../utils/utils';
12
12
  import { MRT_EditActionButtons } from '../buttons/MRT_EditActionButtons';
13
13
  import { MRT_EditCellTextField } from '../inputs/MRT_EditCellTextField';
14
14
 
15
- interface Props<TData extends MRT_RowData> extends Partial<DialogProps> {
15
+ export interface MRT_EditRowModalProps<TData extends MRT_RowData>
16
+ extends Partial<DialogProps> {
16
17
  open: boolean;
17
18
  table: MRT_TableInstance<TData>;
18
19
  }
@@ -21,7 +22,7 @@ export const MRT_EditRowModal = <TData extends MRT_RowData>({
21
22
  open,
22
23
  table,
23
24
  ...rest
24
- }: Props<TData>) => {
25
+ }: MRT_EditRowModalProps<TData>) => {
25
26
  const {
26
27
  getState,
27
28
  options: {
@@ -8,14 +8,14 @@ import { MRT_TableBody, Memo_MRT_TableBody } from '../body/MRT_TableBody';
8
8
  import { MRT_TableFooter } from '../footer/MRT_TableFooter';
9
9
  import { MRT_TableHead } from '../head/MRT_TableHead';
10
10
 
11
- interface Props<TData extends MRT_RowData> extends TableProps {
11
+ export interface MRT_TableProps<TData extends MRT_RowData> extends TableProps {
12
12
  table: MRT_TableInstance<TData>;
13
13
  }
14
14
 
15
15
  export const MRT_Table = <TData extends MRT_RowData>({
16
16
  table,
17
17
  ...rest
18
- }: Props<TData>) => {
18
+ }: MRT_TableProps<TData>) => {
19
19
  const {
20
20
  getFlatHeaders,
21
21
  getState,
@@ -12,14 +12,15 @@ import { MRT_EditRowModal } from '../modals/MRT_EditRowModal';
12
12
  const useIsomorphicLayoutEffect =
13
13
  typeof window !== 'undefined' ? useLayoutEffect : useEffect;
14
14
 
15
- interface Props<TData extends MRT_RowData> extends TableContainerProps {
15
+ export interface MRT_TableContainerProps<TData extends MRT_RowData>
16
+ extends TableContainerProps {
16
17
  table: MRT_TableInstance<TData>;
17
18
  }
18
19
 
19
20
  export const MRT_TableContainer = <TData extends MRT_RowData>({
20
21
  table,
21
22
  ...rest
22
- }: Props<TData>) => {
23
+ }: MRT_TableContainerProps<TData>) => {
23
24
  const {
24
25
  getState,
25
26
  options: {
@@ -7,14 +7,15 @@ import { type MRT_RowData, type MRT_TableInstance } from '../../types';
7
7
  import { getMRTTheme } from '../../utils/style.utils';
8
8
  import { parseFromValuesOrFunc } from '../../utils/utils';
9
9
 
10
- interface Props<TData extends MRT_RowData> extends CircularProgressProps {
10
+ export interface MRT_TableLoadingOverlayProps<TData extends MRT_RowData>
11
+ extends CircularProgressProps {
11
12
  table: MRT_TableInstance<TData>;
12
13
  }
13
14
 
14
15
  export const MRT_TableLoadingOverlay = <TData extends MRT_RowData>({
15
16
  table,
16
17
  ...rest
17
- }: Props<TData>) => {
18
+ }: MRT_TableLoadingOverlayProps<TData>) => {
18
19
  const {
19
20
  options: { localization, muiCircularProgressProps },
20
21
  } = table;
@@ -41,14 +42,16 @@ export const MRT_TableLoadingOverlay = <TData extends MRT_RowData>({
41
42
  right: 0,
42
43
  top: 0,
43
44
  width: '100%',
44
- zIndex: 2,
45
+ zIndex: 3,
45
46
  })}
46
47
  >
47
- <CircularProgress
48
- aria-label={localization.noRecordsToDisplay}
49
- id="mrt-progress"
50
- {...circularProgressProps}
51
- />
48
+ {circularProgressProps?.Component ?? (
49
+ <CircularProgress
50
+ aria-label={localization.noRecordsToDisplay}
51
+ id="mrt-progress"
52
+ {...circularProgressProps}
53
+ />
54
+ )}
52
55
  </Box>
53
56
  );
54
57
  };
@@ -6,14 +6,15 @@ import { parseFromValuesOrFunc } from '../../utils/utils';
6
6
  import { MRT_BottomToolbar } from '../toolbar/MRT_BottomToolbar';
7
7
  import { MRT_TopToolbar } from '../toolbar/MRT_TopToolbar';
8
8
 
9
- interface Props<TData extends MRT_RowData> extends PaperProps {
9
+ export interface MRT_TablePaperProps<TData extends MRT_RowData>
10
+ extends PaperProps {
10
11
  table: MRT_TableInstance<TData>;
11
12
  }
12
13
 
13
14
  export const MRT_TablePaper = <TData extends MRT_RowData>({
14
15
  table,
15
16
  ...rest
16
- }: Props<TData>) => {
17
+ }: MRT_TablePaperProps<TData>) => {
17
18
  const {
18
19
  getState,
19
20
  options: {
@@ -9,14 +9,15 @@ import { type MRT_RowData, type MRT_TableInstance } from '../../types';
9
9
  import { getCommonToolbarStyles } from '../../utils/style.utils';
10
10
  import { parseFromValuesOrFunc } from '../../utils/utils';
11
11
 
12
- interface Props<TData extends MRT_RowData> extends BoxProps {
12
+ export interface MRT_BottomToolbarProps<TData extends MRT_RowData>
13
+ extends BoxProps {
13
14
  table: MRT_TableInstance<TData>;
14
15
  }
15
16
 
16
17
  export const MRT_BottomToolbar = <TData extends MRT_RowData>({
17
18
  table,
18
19
  ...rest
19
- }: Props<TData>) => {
20
+ }: MRT_BottomToolbarProps<TData>) => {
20
21
  const {
21
22
  getState,
22
23
  options: {
@@ -5,7 +5,8 @@ import LinearProgress, {
5
5
  import { type MRT_RowData, type MRT_TableInstance } from '../../types';
6
6
  import { parseFromValuesOrFunc } from '../../utils/utils';
7
7
 
8
- interface Props<TData extends MRT_RowData> extends LinearProgressProps {
8
+ export interface MRT_LinearProgressBarProps<TData extends MRT_RowData>
9
+ extends LinearProgressProps {
9
10
  isTopToolbar: boolean;
10
11
  table: MRT_TableInstance<TData>;
11
12
  }
@@ -14,7 +15,7 @@ export const MRT_LinearProgressBar = <TData extends MRT_RowData>({
14
15
  isTopToolbar,
15
16
  table,
16
17
  ...rest
17
- }: Props<TData>) => {
18
+ }: MRT_LinearProgressBarProps<TData>) => {
18
19
  const {
19
20
  getState,
20
21
  options: { muiLinearProgressProps },
@@ -15,7 +15,7 @@ import { parseFromValuesOrFunc } from '../../utils/utils';
15
15
 
16
16
  const defaultRowsPerPage = [5, 10, 15, 20, 25, 30, 50, 100];
17
17
 
18
- interface Props<TData extends MRT_RowData>
18
+ export interface MRT_TablePaginationProps<TData extends MRT_RowData>
19
19
  extends Partial<
20
20
  PaginationProps & {
21
21
  SelectProps?: Partial<SelectProps>;
@@ -32,7 +32,7 @@ export const MRT_TablePagination = <TData extends MRT_RowData>({
32
32
  position = 'bottom',
33
33
  table,
34
34
  ...rest
35
- }: Props<TData>) => {
35
+ }: MRT_TablePaginationProps<TData>) => {
36
36
  const theme = useTheme();
37
37
  const isMobile = useMediaQuery('(max-width: 720px)');
38
38
 
@@ -2,6 +2,7 @@ import { Fragment, useMemo } from 'react';
2
2
  import Alert, { type AlertProps } from '@mui/material/Alert';
3
3
  import AlertTitle from '@mui/material/AlertTitle';
4
4
  import Box from '@mui/material/Box';
5
+ import Button from '@mui/material/Button';
5
6
  import Chip from '@mui/material/Chip';
6
7
  import Collapse from '@mui/material/Collapse';
7
8
  import Stack from '@mui/material/Stack';
@@ -9,7 +10,8 @@ import { type MRT_RowData, type MRT_TableInstance } from '../../types';
9
10
  import { parseFromValuesOrFunc } from '../../utils/utils';
10
11
  import { MRT_SelectCheckbox } from '../inputs/MRT_SelectCheckbox';
11
12
 
12
- interface Props<TData extends MRT_RowData> extends AlertProps {
13
+ export interface MRT_ToolbarAlertBannerProps<TData extends MRT_RowData>
14
+ extends AlertProps {
13
15
  stackAlertBanner?: boolean;
14
16
  table: MRT_TableInstance<TData>;
15
17
  }
@@ -18,21 +20,23 @@ export const MRT_ToolbarAlertBanner = <TData extends MRT_RowData>({
18
20
  stackAlertBanner,
19
21
  table,
20
22
  ...rest
21
- }: Props<TData>) => {
23
+ }: MRT_ToolbarAlertBannerProps<TData>) => {
22
24
  const {
25
+ getFilteredSelectedRowModel,
23
26
  getPrePaginationRowModel,
24
27
  getState,
25
28
  options: {
26
29
  enableRowSelection,
27
30
  enableSelectAll,
28
31
  localization,
32
+ manualPagination,
29
33
  muiToolbarAlertBannerChipProps,
30
34
  muiToolbarAlertBannerProps,
31
35
  positionToolbarAlertBanner,
32
36
  renderToolbarAlertBannerContent,
33
37
  rowCount,
34
38
  },
35
- refs: { tablePaperRef },
39
+ refs: { lastSelectedRowId, tablePaperRef },
36
40
  } = table;
37
41
  const { density, grouping, rowSelection, showAlertBanner } = getState();
38
42
 
@@ -47,20 +51,33 @@ export const MRT_ToolbarAlertBanner = <TData extends MRT_RowData>({
47
51
  table,
48
52
  });
49
53
 
54
+ const totalRowCount = rowCount ?? getPrePaginationRowModel().rows.length;
55
+
50
56
  const selectedRowCount = useMemo(
51
- () => Object.values(rowSelection).filter(Boolean).length,
52
- [rowSelection],
57
+ () =>
58
+ manualPagination
59
+ ? Object.values(rowSelection).filter(Boolean).length
60
+ : getFilteredSelectedRowModel().rows.length,
61
+ [rowSelection, totalRowCount, manualPagination],
53
62
  );
54
-
55
63
  const selectedAlert =
56
- selectedRowCount > 0
57
- ? localization.selectedCountOfRowCountRowsSelected
64
+ selectedRowCount > 0 ? (
65
+ <Stack alignItems="center" direction="row" gap="16px">
66
+ {localization.selectedCountOfRowCountRowsSelected
58
67
  ?.replace('{selectedCount}', selectedRowCount.toLocaleString())
59
- ?.replace(
60
- '{rowCount}',
61
- (rowCount ?? getPrePaginationRowModel().rows.length).toString(),
62
- )
63
- : null;
68
+ ?.replace('{rowCount}', totalRowCount.toString())}
69
+ <Button
70
+ onClick={() => {
71
+ table.toggleAllRowsSelected(false);
72
+ lastSelectedRowId.current = null;
73
+ }}
74
+ size="small"
75
+ sx={{ p: '2px' }}
76
+ >
77
+ {localization.clearSelection}
78
+ </Button>
79
+ </Stack>
80
+ ) : null;
64
81
 
65
82
  const groupedAlert =
66
83
  grouping.length > 0 ? (
@@ -6,14 +6,15 @@ import { alpha } from '@mui/material/styles';
6
6
  import { type MRT_RowData, type MRT_TableInstance } from '../../types';
7
7
  import { parseFromValuesOrFunc } from '../../utils/utils';
8
8
 
9
- interface Props<TData extends MRT_RowData> extends BoxProps {
9
+ export interface MRT_ToolbarDropZoneProps<TData extends MRT_RowData>
10
+ extends BoxProps {
10
11
  table: MRT_TableInstance<TData>;
11
12
  }
12
13
 
13
14
  export const MRT_ToolbarDropZone = <TData extends MRT_RowData>({
14
15
  table,
15
16
  ...rest
16
- }: Props<TData>) => {
17
+ }: MRT_ToolbarDropZoneProps<TData>) => {
17
18
  const {
18
19
  getState,
19
20
  options: { enableGrouping, localization },
@@ -7,14 +7,15 @@ import { MRT_ToggleFiltersButton } from '../buttons/MRT_ToggleFiltersButton';
7
7
  import { MRT_ToggleFullScreenButton } from '../buttons/MRT_ToggleFullScreenButton';
8
8
  import { MRT_ToggleGlobalFilterButton } from '../buttons/MRT_ToggleGlobalFilterButton';
9
9
 
10
- interface Props<TData extends MRT_RowData> extends BoxProps {
10
+ export interface MRT_ToolbarInternalButtonsProps<TData extends MRT_RowData>
11
+ extends BoxProps {
11
12
  table: MRT_TableInstance<TData>;
12
13
  }
13
14
 
14
15
  export const MRT_ToolbarInternalButtons = <TData extends MRT_RowData>({
15
16
  table,
16
17
  ...rest
17
- }: Props<TData>) => {
18
+ }: MRT_ToolbarInternalButtonsProps<TData>) => {
18
19
  const {
19
20
  options: {
20
21
  columnFilterDisplayMode,
@@ -10,13 +10,13 @@ import { getCommonToolbarStyles } from '../../utils/style.utils';
10
10
  import { parseFromValuesOrFunc } from '../../utils/utils';
11
11
  import { MRT_GlobalFilterTextField } from '../inputs/MRT_GlobalFilterTextField';
12
12
 
13
- interface Props<TData extends MRT_RowData> {
13
+ export interface MRT_TopToolbarProps<TData extends MRT_RowData> {
14
14
  table: MRT_TableInstance<TData>;
15
15
  }
16
16
 
17
17
  export const MRT_TopToolbar = <TData extends MRT_RowData>({
18
18
  table,
19
- }: Props<TData>) => {
19
+ }: MRT_TopToolbarProps<TData>) => {
20
20
  const {
21
21
  getState,
22
22
  options: {
@@ -31,7 +31,6 @@ export const useMRT_Effects = <TData extends MRT_RowData>(
31
31
  const totalRowCount = rowCount ?? getPrePaginationRowModel().rows.length;
32
32
 
33
33
  const rerender = useReducer(() => ({}), {})[1];
34
- const isMounted = useRef(false);
35
34
  const initialBodyHeight = useRef<string>();
36
35
  const previousTop = useRef<number>();
37
36
 
@@ -41,11 +40,12 @@ export const useMRT_Effects = <TData extends MRT_RowData>(
41
40
  }
42
41
  }, []);
43
42
 
43
+ //hide scrollbars when table is in full screen mode, preserve body scroll position after full screen exit
44
44
  useEffect(() => {
45
- if (isMounted && typeof window !== 'undefined') {
45
+ if (typeof window !== 'undefined') {
46
46
  if (isFullScreen) {
47
47
  previousTop.current = document.body.getBoundingClientRect().top; //save scroll position
48
- document.body.style.height = '100vh'; //hide page scrollbars when table is in full screen mode
48
+ document.body.style.height = '100dvh'; //hide page scrollbars when table is in full screen mode
49
49
  } else {
50
50
  document.body.style.height = initialBodyHeight.current as string;
51
51
  if (!previousTop.current) return;
@@ -56,9 +56,15 @@ export const useMRT_Effects = <TData extends MRT_RowData>(
56
56
  });
57
57
  }
58
58
  }
59
- isMounted.current = true;
60
59
  }, [isFullScreen]);
61
60
 
61
+ //recalculate column order when columns change or features are toggled on/off
62
+ useEffect(() => {
63
+ if (totalColumnCount !== columnOrder.length) {
64
+ table.setColumnOrder(getDefaultColumnOrderIds(table.options));
65
+ }
66
+ }, [totalColumnCount]);
67
+
62
68
  //if page index is out of bounds, set it to the last page
63
69
  useEffect(() => {
64
70
  if (!enablePagination || isLoading || showSkeletons) return;
@@ -86,6 +92,7 @@ export const useMRT_Effects = <TData extends MRT_RowData>(
86
92
  }
87
93
  }, [globalFilter]);
88
94
 
95
+ //fix pinned row top style when density changes
89
96
  useEffect(() => {
90
97
  if (enableRowPinning && getIsSomeRowsPinned()) {
91
98
  setTimeout(() => {
@@ -93,11 +100,4 @@ export const useMRT_Effects = <TData extends MRT_RowData>(
93
100
  }, 150);
94
101
  }
95
102
  }, [density]);
96
-
97
- //recalculate column order when columns change or features are toggled on/off
98
- useEffect(() => {
99
- if (totalColumnCount !== columnOrder.length) {
100
- table.setColumnOrder(getDefaultColumnOrderIds(table.options));
101
- }
102
- }, [totalColumnCount]);
103
103
  };
@@ -1,36 +1,19 @@
1
1
  import { useMemo } from 'react';
2
- import { rankGlobalFuzzy } from '../fns/sortingFns';
3
2
  import {
4
3
  type MRT_Row,
5
4
  type MRT_RowData,
6
5
  type MRT_TableInstance,
7
6
  } from '../types';
8
- import { getCanRankRows } from '../utils/row.utils';
7
+ import { getMRT_Rows } from '../utils/row.utils';
9
8
 
10
9
  export const useMRT_Rows = <TData extends MRT_RowData>(
11
10
  table: MRT_TableInstance<TData>,
12
11
  pinnedRowIds: string[] = [],
13
12
  ): MRT_Row<TData>[] => {
14
13
  const {
15
- getBottomRows,
16
- getCenterRows,
17
- getPrePaginationRowModel,
18
14
  getRowModel,
19
15
  getState,
20
- getTopRows,
21
- options: {
22
- createDisplayMode,
23
- enableGlobalFilterRankedResults,
24
- enablePagination,
25
- enableRowPinning,
26
- manualExpanding,
27
- manualFiltering,
28
- manualGrouping,
29
- manualPagination,
30
- manualSorting,
31
- positionCreatingRow,
32
- rowPinningDisplayMode,
33
- },
16
+ options: { data, enableGlobalFilterRankedResults, positionCreatingRow },
34
17
  } = table;
35
18
  const {
36
19
  creatingRow,
@@ -41,73 +24,22 @@ export const useMRT_Rows = <TData extends MRT_RowData>(
41
24
  sorting,
42
25
  } = getState();
43
26
 
44
- const shouldRankRows = useMemo(
45
- () =>
46
- getCanRankRows(table) &&
47
- !Object.values(sorting).some(Boolean) &&
48
- globalFilter,
27
+ const rows = useMemo(
28
+ () => getMRT_Rows(table, pinnedRowIds),
49
29
  [
30
+ creatingRow,
31
+ data,
50
32
  enableGlobalFilterRankedResults,
51
33
  expanded,
34
+ getRowModel().rows,
52
35
  globalFilter,
53
- manualExpanding,
54
- manualFiltering,
55
- manualGrouping,
56
- manualSorting,
36
+ pagination.pageIndex,
37
+ pagination.pageSize,
38
+ positionCreatingRow,
39
+ rowPinning,
57
40
  sorting,
58
41
  ],
59
42
  );
60
43
 
61
- const rows = useMemo(() => {
62
- let rows: MRT_Row<TData>[] = [];
63
- if (!shouldRankRows) {
64
- rows =
65
- !enableRowPinning || rowPinningDisplayMode?.includes('sticky')
66
- ? getRowModel().rows
67
- : getCenterRows();
68
- } else {
69
- rows = getPrePaginationRowModel().rows.sort((a, b) =>
70
- rankGlobalFuzzy(a, b),
71
- );
72
- if (enablePagination && !manualPagination) {
73
- const start = pagination.pageIndex * pagination.pageSize;
74
- rows = rows.slice(start, start + pagination.pageSize);
75
- }
76
- }
77
- if (enableRowPinning && rowPinningDisplayMode?.includes('sticky')) {
78
- rows = [
79
- ...getTopRows().filter((row) => !pinnedRowIds.includes(row.id)),
80
- ...rows,
81
- ...getBottomRows().filter((row) => !pinnedRowIds.includes(row.id)),
82
- ];
83
- }
84
- if (
85
- positionCreatingRow !== undefined &&
86
- creatingRow &&
87
- createDisplayMode === 'row'
88
- ) {
89
- const creatingRowIndex = !isNaN(+positionCreatingRow)
90
- ? +positionCreatingRow
91
- : positionCreatingRow === 'top'
92
- ? 0
93
- : rows.length;
94
- rows = [
95
- ...rows.slice(0, creatingRowIndex),
96
- creatingRow,
97
- ...rows.slice(creatingRowIndex),
98
- ];
99
- }
100
-
101
- return rows;
102
- }, [
103
- creatingRow,
104
- pagination.pageIndex,
105
- pagination.pageSize,
106
- positionCreatingRow,
107
- rowPinning,
108
- shouldRankRows ? getPrePaginationRowModel().rows : getRowModel().rows,
109
- shouldRankRows,
110
- ]);
111
-
112
44
  return rows;
113
45
  };
@@ -53,6 +53,7 @@ import { useMRT_Effects } from './useMRT_Effects';
53
53
  export const useMRT_TableInstance = <TData extends MRT_RowData>(
54
54
  definedTableOptions: MRT_DefinedTableOptions<TData>,
55
55
  ): MRT_TableInstance<TData> => {
56
+ const lastSelectedRowId = useRef<null | string>(null);
56
57
  const actionCellRef = useRef<HTMLTableCellElement>(null);
57
58
  const bottomToolbarRef = useRef<HTMLDivElement>(null);
58
59
  const editInputRefs = useRef<Record<string, HTMLInputElement>>({});
@@ -261,6 +262,7 @@ export const useMRT_TableInstance = <TData extends MRT_RowData>(
261
262
  bottomToolbarRef,
262
263
  editInputRefs,
263
264
  filterInputRefs,
265
+ lastSelectedRowId,
264
266
  searchInputRef,
265
267
  tableContainerRef,
266
268
  tableFooterRef,
@@ -56,6 +56,7 @@ export const useMRT_TableOptions: <TData extends MRT_RowData>(
56
56
  defaultColumn,
57
57
  defaultDisplayColumn,
58
58
  editDisplayMode = 'modal',
59
+ enableBatchRowSelection = true,
59
60
  enableBottomToolbar = true,
60
61
  enableColumnActions = true,
61
62
  enableColumnFilters = true,
@@ -180,6 +181,7 @@ export const useMRT_TableOptions: <TData extends MRT_RowData>(
180
181
  defaultColumn,
181
182
  defaultDisplayColumn,
182
183
  editDisplayMode,
184
+ enableBatchRowSelection,
183
185
  enableBottomToolbar,
184
186
  enableColumnActions,
185
187
  enableColumnFilters,
package/src/locales/ar.ts CHANGED
@@ -8,6 +8,7 @@ export const MRT_Localization_AR: MRT_Localization = {
8
8
  changeSearchMode: 'تغيير وضع البحث',
9
9
  clearFilter: 'إعادة تعين المرشح',
10
10
  clearSearch: 'إعادة تعيين البحث',
11
+ clearSelection: 'إعادة تعيين التحديد',
11
12
  clearSort: 'إعادة تعيين الفرز',
12
13
  clickToCopy: 'انقر للنسخ',
13
14
  copy: 'نسخ',
package/src/locales/az.ts CHANGED
@@ -8,6 +8,7 @@ export const MRT_Localization_AZ: MRT_Localization = {
8
8
  changeSearchMode: 'Axtarış Rejimini Dəyiş',
9
9
  clearFilter: 'Filteri təmizlə',
10
10
  clearSearch: 'Axtarışı təmizlə',
11
+ clearSelection: 'Seçimi təmizlə',
11
12
  clearSort: 'Sıralamanı sıfırla',
12
13
  clickToCopy: 'Köçür',
13
14
  copy: 'Köçür',
package/src/locales/bg.ts CHANGED
@@ -8,6 +8,7 @@ export const MRT_Localization_BG: MRT_Localization = {
8
8
  changeSearchMode: 'Промяна на режима на търсене',
9
9
  clearFilter: 'Изчисти филтъра',
10
10
  clearSearch: 'Изчисти търсенето',
11
+ clearSelection: 'Изчисти избора',
11
12
  clearSort: 'Изчисти сортирането',
12
13
  clickToCopy: 'Кликни, за да копираш',
13
14
  copy: 'Копирай',
package/src/locales/cs.ts CHANGED
@@ -8,6 +8,7 @@ export const MRT_Localization_CS: MRT_Localization = {
8
8
  changeSearchMode: 'Změnit režim hledání',
9
9
  clearFilter: 'Vyčistit filtr',
10
10
  clearSearch: 'Vyčistit hledání',
11
+ clearSelection: 'Vyčistit výběr',
11
12
  clearSort: 'vyčistit řazení',
12
13
  clickToCopy: 'Kliknutím zkopírovat',
13
14
  copy: 'Kopírovat',
package/src/locales/da.ts CHANGED
@@ -8,6 +8,7 @@ export const MRT_Localization_DA: MRT_Localization = {
8
8
  changeSearchMode: 'Skift søgetilstand',
9
9
  clearFilter: 'Ryd filter',
10
10
  clearSearch: 'Ryd søgning',
11
+ clearSelection: 'Ryd valg',
11
12
  clearSort: 'Ryd sortering',
12
13
  clickToCopy: 'Tryk for at kopiere',
13
14
  copy: 'Kopier',
package/src/locales/de.ts CHANGED
@@ -8,6 +8,7 @@ export const MRT_Localization_DE: MRT_Localization = {
8
8
  changeSearchMode: 'Suchmodus ändern',
9
9
  clearFilter: 'Filter zurücksetzen',
10
10
  clearSearch: 'Suche zurücksetzen',
11
+ clearSelection: 'Auswahl zurücksetzen',
11
12
  clearSort: 'Sortierung zurücksetzen',
12
13
  clickToCopy: 'Kopieren',
13
14
  copy: 'Kopieren',