material-react-table 1.9.0 → 1.9.1

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/index.js CHANGED
@@ -631,6 +631,9 @@ const mrtFilterOptions = (localization) => [
631
631
  divider: false,
632
632
  },
633
633
  ];
634
+ const rangeModes = ['between', 'betweenInclusive', 'inNumberRange'];
635
+ const emptyModes = ['empty', 'notEmpty'];
636
+ const arrModes = ['arrIncludesSome', 'arrIncludesAll', 'arrIncludes'];
634
637
  const MRT_FilterOptionMenu = ({ anchorEl, header, onSelect, setAnchorEl, setFilterValue, table, }) => {
635
638
  var _a, _b, _c, _d;
636
639
  const { getState, options: { columnFilterModeOptions, globalFilterModeOptions, localization, renderColumnFilterModeMenuItems, renderGlobalFilterModeMenuItems, }, setColumnFilterFns, setGlobalFilterFn, } = table;
@@ -646,36 +649,62 @@ const MRT_FilterOptionMenu = ({ anchorEl, header, onSelect, setAnchorEl, setFilt
646
649
  globalFilterModeOptions.includes(filterOption.option)) &&
647
650
  ['fuzzy', 'contains', 'startsWith'].includes(filterOption.option)), []);
648
651
  const handleSelectFilterMode = (option) => {
649
- if (header && column) {
652
+ var _a;
653
+ const prevFilterMode = (_a = columnDef === null || columnDef === void 0 ? void 0 : columnDef._filterFn) !== null && _a !== void 0 ? _a : '';
654
+ if (!header || !column) {
655
+ // global filter mode
656
+ setGlobalFilterFn(option);
657
+ }
658
+ else if (option !== prevFilterMode) {
659
+ // column filter mode
650
660
  setColumnFilterFns((prev) => (Object.assign(Object.assign({}, prev), { [header.id]: option })));
651
- if (['empty', 'notEmpty'].includes(option)) {
652
- column.setFilterValue(' ');
661
+ // reset filter value and/or perform new filter render
662
+ if (emptyModes.includes(option)) {
663
+ // will now be empty/notEmpty filter mode
664
+ if (currentFilterValue !== ' ' &&
665
+ !emptyModes.includes(prevFilterMode)) {
666
+ column.setFilterValue(' ');
667
+ }
668
+ else if (currentFilterValue) {
669
+ column.setFilterValue(currentFilterValue); // perform new filter render
670
+ }
653
671
  }
654
672
  else if ((columnDef === null || columnDef === void 0 ? void 0 : columnDef.filterVariant) === 'multi-select' ||
655
- ['arrIncludesSome', 'arrIncludesAll', 'arrIncludes'].includes(option)) {
673
+ arrModes.includes(option)) {
674
+ // will now be array filter mode
656
675
  if (currentFilterValue instanceof String ||
657
676
  (currentFilterValue === null || currentFilterValue === void 0 ? void 0 : currentFilterValue.length)) {
658
677
  column.setFilterValue([]);
659
678
  setFilterValue === null || setFilterValue === void 0 ? void 0 : setFilterValue([]);
660
679
  }
680
+ else if (currentFilterValue) {
681
+ column.setFilterValue(currentFilterValue); // perform new filter render
682
+ }
661
683
  }
662
684
  else if ((columnDef === null || columnDef === void 0 ? void 0 : columnDef.filterVariant) === 'range' ||
663
- ['between', 'betweenInclusive', 'inNumberRange'].includes(option)) {
664
- if (!(currentFilterValue === null || currentFilterValue === void 0 ? void 0 : currentFilterValue.every((v) => v === ''))) {
685
+ rangeModes.includes(option)) {
686
+ // will now be range filter mode
687
+ if (!Array.isArray(currentFilterValue) ||
688
+ (!(currentFilterValue === null || currentFilterValue === void 0 ? void 0 : currentFilterValue.every((v) => v === '')) &&
689
+ !rangeModes.includes(prevFilterMode))) {
665
690
  column.setFilterValue(['', '']);
666
691
  setFilterValue === null || setFilterValue === void 0 ? void 0 : setFilterValue('');
667
692
  }
693
+ else {
694
+ column.setFilterValue(currentFilterValue); // perform new filter render
695
+ }
668
696
  }
669
697
  else {
670
- if (!['', undefined].includes(currentFilterValue)) {
698
+ // will now be single value filter mode
699
+ if (Array.isArray(currentFilterValue)) {
671
700
  column.setFilterValue('');
672
701
  setFilterValue === null || setFilterValue === void 0 ? void 0 : setFilterValue('');
673
702
  }
703
+ else {
704
+ column.setFilterValue(currentFilterValue); // perform new filter render
705
+ }
674
706
  }
675
707
  }
676
- else {
677
- setGlobalFilterFn(option);
678
- }
679
708
  setAnchorEl(null);
680
709
  onSelect === null || onSelect === void 0 ? void 0 : onSelect();
681
710
  };
@@ -1644,7 +1673,7 @@ const MRT_FilterTextField = ({ header, rangeFilterIndex, table, }) => {
1644
1673
  else if (isRangeFilter) {
1645
1674
  setFilterValue('');
1646
1675
  column.setFilterValue((old) => {
1647
- const newFilterValues = old !== null && old !== void 0 ? old : ['', ''];
1676
+ const newFilterValues = (Array.isArray(old) && old) || ['', ''];
1648
1677
  newFilterValues[rangeFilterIndex] = undefined;
1649
1678
  return newFilterValues;
1650
1679
  });
@@ -2523,9 +2552,11 @@ const MRT_TableBodyRow = ({ columnVirtualizer, measureElement, numRows, row, row
2523
2552
  ? `translateY(${virtualRow === null || virtualRow === void 0 ? void 0 : virtualRow.start}px)`
2524
2553
  : undefined, transition: virtualRow ? 'none' : 'all 150ms ease-in-out', width: '100%', '&:hover td': {
2525
2554
  backgroundColor: (tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.hover) !== false
2526
- ? theme.palette.mode === 'dark'
2527
- ? `${styles.lighten(theme.palette.background.default, 0.12)}`
2528
- : `${styles.darken(theme.palette.background.default, 0.05)}`
2555
+ ? row.getIsSelected()
2556
+ ? `${styles.alpha(theme.palette.primary.main, 0.2)}`
2557
+ : theme.palette.mode === 'dark'
2558
+ ? `${styles.lighten(theme.palette.background.default, 0.12)}`
2559
+ : `${styles.darken(theme.palette.background.default, 0.05)}`
2529
2560
  : undefined,
2530
2561
  } }, ((tableRowProps === null || tableRowProps === void 0 ? void 0 : tableRowProps.sx) instanceof Function
2531
2562
  ? tableRowProps.sx(theme)