material-react-table 0.8.15 → 0.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +1 -1
  2. package/dist/MaterialReactTable.d.ts +38 -36
  3. package/dist/body/MRT_TableBody.d.ts +2 -1
  4. package/dist/material-react-table.cjs.development.js +630 -86
  5. package/dist/material-react-table.cjs.development.js.map +1 -1
  6. package/dist/material-react-table.cjs.production.min.js +1 -1
  7. package/dist/material-react-table.cjs.production.min.js.map +1 -1
  8. package/dist/material-react-table.esm.js +137 -84
  9. package/dist/material-react-table.esm.js.map +1 -1
  10. package/dist/table/MRT_Table.d.ts +2 -1
  11. package/dist/table/MRT_TableRoot.d.ts +1 -0
  12. package/dist/toolbar/MRT_LinearProgressBar.d.ts +1 -0
  13. package/dist/utils.d.ts +1 -1
  14. package/package.json +11 -10
  15. package/src/MaterialReactTable.tsx +51 -47
  16. package/src/body/MRT_TableBody.tsx +53 -14
  17. package/src/body/MRT_TableBodyCell.tsx +13 -9
  18. package/src/body/MRT_TableBodyRow.tsx +4 -3
  19. package/src/body/MRT_TableDetailPanel.tsx +2 -2
  20. package/src/buttons/MRT_EditActionButtons.tsx +2 -2
  21. package/src/buttons/MRT_ExpandButton.tsx +2 -2
  22. package/src/buttons/MRT_FullScreenToggleButton.tsx +2 -2
  23. package/src/buttons/MRT_ToggleDensePaddingButton.tsx +2 -2
  24. package/src/buttons/MRT_ToggleFiltersButton.tsx +2 -2
  25. package/src/buttons/MRT_ToggleGlobalFilterButton.tsx +4 -4
  26. package/src/head/MRT_TableHeadCellFilterLabel.tsx +1 -0
  27. package/src/inputs/MRT_EditCellTextField.tsx +8 -8
  28. package/src/inputs/MRT_FilterTextField.tsx +2 -2
  29. package/src/inputs/MRT_SearchTextField.tsx +4 -4
  30. package/src/inputs/MRT_SelectCheckbox.tsx +4 -4
  31. package/src/menus/MRT_ColumnActionMenu.tsx +2 -2
  32. package/src/menus/MRT_ShowHideColumnsMenu.tsx +1 -1
  33. package/src/menus/MRT_ShowHideColumnsMenuItems.tsx +2 -2
  34. package/src/table/MRT_Table.tsx +10 -3
  35. package/src/table/MRT_TableContainer.tsx +10 -4
  36. package/src/table/MRT_TableRoot.tsx +11 -11
  37. package/src/toolbar/MRT_LinearProgressBar.tsx +17 -2
  38. package/src/toolbar/MRT_ToolbarBottom.tsx +4 -4
  39. package/src/toolbar/MRT_ToolbarInternalButtons.tsx +2 -1
  40. package/src/toolbar/MRT_ToolbarTop.tsx +13 -6
  41. package/src/utils.ts +1 -1
@@ -14,10 +14,10 @@ export const MRT_ToggleGlobalFilterButton: FC<Props> = ({
14
14
  getState,
15
15
  options: {
16
16
  icons: { SearchIcon, SearchOffIcon },
17
- idPrefix,
17
+ tableId,
18
18
  localization,
19
19
  muiSearchTextFieldProps,
20
- onToggleShowGlobalFilter,
20
+ onMrtToggleShowGlobalFilter,
21
21
  },
22
22
  setShowGlobalFilter,
23
23
  } = tableInstance;
@@ -30,7 +30,7 @@ export const MRT_ToggleGlobalFilterButton: FC<Props> = ({
30
30
  : muiSearchTextFieldProps;
31
31
 
32
32
  const handleToggleSearch = (event: MouseEvent<HTMLButtonElement>) => {
33
- onToggleShowGlobalFilter?.({
33
+ onMrtToggleShowGlobalFilter?.({
34
34
  event,
35
35
  showGlobalFilter: !showGlobalFilter,
36
36
  tableInstance,
@@ -40,7 +40,7 @@ export const MRT_ToggleGlobalFilterButton: FC<Props> = ({
40
40
  () =>
41
41
  document
42
42
  .getElementById(
43
- textFieldProps?.id ?? `mrt-${idPrefix}-search-text-field`,
43
+ textFieldProps?.id ?? `mrt-${tableId}-search-text-field`,
44
44
  )
45
45
  ?.focus(),
46
46
  200,
@@ -67,6 +67,7 @@ export const MRT_TableHeadCellFilterLabel: FC<Props> = ({
67
67
  opacity: !!column.getFilterValue() || showFilters ? 0.8 : 0,
68
68
  p: '2px',
69
69
  transition: 'all 0.2s ease-in-out',
70
+ transform: 'scale(0.66)',
70
71
  '&:hover': {
71
72
  backgroundColor: 'transparent',
72
73
  opacity: 0.8,
@@ -17,11 +17,11 @@ export const MRT_EditCellTextField: FC<Props> = ({ cell, tableInstance }) => {
17
17
  const {
18
18
  getState,
19
19
  options: {
20
- idPrefix,
20
+ tableId,
21
21
  enableEditing,
22
22
  muiTableBodyCellEditTextFieldProps,
23
- onCellEditBlur,
24
- onCellEditChange,
23
+ onMrtCellEditBlur,
24
+ onMrtCellEditChange,
25
25
  },
26
26
  setCurrentEditingCell,
27
27
  setCurrentEditingRow,
@@ -35,8 +35,8 @@ export const MRT_EditCellTextField: FC<Props> = ({ cell, tableInstance }) => {
35
35
 
36
36
  const handleChange = (event: ChangeEvent<HTMLInputElement>) => {
37
37
  setValue(event.target.value);
38
- columnDef.onCellEditChange?.({ event, cell, tableInstance });
39
- onCellEditChange?.({ event, cell, tableInstance });
38
+ columnDef.onMrtCellEditChange?.({ event, cell, tableInstance });
39
+ onMrtCellEditChange?.({ event, cell, tableInstance });
40
40
  };
41
41
 
42
42
  const handleBlur = (event: FocusEvent<HTMLInputElement>) => {
@@ -46,8 +46,8 @@ export const MRT_EditCellTextField: FC<Props> = ({ cell, tableInstance }) => {
46
46
  setCurrentEditingRow({ ...getState().currentEditingRow } as MRT_Row);
47
47
  }
48
48
  setCurrentEditingCell(null);
49
- columnDef.onCellEditBlur?.({ event, cell, tableInstance });
50
- onCellEditBlur?.({ event, cell, tableInstance });
49
+ columnDef.onMrtCellEditBlur?.({ event, cell, tableInstance });
50
+ onMrtCellEditBlur?.({ event, cell, tableInstance });
51
51
  };
52
52
 
53
53
  const mTableBodyCellEditTextFieldProps =
@@ -74,7 +74,7 @@ export const MRT_EditCellTextField: FC<Props> = ({ cell, tableInstance }) => {
74
74
 
75
75
  return (
76
76
  <TextField
77
- id={`mrt-${idPrefix}-edit-cell-text-field-${cell.id}`}
77
+ id={`mrt-${tableId}-edit-cell-text-field-${cell.id}`}
78
78
  margin="dense"
79
79
  onBlur={handleBlur}
80
80
  onChange={handleChange}
@@ -34,7 +34,7 @@ export const MRT_FilterTextField: FC<Props> = ({
34
34
  getState,
35
35
  options: {
36
36
  icons: { FilterListIcon, CloseIcon },
37
- idPrefix,
37
+ tableId,
38
38
  localization,
39
39
  muiTableHeadCellFilterTextFieldProps,
40
40
  },
@@ -118,7 +118,7 @@ export const MRT_FilterTextField: FC<Props> = ({
118
118
  return <>{columnDef.Filter?.({ header, tableInstance })}</>;
119
119
  }
120
120
 
121
- const filterId = `mrt-${idPrefix}-${header.id}-filter-text-field${
121
+ const filterId = `mrt-${tableId}-${header.id}-filter-text-field${
122
122
  inputIndex ?? ''
123
123
  }`;
124
124
  const filterFn = currentFilterFns?.[header.id];
@@ -26,10 +26,10 @@ export const MRT_SearchTextField: FC<Props> = ({ tableInstance }) => {
26
26
  setGlobalFilter,
27
27
  options: {
28
28
  icons: { SearchIcon, CloseIcon },
29
- idPrefix,
29
+ tableId,
30
30
  localization,
31
31
  muiSearchTextFieldProps,
32
- onGlobalSearchFilterChange,
32
+ onMrtGlobalFilterValueChange,
33
33
  },
34
34
  } = tableInstance;
35
35
 
@@ -41,7 +41,7 @@ export const MRT_SearchTextField: FC<Props> = ({ tableInstance }) => {
41
41
  const handleChange = useCallback(
42
42
  debounce((event: ChangeEvent<HTMLInputElement>) => {
43
43
  setGlobalFilter(event.target.value ?? undefined);
44
- onGlobalSearchFilterChange?.({ event, tableInstance });
44
+ onMrtGlobalFilterValueChange?.({ event, tableInstance });
45
45
  }, 200),
46
46
  [],
47
47
  );
@@ -63,7 +63,7 @@ export const MRT_SearchTextField: FC<Props> = ({ tableInstance }) => {
63
63
  return (
64
64
  <Collapse in={showGlobalFilter} orientation="horizontal">
65
65
  <TextField
66
- id={`mrt-${idPrefix}-search-text-field`}
66
+ id={`mrt-${tableId}-search-text-field`}
67
67
  placeholder={localization.search}
68
68
  onChange={(event: ChangeEvent<HTMLInputElement>) => {
69
69
  setSearchValue(event.target.value);
@@ -20,8 +20,8 @@ export const MRT_SelectCheckbox: FC<Props> = ({
20
20
  options: {
21
21
  localization,
22
22
  muiSelectCheckboxProps,
23
- onSelectChange,
24
- onSelectAllChange,
23
+ onMrtSelectRowChange,
24
+ onMrtSelectAllChange,
25
25
  selectAllMode,
26
26
  },
27
27
  } = tableInstance;
@@ -35,14 +35,14 @@ export const MRT_SelectCheckbox: FC<Props> = ({
35
35
  } else if (selectAllMode === 'page') {
36
36
  tableInstance.getToggleAllPageRowsSelectedHandler()(event as any);
37
37
  }
38
- onSelectAllChange?.({
38
+ onMrtSelectAllChange?.({
39
39
  event,
40
40
  selectedRows: event.target.checked ? getRowModel().flatRows : [],
41
41
  tableInstance,
42
42
  });
43
43
  } else if (row) {
44
44
  row?.getToggleSelectedHandler()(event as any);
45
- onSelectChange?.({
45
+ onMrtSelectRowChange?.({
46
46
  event,
47
47
  row,
48
48
  selectedRows: event.target.checked
@@ -52,7 +52,7 @@ export const MRT_ColumnActionMenu: FC<Props> = ({
52
52
  RestartAltIcon,
53
53
  VisibilityOffIcon,
54
54
  },
55
- idPrefix,
55
+ tableId,
56
56
  localization,
57
57
  },
58
58
  setShowFilters,
@@ -119,7 +119,7 @@ export const MRT_ColumnActionMenu: FC<Props> = ({
119
119
  .getElementById(
120
120
  // @ts-ignore
121
121
  header.muiTableHeadCellFilterTextFieldProps?.id ??
122
- `mrt-${idPrefix}-${header.id}-filter-text-field`,
122
+ `mrt-${tableId}-${header.id}-filter-text-field`,
123
123
  )
124
124
  ?.focus(),
125
125
  200,
@@ -46,7 +46,7 @@ export const MRT_ShowHideColumnsMenu: FC<Props> = ({
46
46
  ) {
47
47
  return [
48
48
  ...getLeftLeafColumns(),
49
- ...[...new Set(columnOrder)].map((colId) =>
49
+ ...Array.from(new Set(columnOrder)).map((colId) =>
50
50
  getCenterLeafColumns().find((col) => col?.id === colId),
51
51
  ),
52
52
  ...getRightLeafColumns(),
@@ -21,7 +21,7 @@ export const MRT_ShowHideColumnsMenuItems: FC<Props> = ({
21
21
  }) => {
22
22
  const {
23
23
  getState,
24
- options: { enableColumnOrdering, onToggleColumnVisibility },
24
+ options: { enableColumnOrdering, onMrtToggleColumnVisibility },
25
25
  setColumnOrder,
26
26
  } = tableInstance;
27
27
 
@@ -56,7 +56,7 @@ export const MRT_ShowHideColumnsMenuItems: FC<Props> = ({
56
56
  } else {
57
57
  column.toggleVisibility();
58
58
  }
59
- onToggleColumnVisibility?.({
59
+ onMrtToggleColumnVisibility?.({
60
60
  column,
61
61
  columnVisibility,
62
62
  tableInstance,
@@ -1,4 +1,4 @@
1
- import React, { FC } from 'react';
1
+ import React, { FC, RefObject } from 'react';
2
2
  import { Table } from '@mui/material';
3
3
  import { MRT_TableHead } from '../head/MRT_TableHead';
4
4
  import { MRT_TableBody } from '../body/MRT_TableBody';
@@ -6,10 +6,14 @@ import { MRT_TableFooter } from '../footer/MRT_TableFooter';
6
6
  import { MRT_TableInstance } from '..';
7
7
 
8
8
  interface Props {
9
+ tableContainerRef: RefObject<HTMLDivElement>;
9
10
  tableInstance: MRT_TableInstance;
10
11
  }
11
12
 
12
- export const MRT_Table: FC<Props> = ({ tableInstance }) => {
13
+ export const MRT_Table: FC<Props> = ({
14
+ tableContainerRef,
15
+ tableInstance
16
+ }) => {
13
17
  const {
14
18
  options: {
15
19
  enableStickyHeader,
@@ -27,7 +31,10 @@ export const MRT_Table: FC<Props> = ({ tableInstance }) => {
27
31
  return (
28
32
  <Table stickyHeader={enableStickyHeader} {...tableProps}>
29
33
  {enableTableHead && <MRT_TableHead tableInstance={tableInstance} />}
30
- <MRT_TableBody tableInstance={tableInstance} />
34
+ <MRT_TableBody
35
+ tableContainerRef={tableContainerRef}
36
+ tableInstance={tableInstance}
37
+ />
31
38
  {enableTableFooter && <MRT_TableFooter tableInstance={tableInstance} />}
32
39
  </Table>
33
40
  );
@@ -13,7 +13,7 @@ interface Props {
13
13
  export const MRT_TableContainer: FC<Props> = ({ tableInstance }) => {
14
14
  const {
15
15
  getState,
16
- options: { enableStickyHeader, idPrefix, muiTableContainerProps },
16
+ options: { enableStickyHeader, muiTableContainerProps, tableId },
17
17
  } = tableInstance;
18
18
 
19
19
  const { isFullScreen } = getState();
@@ -28,22 +28,25 @@ export const MRT_TableContainer: FC<Props> = ({ tableInstance }) => {
28
28
  useIsomorphicLayoutEffect(() => {
29
29
  const topToolbarHeight =
30
30
  typeof document !== 'undefined'
31
- ? document?.getElementById(`mrt-${idPrefix}-toolbar-top`)
31
+ ? document?.getElementById(`mrt-${tableId}-toolbar-top`)
32
32
  ?.offsetHeight ?? 0
33
33
  : 0;
34
34
 
35
35
  const bottomToolbarHeight =
36
36
  typeof document !== 'undefined'
37
- ? document?.getElementById(`mrt-${idPrefix}-toolbar-bottom`)
37
+ ? document?.getElementById(`mrt-${tableId}-toolbar-bottom`)
38
38
  ?.offsetHeight ?? 0
39
39
  : 0;
40
40
 
41
41
  setTotalToolbarHeight(topToolbarHeight + bottomToolbarHeight);
42
42
  });
43
43
 
44
+ const tableContainerRef = React.useRef<HTMLDivElement>(null);
45
+
44
46
  return (
45
47
  <TableContainer
46
48
  {...tableContainerProps}
49
+ ref={tableContainerRef}
47
50
  sx={{
48
51
  maxWidth: '100%',
49
52
  maxHeight: enableStickyHeader
@@ -58,7 +61,10 @@ export const MRT_TableContainer: FC<Props> = ({ tableInstance }) => {
58
61
  : undefined,
59
62
  }}
60
63
  >
61
- <MRT_Table tableInstance={tableInstance} />
64
+ <MRT_Table
65
+ tableContainerRef={tableContainerRef}
66
+ tableInstance={tableInstance}
67
+ />
62
68
  </TableContainer>
63
69
  );
64
70
  };
@@ -41,11 +41,11 @@ import { Box, Dialog, Grow } from '@mui/material';
41
41
  export const MRT_TableRoot = <D extends Record<string, any> = {}>(
42
42
  props: MaterialReactTableProps<D>,
43
43
  ) => {
44
- const [idPrefix, setIdPrefix] = useState(props.idPrefix);
44
+ const [tableId, setIdPrefix] = useState(props.tableId);
45
45
  useEffect(
46
46
  () =>
47
- setIdPrefix(props.idPrefix ?? Math.random().toString(36).substring(2, 9)),
48
- [props.idPrefix],
47
+ setIdPrefix(props.tableId ?? Math.random().toString(36).substring(2, 9)),
48
+ [props.tableId],
49
49
  );
50
50
 
51
51
  const showActionColumn =
@@ -71,7 +71,7 @@ export const MRT_TableRoot = <D extends Record<string, any> = {}>(
71
71
  ].filter(Boolean) as string[])
72
72
  : [];
73
73
 
74
- if (!props.enablePersistentState || !props.idPrefix) {
74
+ if (!props.enablePersistentState || !props.tableId) {
75
75
  return initState;
76
76
  }
77
77
  if (typeof window === 'undefined') {
@@ -84,9 +84,9 @@ export const MRT_TableRoot = <D extends Record<string, any> = {}>(
84
84
  }
85
85
  const storedState =
86
86
  props.persistentStateMode === 'localStorage'
87
- ? localStorage.getItem(`mrt-${idPrefix}-table-state`)
87
+ ? localStorage.getItem(`mrt-${tableId}-table-state`)
88
88
  : props.persistentStateMode === 'sessionStorage'
89
- ? sessionStorage.getItem(`mrt-${idPrefix}-table-state`)
89
+ ? sessionStorage.getItem(`mrt-${tableId}-table-state`)
90
90
  : '{}';
91
91
  if (storedState) {
92
92
  const parsedState = JSON.parse(storedState);
@@ -149,7 +149,7 @@ export const MRT_TableRoot = <D extends Record<string, any> = {}>(
149
149
  getPaginationRowModel: getPaginationRowModel(),
150
150
  getSortedRowModel: getSortedRowModel(),
151
151
  getSubRows: (row) => (row as MRT_Row)?.subRows,
152
- idPrefix,
152
+ tableId,
153
153
  initialState,
154
154
  }) as Table<D>,
155
155
  [],
@@ -300,14 +300,14 @@ export const MRT_TableRoot = <D extends Record<string, any> = {}>(
300
300
  if (typeof window === 'undefined' || !props.enablePersistentState) {
301
301
  return;
302
302
  }
303
- if (!props.idPrefix && process.env.NODE_ENV !== 'production') {
303
+ if (!props.tableId && process.env.NODE_ENV !== 'production') {
304
304
  console.warn(
305
- 'a unique idPrefix prop is required for persistent table state to work',
305
+ 'a unique tableId prop is required for persistent table state to work',
306
306
  );
307
307
  return;
308
308
  }
309
309
  const itemArgs: [string, string] = [
310
- `mrt-${idPrefix}-table-state`,
310
+ `mrt-${tableId}-table-state`,
311
311
  JSON.stringify(tableInstance.getState()),
312
312
  ];
313
313
  if (props.persistentStateMode === 'localStorage') {
@@ -317,7 +317,7 @@ export const MRT_TableRoot = <D extends Record<string, any> = {}>(
317
317
  }
318
318
  }, [
319
319
  props.enablePersistentState,
320
- props.idPrefix,
320
+ props.tableId,
321
321
  props.persistentStateMode,
322
322
  tableInstance,
323
323
  ]);
@@ -3,10 +3,14 @@ import { Collapse, LinearProgress } from '@mui/material';
3
3
  import { MRT_TableInstance } from '..';
4
4
 
5
5
  interface Props {
6
+ alignTo: 'bottom' | 'top';
6
7
  tableInstance: MRT_TableInstance;
7
8
  }
8
9
 
9
- export const MRT_LinearProgressBar: FC<Props> = ({ tableInstance }) => {
10
+ export const MRT_LinearProgressBar: FC<Props> = ({
11
+ alignTo,
12
+ tableInstance,
13
+ }) => {
10
14
  const {
11
15
  options: { muiLinearProgressProps },
12
16
  getState,
@@ -20,10 +24,21 @@ export const MRT_LinearProgressBar: FC<Props> = ({ tableInstance }) => {
20
24
  : muiLinearProgressProps;
21
25
 
22
26
  return (
23
- <Collapse in={isLoading || showProgressBars} mountOnEnter unmountOnExit>
27
+ <Collapse
28
+ in={isLoading || showProgressBars}
29
+ mountOnEnter
30
+ unmountOnExit
31
+ sx={{
32
+ bottom: alignTo === 'bottom' ? 0 : undefined,
33
+ position: 'absolute',
34
+ top: alignTo === 'top' ? 0 : undefined,
35
+ width: '100%',
36
+ }}
37
+ >
24
38
  <LinearProgress
25
39
  aria-label="Loading"
26
40
  aria-busy="true"
41
+ sx={{ position: 'relative' }}
27
42
  {...linearProgressProps}
28
43
  />
29
44
  </Collapse>
@@ -16,7 +16,7 @@ export const MRT_ToolbarBottom: FC<Props> = ({ tableInstance }) => {
16
16
  getState,
17
17
  options: {
18
18
  enableToolbarInternalActions,
19
- idPrefix,
19
+ tableId,
20
20
  enablePagination,
21
21
  muiTableToolbarBottomProps,
22
22
  positionPagination,
@@ -45,20 +45,20 @@ export const MRT_ToolbarBottom: FC<Props> = ({ tableInstance }) => {
45
45
 
46
46
  return (
47
47
  <Toolbar
48
- id={`mrt-${idPrefix}-toolbar-bottom`}
48
+ id={`mrt-${tableId}-toolbar-bottom`}
49
49
  variant="dense"
50
50
  {...toolbarProps}
51
51
  sx={(theme) =>
52
52
  ({
53
53
  ...commonToolbarStyles({ theme }),
54
54
  bottom: isFullScreen ? '0' : undefined,
55
- position: isFullScreen ? 'fixed' : undefined,
56
55
  boxShadow: `-3px 0 6px ${alpha(theme.palette.common.black, 0.1)}`,
56
+ position: isFullScreen ? 'fixed' : 'relative',
57
57
  ...toolbarProps?.sx,
58
58
  } as any)
59
59
  }
60
60
  >
61
- <MRT_LinearProgressBar tableInstance={tableInstance} />
61
+ <MRT_LinearProgressBar alignTo='top' tableInstance={tableInstance} />
62
62
  {positionToolbarAlertBanner === 'bottom' && (
63
63
  <MRT_ToolbarAlertBanner tableInstance={tableInstance} />
64
64
  )}
@@ -21,6 +21,7 @@ export const MRT_ToolbarInternalButtons: FC<Props> = ({ tableInstance }) => {
21
21
  enableFullScreenToggle,
22
22
  enableGlobalFilter,
23
23
  enableHiding,
24
+ positionGlobalFilter,
24
25
  renderToolbarInternalActions,
25
26
  },
26
27
  } = tableInstance;
@@ -42,7 +43,7 @@ export const MRT_ToolbarInternalButtons: FC<Props> = ({ tableInstance }) => {
42
43
  tableInstance,
43
44
  }) ?? (
44
45
  <>
45
- {enableGlobalFilter && (
46
+ {enableGlobalFilter && positionGlobalFilter === 'right' && (
46
47
  <MRT_SearchTextField tableInstance={tableInstance} />
47
48
  )}
48
49
  {enableFilters && enableGlobalFilter && (
@@ -5,6 +5,7 @@ import { MRT_TablePagination } from './MRT_TablePagination';
5
5
  import { MRT_ToolbarAlertBanner } from './MRT_ToolbarAlertBanner';
6
6
  import { MRT_LinearProgressBar } from './MRT_LinearProgressBar';
7
7
  import { MRT_TableInstance } from '..';
8
+ import { MRT_SearchTextField } from '../inputs/MRT_SearchTextField';
8
9
 
9
10
  export const commonToolbarStyles = ({ theme }: { theme: Theme }) => ({
10
11
  backgroundColor: lighten(theme.palette.background.default, 0.04),
@@ -26,18 +27,20 @@ export const MRT_ToolbarTop: FC<Props> = ({ tableInstance }) => {
26
27
  const {
27
28
  getState,
28
29
  options: {
30
+ enableGlobalFilter,
29
31
  enablePagination,
30
32
  enableToolbarInternalActions,
31
- idPrefix,
33
+ tableId,
32
34
  muiTableToolbarTopProps,
33
35
  positionPagination,
36
+ positionGlobalFilter,
34
37
  positionToolbarActions,
35
38
  positionToolbarAlertBanner,
36
39
  renderToolbarCustomActions,
37
40
  },
38
41
  } = tableInstance;
39
42
 
40
- const { isFullScreen } = getState();
43
+ const { isFullScreen, showGlobalFilter } = getState();
41
44
 
42
45
  const isMobile = useMediaQuery('(max-width:720px)');
43
46
 
@@ -48,11 +51,12 @@ export const MRT_ToolbarTop: FC<Props> = ({ tableInstance }) => {
48
51
 
49
52
  const stackAlertBanner =
50
53
  isMobile ||
51
- (positionToolbarAlertBanner === 'top' && !!renderToolbarCustomActions);
54
+ (positionToolbarAlertBanner === 'top' &&
55
+ (!!renderToolbarCustomActions || showGlobalFilter));
52
56
 
53
57
  return (
54
58
  <Toolbar
55
- id={`mrt-${idPrefix}-toolbar-top`}
59
+ id={`mrt-${tableId}-toolbar-top`}
56
60
  variant="dense"
57
61
  {...toolbarProps}
58
62
  sx={(theme) =>
@@ -78,9 +82,12 @@ export const MRT_ToolbarTop: FC<Props> = ({ tableInstance }) => {
78
82
  position: stackAlertBanner ? 'relative' : 'absolute',
79
83
  right: 0,
80
84
  top: 0,
81
- width: 'calc(100% - 1rem)',
85
+ width: renderToolbarCustomActions ? '100%' : undefined,
82
86
  }}
83
87
  >
88
+ {enableGlobalFilter && positionGlobalFilter === 'left' && (
89
+ <MRT_SearchTextField tableInstance={tableInstance} />
90
+ )}
84
91
  {renderToolbarCustomActions?.({ tableInstance }) ?? <span />}
85
92
  {enableToolbarInternalActions && positionToolbarActions === 'top' && (
86
93
  <MRT_ToolbarInternalButtons tableInstance={tableInstance} />
@@ -92,7 +99,7 @@ export const MRT_ToolbarTop: FC<Props> = ({ tableInstance }) => {
92
99
  <MRT_TablePagination tableInstance={tableInstance} />
93
100
  )}
94
101
  </div>
95
- <MRT_LinearProgressBar tableInstance={tableInstance} />
102
+ <MRT_LinearProgressBar alignTo="bottom" tableInstance={tableInstance} />
96
103
  </Toolbar>
97
104
  );
98
105
  };
package/src/utils.ts CHANGED
@@ -4,7 +4,7 @@ import {
4
4
  Table,
5
5
  Updater,
6
6
  } from '@tanstack/react-table';
7
- import { MRT_Column, MRT_ColumnDef, MRT_FilterFn, } from '.';
7
+ import { MRT_Column, MRT_ColumnDef, MRT_FilterFn } from '.';
8
8
  import { MRT_FILTER_OPTION } from './enums';
9
9
  import { defaultFilterFNs } from './filtersFNs';
10
10