material-react-table 0.6.9 → 0.7.0-alpha.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 (107) hide show
  1. package/dist/MaterialReactTable.d.ts +308 -107
  2. package/dist/body/MRT_TableBody.d.ts +3 -0
  3. package/dist/body/MRT_TableBodyCell.d.ts +2 -11
  4. package/dist/body/MRT_TableBodyRow.d.ts +3 -1
  5. package/dist/body/MRT_TableDetailPanel.d.ts +2 -1
  6. package/dist/buttons/MRT_CopyButton.d.ts +4 -2
  7. package/dist/buttons/MRT_EditActionButtons.d.ts +2 -1
  8. package/dist/buttons/MRT_ExpandAllButton.d.ts +2 -0
  9. package/dist/buttons/MRT_ExpandButton.d.ts +2 -1
  10. package/dist/buttons/MRT_FullScreenToggleButton.d.ts +2 -0
  11. package/dist/buttons/MRT_ShowHideColumnsButton.d.ts +2 -0
  12. package/dist/buttons/MRT_ToggleColumnActionMenuButton.d.ts +3 -2
  13. package/dist/buttons/MRT_ToggleDensePaddingButton.d.ts +2 -0
  14. package/dist/buttons/MRT_ToggleFiltersButton.d.ts +2 -0
  15. package/dist/buttons/MRT_ToggleRowActionMenuButton.d.ts +2 -1
  16. package/dist/buttons/MRT_ToggleSearchButton.d.ts +2 -0
  17. package/dist/enums.d.ts +2 -1
  18. package/dist/filtersFNs.d.ts +13 -5
  19. package/dist/footer/MRT_TableFooter.d.ts +3 -0
  20. package/dist/footer/MRT_TableFooterCell.d.ts +3 -2
  21. package/dist/footer/MRT_TableFooterRow.d.ts +2 -1
  22. package/dist/head/MRT_TableHead.d.ts +3 -0
  23. package/dist/head/MRT_TableHeadCell.d.ts +4 -18
  24. package/dist/head/MRT_TableHeadRow.d.ts +2 -1
  25. package/dist/icons.d.ts +1 -1
  26. package/dist/inputs/MRT_EditCellTextField.d.ts +2 -1
  27. package/dist/inputs/MRT_FilterTextField.d.ts +3 -2
  28. package/dist/inputs/MRT_SearchTextField.d.ts +2 -0
  29. package/dist/inputs/MRT_SelectCheckbox.d.ts +2 -1
  30. package/dist/localization.d.ts +9 -2
  31. package/dist/material-react-table.cjs.development.js +2258 -2470
  32. package/dist/material-react-table.cjs.development.js.map +1 -1
  33. package/dist/material-react-table.cjs.production.min.js +1 -1
  34. package/dist/material-react-table.cjs.production.min.js.map +1 -1
  35. package/dist/material-react-table.esm.js +2260 -2472
  36. package/dist/material-react-table.esm.js.map +1 -1
  37. package/dist/menus/MRT_ColumnActionMenu.d.ts +3 -2
  38. package/dist/menus/MRT_FilterTypeMenu.d.ts +4 -3
  39. package/dist/menus/MRT_RowActionMenu.d.ts +3 -2
  40. package/dist/menus/MRT_ShowHideColumnsMenu.d.ts +2 -0
  41. package/dist/menus/MRT_ShowHideColumnsMenuItems.d.ts +2 -1
  42. package/dist/table/MRT_Table.d.ts +3 -0
  43. package/dist/table/MRT_TableContainer.d.ts +2 -0
  44. package/dist/table/MRT_TablePaper.d.ts +7 -0
  45. package/dist/table/MRT_TableRoot.d.ts +3 -0
  46. package/dist/toolbar/MRT_LinearProgressBar.d.ts +2 -0
  47. package/dist/toolbar/MRT_TablePagination.d.ts +2 -0
  48. package/dist/toolbar/MRT_ToolbarAlertBanner.d.ts +2 -0
  49. package/dist/toolbar/MRT_ToolbarBottom.d.ts +2 -0
  50. package/dist/toolbar/MRT_ToolbarInternalButtons.d.ts +2 -0
  51. package/dist/toolbar/MRT_ToolbarTop.d.ts +4 -2
  52. package/dist/utils.d.ts +12 -2
  53. package/package.json +27 -28
  54. package/src/MaterialReactTable.tsx +598 -295
  55. package/src/body/MRT_TableBody.tsx +26 -22
  56. package/src/body/MRT_TableBodyCell.tsx +76 -55
  57. package/src/body/MRT_TableBodyRow.tsx +37 -67
  58. package/src/body/MRT_TableDetailPanel.tsx +21 -17
  59. package/src/buttons/MRT_CopyButton.tsx +36 -11
  60. package/src/buttons/MRT_EditActionButtons.tsx +16 -13
  61. package/src/buttons/MRT_ExpandAllButton.tsx +36 -28
  62. package/src/buttons/MRT_ExpandButton.tsx +35 -41
  63. package/src/buttons/MRT_FullScreenToggleButton.tsx +18 -11
  64. package/src/buttons/MRT_ShowHideColumnsButton.tsx +18 -7
  65. package/src/buttons/MRT_ToggleColumnActionMenuButton.tsx +22 -11
  66. package/src/buttons/MRT_ToggleDensePaddingButton.tsx +18 -11
  67. package/src/buttons/MRT_ToggleFiltersButton.tsx +16 -9
  68. package/src/buttons/MRT_ToggleRowActionMenuButton.tsx +27 -22
  69. package/src/buttons/MRT_ToggleSearchButton.tsx +24 -12
  70. package/src/enums.ts +2 -1
  71. package/src/filtersFNs.ts +17 -3
  72. package/src/footer/MRT_TableFooter.tsx +24 -8
  73. package/src/footer/MRT_TableFooterCell.tsx +34 -26
  74. package/src/footer/MRT_TableFooterRow.tsx +21 -39
  75. package/src/head/MRT_TableHead.tsx +24 -8
  76. package/src/head/MRT_TableHeadCell.tsx +185 -142
  77. package/src/head/MRT_TableHeadRow.tsx +16 -93
  78. package/src/icons.ts +3 -3
  79. package/src/inputs/MRT_EditCellTextField.tsx +23 -24
  80. package/src/inputs/MRT_FilterTextField.tsx +53 -39
  81. package/src/inputs/MRT_SearchTextField.tsx +71 -25
  82. package/src/inputs/MRT_SelectCheckbox.tsx +42 -30
  83. package/src/localization.ts +19 -4
  84. package/src/menus/MRT_ColumnActionMenu.tsx +129 -69
  85. package/src/menus/MRT_FilterTypeMenu.tsx +55 -23
  86. package/src/menus/MRT_RowActionMenu.tsx +21 -14
  87. package/src/menus/MRT_ShowHideColumnsMenu.tsx +52 -20
  88. package/src/menus/MRT_ShowHideColumnsMenuItems.tsx +27 -17
  89. package/src/table/MRT_Table.tsx +25 -15
  90. package/src/table/MRT_TableContainer.tsx +106 -45
  91. package/src/table/MRT_TablePaper.tsx +65 -0
  92. package/src/table/MRT_TableRoot.tsx +236 -0
  93. package/src/toolbar/MRT_LinearProgressBar.tsx +10 -7
  94. package/src/toolbar/MRT_TablePagination.tsx +30 -19
  95. package/src/toolbar/MRT_ToolbarAlertBanner.tsx +33 -20
  96. package/src/toolbar/MRT_ToolbarBottom.tsx +32 -21
  97. package/src/toolbar/MRT_ToolbarInternalButtons.tsx +34 -20
  98. package/src/toolbar/MRT_ToolbarTop.tsx +36 -29
  99. package/src/utils.ts +37 -8
  100. package/dist/head/MRT_TableHeadCellActions.d.ts +0 -5
  101. package/dist/table/MRT_TableSpacerCell.d.ts +0 -6
  102. package/dist/useMRT.d.ts +0 -27
  103. package/src/@types/faker.d.ts +0 -4
  104. package/src/@types/react-table-config.d.ts +0 -53
  105. package/src/head/MRT_TableHeadCellActions.tsx +0 -29
  106. package/src/table/MRT_TableSpacerCell.tsx +0 -20
  107. package/src/useMRT.tsx +0 -215
package/src/icons.ts CHANGED
@@ -3,7 +3,6 @@ import CancelIcon from '@mui/icons-material/Cancel';
3
3
  import CheckBoxIcon from '@mui/icons-material/CheckBox';
4
4
  import ClearAllIcon from '@mui/icons-material/ClearAll';
5
5
  import CloseIcon from '@mui/icons-material/Close';
6
- import ContentCopyIcon from '@mui/icons-material/ContentCopy';
7
6
  import DensityMediumIcon from '@mui/icons-material/DensityMedium';
8
7
  import DensitySmallIcon from '@mui/icons-material/DensitySmall';
9
8
  import DoubleArrowDownIcon from '@mui/icons-material/KeyboardDoubleArrowDown';
@@ -19,6 +18,7 @@ import FullscreenExitIcon from '@mui/icons-material/FullscreenExit';
19
18
  import FullscreenIcon from '@mui/icons-material/Fullscreen';
20
19
  import MoreHorizIcon from '@mui/icons-material/MoreHoriz';
21
20
  import MoreVertIcon from '@mui/icons-material/MoreVert';
21
+ import PushPinIcon from '@mui/icons-material/PushPin';
22
22
  import SaveIcon from '@mui/icons-material/Save';
23
23
  import SearchIcon from '@mui/icons-material/Search';
24
24
  import SearchOffIcon from '@mui/icons-material/SearchOff';
@@ -32,7 +32,6 @@ export interface MRT_Icons {
32
32
  CheckBoxIcon: any;
33
33
  ClearAllIcon: any;
34
34
  CloseIcon: any;
35
- ContentCopyIcon: any;
36
35
  DensityMediumIcon: any;
37
36
  DensitySmallIcon: any;
38
37
  DoubleArrowDownIcon: any;
@@ -48,6 +47,7 @@ export interface MRT_Icons {
48
47
  FullscreenIcon: any;
49
48
  MoreHorizIcon: any;
50
49
  MoreVertIcon: any;
50
+ PushPinIcon: any;
51
51
  SaveIcon: any;
52
52
  SearchIcon: any;
53
53
  SearchOffIcon: any;
@@ -62,7 +62,6 @@ export const MRT_Default_Icons: MRT_Icons = {
62
62
  CheckBoxIcon,
63
63
  ClearAllIcon,
64
64
  CloseIcon,
65
- ContentCopyIcon,
66
65
  DensityMediumIcon,
67
66
  DensitySmallIcon,
68
67
  DoubleArrowDownIcon,
@@ -78,6 +77,7 @@ export const MRT_Default_Icons: MRT_Icons = {
78
77
  FullscreenIcon,
79
78
  MoreHorizIcon,
80
79
  MoreVertIcon,
80
+ PushPinIcon,
81
81
  SaveIcon,
82
82
  SearchIcon,
83
83
  SearchOffIcon,
@@ -1,56 +1,55 @@
1
- import React, { ChangeEvent, FC } from 'react';
1
+ import React, { ChangeEvent, FC, MouseEvent } from 'react';
2
2
  import { TextField } from '@mui/material';
3
- import { useMRT } from '../useMRT';
4
- import type { MRT_Cell } from '..';
3
+ import type { MRT_Cell, MRT_TableInstance } from '..';
5
4
 
6
5
  interface Props {
7
6
  cell: MRT_Cell;
7
+ tableInstance: MRT_TableInstance;
8
8
  }
9
9
 
10
- export const MRT_EditCellTextField: FC<Props> = ({ cell }) => {
10
+ export const MRT_EditCellTextField: FC<Props> = ({ cell, tableInstance }) => {
11
11
  const {
12
- muiTableBodyCellEditTextFieldProps,
13
- setCurrentEditingRow,
14
- tableInstance: {
15
- state: { currentEditingRow },
16
- },
17
- } = useMRT();
12
+ getState,
13
+ options: { enableRowEditing, muiTableBodyCellEditTextFieldProps },
14
+ } = tableInstance;
15
+
16
+ const { column, row } = cell;
18
17
 
19
18
  const handleChange = (event: ChangeEvent<HTMLInputElement>) => {
20
- if (currentEditingRow) {
21
- cell.row.values[cell.column.id] = event.target.value;
22
- setCurrentEditingRow({
23
- ...currentEditingRow,
24
- });
19
+ if (getState().currentEditingRow) {
20
+ row.values[column.id] = event.target.value;
21
+ // setCurrentEditingRow({
22
+ // ...getState().currentEditingRow,
23
+ // });
25
24
  }
26
- cell.column.onCellEditChange?.(event, cell);
25
+ column.onCellEditChange?.({ event, cell, tableInstance });
27
26
  };
28
27
 
29
28
  const mTableBodyCellEditTextFieldProps =
30
29
  muiTableBodyCellEditTextFieldProps instanceof Function
31
- ? muiTableBodyCellEditTextFieldProps(cell)
30
+ ? muiTableBodyCellEditTextFieldProps({ cell, tableInstance })
32
31
  : muiTableBodyCellEditTextFieldProps;
33
32
 
34
33
  const mcTableBodyCellEditTextFieldProps =
35
- cell.column.muiTableBodyCellEditTextFieldProps instanceof Function
36
- ? cell.column.muiTableBodyCellEditTextFieldProps(cell)
37
- : cell.column.muiTableBodyCellEditTextFieldProps;
34
+ column.muiTableBodyCellEditTextFieldProps instanceof Function
35
+ ? column.muiTableBodyCellEditTextFieldProps({ cell, tableInstance })
36
+ : column.muiTableBodyCellEditTextFieldProps;
38
37
 
39
38
  const textFieldProps = {
40
39
  ...mTableBodyCellEditTextFieldProps,
41
40
  ...mcTableBodyCellEditTextFieldProps,
42
41
  };
43
42
 
44
- if (!cell.column.disableEditing && cell.column.Edit) {
45
- return <>{cell.column.Edit({ ...textFieldProps, cell })}</>;
43
+ if (enableRowEditing && column.enableEditing !== false && column.Edit) {
44
+ return <>{column.Edit?.({ cell, tableInstance })}</>;
46
45
  }
47
46
 
48
47
  return (
49
48
  <TextField
50
49
  margin="dense"
51
50
  onChange={handleChange}
52
- onClick={(e) => e.stopPropagation()}
53
- placeholder={cell.column.Header as string}
51
+ onClick={(e: MouseEvent<HTMLInputElement>) => e.stopPropagation()}
52
+ placeholder={column.header}
54
53
  value={cell.value}
55
54
  variant="standard"
56
55
  {...textFieldProps}
@@ -1,6 +1,13 @@
1
- import React, { ChangeEvent, FC, MouseEvent, useState } from 'react';
1
+ import React, {
2
+ ChangeEvent,
3
+ FC,
4
+ MouseEvent,
5
+ useCallback,
6
+ useState,
7
+ } from 'react';
2
8
  import {
3
9
  Chip,
10
+ debounce,
4
11
  IconButton,
5
12
  InputAdornment,
6
13
  MenuItem,
@@ -8,36 +15,41 @@ import {
8
15
  TextFieldProps,
9
16
  Tooltip,
10
17
  } from '@mui/material';
11
- import { useAsyncDebounce } from 'react-table';
12
- import { useMRT } from '../useMRT';
13
- import type { MRT_HeaderGroup } from '..';
18
+ import type { MRT_Header, MRT_TableInstance } from '..';
14
19
  import { MRT_FilterTypeMenu } from '../menus/MRT_FilterTypeMenu';
15
20
  import { MRT_FILTER_TYPE } from '../enums';
16
21
 
17
22
  interface Props {
18
- column: MRT_HeaderGroup;
23
+ header: MRT_Header;
24
+ tableInstance: MRT_TableInstance;
19
25
  }
20
26
 
21
- export const MRT_FilterTextField: FC<Props> = ({ column }) => {
27
+ export const MRT_FilterTextField: FC<Props> = ({ header, tableInstance }) => {
22
28
  const {
23
- icons: { FilterListIcon, CloseIcon },
24
- idPrefix,
25
- localization,
26
- muiTableHeadCellFilterTextFieldProps,
27
- setCurrentFilterTypes,
28
- tableInstance,
29
- } = useMRT();
29
+ getState,
30
+ options: {
31
+ icons: { FilterListIcon, CloseIcon },
32
+ idPrefix,
33
+ localization,
34
+ muiTableHeadCellFilterTextFieldProps,
35
+ setCurrentFilterTypes,
36
+ },
37
+ } = tableInstance;
38
+
39
+ const { column } = header;
40
+
41
+ const { currentFilterTypes } = getState();
30
42
 
31
43
  const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);
32
44
 
33
45
  const mTableHeadCellFilterTextFieldProps =
34
46
  muiTableHeadCellFilterTextFieldProps instanceof Function
35
- ? muiTableHeadCellFilterTextFieldProps(column)
47
+ ? muiTableHeadCellFilterTextFieldProps({ column, tableInstance })
36
48
  : muiTableHeadCellFilterTextFieldProps;
37
49
 
38
50
  const mcTableHeadCellFilterTextFieldProps =
39
51
  column.muiTableHeadCellFilterTextFieldProps instanceof Function
40
- ? column.muiTableHeadCellFilterTextFieldProps(column)
52
+ ? column.muiTableHeadCellFilterTextFieldProps({ column, tableInstance })
41
53
  : column.muiTableHeadCellFilterTextFieldProps;
42
54
 
43
55
  const textFieldProps = {
@@ -45,11 +57,18 @@ export const MRT_FilterTextField: FC<Props> = ({ column }) => {
45
57
  ...mcTableHeadCellFilterTextFieldProps,
46
58
  } as TextFieldProps;
47
59
 
48
- const [filterValue, setFilterValue] = useState('');
60
+ const [filterValue, setFilterValue] = useState<string>(
61
+ (column.getColumnFilterValue() ?? '') as string,
62
+ );
49
63
 
50
- const handleChange = useAsyncDebounce((value) => {
51
- column.setFilter(value ?? undefined);
52
- }, 150);
64
+ const handleChange = useCallback(
65
+ debounce(
66
+ (event: ChangeEvent<HTMLInputElement>) =>
67
+ column.setColumnFilterValue(event.target.value ?? undefined),
68
+ 150,
69
+ ),
70
+ [],
71
+ );
53
72
 
54
73
  const handleFilterMenuOpen = (event: MouseEvent<HTMLElement>) => {
55
74
  setAnchorEl(event.currentTarget);
@@ -57,24 +76,24 @@ export const MRT_FilterTextField: FC<Props> = ({ column }) => {
57
76
 
58
77
  const handleClear = () => {
59
78
  setFilterValue('');
60
- column.setFilter(undefined);
79
+ column.setColumnFilterValue(undefined);
61
80
  };
62
81
 
63
82
  const handleClearFilterChip = () => {
64
83
  setFilterValue('');
65
- column.setFilter(undefined);
84
+ column.setColumnFilterValue(undefined);
66
85
  setCurrentFilterTypes((prev) => ({
67
86
  ...prev,
68
- [column.id]: MRT_FILTER_TYPE.FUZZY,
87
+ [header.id]: MRT_FILTER_TYPE.BEST_MATCH,
69
88
  }));
70
89
  };
71
90
 
72
91
  if (column.Filter) {
73
- return <>{column.Filter?.({ column })}</>;
92
+ return <>{column.Filter?.({ header, tableInstance })}</>;
74
93
  }
75
94
 
76
- const filterId = `mrt-${idPrefix}-${column.id}-filter-text-field`;
77
- const filterType = tableInstance.state.currentFilterTypes[column.id];
95
+ const filterId = `mrt-${idPrefix}-${header.id}-filter-text-field`;
96
+ const filterType = currentFilterTypes?.[header.id];
78
97
  const isSelectFilter = !!column.filterSelectOptions;
79
98
  const filterChipLabel =
80
99
  !(filterType instanceof Function) &&
@@ -88,7 +107,7 @@ export const MRT_FilterTextField: FC<Props> = ({ column }) => {
88
107
  : '';
89
108
  const filterPlaceholder = localization.filterByColumn?.replace(
90
109
  '{column}',
91
- String(column.Header),
110
+ String(column.header),
92
111
  );
93
112
 
94
113
  return (
@@ -132,22 +151,16 @@ export const MRT_FilterTextField: FC<Props> = ({ column }) => {
132
151
  sx: { fontSize: '0.6rem', lineHeight: '0.8rem' },
133
152
  }}
134
153
  label={isSelectFilter && !filterValue ? filterPlaceholder : undefined}
135
- InputLabelProps={{
136
- shrink: false,
137
- sx: {
138
- maxWidth: 'calc(100% - 2.5rem)',
139
- },
140
- title: filterPlaceholder,
141
- }}
142
154
  margin="none"
143
155
  placeholder={
144
- filterChipLabel || isSelectFilter ? undefined : filterPlaceholder
156
+ filterPlaceholder
157
+ // filterChipLabel || isSelectFilter ? undefined : filterPlaceholder
145
158
  }
146
- onChange={(e: ChangeEvent<HTMLInputElement>) => {
147
- setFilterValue(e.target.value);
148
- handleChange(e.target.value);
159
+ onChange={(event: ChangeEvent<HTMLInputElement>) => {
160
+ setFilterValue(event.target.value);
161
+ handleChange(event);
149
162
  }}
150
- onClick={(e) => e.stopPropagation()}
163
+ onClick={(e: MouseEvent<HTMLInputElement>) => e.stopPropagation()}
151
164
  select={isSelectFilter}
152
165
  value={filterValue ?? ''}
153
166
  variant="standard"
@@ -237,8 +250,9 @@ export const MRT_FilterTextField: FC<Props> = ({ column }) => {
237
250
  </TextField>
238
251
  <MRT_FilterTypeMenu
239
252
  anchorEl={anchorEl}
240
- column={column}
253
+ header={header}
241
254
  setAnchorEl={setAnchorEl}
255
+ tableInstance={tableInstance}
242
256
  />
243
257
  </>
244
258
  );
@@ -1,37 +1,67 @@
1
- import React, { ChangeEvent, FC, useState } from 'react';
2
- import { Collapse, IconButton, InputAdornment, TextField } from '@mui/material';
3
- import { useMRT } from '../useMRT';
4
- import { useAsyncDebounce } from 'react-table';
1
+ import React, {
2
+ ChangeEvent,
3
+ FC,
4
+ MouseEvent,
5
+ useCallback,
6
+ useState,
7
+ } from 'react';
8
+ import {
9
+ Collapse,
10
+ debounce,
11
+ IconButton,
12
+ InputAdornment,
13
+ TextField,
14
+ Tooltip,
15
+ } from '@mui/material';
16
+ import { MRT_FilterTypeMenu } from '../menus/MRT_FilterTypeMenu';
17
+ import { MRT_TableInstance } from '..';
5
18
 
6
- interface Props {}
19
+ interface Props {
20
+ tableInstance: MRT_TableInstance;
21
+ }
7
22
 
8
- export const MRT_SearchTextField: FC<Props> = () => {
23
+ export const MRT_SearchTextField: FC<Props> = ({ tableInstance }) => {
9
24
  const {
10
- icons: { SearchIcon, CloseIcon },
11
- idPrefix,
12
- localization,
13
- muiSearchTextFieldProps,
14
- onGlobalFilterChange,
15
- tableInstance,
16
- } = useMRT();
25
+ getState,
26
+ setGlobalFilter,
27
+ options: {
28
+ icons: { SearchIcon, CloseIcon },
29
+ idPrefix,
30
+ localization,
31
+ muiSearchTextFieldProps,
32
+ onGlobalFilterChange,
33
+ },
34
+ } = tableInstance;
17
35
 
18
- const [searchValue, setSearchValue] = useState('');
36
+ const { globalFilter, showSearch } = getState();
19
37
 
20
- const handleChange = useAsyncDebounce(
21
- (event: ChangeEvent<HTMLInputElement>) => {
22
- tableInstance.setGlobalFilter(event.target.value ?? undefined);
23
- onGlobalFilterChange?.(event);
24
- },
25
- 200,
38
+ const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);
39
+ const [searchValue, setSearchValue] = useState(globalFilter ?? '');
40
+
41
+ const handleChange = useCallback(
42
+ debounce((event: ChangeEvent<HTMLInputElement>) => {
43
+ setGlobalFilter(event.target.value ?? undefined);
44
+ onGlobalFilterChange?.({ event, tableInstance });
45
+ }, 200),
46
+ [],
26
47
  );
27
48
 
49
+ const handleGlobalFilterMenuOpen = (event: MouseEvent<HTMLElement>) => {
50
+ setAnchorEl(event.currentTarget);
51
+ };
52
+
28
53
  const handleClear = () => {
29
54
  setSearchValue('');
30
- tableInstance.setGlobalFilter(undefined);
55
+ setGlobalFilter(undefined);
31
56
  };
32
57
 
58
+ const textFieldProps =
59
+ muiSearchTextFieldProps instanceof Function
60
+ ? muiSearchTextFieldProps({ tableInstance })
61
+ : muiSearchTextFieldProps;
62
+
33
63
  return (
34
- <Collapse in={tableInstance.state.showSearch} orientation="horizontal">
64
+ <Collapse in={showSearch} orientation="horizontal">
35
65
  <TextField
36
66
  id={`mrt-${idPrefix}-search-text-field`}
37
67
  placeholder={localization.search}
@@ -44,7 +74,18 @@ export const MRT_SearchTextField: FC<Props> = () => {
44
74
  InputProps={{
45
75
  startAdornment: (
46
76
  <InputAdornment position="start">
47
- <SearchIcon fontSize="small" />
77
+ <Tooltip arrow title={localization.changeSearchMode}>
78
+ <span>
79
+ <IconButton
80
+ aria-label={localization.changeSearchMode}
81
+ onClick={handleGlobalFilterMenuOpen}
82
+ size="small"
83
+ sx={{ height: '1.75rem', width: '1.75rem' }}
84
+ >
85
+ <SearchIcon fontSize="small" />
86
+ </IconButton>
87
+ </span>
88
+ </Tooltip>
48
89
  </InputAdornment>
49
90
  ),
50
91
  endAdornment: (
@@ -61,8 +102,13 @@ export const MRT_SearchTextField: FC<Props> = () => {
61
102
  </InputAdornment>
62
103
  ),
63
104
  }}
64
- {...muiSearchTextFieldProps}
65
- sx={{ justifySelf: 'end', ...muiSearchTextFieldProps?.sx }}
105
+ {...textFieldProps}
106
+ sx={{ justifySelf: 'end', ...textFieldProps?.sx }}
107
+ />
108
+ <MRT_FilterTypeMenu
109
+ anchorEl={anchorEl}
110
+ setAnchorEl={setAnchorEl}
111
+ tableInstance={tableInstance}
66
112
  />
67
113
  </Collapse>
68
114
  );
@@ -1,62 +1,69 @@
1
1
  import React, { ChangeEvent, FC } from 'react';
2
2
  import { Checkbox, Tooltip } from '@mui/material';
3
- import { useMRT } from '../useMRT';
4
- import type { MRT_Row } from '..';
3
+ import type { MRT_Row, MRT_TableInstance } from '..';
5
4
 
6
5
  interface Props {
7
6
  row?: MRT_Row;
8
7
  selectAll?: boolean;
8
+ tableInstance: MRT_TableInstance;
9
9
  }
10
10
 
11
- export const MRT_SelectCheckbox: FC<Props> = ({ row, selectAll }) => {
11
+ export const MRT_SelectCheckbox: FC<Props> = ({
12
+ row,
13
+ selectAll,
14
+ tableInstance,
15
+ }) => {
12
16
  const {
13
- localization,
14
- muiSelectCheckboxProps,
15
- onSelectChange,
16
- onSelectAllChange,
17
- tableInstance,
18
- tableInstance: {
19
- state: { densePadding },
17
+ getRowModel,
18
+ getSelectedRowModel,
19
+ getState,
20
+ getToggleAllRowsSelectedProps,
21
+ options: {
22
+ isLoading,
23
+ localization,
24
+ muiSelectCheckboxProps,
25
+ onSelectChange,
26
+ onSelectAllChange,
20
27
  },
21
- } = useMRT();
28
+ } = tableInstance;
29
+
30
+ const { isDensePadding } = getState();
22
31
 
23
32
  const handleSelectChange = (event: ChangeEvent<HTMLInputElement>) => {
24
33
  if (selectAll) {
25
- tableInstance?.getToggleAllRowsSelectedProps?.()?.onChange?.(event);
26
- onSelectAllChange?.(
34
+ getToggleAllRowsSelectedProps?.()?.onChange?.(event as any);
35
+ onSelectAllChange?.({
27
36
  event,
28
- event.target.checked ? tableInstance.rows : [],
29
- );
37
+ selectedRows: event.target.checked ? getRowModel().flatRows : [],
38
+ tableInstance,
39
+ });
30
40
  } else if (row) {
31
- row?.getToggleRowSelectedProps()?.onChange?.(event);
32
- onSelectChange?.(
41
+ row?.getToggleSelectedProps()?.onChange?.(event as any);
42
+ onSelectChange?.({
33
43
  event,
34
44
  row,
35
- event.target.checked
36
- ? [...tableInstance.selectedFlatRows, row]
37
- : tableInstance.selectedFlatRows.filter(
45
+ selectedRows: event.target.checked
46
+ ? [...getSelectedRowModel().flatRows, row]
47
+ : getSelectedRowModel().flatRows.filter(
38
48
  (selectedRow) => selectedRow.id !== row.id,
39
49
  ),
40
- );
50
+ tableInstance,
51
+ });
41
52
  }
42
53
  };
43
54
 
44
55
  const mTableBodyRowSelectCheckboxProps =
45
56
  muiSelectCheckboxProps instanceof Function
46
- ? muiSelectCheckboxProps(selectAll, row, tableInstance)
57
+ ? muiSelectCheckboxProps({ isSelectAll: !!selectAll, row, tableInstance })
47
58
  : muiSelectCheckboxProps;
48
59
 
49
60
  const rtSelectCheckboxProps = selectAll
50
- ? tableInstance.getToggleAllRowsSelectedProps()
51
- : row?.getToggleRowSelectedProps();
61
+ ? getToggleAllRowsSelectedProps()
62
+ : row?.getToggleSelectedProps();
52
63
 
53
64
  const checkboxProps = {
54
- ...mTableBodyRowSelectCheckboxProps,
55
65
  ...rtSelectCheckboxProps,
56
- style: {
57
- ...rtSelectCheckboxProps?.style,
58
- ...mTableBodyRowSelectCheckboxProps?.style,
59
- },
66
+ ...mTableBodyRowSelectCheckboxProps,
60
67
  };
61
68
 
62
69
  return (
@@ -69,13 +76,18 @@ export const MRT_SelectCheckbox: FC<Props> = ({ row, selectAll }) => {
69
76
  }
70
77
  >
71
78
  <Checkbox
79
+ disabled={isLoading}
72
80
  inputProps={{
73
81
  'aria-label': selectAll
74
82
  ? localization.toggleSelectAll
75
83
  : localization.toggleSelectRow,
76
84
  }}
77
- size={densePadding ? 'small' : 'medium'}
85
+ size={isDensePadding ? 'small' : 'medium'}
78
86
  {...checkboxProps}
87
+ sx={{
88
+ height: isDensePadding ? '1.75rem' : '2.25rem',
89
+ width: isDensePadding ? '1.75rem' : '2.25rem',
90
+ }}
79
91
  onChange={handleSelectChange}
80
92
  title={undefined}
81
93
  />
@@ -2,6 +2,7 @@ export interface MRT_Localization {
2
2
  actions: string;
3
3
  cancel: string;
4
4
  changeFilterMode: string;
5
+ changeSearchMode: string;
5
6
  clearFilter: string;
6
7
  clearSearch: string;
7
8
  clearSort: string;
@@ -11,12 +12,13 @@ export interface MRT_Localization {
11
12
  edit: string;
12
13
  expand: string;
13
14
  expandAll: string;
15
+ filterBestMatch: string;
16
+ filterBestMatchFirst: string;
14
17
  filterByColumn: string;
15
18
  filterContains: string;
16
19
  filterEmpty: string;
17
20
  filterEndsWith: string;
18
21
  filterEquals: string;
19
- filterFuzzy: string;
20
22
  filterGreaterThan: string;
21
23
  filterLessThan: string;
22
24
  filterMode: string;
@@ -28,13 +30,17 @@ export interface MRT_Localization {
28
30
  groupedBy: string;
29
31
  hideAll: string;
30
32
  hideColumn: string;
33
+ pinToLeft: string;
34
+ pinToRight: string;
31
35
  rowActions: string;
36
+ rowNumbers: string;
32
37
  save: string;
33
38
  search: string;
39
+ select: string;
34
40
  selectedCountOfRowCountRowsSelected: string;
35
41
  showAll: string;
36
- showHideColumns: string;
37
42
  showAllColumns: string;
43
+ showHideColumns: string;
38
44
  showHideFilters: string;
39
45
  showHideSearch: string;
40
46
  sortByColumnAsc: string;
@@ -45,12 +51,14 @@ export interface MRT_Localization {
45
51
  toggleSelectAll: string;
46
52
  toggleSelectRow: string;
47
53
  ungroupByColumn: string;
54
+ unpin: string;
48
55
  }
49
56
 
50
57
  export const MRT_DefaultLocalization_EN: MRT_Localization = {
51
58
  actions: 'Actions',
52
59
  cancel: 'Cancel',
53
60
  changeFilterMode: 'Change filter mode',
61
+ changeSearchMode: 'Change search mode',
54
62
  clearFilter: 'Clear filter',
55
63
  clearSearch: 'Clear search',
56
64
  clearSort: 'Clear sort',
@@ -60,12 +68,13 @@ export const MRT_DefaultLocalization_EN: MRT_Localization = {
60
68
  edit: 'Edit',
61
69
  expand: 'Expand',
62
70
  expandAll: 'Expand all',
71
+ filterBestMatch: 'Best Match',
72
+ filterBestMatchFirst: 'Best Match First',
63
73
  filterByColumn: 'Filter by {column}',
64
- filterContains: 'Contains Exact',
74
+ filterContains: 'Contains',
65
75
  filterEmpty: 'Empty',
66
76
  filterEndsWith: 'Ends With',
67
77
  filterEquals: 'Equals',
68
- filterFuzzy: 'Fuzzy Match',
69
78
  filterGreaterThan: 'Greater Than',
70
79
  filterLessThan: 'Less Than',
71
80
  filterMode: 'Filter Mode: {filterType}',
@@ -77,11 +86,16 @@ export const MRT_DefaultLocalization_EN: MRT_Localization = {
77
86
  groupedBy: 'Grouped by ',
78
87
  hideAll: 'Hide all',
79
88
  hideColumn: 'Hide {column} column',
89
+ pinToLeft: 'Pin to left',
90
+ pinToRight: 'Pin to right',
80
91
  rowActions: 'Row Actions',
92
+ rowNumbers: 'Row Numbers',
81
93
  save: 'Save',
82
94
  search: 'Search',
83
95
  selectedCountOfRowCountRowsSelected:
84
96
  '{selectedCount} of {rowCount} row(s) selected',
97
+
98
+ select: 'Select',
85
99
  showAll: 'Show all',
86
100
  showAllColumns: 'Show all columns',
87
101
  showHideColumns: 'Show/Hide columns',
@@ -95,4 +109,5 @@ export const MRT_DefaultLocalization_EN: MRT_Localization = {
95
109
  toggleSelectAll: 'Toggle select all',
96
110
  toggleSelectRow: 'Toggle select row',
97
111
  ungroupByColumn: 'Ungroup by {column}',
112
+ unpin: 'Unpin',
98
113
  };