material-react-table 1.0.0-beta.10 → 1.0.0-beta.13
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/cjs/MaterialReactTable.d.ts +15 -4
- package/dist/cjs/index.js +65 -14
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/inputs/MRT_FilterCheckbox.d.ts +8 -0
- package/dist/cjs/table/MRT_TableRoot.d.ts +4 -0
- package/dist/esm/MaterialReactTable.d.ts +15 -4
- package/dist/esm/inputs/MRT_FilterCheckbox.d.ts +8 -0
- package/dist/esm/material-react-table.esm.js +66 -15
- package/dist/esm/material-react-table.esm.js.map +1 -1
- package/dist/esm/table/MRT_TableRoot.d.ts +4 -0
- package/dist/index.d.ts +16 -5
- package/package.json +1 -1
- package/src/MaterialReactTable.tsx +26 -2
- package/src/body/MRT_TableBodyCell.tsx +1 -1
- package/src/column.utils.ts +5 -1
- package/src/head/MRT_TableHeadCellFilterContainer.tsx +7 -3
- package/src/inputs/MRT_FilterCheckbox.tsx +96 -0
- package/src/inputs/MRT_FilterTextField.tsx +21 -11
- package/src/inputs/MRT_GlobalFilterTextField.tsx +17 -5
|
@@ -186,9 +186,10 @@ export declare type MRT_ColumnDef<TData extends Record<string, any> = {}> = Omit
|
|
|
186
186
|
row: MRT_Row<TData>;
|
|
187
187
|
table: MRT_TableInstance<TData>;
|
|
188
188
|
}) => ReactNode;
|
|
189
|
-
Filter?: ({ column, header, table, }: {
|
|
189
|
+
Filter?: ({ column, header, rangeFilterIndex, table, }: {
|
|
190
190
|
column: MRT_Column<TData>;
|
|
191
191
|
header: MRT_Header<TData>;
|
|
192
|
+
rangeFilterIndex?: number;
|
|
192
193
|
table: MRT_TableInstance<TData>;
|
|
193
194
|
}) => ReactNode;
|
|
194
195
|
Footer?: ReactNode | (({ column, footer, table, }: {
|
|
@@ -245,7 +246,7 @@ export declare type MRT_ColumnDef<TData extends Record<string, any> = {}> = Omit
|
|
|
245
246
|
text: string;
|
|
246
247
|
value: any;
|
|
247
248
|
})[];
|
|
248
|
-
filterVariant?: 'text' | 'select' | 'multi-select' | 'range';
|
|
249
|
+
filterVariant?: 'text' | 'select' | 'multi-select' | 'range' | 'checkbox';
|
|
249
250
|
/**
|
|
250
251
|
* footer must be a string. If you want custom JSX to render the footer, you can also specify a `Footer` option. (Capital F)
|
|
251
252
|
*/
|
|
@@ -276,9 +277,11 @@ export declare type MRT_ColumnDef<TData extends Record<string, any> = {}> = Omit
|
|
|
276
277
|
row: MRT_Row<TData>;
|
|
277
278
|
table: MRT_TableInstance<TData>;
|
|
278
279
|
}) => TextFieldProps);
|
|
279
|
-
muiTableBodyCellProps?: TableCellProps | (({ cell, table, }: {
|
|
280
|
-
table: MRT_TableInstance<TData>;
|
|
280
|
+
muiTableBodyCellProps?: TableCellProps | (({ cell, column, row, table, }: {
|
|
281
281
|
cell: MRT_Cell<TData>;
|
|
282
|
+
column: MRT_Column<TData>;
|
|
283
|
+
row: MRT_Row<TData>;
|
|
284
|
+
table: MRT_TableInstance<TData>;
|
|
282
285
|
}) => TableCellProps);
|
|
283
286
|
muiTableFooterCellProps?: TableCellProps | (({ table, column, }: {
|
|
284
287
|
table: MRT_TableInstance<TData>;
|
|
@@ -292,6 +295,10 @@ export declare type MRT_ColumnDef<TData extends Record<string, any> = {}> = Omit
|
|
|
292
295
|
table: MRT_TableInstance<TData>;
|
|
293
296
|
column: MRT_Column<TData>;
|
|
294
297
|
}) => IconButtonProps);
|
|
298
|
+
muiTableHeadCellFilterCheckboxProps?: CheckboxProps | (({ column, table, }: {
|
|
299
|
+
column: MRT_Column<TData>;
|
|
300
|
+
table: MRT_TableInstance<TData>;
|
|
301
|
+
}) => CheckboxProps);
|
|
295
302
|
muiTableHeadCellFilterTextFieldProps?: TextFieldProps | (({ table, column, rangeFilterIndex, }: {
|
|
296
303
|
table: MRT_TableInstance<TData>;
|
|
297
304
|
column: MRT_Column<TData>;
|
|
@@ -488,6 +495,10 @@ export declare type MaterialReactTableProps<TData extends Record<string, any> =
|
|
|
488
495
|
table: MRT_TableInstance<TData>;
|
|
489
496
|
column: MRT_Column<TData>;
|
|
490
497
|
}) => IconButtonProps);
|
|
498
|
+
muiTableHeadCellFilterCheckboxProps?: CheckboxProps | (({ column, table, }: {
|
|
499
|
+
column: MRT_Column<TData>;
|
|
500
|
+
table: MRT_TableInstance<TData>;
|
|
501
|
+
}) => CheckboxProps);
|
|
491
502
|
muiTableHeadCellFilterTextFieldProps?: TextFieldProps | (({ table, column, rangeFilterIndex, }: {
|
|
492
503
|
table: MRT_TableInstance<TData>;
|
|
493
504
|
column: MRT_Column<TData>;
|
package/dist/cjs/index.js
CHANGED
|
@@ -599,10 +599,11 @@ const getDefaultColumnOrderIds = (props) => [
|
|
|
599
599
|
const getDefaultColumnFilterFn = (columnDef) => {
|
|
600
600
|
if (columnDef.filterVariant === 'multi-select')
|
|
601
601
|
return 'arrIncludesSome';
|
|
602
|
-
if (columnDef.filterVariant === 'select')
|
|
603
|
-
return 'equals';
|
|
604
602
|
if (columnDef.filterVariant === 'range')
|
|
605
603
|
return 'betweenInclusive';
|
|
604
|
+
if (columnDef.filterVariant === 'select' ||
|
|
605
|
+
columnDef.filterVariant === 'checkbox')
|
|
606
|
+
return 'equals';
|
|
606
607
|
return 'fuzzy';
|
|
607
608
|
};
|
|
608
609
|
const getIsLastLeftPinnedColumn = (table, column) => {
|
|
@@ -1051,6 +1052,9 @@ const MRT_GlobalFilterTextField = ({ table, }) => {
|
|
|
1051
1052
|
var _a;
|
|
1052
1053
|
const { getState, setGlobalFilter, options: { enableGlobalFilterModes, icons: { SearchIcon, CloseIcon }, localization, muiSearchTextFieldProps, }, refs: { searchInputRef }, } = table;
|
|
1053
1054
|
const { globalFilter, showGlobalFilter } = getState();
|
|
1055
|
+
const textFieldProps = muiSearchTextFieldProps instanceof Function
|
|
1056
|
+
? muiSearchTextFieldProps({ table })
|
|
1057
|
+
: muiSearchTextFieldProps;
|
|
1054
1058
|
const [anchorEl, setAnchorEl] = React.useState(null);
|
|
1055
1059
|
const [searchValue, setSearchValue] = React.useState(globalFilter !== null && globalFilter !== void 0 ? globalFilter : '');
|
|
1056
1060
|
const handleChangeDebounced = React.useCallback(material.debounce((event) => {
|
|
@@ -1068,9 +1072,11 @@ const MRT_GlobalFilterTextField = ({ table, }) => {
|
|
|
1068
1072
|
setSearchValue('');
|
|
1069
1073
|
setGlobalFilter(undefined);
|
|
1070
1074
|
};
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1075
|
+
React.useEffect(() => {
|
|
1076
|
+
if (globalFilter === undefined) {
|
|
1077
|
+
handleClear();
|
|
1078
|
+
}
|
|
1079
|
+
}, [globalFilter]);
|
|
1074
1080
|
return (React__default["default"].createElement(material.Collapse, { in: showGlobalFilter, orientation: "horizontal", unmountOnExit: true, mountOnEnter: true },
|
|
1075
1081
|
React__default["default"].createElement(material.TextField, Object.assign({ placeholder: localization.search, onChange: handleChange, value: searchValue !== null && searchValue !== void 0 ? searchValue : '', variant: "standard", InputProps: {
|
|
1076
1082
|
startAdornment: enableGlobalFilterModes ? (React__default["default"].createElement(material.InputAdornment, { position: "start" },
|
|
@@ -1460,8 +1466,10 @@ const MRT_FilterTextField = ({ header, rangeFilterIndex, table, }) => {
|
|
|
1460
1466
|
});
|
|
1461
1467
|
const handleChangeDebounced = React.useCallback(material.debounce((event) => {
|
|
1462
1468
|
let value = textFieldProps.type === 'date'
|
|
1463
|
-
?
|
|
1464
|
-
:
|
|
1469
|
+
? event.target.valueAsDate
|
|
1470
|
+
: textFieldProps.type === 'number'
|
|
1471
|
+
? event.target.valueAsNumber
|
|
1472
|
+
: event.target.value;
|
|
1465
1473
|
if (isRangeFilter) {
|
|
1466
1474
|
column.setFilterValue((old) => {
|
|
1467
1475
|
const newFilterValues = old !== null && old !== void 0 ? old : ['', ''];
|
|
@@ -1503,8 +1511,13 @@ const MRT_FilterTextField = ({ header, rangeFilterIndex, table, }) => {
|
|
|
1503
1511
|
const handleFilterMenuOpen = (event) => {
|
|
1504
1512
|
setAnchorEl(event.currentTarget);
|
|
1505
1513
|
};
|
|
1514
|
+
React.useEffect(() => {
|
|
1515
|
+
if (column.getFilterValue() === undefined) {
|
|
1516
|
+
handleClear();
|
|
1517
|
+
}
|
|
1518
|
+
}, [column.getFilterValue()]);
|
|
1506
1519
|
if (columnDef.Filter) {
|
|
1507
|
-
return React__default["default"].createElement(React__default["default"].Fragment, null, (_e = columnDef.Filter) === null || _e === void 0 ? void 0 : _e.call(columnDef, { column, header, table }));
|
|
1520
|
+
return (React__default["default"].createElement(React__default["default"].Fragment, null, (_e = columnDef.Filter) === null || _e === void 0 ? void 0 : _e.call(columnDef, { column, header, rangeFilterIndex, table })));
|
|
1508
1521
|
}
|
|
1509
1522
|
return (React__default["default"].createElement(React__default["default"].Fragment, null,
|
|
1510
1523
|
React__default["default"].createElement(material.TextField, Object.assign({ fullWidth: true, inputProps: {
|
|
@@ -1519,7 +1532,7 @@ const MRT_FilterTextField = ({ header, rangeFilterIndex, table, }) => {
|
|
|
1519
1532
|
localization[`filter${((_f = currentFilterOption === null || currentFilterOption === void 0 ? void 0 : currentFilterOption.charAt(0)) === null || _f === void 0 ? void 0 : _f.toUpperCase()) +
|
|
1520
1533
|
(currentFilterOption === null || currentFilterOption === void 0 ? void 0 : currentFilterOption.slice(1))}`]))) : null, FormHelperTextProps: {
|
|
1521
1534
|
sx: {
|
|
1522
|
-
fontSize: '0.
|
|
1535
|
+
fontSize: '0.75rem',
|
|
1523
1536
|
lineHeight: '0.8rem',
|
|
1524
1537
|
whiteSpace: 'nowrap',
|
|
1525
1538
|
},
|
|
@@ -1560,11 +1573,11 @@ const MRT_FilterTextField = ({ header, rangeFilterIndex, table, }) => {
|
|
|
1560
1573
|
if (textFieldProps.inputRef) {
|
|
1561
1574
|
textFieldProps.inputRef = inputRef;
|
|
1562
1575
|
}
|
|
1563
|
-
}, sx: (theme) => (Object.assign({ p: 0, minWidth:
|
|
1564
|
-
? '
|
|
1576
|
+
}, sx: (theme) => (Object.assign({ p: 0, minWidth: isRangeFilter
|
|
1577
|
+
? '100px'
|
|
1565
1578
|
: !filterChipLabel
|
|
1566
1579
|
? '120px'
|
|
1567
|
-
: 'auto', width: '100%', '&
|
|
1580
|
+
: 'auto', width: '100%', '& .MuiSelect-icon': {
|
|
1568
1581
|
mr: '1.5rem',
|
|
1569
1582
|
} }, ((textFieldProps === null || textFieldProps === void 0 ? void 0 : textFieldProps.sx) instanceof Function
|
|
1570
1583
|
? textFieldProps.sx(theme)
|
|
@@ -1601,12 +1614,50 @@ const MRT_FilterRangeFields = ({ header, table }) => {
|
|
|
1601
1614
|
React__default["default"].createElement(MRT_FilterTextField, { header: header, rangeFilterIndex: 1, table: table })));
|
|
1602
1615
|
};
|
|
1603
1616
|
|
|
1617
|
+
const MRT_FilterCheckbox = ({ column, table }) => {
|
|
1618
|
+
var _a, _b, _c;
|
|
1619
|
+
const { getState, options: { localization, muiTableHeadCellFilterCheckboxProps }, } = table;
|
|
1620
|
+
const { density } = getState();
|
|
1621
|
+
const { columnDef } = column;
|
|
1622
|
+
const mTableHeadCellFilterCheckboxProps = muiTableHeadCellFilterCheckboxProps instanceof Function
|
|
1623
|
+
? muiTableHeadCellFilterCheckboxProps({
|
|
1624
|
+
column,
|
|
1625
|
+
table,
|
|
1626
|
+
})
|
|
1627
|
+
: muiTableHeadCellFilterCheckboxProps;
|
|
1628
|
+
const mcTableHeadCellFilterCheckboxProps = columnDef.muiTableHeadCellFilterCheckboxProps instanceof Function
|
|
1629
|
+
? columnDef.muiTableHeadCellFilterCheckboxProps({
|
|
1630
|
+
column,
|
|
1631
|
+
table,
|
|
1632
|
+
})
|
|
1633
|
+
: columnDef.muiTableHeadCellFilterCheckboxProps;
|
|
1634
|
+
const checkboxProps = Object.assign(Object.assign({}, mTableHeadCellFilterCheckboxProps), mcTableHeadCellFilterCheckboxProps);
|
|
1635
|
+
const filterLabel = (_a = localization.filterByColumn) === null || _a === void 0 ? void 0 : _a.replace('{column}', columnDef.header);
|
|
1636
|
+
return (React__default["default"].createElement(material.Tooltip, { arrow: true, enterDelay: 1000, enterNextDelay: 1000, title: (_b = checkboxProps === null || checkboxProps === void 0 ? void 0 : checkboxProps.title) !== null && _b !== void 0 ? _b : filterLabel },
|
|
1637
|
+
React__default["default"].createElement(material.FormControlLabel, { control: React__default["default"].createElement(material.Checkbox, Object.assign({ checked: column.getFilterValue() === 'true', indeterminate: column.getFilterValue() === undefined, color: column.getFilterValue() === undefined ? 'default' : 'primary', size: density === 'compact' ? 'small' : 'medium' }, checkboxProps, { onClick: (e) => {
|
|
1638
|
+
var _a;
|
|
1639
|
+
e.stopPropagation();
|
|
1640
|
+
(_a = checkboxProps === null || checkboxProps === void 0 ? void 0 : checkboxProps.onClick) === null || _a === void 0 ? void 0 : _a.call(checkboxProps, e);
|
|
1641
|
+
}, onChange: (e, checked) => {
|
|
1642
|
+
var _a;
|
|
1643
|
+
column.setFilterValue(column.getFilterValue() === undefined
|
|
1644
|
+
? 'true'
|
|
1645
|
+
: column.getFilterValue() === 'true'
|
|
1646
|
+
? 'false'
|
|
1647
|
+
: undefined);
|
|
1648
|
+
(_a = checkboxProps === null || checkboxProps === void 0 ? void 0 : checkboxProps.onChange) === null || _a === void 0 ? void 0 : _a.call(checkboxProps, e, checked);
|
|
1649
|
+
}, sx: (theme) => (Object.assign({ height: '2.5rem', width: '2.5rem' }, ((checkboxProps === null || checkboxProps === void 0 ? void 0 : checkboxProps.sx) instanceof Function
|
|
1650
|
+
? checkboxProps.sx(theme)
|
|
1651
|
+
: checkboxProps === null || checkboxProps === void 0 ? void 0 : checkboxProps.sx))) })), disableTypography: true, label: (_c = checkboxProps.title) !== null && _c !== void 0 ? _c : filterLabel, sx: { color: 'text.secondary', mt: '-4px', fontWeight: 'normal' }, title: undefined })));
|
|
1652
|
+
};
|
|
1653
|
+
|
|
1604
1654
|
const MRT_TableHeadCellFilterContainer = ({ header, table, }) => {
|
|
1605
1655
|
const { getState } = table;
|
|
1606
1656
|
const { showColumnFilters } = getState();
|
|
1607
1657
|
const { column } = header;
|
|
1608
1658
|
const { columnDef } = column;
|
|
1609
|
-
return (React__default["default"].createElement(material.Collapse, { in: showColumnFilters, mountOnEnter: true, unmountOnExit: true },
|
|
1659
|
+
return (React__default["default"].createElement(material.Collapse, { in: showColumnFilters, mountOnEnter: true, unmountOnExit: true }, columnDef.filterVariant === 'checkbox' ? (React__default["default"].createElement(MRT_FilterCheckbox, { column: column, table: table })) : columnDef.filterVariant === 'range' ||
|
|
1660
|
+
['between', 'betweenInclusive', 'inNumberRange'].includes(columnDef._filterFn) ? (React__default["default"].createElement(MRT_FilterRangeFields, { header: header, table: table })) : (React__default["default"].createElement(MRT_FilterTextField, { header: header, table: table }))));
|
|
1610
1661
|
};
|
|
1611
1662
|
|
|
1612
1663
|
const MRT_TableHeadCellFilterLabel = ({ header, table }) => {
|
|
@@ -2010,7 +2061,7 @@ const MRT_TableBodyCell = ({ cell, enableHover, rowIndex, rowRef, table, }) => {
|
|
|
2010
2061
|
? muiTableBodyCellProps({ cell, column, row, table })
|
|
2011
2062
|
: muiTableBodyCellProps;
|
|
2012
2063
|
const mcTableCellBodyProps = columnDef.muiTableBodyCellProps instanceof Function
|
|
2013
|
-
? columnDef.muiTableBodyCellProps({ cell, table })
|
|
2064
|
+
? columnDef.muiTableBodyCellProps({ cell, column, row, table })
|
|
2014
2065
|
: columnDef.muiTableBodyCellProps;
|
|
2015
2066
|
const tableCellProps = Object.assign(Object.assign({}, mTableCellBodyProps), mcTableCellBodyProps);
|
|
2016
2067
|
const skeletonProps = muiTableBodyCellSkeletonProps instanceof Function
|