material-react-table 1.0.0-beta.11 → 1.0.0-beta.14

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.
@@ -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) => {
@@ -1465,8 +1466,10 @@ const MRT_FilterTextField = ({ header, rangeFilterIndex, table, }) => {
1465
1466
  });
1466
1467
  const handleChangeDebounced = React.useCallback(material.debounce((event) => {
1467
1468
  let value = textFieldProps.type === 'date'
1468
- ? new Date(event.target.value)
1469
- : event.target.value;
1469
+ ? event.target.valueAsDate
1470
+ : textFieldProps.type === 'number'
1471
+ ? event.target.valueAsNumber
1472
+ : event.target.value;
1470
1473
  if (isRangeFilter) {
1471
1474
  column.setFilterValue((old) => {
1472
1475
  const newFilterValues = old !== null && old !== void 0 ? old : ['', ''];
@@ -1514,7 +1517,7 @@ const MRT_FilterTextField = ({ header, rangeFilterIndex, table, }) => {
1514
1517
  }
1515
1518
  }, [column.getFilterValue()]);
1516
1519
  if (columnDef.Filter) {
1517
- 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 })));
1518
1521
  }
1519
1522
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
1520
1523
  React__default["default"].createElement(material.TextField, Object.assign({ fullWidth: true, inputProps: {
@@ -1529,7 +1532,7 @@ const MRT_FilterTextField = ({ header, rangeFilterIndex, table, }) => {
1529
1532
  localization[`filter${((_f = currentFilterOption === null || currentFilterOption === void 0 ? void 0 : currentFilterOption.charAt(0)) === null || _f === void 0 ? void 0 : _f.toUpperCase()) +
1530
1533
  (currentFilterOption === null || currentFilterOption === void 0 ? void 0 : currentFilterOption.slice(1))}`]))) : null, FormHelperTextProps: {
1531
1534
  sx: {
1532
- fontSize: '0.6rem',
1535
+ fontSize: '0.75rem',
1533
1536
  lineHeight: '0.8rem',
1534
1537
  whiteSpace: 'nowrap',
1535
1538
  },
@@ -1570,8 +1573,8 @@ const MRT_FilterTextField = ({ header, rangeFilterIndex, table, }) => {
1570
1573
  if (textFieldProps.inputRef) {
1571
1574
  textFieldProps.inputRef = inputRef;
1572
1575
  }
1573
- }, sx: (theme) => (Object.assign({ p: 0, minWidth: columnDef.filterVariant === 'range'
1574
- ? '90px'
1576
+ }, sx: (theme) => (Object.assign({ p: 0, minWidth: isRangeFilter
1577
+ ? '100px'
1575
1578
  : !filterChipLabel
1576
1579
  ? '120px'
1577
1580
  : 'auto', width: '100%', '& .MuiSelect-icon': {
@@ -1611,12 +1614,50 @@ const MRT_FilterRangeFields = ({ header, table }) => {
1611
1614
  React__default["default"].createElement(MRT_FilterTextField, { header: header, rangeFilterIndex: 1, table: table })));
1612
1615
  };
1613
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
+
1614
1654
  const MRT_TableHeadCellFilterContainer = ({ header, table, }) => {
1615
1655
  const { getState } = table;
1616
1656
  const { showColumnFilters } = getState();
1617
1657
  const { column } = header;
1618
1658
  const { columnDef } = column;
1619
- return (React__default["default"].createElement(material.Collapse, { in: showColumnFilters, mountOnEnter: true, unmountOnExit: true }, ['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 }))));
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 }))));
1620
1661
  };
1621
1662
 
1622
1663
  const MRT_TableHeadCellFilterLabel = ({ header, table }) => {
@@ -2020,7 +2061,7 @@ const MRT_TableBodyCell = ({ cell, enableHover, rowIndex, rowRef, table, }) => {
2020
2061
  ? muiTableBodyCellProps({ cell, column, row, table })
2021
2062
  : muiTableBodyCellProps;
2022
2063
  const mcTableCellBodyProps = columnDef.muiTableBodyCellProps instanceof Function
2023
- ? columnDef.muiTableBodyCellProps({ cell, table })
2064
+ ? columnDef.muiTableBodyCellProps({ cell, column, row, table })
2024
2065
  : columnDef.muiTableBodyCellProps;
2025
2066
  const tableCellProps = Object.assign(Object.assign({}, mTableCellBodyProps), mcTableCellBodyProps);
2026
2067
  const skeletonProps = muiTableBodyCellSkeletonProps instanceof Function