material-react-table 0.40.4 → 0.40.7

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.
@@ -216,12 +216,17 @@ export declare type MRT_ColumnDef<TData extends Record<string, any> = {}> = Omit
216
216
  table: MRT_TableInstance<TData>;
217
217
  column: MRT_Column<TData>;
218
218
  }) => TableCellProps);
219
+ renderColumnActionsMenuItems?: ({ closeMenu, column, table, }: {
220
+ closeMenu: () => void;
221
+ column: MRT_Column<TData>;
222
+ table: MRT_TableInstance<TData>;
223
+ }) => ReactNode[];
219
224
  renderColumnFilterModeMenuItems?: ({ column, internalFilterOptions, onSelectFilterMode, table, }: {
220
225
  column: MRT_Column<TData>;
221
226
  internalFilterOptions: MRT_InternalFilterOption[];
222
227
  onSelectFilterMode: (filterMode: MRT_FilterOption) => void;
223
228
  table: MRT_TableInstance<TData>;
224
- }) => ReactNode;
229
+ }) => ReactNode[];
225
230
  sortingFn?: MRT_SortingFn;
226
231
  };
227
232
  export declare type MRT_DefinedColumnDef<TData extends Record<string, any> = {}> = Omit<MRT_ColumnDef<TData>, 'id'> & {
@@ -306,7 +311,7 @@ export declare type MaterialReactTableProps<TData extends Record<string, any> =
306
311
  enableTableHead?: boolean;
307
312
  enableToolbarInternalActions?: boolean;
308
313
  enableTopToolbar?: boolean;
309
- enabledGlobalFilterOptions?: (MRT_FilterOption | string)[] | null;
314
+ globalFilterModeOptions?: (MRT_FilterOption | string)[] | null;
310
315
  expandRowsFn?: (dataRow: TData) => TData[];
311
316
  icons?: Partial<MRT_Icons>;
312
317
  initialState?: Partial<MRT_TableState<TData>>;
@@ -472,12 +477,17 @@ export declare type MaterialReactTableProps<TData extends Record<string, any> =
472
477
  renderBottomToolbarCustomActions?: ({ table, }: {
473
478
  table: MRT_TableInstance<TData>;
474
479
  }) => ReactNode;
480
+ renderColumnActionsMenuItems?: ({ column, closeMenu, table, }: {
481
+ column: MRT_Column<TData>;
482
+ closeMenu: () => void;
483
+ table: MRT_TableInstance<TData>;
484
+ }) => ReactNode[];
475
485
  renderColumnFilterModeMenuItems?: ({ column, internalFilterOptions, onSelectFilterMode, table, }: {
476
486
  column: MRT_Column<TData>;
477
487
  internalFilterOptions: MRT_InternalFilterOption[];
478
488
  onSelectFilterMode: (filterMode: MRT_FilterOption) => void;
479
489
  table: MRT_TableInstance<TData>;
480
- }) => ReactNode;
490
+ }) => ReactNode[];
481
491
  renderDetailPanel?: ({ row, table, }: {
482
492
  row: MRT_Row<TData>;
483
493
  table: MRT_TableInstance<TData>;
package/dist/cjs/index.js CHANGED
@@ -391,7 +391,7 @@ const mrtFilterOptions = (localization) => [
391
391
  ];
392
392
  const MRT_FilterOptionMenu = ({ anchorEl, header, onSelect, setAnchorEl, table, }) => {
393
393
  var _a, _b, _c, _d;
394
- const { getState, options: { enabledGlobalFilterOptions, columnFilterModeOptions, localization, renderColumnFilterModeMenuItems, renderGlobalFilterModeMenuItems, }, setColumnFilterFns, setGlobalFilterFn, } = table;
394
+ const { getState, options: { columnFilterModeOptions, globalFilterModeOptions, localization, renderColumnFilterModeMenuItems, renderGlobalFilterModeMenuItems, }, setColumnFilterFns, setGlobalFilterFn, } = table;
395
395
  const { globalFilterFn, density } = getState();
396
396
  const { column } = header !== null && header !== void 0 ? header : {};
397
397
  const { columnDef } = column !== null && column !== void 0 ? column : {};
@@ -399,8 +399,8 @@ const MRT_FilterOptionMenu = ({ anchorEl, header, onSelect, setAnchorEl, table,
399
399
  const internalFilterOptions = React.useMemo(() => mrtFilterOptions(localization).filter((filterOption) => columnDef
400
400
  ? allowedColumnFilterOptions === undefined ||
401
401
  (allowedColumnFilterOptions === null || allowedColumnFilterOptions === void 0 ? void 0 : allowedColumnFilterOptions.includes(filterOption.option))
402
- : (!enabledGlobalFilterOptions ||
403
- enabledGlobalFilterOptions.includes(filterOption.option)) &&
402
+ : (!globalFilterModeOptions ||
403
+ globalFilterModeOptions.includes(filterOption.option)) &&
404
404
  ['fuzzy', 'contains', 'startsWith'].includes(filterOption.option)), []);
405
405
  const handleSelectFilterMode = (option) => {
406
406
  if (header && column) {
@@ -736,8 +736,8 @@ const commonListItemStyles = {
736
736
  alignItems: 'center',
737
737
  };
738
738
  const MRT_ColumnActionMenu = ({ anchorEl, header, setAnchorEl, table, }) => {
739
- var _a, _b, _c, _d, _e, _f, _g;
740
- const { getState, toggleAllColumnsVisible, setColumnOrder, options: { enableColumnFilterModes, enableColumnFilters, enableColumnResizing, enableGrouping, enableHiding, enablePinning, enableSorting, columnFilterModeOptions, icons: { ArrowRightIcon, ClearAllIcon, ViewColumnIcon, DynamicFeedIcon, FilterListIcon, FilterListOffIcon, PushPinIcon, SortIcon, RestartAltIcon, VisibilityOffIcon, }, localization, }, refs: { filterInputRefs }, setShowFilters, } = table;
739
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
740
+ const { getState, toggleAllColumnsVisible, setColumnOrder, options: { columnFilterModeOptions, enableColumnFilterModes, enableColumnFilters, enableColumnResizing, enableGrouping, enableHiding, enablePinning, enableSorting, icons: { ArrowRightIcon, ClearAllIcon, ViewColumnIcon, DynamicFeedIcon, FilterListIcon, FilterListOffIcon, PushPinIcon, SortIcon, RestartAltIcon, VisibilityOffIcon, }, localization, renderColumnActionsMenuItems, }, refs: { filterInputRefs }, setShowFilters, } = table;
741
741
  const { column } = header;
742
742
  const { columnDef } = column;
743
743
  const { columnSizing, columnVisibility, density } = getState();
@@ -802,25 +802,32 @@ const MRT_ColumnActionMenu = ({ anchorEl, header, setAnchorEl, table, }) => {
802
802
  !!(allowedColumnFilterOptions === null || allowedColumnFilterOptions === void 0 ? void 0 : allowedColumnFilterOptions.length));
803
803
  return (React__default["default"].createElement(material.Menu, { anchorEl: anchorEl, open: !!anchorEl, onClose: () => setAnchorEl(null), MenuListProps: {
804
804
  dense: density === 'compact',
805
- } },
806
- enableSorting &&
807
- column.getCanSort() && [
808
- React__default["default"].createElement(material.MenuItem, { disabled: !column.getIsSorted(), key: 0, onClick: handleClearSort, sx: commonMenuItemStyles },
809
- React__default["default"].createElement(material.Box, { sx: commonListItemStyles },
810
- React__default["default"].createElement(material.ListItemIcon, null,
811
- React__default["default"].createElement(ClearAllIcon, null)),
812
- localization.clearSort)),
813
- React__default["default"].createElement(material.MenuItem, { disabled: column.getIsSorted() === 'asc', key: 1, onClick: handleSortAsc, sx: commonMenuItemStyles },
814
- React__default["default"].createElement(material.Box, { sx: commonListItemStyles },
815
- React__default["default"].createElement(material.ListItemIcon, null,
816
- React__default["default"].createElement(SortIcon, { style: { transform: 'rotate(180deg) scaleX(-1)' } })), (_b = localization.sortByColumnAsc) === null || _b === void 0 ? void 0 :
817
- _b.replace('{column}', String(columnDef.header)))),
818
- React__default["default"].createElement(material.MenuItem, { divider: enableColumnFilters || enableGrouping || enableHiding, key: 2, disabled: column.getIsSorted() === 'desc', onClick: handleSortDesc, sx: commonMenuItemStyles },
819
- React__default["default"].createElement(material.Box, { sx: commonListItemStyles },
820
- React__default["default"].createElement(material.ListItemIcon, null,
821
- React__default["default"].createElement(SortIcon, null)), (_c = localization.sortByColumnDesc) === null || _c === void 0 ? void 0 :
822
- _c.replace('{column}', String(columnDef.header)))),
823
- ],
805
+ } }, (_d = (_c = (_b = columnDef.renderColumnActionsMenuItems) === null || _b === void 0 ? void 0 : _b.call(columnDef, {
806
+ closeMenu: () => setAnchorEl(null),
807
+ column,
808
+ table,
809
+ })) !== null && _c !== void 0 ? _c : renderColumnActionsMenuItems === null || renderColumnActionsMenuItems === void 0 ? void 0 : renderColumnActionsMenuItems({
810
+ closeMenu: () => setAnchorEl(null),
811
+ column,
812
+ table,
813
+ })) !== null && _d !== void 0 ? _d : (enableSorting &&
814
+ column.getCanSort() && [
815
+ React__default["default"].createElement(material.MenuItem, { disabled: !column.getIsSorted(), key: 0, onClick: handleClearSort, sx: commonMenuItemStyles },
816
+ React__default["default"].createElement(material.Box, { sx: commonListItemStyles },
817
+ React__default["default"].createElement(material.ListItemIcon, null,
818
+ React__default["default"].createElement(ClearAllIcon, null)),
819
+ localization.clearSort)),
820
+ React__default["default"].createElement(material.MenuItem, { disabled: column.getIsSorted() === 'asc', key: 1, onClick: handleSortAsc, sx: commonMenuItemStyles },
821
+ React__default["default"].createElement(material.Box, { sx: commonListItemStyles },
822
+ React__default["default"].createElement(material.ListItemIcon, null,
823
+ React__default["default"].createElement(SortIcon, { style: { transform: 'rotate(180deg) scaleX(-1)' } })), (_e = localization.sortByColumnAsc) === null || _e === void 0 ? void 0 :
824
+ _e.replace('{column}', String(columnDef.header)))),
825
+ React__default["default"].createElement(material.MenuItem, { divider: enableColumnFilters || enableGrouping || enableHiding, key: 2, disabled: column.getIsSorted() === 'desc', onClick: handleSortDesc, sx: commonMenuItemStyles },
826
+ React__default["default"].createElement(material.Box, { sx: commonListItemStyles },
827
+ React__default["default"].createElement(material.ListItemIcon, null,
828
+ React__default["default"].createElement(SortIcon, null)), (_f = localization.sortByColumnDesc) === null || _f === void 0 ? void 0 :
829
+ _f.replace('{column}', String(columnDef.header)))),
830
+ ]),
824
831
  enableColumnFilters &&
825
832
  column.getCanFilter() &&
826
833
  [
@@ -832,8 +839,8 @@ const MRT_ColumnActionMenu = ({ anchorEl, header, setAnchorEl, table, }) => {
832
839
  React__default["default"].createElement(material.MenuItem, { divider: enableGrouping || enableHiding, key: 1, onClick: handleFilterByColumn, sx: commonMenuItemStyles },
833
840
  React__default["default"].createElement(material.Box, { sx: commonListItemStyles },
834
841
  React__default["default"].createElement(material.ListItemIcon, null,
835
- React__default["default"].createElement(FilterListIcon, null)), (_d = localization.filterByColumn) === null || _d === void 0 ? void 0 :
836
- _d.replace('{column}', String(columnDef.header))),
842
+ React__default["default"].createElement(FilterListIcon, null)), (_g = localization.filterByColumn) === null || _g === void 0 ? void 0 :
843
+ _g.replace('{column}', String(columnDef.header))),
837
844
  showFilterModeSubMenu && (React__default["default"].createElement(material.IconButton, { onClick: handleOpenFilterModeMenu, onMouseEnter: handleOpenFilterModeMenu, size: "small", sx: { p: 0 } },
838
845
  React__default["default"].createElement(ArrowRightIcon, null)))),
839
846
  showFilterModeSubMenu && (React__default["default"].createElement(MRT_FilterOptionMenu, { anchorEl: filterMenuAnchorEl, header: header, key: 2, onSelect: handleFilterByColumn, setAnchorEl: setFilterMenuAnchorEl, table: table })),
@@ -843,8 +850,8 @@ const MRT_ColumnActionMenu = ({ anchorEl, header, setAnchorEl, table, }) => {
843
850
  React__default["default"].createElement(material.MenuItem, { divider: enablePinning, key: 0, onClick: handleGroupByColumn, sx: commonMenuItemStyles },
844
851
  React__default["default"].createElement(material.Box, { sx: commonListItemStyles },
845
852
  React__default["default"].createElement(material.ListItemIcon, null,
846
- React__default["default"].createElement(DynamicFeedIcon, null)), (_e = localization[column.getIsGrouped() ? 'ungroupByColumn' : 'groupByColumn']) === null || _e === void 0 ? void 0 :
847
- _e.replace('{column}', String(columnDef.header)))),
853
+ React__default["default"].createElement(DynamicFeedIcon, null)), (_h = localization[column.getIsGrouped() ? 'ungroupByColumn' : 'groupByColumn']) === null || _h === void 0 ? void 0 :
854
+ _h.replace('{column}', String(columnDef.header)))),
848
855
  ],
849
856
  enablePinning &&
850
857
  column.getCanPin() && [
@@ -876,14 +883,14 @@ const MRT_ColumnActionMenu = ({ anchorEl, header, setAnchorEl, table, }) => {
876
883
  React__default["default"].createElement(material.MenuItem, { disabled: columnDef.enableHiding === false, key: 0, onClick: handleHideColumn, sx: commonMenuItemStyles },
877
884
  React__default["default"].createElement(material.Box, { sx: commonListItemStyles },
878
885
  React__default["default"].createElement(material.ListItemIcon, null,
879
- React__default["default"].createElement(VisibilityOffIcon, null)), (_f = localization.hideColumn) === null || _f === void 0 ? void 0 :
880
- _f.replace('{column}', String(columnDef.header)))),
886
+ React__default["default"].createElement(VisibilityOffIcon, null)), (_j = localization.hideColumn) === null || _j === void 0 ? void 0 :
887
+ _j.replace('{column}', String(columnDef.header)))),
881
888
  React__default["default"].createElement(material.MenuItem, { disabled: !Object.values(columnVisibility).filter((visible) => !visible)
882
889
  .length, key: 1, onClick: handleShowAllColumns, sx: commonMenuItemStyles },
883
890
  React__default["default"].createElement(material.Box, { sx: commonListItemStyles },
884
891
  React__default["default"].createElement(material.ListItemIcon, null,
885
- React__default["default"].createElement(ViewColumnIcon, null)), (_g = localization.showAllColumns) === null || _g === void 0 ? void 0 :
886
- _g.replace('{column}', String(columnDef.header))),
892
+ React__default["default"].createElement(ViewColumnIcon, null)), (_k = localization.showAllColumns) === null || _k === void 0 ? void 0 :
893
+ _k.replace('{column}', String(columnDef.header))),
887
894
  React__default["default"].createElement(material.IconButton, { onClick: handleOpenShowHideColumnsMenu, onMouseEnter: handleOpenShowHideColumnsMenu, size: "small", sx: { p: 0 } },
888
895
  React__default["default"].createElement(ArrowRightIcon, null))),
889
896
  React__default["default"].createElement(MRT_ShowHideColumnsMenu, { anchorEl: showHideColumnsMenuAnchorEl, isSubMenu: true, key: 2, setAnchorEl: setShowHideColumnsMenuAnchorEl, table: table }),
@@ -1504,9 +1511,14 @@ const MRT_FilterTextField = ({ header, rangeFilterIndex, table, }) => {
1504
1511
  value = option.value;
1505
1512
  text = option.text;
1506
1513
  }
1507
- return (React__default["default"].createElement(material.MenuItem, { key: value, value: value },
1514
+ return (React__default["default"].createElement(material.MenuItem, { key: value, sx: {
1515
+ display: 'flex',
1516
+ m: 0,
1517
+ alignItems: 'center',
1518
+ gap: '0.5rem',
1519
+ }, value: value },
1508
1520
  isMultiSelectFilter && (React__default["default"].createElement(material.Checkbox, { checked: ((_a = column.getFilterValue()) !== null && _a !== void 0 ? _a : []).includes(value), sx: { mr: '0.5rem' } })),
1509
- React__default["default"].createElement(material.ListItemText, null, text)));
1521
+ text));
1510
1522
  })),
1511
1523
  React__default["default"].createElement(MRT_FilterOptionMenu, { anchorEl: anchorEl, header: header, setAnchorEl: setAnchorEl, table: table })));
1512
1524
  };
@@ -1527,8 +1539,7 @@ const MRT_TableHeadCellFilterContainer = ({ header, table, }) => {
1527
1539
 
1528
1540
  const MRT_TableHeadCellFilterLabel = ({ header, table }) => {
1529
1541
  var _a, _b, _c;
1530
- const { getState, options: { icons: { FilterAltIcon }, localization, }, } = table;
1531
- const { columnFilterFns } = getState();
1542
+ const { options: { icons: { FilterAltIcon }, localization, }, } = table;
1532
1543
  const { column } = header;
1533
1544
  const { columnDef } = column;
1534
1545
  const isRangeFilter = [
@@ -1536,7 +1547,7 @@ const MRT_TableHeadCellFilterLabel = ({ header, table }) => {
1536
1547
  'betweenInclusive',
1537
1548
  'inNumberRange',
1538
1549
  ].includes(columnDef._filterFn);
1539
- const currentFilterOption = columnFilterFns === null || columnFilterFns === void 0 ? void 0 : columnFilterFns[header.id];
1550
+ const currentFilterOption = columnDef._filterFn;
1540
1551
  const filterTooltip = localization.filteringByColumn
1541
1552
  .replace('{column}', String(columnDef.header))
1542
1553
  .replace('{filterType}',
@@ -2135,7 +2146,7 @@ const MRT_TableBodyRow = ({ row, rowIndex, table, virtualRow, }) => {
2135
2146
  };
2136
2147
 
2137
2148
  const MRT_TableBody = ({ table, tableContainerRef }) => {
2138
- const { getRowModel, getPrePaginationRowModel, getState, options: { enableGlobalFilterRankedResults, enablePagination, enableRowVirtualization, muiTableBodyProps, virtualizerProps, virtualizerInstanceRef, }, } = table;
2149
+ const { getRowModel, getPrePaginationRowModel, getState, options: { enableGlobalFilterRankedResults, enablePagination, enableRowVirtualization, manualFiltering, manualSorting, muiTableBodyProps, virtualizerInstanceRef, virtualizerProps, }, } = table;
2139
2150
  const { globalFilter, pagination, sorting } = getState();
2140
2151
  const tableBodyProps = muiTableBodyProps instanceof Function
2141
2152
  ? muiTableBodyProps({ table })
@@ -2146,6 +2157,8 @@ const MRT_TableBody = ({ table, tableContainerRef }) => {
2146
2157
  const rows = React.useMemo(() => {
2147
2158
  if (enableGlobalFilterRankedResults &&
2148
2159
  globalFilter &&
2160
+ !manualFiltering &&
2161
+ !manualSorting &&
2149
2162
  !Object.values(sorting).some(Boolean)) {
2150
2163
  const rankedRows = getPrePaginationRowModel().rows.sort((a, b) => rankGlobalFuzzy(a, b));
2151
2164
  if (enablePagination) {
@@ -2166,11 +2179,9 @@ const MRT_TableBody = ({ table, tableContainerRef }) => {
2166
2179
  const virtualizer = enableRowVirtualization
2167
2180
  ? reactVirtual.useVirtual(Object.assign({ size: rows.length, parentRef: tableContainerRef, overscan: 15 }, vProps))
2168
2181
  : {};
2169
- React.useEffect(() => {
2170
- if (virtualizerInstanceRef) {
2171
- virtualizerInstanceRef.current = virtualizer;
2172
- }
2173
- }, [virtualizer]);
2182
+ if (virtualizerInstanceRef) {
2183
+ virtualizerInstanceRef.current = virtualizer;
2184
+ }
2174
2185
  // const virtualizer: Virtualizer = enableRowVirtualization
2175
2186
  // ? useVirtualizer({
2176
2187
  // count: rows.length,
@@ -2420,6 +2431,7 @@ const MRT_TableRoot = (props) => {
2420
2431
  props.displayColumnDefOptions,
2421
2432
  props.editingMode,
2422
2433
  props.enableColumnDragging,
2434
+ props.enableColumnFilterModes,
2423
2435
  props.enableColumnOrdering,
2424
2436
  props.enableEditing,
2425
2437
  props.enableExpandAll,
@@ -2477,11 +2489,9 @@ const MRT_TableRoot = (props) => {
2477
2489
  tableContainerRef,
2478
2490
  topToolbarRef,
2479
2491
  }, setColumnFilterFns: (_w = props.onFilterFnsChange) !== null && _w !== void 0 ? _w : setColumnFilterFns, setDensity: (_x = props.onDensityChange) !== null && _x !== void 0 ? _x : setDensity, setDraggingColumn: (_y = props.onDraggingColumnChange) !== null && _y !== void 0 ? _y : setDraggingColumn, setDraggingRow: (_z = props.onDraggingRowChange) !== null && _z !== void 0 ? _z : setDraggingRow, setEditingCell: (_0 = props.onEditingCellChange) !== null && _0 !== void 0 ? _0 : setEditingCell, setEditingRow: (_1 = props.onEditingRowChange) !== null && _1 !== void 0 ? _1 : setEditingRow, setGlobalFilterFn: (_2 = props.onGlobalFilterFnChange) !== null && _2 !== void 0 ? _2 : setGlobalFilterFn, setHoveredColumn: (_3 = props.onHoveredColumnChange) !== null && _3 !== void 0 ? _3 : setHoveredColumn, setHoveredRow: (_4 = props.onHoveredRowChange) !== null && _4 !== void 0 ? _4 : setHoveredRow, setIsFullScreen: (_5 = props.onIsFullScreenChange) !== null && _5 !== void 0 ? _5 : setIsFullScreen, setShowAlertBanner: (_6 = props.onShowAlertBannerChange) !== null && _6 !== void 0 ? _6 : setShowAlertBanner, setShowFilters: (_7 = props.onShowFiltersChange) !== null && _7 !== void 0 ? _7 : setShowFilters, setShowGlobalFilter: (_8 = props.onShowGlobalFilterChange) !== null && _8 !== void 0 ? _8 : setShowGlobalFilter });
2480
- React.useEffect(() => {
2481
- if (props.tableInstanceRef) {
2482
- props.tableInstanceRef.current = table;
2483
- }
2484
- }, [table]);
2492
+ if (props.tableInstanceRef) {
2493
+ props.tableInstanceRef.current = table;
2494
+ }
2485
2495
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
2486
2496
  React__default["default"].createElement(material.Dialog, { PaperComponent: material.Box, TransitionComponent: material.Grow, disablePortal: true, fullScreen: true, keepMounted: false, onClose: () => setIsFullScreen(false), open: isFullScreen, transitionDuration: 400 },
2487
2497
  React__default["default"].createElement(MRT_TablePaper, { table: table })),