material-react-table 0.6.1 → 0.6.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.
- package/dist/MaterialReactTable.d.ts +13 -5
- package/dist/filtersFNs.d.ts +2 -10
- package/dist/material-react-table.cjs.development.js +145 -146
- package/dist/material-react-table.cjs.development.js.map +1 -1
- package/dist/material-react-table.cjs.production.min.js +1 -1
- package/dist/material-react-table.cjs.production.min.js.map +1 -1
- package/dist/material-react-table.esm.js +146 -147
- package/dist/material-react-table.esm.js.map +1 -1
- package/dist/useMRT.d.ts +4 -0
- package/package.json +1 -1
- package/src/MaterialReactTable.tsx +59 -47
- package/src/filtersFNs.ts +4 -15
- package/src/inputs/MRT_FilterTextField.tsx +1 -0
- package/src/useMRT.tsx +27 -24
package/dist/useMRT.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import React, { PropsWithChildren, Dispatch, SetStateAction } from 'react';
|
|
2
2
|
import type { MRT_FilterType, MRT_Row, MRT_TableInstance } from '.';
|
|
3
|
+
import { MRT_FILTER_TYPE } from './enums';
|
|
3
4
|
import { MRT_Icons } from './icons';
|
|
4
5
|
import { MRT_Localization } from './localization';
|
|
5
6
|
import { MaterialReactTableProps } from './MaterialReactTable';
|
|
@@ -8,6 +9,9 @@ export declare type UseMRT<D extends {} = {}> = MaterialReactTableProps<D> & {
|
|
|
8
9
|
anyRowsExpanded: boolean;
|
|
9
10
|
icons: MRT_Icons;
|
|
10
11
|
idPrefix: string;
|
|
12
|
+
filterTypes: {
|
|
13
|
+
[key in MRT_FILTER_TYPE]: any;
|
|
14
|
+
};
|
|
11
15
|
localization: MRT_Localization;
|
|
12
16
|
setCurrentEditingRow: Dispatch<SetStateAction<MRT_Row<D> | null>>;
|
|
13
17
|
setCurrentFilterTypes: Dispatch<SetStateAction<{
|
package/package.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.6.
|
|
2
|
+
"version": "0.6.2",
|
|
3
3
|
"license": "MIT",
|
|
4
4
|
"name": "material-react-table",
|
|
5
5
|
"description": "A fully featured Material-UI implementation of react-table, inspired by material-table and the mui DataGrid, written from the ground up in TypeScript.",
|
|
@@ -20,7 +20,7 @@ import {
|
|
|
20
20
|
Column,
|
|
21
21
|
ColumnInstance,
|
|
22
22
|
FilterType,
|
|
23
|
-
|
|
23
|
+
ColumnInterface,
|
|
24
24
|
HeaderGroup,
|
|
25
25
|
Row,
|
|
26
26
|
TableInstance,
|
|
@@ -78,6 +78,7 @@ import { MRT_TableContainer } from './table/MRT_TableContainer';
|
|
|
78
78
|
import { MRT_Localization, MRT_DefaultLocalization_EN } from './localization';
|
|
79
79
|
import { MRT_Default_Icons, MRT_Icons } from './icons';
|
|
80
80
|
import { MRT_FILTER_TYPE } from './enums';
|
|
81
|
+
import { defaultFilterFNs } from './filtersFNs';
|
|
81
82
|
|
|
82
83
|
export type MRT_TableOptions<D extends {} = {}> = TableOptions<D> &
|
|
83
84
|
UseExpandedOptions<D> &
|
|
@@ -115,57 +116,60 @@ export type MRT_TableInstance<D extends {} = {}> = TableInstance<D> &
|
|
|
115
116
|
getToggleAllRowsExpandedProps: () => void;
|
|
116
117
|
};
|
|
117
118
|
|
|
118
|
-
export type MRT_ColumnInterface<D extends {} = {}> =
|
|
119
|
-
// ColumnInterface<D> &
|
|
119
|
+
export type MRT_ColumnInterface<D extends {} = {}> = ColumnInterface<D> &
|
|
120
120
|
UseFiltersColumnOptions<D> &
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
121
|
+
UseGlobalFiltersColumnOptions<D> &
|
|
122
|
+
UseGroupByColumnOptions<D> &
|
|
123
|
+
UseResizeColumnsColumnOptions<D> &
|
|
124
|
+
UseSortByColumnOptions<D> & {
|
|
125
|
+
Edit?: ({
|
|
126
|
+
cell,
|
|
127
|
+
onChange,
|
|
128
|
+
}: {
|
|
129
|
+
cell: MRT_Cell<D>;
|
|
130
|
+
onChange?: (event: ChangeEvent<HTMLInputElement>) => void;
|
|
131
|
+
}) => ReactNode;
|
|
132
|
+
Filter?: ({ column }: { column: MRT_HeaderGroup<D> }) => ReactNode;
|
|
133
|
+
Footer?: string;
|
|
134
|
+
Header?: string;
|
|
135
|
+
accessor: string;
|
|
136
|
+
columns?: (Column<D> & MRT_ColumnInterface<D>)[];
|
|
137
|
+
disableFilters?: boolean;
|
|
138
|
+
editable?: boolean;
|
|
139
|
+
filter?: MRT_FilterType | string | FilterType<D>;
|
|
140
|
+
filterSelectOptions?: (string | { text: string; value: string })[];
|
|
141
|
+
filterTypes: MRT_FILTER_TYPE[];
|
|
142
|
+
muiTableBodyCellEditTextFieldProps?:
|
|
143
|
+
| TextFieldProps
|
|
144
|
+
| ((cell: MRT_Cell<D>) => TextFieldProps);
|
|
145
|
+
muiTableBodyCellProps?:
|
|
146
|
+
| TableCellProps
|
|
147
|
+
| ((cell: MRT_Cell<D>) => TableCellProps);
|
|
148
|
+
muiTableFooterCellProps?:
|
|
149
|
+
| TableCellProps
|
|
150
|
+
| ((column: Column<D>) => TableCellProps);
|
|
151
|
+
muiTableHeadCellFilterTextFieldProps?:
|
|
152
|
+
| TextFieldProps
|
|
153
|
+
| ((column: Column<D>) => TextFieldProps);
|
|
154
|
+
muiTableHeadCellProps?:
|
|
155
|
+
| TableCellProps
|
|
156
|
+
| ((column: Column<D>) => TableCellProps);
|
|
157
|
+
onCellEditChange?: (
|
|
158
|
+
event: ChangeEvent<HTMLInputElement>,
|
|
159
|
+
cell: MRT_Cell<D>,
|
|
160
|
+
) => void;
|
|
161
|
+
onFilterChange?: (
|
|
162
|
+
event: ChangeEvent<HTMLInputElement>,
|
|
163
|
+
filterValue: any,
|
|
164
|
+
) => void;
|
|
165
|
+
};
|
|
163
166
|
|
|
164
167
|
export type MRT_ColumnInstance<D extends {} = {}> = ColumnInstance<D> &
|
|
165
168
|
UseFiltersColumnProps<D> &
|
|
166
169
|
UseGroupByColumnProps<D> &
|
|
167
170
|
UseResizeColumnsColumnProps<D> &
|
|
168
|
-
UseSortByColumnProps<D> &
|
|
171
|
+
UseSortByColumnProps<D> &
|
|
172
|
+
MRT_ColumnInterface<D> & {
|
|
169
173
|
columns?: MRT_ColumnInstance<D>[];
|
|
170
174
|
};
|
|
171
175
|
|
|
@@ -185,7 +189,9 @@ export type MRT_Row<D extends {} = {}> = Row<D> &
|
|
|
185
189
|
|
|
186
190
|
export type MRT_Cell<D extends {} = {}, _V = any> = Cell<D> &
|
|
187
191
|
UseGroupByCellProps<D> &
|
|
188
|
-
UseRowStateCellProps<D> & {
|
|
192
|
+
UseRowStateCellProps<D> & {
|
|
193
|
+
column: MRT_ColumnInstance<D>;
|
|
194
|
+
};
|
|
189
195
|
|
|
190
196
|
export type MRT_FilterType = MRT_FILTER_TYPE | Function;
|
|
191
197
|
|
|
@@ -232,6 +238,7 @@ export type MaterialReactTableProps<D extends {} = {}> = UseTableOptions<D> &
|
|
|
232
238
|
enableRowEditing?: boolean;
|
|
233
239
|
enableRowNumbers?: boolean;
|
|
234
240
|
enableSelection?: boolean;
|
|
241
|
+
filterTypes?: { [key in MRT_FILTER_TYPE]: any };
|
|
235
242
|
hideTableFooter?: boolean;
|
|
236
243
|
hideTableHead?: boolean;
|
|
237
244
|
hideToolbarBottom?: boolean;
|
|
@@ -362,6 +369,8 @@ export type MaterialReactTableProps<D extends {} = {}> = UseTableOptions<D> &
|
|
|
362
369
|
|
|
363
370
|
export default <D extends {}>({
|
|
364
371
|
defaultColumn = { minWidth: 50, maxWidth: 1000 },
|
|
372
|
+
filterTypes,
|
|
373
|
+
globalFilter = 'fuzzy',
|
|
365
374
|
icons,
|
|
366
375
|
localization,
|
|
367
376
|
positionActionsColumn = 'first',
|
|
@@ -372,6 +381,9 @@ export default <D extends {}>({
|
|
|
372
381
|
}: MaterialReactTableProps<D>) => (
|
|
373
382
|
<MaterialReactTableProvider
|
|
374
383
|
defaultColumn={defaultColumn}
|
|
384
|
+
// @ts-ignore
|
|
385
|
+
filterTypes={{ ...defaultFilterFNs, ...filterTypes }}
|
|
386
|
+
globalFilter={globalFilter}
|
|
375
387
|
icons={{ ...MRT_Default_Icons, ...icons }}
|
|
376
388
|
localization={{ ...MRT_DefaultLocalization_EN, ...localization }}
|
|
377
389
|
positionActionsColumn={positionActionsColumn}
|
package/src/filtersFNs.ts
CHANGED
|
@@ -1,25 +1,15 @@
|
|
|
1
1
|
import { matchSorter } from 'match-sorter';
|
|
2
2
|
import { MRT_Row } from '.';
|
|
3
3
|
|
|
4
|
-
export const fuzzySearchFN = (
|
|
5
|
-
rows: MRT_Row[],
|
|
6
|
-
columnIds: string[],
|
|
7
|
-
filterValue: string | number,
|
|
8
|
-
) =>
|
|
9
|
-
matchSorter(rows, filterValue.toString().trim(), {
|
|
10
|
-
keys: columnIds.map((c) => `values.${c}`),
|
|
11
|
-
sorter: (rankedItems) => rankedItems,
|
|
12
|
-
});
|
|
13
|
-
|
|
14
|
-
fuzzySearchFN.autoRemove = (val: any) => !val;
|
|
15
|
-
|
|
16
4
|
export const fuzzyFilterFN = (
|
|
17
5
|
rows: MRT_Row[],
|
|
18
|
-
|
|
6
|
+
columnIds: string[] | string,
|
|
19
7
|
filterValue: string | number,
|
|
20
8
|
) =>
|
|
21
9
|
matchSorter(rows, filterValue.toString().trim(), {
|
|
22
|
-
keys:
|
|
10
|
+
keys: Array.isArray(columnIds)
|
|
11
|
+
? columnIds.map((c) => `values.${c}`)
|
|
12
|
+
: [`values.${columnIds}`],
|
|
23
13
|
sorter: (rankedItems) => rankedItems,
|
|
24
14
|
});
|
|
25
15
|
|
|
@@ -146,7 +136,6 @@ export const defaultFilterFNs = {
|
|
|
146
136
|
endsWith: endsWithFilterFN,
|
|
147
137
|
equals: equalsFilterFN,
|
|
148
138
|
fuzzy: fuzzyFilterFN,
|
|
149
|
-
globalFuzzy: fuzzySearchFN,
|
|
150
139
|
greaterThan: greaterThanFilterFN,
|
|
151
140
|
lessThan: lessThanFilterFN,
|
|
152
141
|
notEmpty: notEmptyFilterFN,
|
|
@@ -149,6 +149,7 @@ export const MRT_FilterTextField: FC<Props> = ({ column }) => {
|
|
|
149
149
|
<Tooltip arrow title={localization.changeFilterMode}>
|
|
150
150
|
<span>
|
|
151
151
|
<IconButton
|
|
152
|
+
aria-label={localization.changeFilterMode}
|
|
152
153
|
onClick={handleFilterMenuOpen}
|
|
153
154
|
size="small"
|
|
154
155
|
sx={{ height: '1.75rem', width: '1.75rem' }}
|
package/src/useMRT.tsx
CHANGED
|
@@ -22,9 +22,13 @@ import {
|
|
|
22
22
|
useSortBy,
|
|
23
23
|
useTable,
|
|
24
24
|
} from 'react-table';
|
|
25
|
-
import type {
|
|
25
|
+
import type {
|
|
26
|
+
MRT_ColumnInterface,
|
|
27
|
+
MRT_FilterType,
|
|
28
|
+
MRT_Row,
|
|
29
|
+
MRT_TableInstance,
|
|
30
|
+
} from '.';
|
|
26
31
|
import { MRT_FILTER_TYPE } from './enums';
|
|
27
|
-
import { defaultFilterFNs } from './filtersFNs';
|
|
28
32
|
import { MRT_Icons } from './icons';
|
|
29
33
|
import { MRT_Localization } from './localization';
|
|
30
34
|
import { MaterialReactTableProps } from './MaterialReactTable';
|
|
@@ -34,6 +38,7 @@ export type UseMRT<D extends {} = {}> = MaterialReactTableProps<D> & {
|
|
|
34
38
|
anyRowsExpanded: boolean;
|
|
35
39
|
icons: MRT_Icons;
|
|
36
40
|
idPrefix: string;
|
|
41
|
+
filterTypes: { [key in MRT_FILTER_TYPE]: any };
|
|
37
42
|
localization: MRT_Localization;
|
|
38
43
|
setCurrentEditingRow: Dispatch<SetStateAction<MRT_Row<D> | null>>;
|
|
39
44
|
setCurrentFilterTypes: Dispatch<
|
|
@@ -83,16 +88,6 @@ export const MaterialReactTableProvider = <D extends {} = {}>(
|
|
|
83
88
|
props.initialState?.showSearch ?? false,
|
|
84
89
|
);
|
|
85
90
|
|
|
86
|
-
const filterTypes = useMemo<{
|
|
87
|
-
[key in MRT_FILTER_TYPE]: any;
|
|
88
|
-
}>(
|
|
89
|
-
() => ({
|
|
90
|
-
...defaultFilterFNs,
|
|
91
|
-
...props.filterTypes,
|
|
92
|
-
}),
|
|
93
|
-
[props.filterTypes],
|
|
94
|
-
);
|
|
95
|
-
|
|
96
91
|
const findLowestLevelCols = useCallback(() => {
|
|
97
92
|
let lowestLevelColumns: any[] = props.columns;
|
|
98
93
|
let currentCols: any[] = props.columns;
|
|
@@ -123,25 +118,33 @@ export const MaterialReactTableProvider = <D extends {} = {}>(
|
|
|
123
118
|
),
|
|
124
119
|
);
|
|
125
120
|
|
|
126
|
-
const
|
|
127
|
-
() =>
|
|
128
|
-
|
|
129
|
-
column.
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
121
|
+
const applyFiltersToColumns = useCallback(
|
|
122
|
+
(cols: MRT_ColumnInterface[]) =>
|
|
123
|
+
cols.map((column) => {
|
|
124
|
+
if (column.columns) {
|
|
125
|
+
applyFiltersToColumns(column.columns);
|
|
126
|
+
} else {
|
|
127
|
+
column.filter =
|
|
128
|
+
props?.filterTypes?.[
|
|
129
|
+
currentFilterTypes[column.accessor as string] as MRT_FILTER_TYPE
|
|
130
|
+
];
|
|
131
|
+
}
|
|
133
132
|
return column;
|
|
134
133
|
}),
|
|
135
|
-
[props.
|
|
134
|
+
[currentFilterTypes, props.filterTypes],
|
|
135
|
+
);
|
|
136
|
+
|
|
137
|
+
const columns = useMemo(
|
|
138
|
+
() => applyFiltersToColumns(props.columns),
|
|
139
|
+
[props.columns, applyFiltersToColumns],
|
|
136
140
|
);
|
|
137
141
|
|
|
138
142
|
const tableInstance = useTable(
|
|
143
|
+
// @ts-ignore
|
|
139
144
|
{
|
|
140
145
|
...props,
|
|
141
|
-
columns,
|
|
142
146
|
// @ts-ignore
|
|
143
|
-
|
|
144
|
-
globalFilter: props.globalFilter ?? 'globalFuzzy',
|
|
147
|
+
columns,
|
|
145
148
|
useControlledState: (state) =>
|
|
146
149
|
useMemo(
|
|
147
150
|
() => ({
|
|
@@ -167,7 +170,7 @@ export const MaterialReactTableProvider = <D extends {} = {}>(
|
|
|
167
170
|
),
|
|
168
171
|
},
|
|
169
172
|
...hooks,
|
|
170
|
-
) as MRT_TableInstance<D>;
|
|
173
|
+
) as unknown as MRT_TableInstance<D>;
|
|
171
174
|
|
|
172
175
|
const idPrefix = useMemo(
|
|
173
176
|
() => props.idPrefix ?? Math.random().toString(36).substring(2, 9),
|