material-react-table 2.9.2 → 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 (199) hide show
  1. package/README.md +3 -2
  2. package/dist/index.d.ts +222 -152
  3. package/dist/index.esm.js +906 -769
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/index.js +910 -768
  6. package/dist/index.js.map +1 -1
  7. package/locales/ar/index.esm.js +2 -0
  8. package/locales/ar/index.js +2 -0
  9. package/locales/az/index.esm.js +2 -0
  10. package/locales/az/index.js +2 -0
  11. package/locales/bg/index.esm.js +2 -0
  12. package/locales/bg/index.js +2 -0
  13. package/locales/cs/index.esm.js +2 -0
  14. package/locales/cs/index.js +2 -0
  15. package/locales/da/index.esm.js +2 -0
  16. package/locales/da/index.js +2 -0
  17. package/locales/de/index.esm.js +2 -0
  18. package/locales/de/index.js +2 -0
  19. package/locales/en/index.esm.js +2 -0
  20. package/locales/en/index.js +2 -0
  21. package/locales/es/index.esm.js +2 -0
  22. package/locales/es/index.js +2 -0
  23. package/locales/et/index.esm.js +2 -0
  24. package/locales/et/index.js +2 -0
  25. package/locales/fa/index.esm.js +2 -0
  26. package/locales/fa/index.js +2 -0
  27. package/locales/fi/index.esm.js +2 -0
  28. package/locales/fi/index.js +2 -0
  29. package/locales/fr/index.esm.js +2 -0
  30. package/locales/fr/index.js +2 -0
  31. package/locales/he/index.esm.js +2 -0
  32. package/locales/he/index.js +2 -0
  33. package/locales/hu/index.esm.js +2 -0
  34. package/locales/hu/index.js +2 -0
  35. package/locales/hy/index.esm.js +2 -0
  36. package/locales/hy/index.js +2 -0
  37. package/locales/id/index.esm.js +2 -0
  38. package/locales/id/index.js +2 -0
  39. package/locales/it/index.esm.js +2 -0
  40. package/locales/it/index.js +2 -0
  41. package/locales/ja/index.esm.js +2 -0
  42. package/locales/ja/index.js +2 -0
  43. package/locales/ko/index.esm.js +2 -0
  44. package/locales/ko/index.js +2 -0
  45. package/locales/nl/index.esm.js +2 -0
  46. package/locales/nl/index.js +2 -0
  47. package/locales/no/index.esm.js +2 -0
  48. package/locales/no/index.js +2 -0
  49. package/locales/np/index.esm.js +2 -0
  50. package/locales/np/index.js +2 -0
  51. package/locales/pl/index.esm.js +2 -0
  52. package/locales/pl/index.js +2 -0
  53. package/locales/pt/index.esm.js +2 -0
  54. package/locales/pt/index.js +2 -0
  55. package/locales/pt-BR/index.esm.js +2 -0
  56. package/locales/pt-BR/index.js +2 -0
  57. package/locales/ro/index.esm.js +2 -0
  58. package/locales/ro/index.js +2 -0
  59. package/locales/ru/index.esm.js +2 -0
  60. package/locales/ru/index.js +2 -0
  61. package/locales/sk/index.esm.js +2 -0
  62. package/locales/sk/index.js +2 -0
  63. package/locales/sr-Cyrl-RS/index.esm.js +2 -0
  64. package/locales/sr-Cyrl-RS/index.js +2 -0
  65. package/locales/sr-Latn-RS/index.esm.js +2 -0
  66. package/locales/sr-Latn-RS/index.js +2 -0
  67. package/locales/sv/index.esm.js +2 -0
  68. package/locales/sv/index.js +2 -0
  69. package/locales/tr/index.esm.js +2 -0
  70. package/locales/tr/index.js +2 -0
  71. package/locales/uk/index.esm.js +2 -0
  72. package/locales/uk/index.js +2 -0
  73. package/locales/vi/index.esm.js +2 -0
  74. package/locales/vi/index.js +2 -0
  75. package/locales/zh-Hans/index.esm.js +2 -0
  76. package/locales/zh-Hans/index.js +2 -0
  77. package/locales/zh-Hant/index.esm.js +2 -0
  78. package/locales/zh-Hant/index.js +2 -0
  79. package/package.json +20 -20
  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 +45 -34
  83. package/src/components/body/MRT_TableBodyCellValue.tsx +5 -2
  84. package/src/components/body/MRT_TableBodyRow.tsx +13 -12
  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 +4 -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 +9 -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 +4 -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 +4 -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 +61 -0
  121. package/src/components/menus/MRT_CellActionMenu.tsx +109 -0
  122. package/src/components/menus/MRT_ColumnActionMenu.tsx +92 -172
  123. package/src/components/menus/MRT_FilterOptionMenu.tsx +9 -16
  124. package/src/components/menus/MRT_RowActionMenu.tsx +10 -17
  125. package/src/components/menus/MRT_ShowHideColumnsMenu.tsx +11 -3
  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 +7 -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/display-columns/getMRT_RowActionsColumnDef.tsx +1 -8
  140. package/src/hooks/display-columns/getMRT_RowDragColumnDef.tsx +1 -8
  141. package/src/hooks/display-columns/getMRT_RowExpandColumnDef.tsx +1 -8
  142. package/src/hooks/display-columns/getMRT_RowNumbersColumnDef.tsx +1 -8
  143. package/src/hooks/display-columns/getMRT_RowPinningColumnDef.tsx +1 -8
  144. package/src/hooks/display-columns/getMRT_RowSelectColumnDef.tsx +1 -8
  145. package/src/hooks/display-columns/getMRT_RowSpacerColumnDef.tsx +1 -8
  146. package/src/hooks/useMRT_Effects.ts +14 -4
  147. package/src/hooks/useMRT_Rows.ts +11 -79
  148. package/src/hooks/useMRT_TableInstance.ts +114 -59
  149. package/src/hooks/useMRT_TableOptions.ts +2 -0
  150. package/src/icons.ts +2 -0
  151. package/src/index.ts +2 -0
  152. package/src/locales/ar.ts +2 -0
  153. package/src/locales/az.ts +2 -0
  154. package/src/locales/bg.ts +2 -0
  155. package/src/locales/cs.ts +2 -0
  156. package/src/locales/da.ts +2 -0
  157. package/src/locales/de.ts +2 -0
  158. package/src/locales/en.ts +2 -0
  159. package/src/locales/es.ts +2 -0
  160. package/src/locales/et.ts +2 -0
  161. package/src/locales/fa.ts +2 -0
  162. package/src/locales/fi.ts +2 -0
  163. package/src/locales/fr.ts +2 -0
  164. package/src/locales/he.ts +2 -0
  165. package/src/locales/hu.ts +2 -0
  166. package/src/locales/hy.ts +2 -0
  167. package/src/locales/id.ts +2 -0
  168. package/src/locales/it.ts +2 -0
  169. package/src/locales/ja.ts +2 -0
  170. package/src/locales/ko.ts +2 -0
  171. package/src/locales/nl.ts +2 -0
  172. package/src/locales/no.ts +2 -0
  173. package/src/locales/np.ts +2 -0
  174. package/src/locales/pl.ts +2 -0
  175. package/src/locales/pt-BR.ts +2 -0
  176. package/src/locales/pt.ts +2 -0
  177. package/src/locales/ro.ts +2 -0
  178. package/src/locales/ru.ts +2 -0
  179. package/src/locales/sk.ts +2 -0
  180. package/src/locales/sr-Cyrl-RS.ts +2 -0
  181. package/src/locales/sr-Latn-RS.ts +2 -0
  182. package/src/locales/sv.ts +2 -0
  183. package/src/locales/tr.ts +2 -0
  184. package/src/locales/uk.ts +2 -0
  185. package/src/locales/vi.ts +2 -0
  186. package/src/locales/zh-Hans.ts +2 -0
  187. package/src/locales/zh-Hant.ts +2 -0
  188. package/src/types.ts +51 -13
  189. package/src/utils/cell.utils.ts +50 -0
  190. package/src/utils/column.utils.ts +4 -6
  191. package/src/utils/displayColumn.utils.ts +39 -21
  192. package/src/utils/row.utils.ts +179 -21
  193. package/locales/am/index.d.ts +0 -3
  194. package/locales/am/index.esm.d.ts +0 -3
  195. package/locales/am/index.esm.js +0 -93
  196. package/locales/am/index.js +0 -97
  197. package/locales/am/package.json +0 -6
  198. package/src/hooks/display-columns/getMRT_DisplayColumns.tsx +0 -26
  199. package/src/locales/am.ts +0 -94
@@ -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: {
@@ -4,18 +4,11 @@ import {
4
4
  type MRT_RowData,
5
5
  type MRT_StatefulTableOptions,
6
6
  } from '../../types';
7
- import {
8
- defaultDisplayColumnProps,
9
- showRowActionsColumn,
10
- } from '../../utils/displayColumn.utils';
7
+ import { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';
11
8
 
12
9
  export const getMRT_RowActionsColumnDef = <TData extends MRT_RowData>(
13
10
  tableOptions: MRT_StatefulTableOptions<TData>,
14
11
  ): MRT_ColumnDef<TData> | null => {
15
- if (!showRowActionsColumn(tableOptions)) {
16
- return null;
17
- }
18
-
19
12
  return {
20
13
  Cell: ({ cell, row, staticRowIndex, table }) => (
21
14
  <MRT_ToggleRowActionMenuButton
@@ -5,18 +5,11 @@ import {
5
5
  type MRT_RowData,
6
6
  type MRT_StatefulTableOptions,
7
7
  } from '../../types';
8
- import {
9
- defaultDisplayColumnProps,
10
- showRowDragColumn,
11
- } from '../../utils/displayColumn.utils';
8
+ import { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';
12
9
 
13
10
  export const getMRT_RowDragColumnDef = <TData extends MRT_RowData>(
14
11
  tableOptions: MRT_StatefulTableOptions<TData>,
15
12
  ): MRT_ColumnDef<TData> | null => {
16
- if (!showRowDragColumn(tableOptions)) {
17
- return null;
18
- }
19
-
20
13
  return {
21
14
  Cell: ({ row, rowRef, table }) => (
22
15
  <MRT_TableBodyRowGrabHandle
@@ -8,19 +8,12 @@ import {
8
8
  type MRT_RowData,
9
9
  type MRT_StatefulTableOptions,
10
10
  } from '../../types';
11
- import {
12
- defaultDisplayColumnProps,
13
- showRowExpandColumn,
14
- } from '../../utils/displayColumn.utils';
11
+ import { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';
15
12
  import { getCommonTooltipProps } from '../../utils/style.utils';
16
13
 
17
14
  export const getMRT_RowExpandColumnDef = <TData extends MRT_RowData>(
18
15
  tableOptions: MRT_StatefulTableOptions<TData>,
19
16
  ): MRT_ColumnDef<TData> | null => {
20
- if (!showRowExpandColumn(tableOptions)) {
21
- return null;
22
- }
23
-
24
17
  const {
25
18
  defaultColumn,
26
19
  enableExpandAll,
@@ -3,18 +3,11 @@ import {
3
3
  type MRT_RowData,
4
4
  type MRT_StatefulTableOptions,
5
5
  } from '../../types';
6
- import {
7
- defaultDisplayColumnProps,
8
- showRowNumbersColumn,
9
- } from '../../utils/displayColumn.utils';
6
+ import { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';
10
7
 
11
8
  export const getMRT_RowNumbersColumnDef = <TData extends MRT_RowData>(
12
9
  tableOptions: MRT_StatefulTableOptions<TData>,
13
10
  ): MRT_ColumnDef<TData> | null => {
14
- if (!showRowNumbersColumn(tableOptions)) {
15
- return null;
16
- }
17
-
18
11
  const { localization, rowNumberDisplayMode } = tableOptions;
19
12
  const {
20
13
  pagination: { pageIndex, pageSize },
@@ -4,18 +4,11 @@ import {
4
4
  type MRT_RowData,
5
5
  type MRT_StatefulTableOptions,
6
6
  } from '../../types';
7
- import {
8
- defaultDisplayColumnProps,
9
- showRowPinningColumn,
10
- } from '../../utils/displayColumn.utils';
7
+ import { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';
11
8
 
12
9
  export const getMRT_RowPinningColumnDef = <TData extends MRT_RowData>(
13
10
  tableOptions: MRT_StatefulTableOptions<TData>,
14
11
  ): MRT_ColumnDef<TData> | null => {
15
- if (!showRowPinningColumn(tableOptions)) {
16
- return null;
17
- }
18
-
19
12
  return {
20
13
  Cell: ({ row, table }) => (
21
14
  <MRT_TableBodyRowPinButton row={row} table={table} />
@@ -4,18 +4,11 @@ import {
4
4
  type MRT_RowData,
5
5
  type MRT_StatefulTableOptions,
6
6
  } from '../../types';
7
- import {
8
- defaultDisplayColumnProps,
9
- showRowSelectionColumn,
10
- } from '../../utils/displayColumn.utils';
7
+ import { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';
11
8
 
12
9
  export const getMRT_RowSelectColumnDef = <TData extends MRT_RowData>(
13
10
  tableOptions: MRT_StatefulTableOptions<TData>,
14
11
  ): MRT_ColumnDef<TData> | null => {
15
- if (!showRowSelectionColumn(tableOptions)) {
16
- return null;
17
- }
18
-
19
12
  const { enableMultiRowSelection, enableSelectAll } = tableOptions;
20
13
 
21
14
  return {
@@ -4,10 +4,7 @@ import {
4
4
  type MRT_RowData,
5
5
  type MRT_StatefulTableOptions,
6
6
  } from '../../types';
7
- import {
8
- defaultDisplayColumnProps,
9
- showRowSpacerColumn,
10
- } from '../../utils/displayColumn.utils';
7
+ import { defaultDisplayColumnProps } from '../../utils/displayColumn.utils';
11
8
 
12
9
  const blankColProps = {
13
10
  children: null,
@@ -21,10 +18,6 @@ const blankColProps = {
21
18
  export const getMRT_RowSpacerColumnDef = <TData extends MRT_RowData>(
22
19
  tableOptions: MRT_StatefulTableOptions<TData>,
23
20
  ): MRT_ColumnDef<TData> | null => {
24
- if (!showRowSpacerColumn(tableOptions)) {
25
- return null;
26
- }
27
-
28
21
  return {
29
22
  ...defaultDisplayColumnProps({
30
23
  id: 'mrt-row-spacer',
@@ -4,6 +4,7 @@ import {
4
4
  type MRT_SortingState,
5
5
  type MRT_TableInstance,
6
6
  } from '../types';
7
+ import { getDefaultColumnOrderIds } from '../utils/displayColumn.utils';
7
8
  import { getCanRankRows } from '../utils/row.utils';
8
9
 
9
10
  export const useMRT_Effects = <TData extends MRT_RowData>(
@@ -16,6 +17,7 @@ export const useMRT_Effects = <TData extends MRT_RowData>(
16
17
  options: { enablePagination, enableRowPinning, rowCount },
17
18
  } = table;
18
19
  const {
20
+ columnOrder,
19
21
  density,
20
22
  globalFilter,
21
23
  isFullScreen,
@@ -25,10 +27,10 @@ export const useMRT_Effects = <TData extends MRT_RowData>(
25
27
  sorting,
26
28
  } = getState();
27
29
 
30
+ const totalColumnCount = table.options.columns.length;
28
31
  const totalRowCount = rowCount ?? getPrePaginationRowModel().rows.length;
29
32
 
30
33
  const rerender = useReducer(() => ({}), {})[1];
31
- const isMounted = useRef(false);
32
34
  const initialBodyHeight = useRef<string>();
33
35
  const previousTop = useRef<number>();
34
36
 
@@ -38,11 +40,12 @@ export const useMRT_Effects = <TData extends MRT_RowData>(
38
40
  }
39
41
  }, []);
40
42
 
43
+ //hide scrollbars when table is in full screen mode, preserve body scroll position after full screen exit
41
44
  useEffect(() => {
42
- if (isMounted && typeof window !== 'undefined') {
45
+ if (typeof window !== 'undefined') {
43
46
  if (isFullScreen) {
44
47
  previousTop.current = document.body.getBoundingClientRect().top; //save scroll position
45
- 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
46
49
  } else {
47
50
  document.body.style.height = initialBodyHeight.current as string;
48
51
  if (!previousTop.current) return;
@@ -53,9 +56,15 @@ export const useMRT_Effects = <TData extends MRT_RowData>(
53
56
  });
54
57
  }
55
58
  }
56
- isMounted.current = true;
57
59
  }, [isFullScreen]);
58
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
+
59
68
  //if page index is out of bounds, set it to the last page
60
69
  useEffect(() => {
61
70
  if (!enablePagination || isLoading || showSkeletons) return;
@@ -83,6 +92,7 @@ export const useMRT_Effects = <TData extends MRT_RowData>(
83
92
  }
84
93
  }, [globalFilter]);
85
94
 
95
+ //fix pinned row top style when density changes
86
96
  useEffect(() => {
87
97
  if (enableRowPinning && getIsSomeRowsPinned()) {
88
98
  setTimeout(() => {
@@ -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
  };