material-react-table 0.40.4 → 0.40.5

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'> & {
@@ -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
@@ -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 }),
@@ -2135,7 +2142,7 @@ const MRT_TableBodyRow = ({ row, rowIndex, table, virtualRow, }) => {
2135
2142
  };
2136
2143
 
2137
2144
  const MRT_TableBody = ({ table, tableContainerRef }) => {
2138
- const { getRowModel, getPrePaginationRowModel, getState, options: { enableGlobalFilterRankedResults, enablePagination, enableRowVirtualization, muiTableBodyProps, virtualizerProps, virtualizerInstanceRef, }, } = table;
2145
+ const { getRowModel, getPrePaginationRowModel, getState, options: { enableGlobalFilterRankedResults, enablePagination, enableRowVirtualization, manualFiltering, manualSorting, muiTableBodyProps, virtualizerInstanceRef, virtualizerProps, }, } = table;
2139
2146
  const { globalFilter, pagination, sorting } = getState();
2140
2147
  const tableBodyProps = muiTableBodyProps instanceof Function
2141
2148
  ? muiTableBodyProps({ table })
@@ -2146,6 +2153,8 @@ const MRT_TableBody = ({ table, tableContainerRef }) => {
2146
2153
  const rows = React.useMemo(() => {
2147
2154
  if (enableGlobalFilterRankedResults &&
2148
2155
  globalFilter &&
2156
+ !manualFiltering &&
2157
+ !manualSorting &&
2149
2158
  !Object.values(sorting).some(Boolean)) {
2150
2159
  const rankedRows = getPrePaginationRowModel().rows.sort((a, b) => rankGlobalFuzzy(a, b));
2151
2160
  if (enablePagination) {
@@ -2166,11 +2175,9 @@ const MRT_TableBody = ({ table, tableContainerRef }) => {
2166
2175
  const virtualizer = enableRowVirtualization
2167
2176
  ? reactVirtual.useVirtual(Object.assign({ size: rows.length, parentRef: tableContainerRef, overscan: 15 }, vProps))
2168
2177
  : {};
2169
- React.useEffect(() => {
2170
- if (virtualizerInstanceRef) {
2171
- virtualizerInstanceRef.current = virtualizer;
2172
- }
2173
- }, [virtualizer]);
2178
+ if (virtualizerInstanceRef) {
2179
+ virtualizerInstanceRef.current = virtualizer;
2180
+ }
2174
2181
  // const virtualizer: Virtualizer = enableRowVirtualization
2175
2182
  // ? useVirtualizer({
2176
2183
  // count: rows.length,
@@ -2477,11 +2484,9 @@ const MRT_TableRoot = (props) => {
2477
2484
  tableContainerRef,
2478
2485
  topToolbarRef,
2479
2486
  }, 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]);
2487
+ if (props.tableInstanceRef) {
2488
+ props.tableInstanceRef.current = table;
2489
+ }
2485
2490
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
2486
2491
  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
2492
  React__default["default"].createElement(MRT_TablePaper, { table: table })),