material-react-table 1.0.0-beta.12 → 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.
@@ -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
  */
@@ -294,6 +295,10 @@ export declare type MRT_ColumnDef<TData extends Record<string, any> = {}> = Omit
294
295
  table: MRT_TableInstance<TData>;
295
296
  column: MRT_Column<TData>;
296
297
  }) => IconButtonProps);
298
+ muiTableHeadCellFilterCheckboxProps?: CheckboxProps | (({ column, table, }: {
299
+ column: MRT_Column<TData>;
300
+ table: MRT_TableInstance<TData>;
301
+ }) => CheckboxProps);
297
302
  muiTableHeadCellFilterTextFieldProps?: TextFieldProps | (({ table, column, rangeFilterIndex, }: {
298
303
  table: MRT_TableInstance<TData>;
299
304
  column: MRT_Column<TData>;
@@ -490,6 +495,10 @@ export declare type MaterialReactTableProps<TData extends Record<string, any> =
490
495
  table: MRT_TableInstance<TData>;
491
496
  column: MRT_Column<TData>;
492
497
  }) => IconButtonProps);
498
+ muiTableHeadCellFilterCheckboxProps?: CheckboxProps | (({ column, table, }: {
499
+ column: MRT_Column<TData>;
500
+ table: MRT_TableInstance<TData>;
501
+ }) => CheckboxProps);
493
502
  muiTableHeadCellFilterTextFieldProps?: TextFieldProps | (({ table, column, rangeFilterIndex, }: {
494
503
  table: MRT_TableInstance<TData>;
495
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 }) => {