material-react-table 1.0.0-beta.8 → 1.0.0-beta.9

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.
@@ -6,7 +6,8 @@ interface Props<TData extends Record<string, any> = {}> {
6
6
  header?: MRT_Header<TData>;
7
7
  onSelect?: () => void;
8
8
  setAnchorEl: (anchorEl: HTMLElement | null) => void;
9
+ setFilterValue?: (filterValue: any) => void;
9
10
  table: MRT_TableInstance<TData>;
10
11
  }
11
- export declare const MRT_FilterOptionMenu: <TData extends Record<string, any> = {}>({ anchorEl, header, onSelect, setAnchorEl, table, }: Props<TData>) => JSX.Element;
12
+ export declare const MRT_FilterOptionMenu: <TData extends Record<string, any> = {}>({ anchorEl, header, onSelect, setAnchorEl, setFilterValue, table, }: Props<TData>) => JSX.Element;
12
13
  export {};
package/dist/index.d.ts CHANGED
@@ -660,6 +660,9 @@ declare type MaterialReactTableProps<TData extends Record<string, any> = {}> = O
660
660
  positionPagination?: 'bottom' | 'top' | 'both';
661
661
  positionToolbarAlertBanner?: 'bottom' | 'top' | 'none';
662
662
  positionToolbarDropZone?: 'bottom' | 'top' | 'none' | 'both';
663
+ renderBottomToolbar?: ({ table, }: {
664
+ table: MRT_TableInstance<TData>;
665
+ }) => ReactNode | ReactNode[];
663
666
  renderBottomToolbarCustomActions?: ({ table, }: {
664
667
  table: MRT_TableInstance<TData>;
665
668
  }) => ReactNode;
@@ -696,6 +699,9 @@ declare type MaterialReactTableProps<TData extends Record<string, any> = {}> = O
696
699
  renderToolbarInternalActions?: ({ table, }: {
697
700
  table: MRT_TableInstance<TData>;
698
701
  }) => ReactNode;
702
+ renderTopToolbar?: ({ table, }: {
703
+ table: MRT_TableInstance<TData>;
704
+ }) => ReactNode | ReactNode[];
699
705
  renderTopToolbarCustomActions?: ({ table, }: {
700
706
  table: MRT_TableInstance<TData>;
701
707
  }) => ReactNode;
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.0.0-beta.8",
2
+ "version": "1.0.0-beta.9",
3
3
  "license": "MIT",
4
4
  "name": "material-react-table",
5
5
  "description": "A fully featured Material UI V5 implementation of TanStack React Table V8, written from the ground up in TypeScript.",
@@ -783,6 +783,11 @@ export type MaterialReactTableProps<TData extends Record<string, any> = {}> =
783
783
  positionPagination?: 'bottom' | 'top' | 'both';
784
784
  positionToolbarAlertBanner?: 'bottom' | 'top' | 'none';
785
785
  positionToolbarDropZone?: 'bottom' | 'top' | 'none' | 'both';
786
+ renderBottomToolbar?: ({
787
+ table,
788
+ }: {
789
+ table: MRT_TableInstance<TData>;
790
+ }) => ReactNode | ReactNode[];
786
791
  renderBottomToolbarCustomActions?: ({
787
792
  table,
788
793
  }: {
@@ -847,6 +852,11 @@ export type MaterialReactTableProps<TData extends Record<string, any> = {}> =
847
852
  }: {
848
853
  table: MRT_TableInstance<TData>;
849
854
  }) => ReactNode;
855
+ renderTopToolbar?: ({
856
+ table,
857
+ }: {
858
+ table: MRT_TableInstance<TData>;
859
+ }) => ReactNode | ReactNode[];
850
860
  renderTopToolbarCustomActions?: ({
851
861
  table,
852
862
  }: {
@@ -23,7 +23,7 @@ export const MRT_ToggleGlobalFilterButton = <
23
23
  refs: { searchInputRef },
24
24
  setShowGlobalFilter,
25
25
  } = table;
26
- const { showGlobalFilter } = getState();
26
+ const { globalFilter, showGlobalFilter } = getState();
27
27
 
28
28
  const handleToggleSearch = () => {
29
29
  setShowGlobalFilter(!showGlobalFilter);
@@ -32,7 +32,12 @@ export const MRT_ToggleGlobalFilterButton = <
32
32
 
33
33
  return (
34
34
  <Tooltip arrow title={rest?.title ?? localization.showHideSearch}>
35
- <IconButton onClick={handleToggleSearch} {...rest} title={undefined}>
35
+ <IconButton
36
+ disabled={!!globalFilter}
37
+ onClick={handleToggleSearch}
38
+ {...rest}
39
+ title={undefined}
40
+ >
36
41
  {showGlobalFilter ? <SearchOffIcon /> : <SearchIcon />}
37
42
  </IconButton>
38
43
  </Tooltip>
@@ -3,7 +3,6 @@ import React, {
3
3
  FC,
4
4
  MouseEvent,
5
5
  useCallback,
6
- useEffect,
7
6
  useState,
8
7
  } from 'react';
9
8
  import {
@@ -170,10 +169,6 @@ export const MRT_FilterTextField: FC<Props> = ({
170
169
  setAnchorEl(event.currentTarget);
171
170
  };
172
171
 
173
- useEffect(() => {
174
- handleClear();
175
- }, [columnDef._filterFn]);
176
-
177
172
  if (columnDef.Filter) {
178
173
  return <>{columnDef.Filter?.({ column, header, table })}</>;
179
174
  }
@@ -374,6 +369,7 @@ export const MRT_FilterTextField: FC<Props> = ({
374
369
  header={header}
375
370
  setAnchorEl={setAnchorEl}
376
371
  table={table}
372
+ setFilterValue={setFilterValue}
377
373
  />
378
374
  </>
379
375
  );
@@ -119,6 +119,7 @@ export const MRT_GlobalFilterTextField = <
119
119
  anchorEl={anchorEl}
120
120
  setAnchorEl={setAnchorEl}
121
121
  table={table}
122
+ onSelect={handleClear}
122
123
  />
123
124
  </Collapse>
124
125
  );
@@ -102,6 +102,7 @@ interface Props<TData extends Record<string, any> = {}> {
102
102
  header?: MRT_Header<TData>;
103
103
  onSelect?: () => void;
104
104
  setAnchorEl: (anchorEl: HTMLElement | null) => void;
105
+ setFilterValue?: (filterValue: any) => void;
105
106
  table: MRT_TableInstance<TData>;
106
107
  }
107
108
 
@@ -110,6 +111,7 @@ export const MRT_FilterOptionMenu = <TData extends Record<string, any> = {}>({
110
111
  header,
111
112
  onSelect,
112
113
  setAnchorEl,
114
+ setFilterValue,
113
115
  table,
114
116
  }: Props<TData>) => {
115
117
  const {
@@ -152,10 +154,25 @@ export const MRT_FilterOptionMenu = <TData extends Record<string, any> = {}>({
152
154
  }));
153
155
  if (['empty', 'notEmpty'].includes(option as string)) {
154
156
  column.setFilterValue(' ');
155
- } else if (option === 'between') {
157
+ } else if (
158
+ columnDef?.filterVariant === 'multi-select' ||
159
+ ['arrIncludesSome', 'arrIncludesAll', 'arrIncludes'].includes(
160
+ option as string,
161
+ )
162
+ ) {
163
+ column.setFilterValue([]);
164
+ setFilterValue?.([]);
165
+ } else if (
166
+ columnDef?.filterVariant === 'range' ||
167
+ ['between', 'betweenInclusive', 'inNumberRange'].includes(
168
+ option as MRT_FilterOption,
169
+ )
170
+ ) {
156
171
  column.setFilterValue(['', '']);
172
+ setFilterValue?.('');
157
173
  } else {
158
174
  column.setFilterValue('');
175
+ setFilterValue?.('');
159
176
  }
160
177
  } else {
161
178
  setGlobalFilterFn(option);
@@ -12,7 +12,13 @@ interface Props {
12
12
  export const MRT_TablePaper: FC<Props> = ({ table }) => {
13
13
  const {
14
14
  getState,
15
- options: { enableBottomToolbar, enableTopToolbar, muiTablePaperProps },
15
+ options: {
16
+ enableBottomToolbar,
17
+ enableTopToolbar,
18
+ muiTablePaperProps,
19
+ renderBottomToolbar,
20
+ renderTopToolbar,
21
+ },
16
22
  refs: { tablePaperRef },
17
23
  } = table;
18
24
  const { isFullScreen } = getState();
@@ -53,9 +59,13 @@ export const MRT_TablePaper: FC<Props> = ({ table }) => {
53
59
  : {}),
54
60
  }}
55
61
  >
56
- {enableTopToolbar && <MRT_TopToolbar table={table} />}
62
+ {(enableTopToolbar && renderTopToolbar?.({ table })) ?? (
63
+ <MRT_TopToolbar table={table} />
64
+ )}
57
65
  <MRT_TableContainer table={table} />
58
- {enableBottomToolbar && <MRT_BottomToolbar table={table} />}
66
+ {(enableBottomToolbar && renderBottomToolbar?.({ table })) ?? (
67
+ <MRT_BottomToolbar table={table} />
68
+ )}
59
69
  </Paper>
60
70
  );
61
71
  };