material-react-table 0.38.4 → 0.40.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.
@@ -1,12 +1,7 @@
1
1
  /// <reference types="react" />
2
- import type { MRT_Header, MRT_TableInstance } from '..';
2
+ import type { MRT_Header, MRT_InternalFilterOption, MRT_TableInstance } from '..';
3
3
  import { MRT_Localization } from '../localization';
4
- export declare const internalFilterOptions: (localization: MRT_Localization) => {
5
- option: string;
6
- symbol: string;
7
- label: string;
8
- divider: boolean;
9
- }[];
4
+ export declare const mrtFilterOptions: (localization: MRT_Localization) => MRT_InternalFilterOption[];
10
5
  interface Props<TData extends Record<string, any> = {}> {
11
6
  anchorEl: HTMLElement | null;
12
7
  header?: MRT_Header;
@@ -1,7 +1,7 @@
1
1
  import { Dispatch, DragEvent, MutableRefObject, ReactNode, SetStateAction } from 'react';
2
2
  import type { AlertProps, ButtonProps, CheckboxProps, ChipProps, IconButtonProps, LinearProgressProps, PaperProps, SkeletonProps, TableBodyProps, TableCellProps, TableContainerProps, TableFooterProps, TableHeadProps, TablePaginationProps, TableProps, TableRowProps, TextFieldProps, ToolbarProps } from '@mui/material';
3
3
  import type { Cell, Column, ColumnDef, DeepKeys, FilterFn, Header, HeaderGroup, OnChangeFn, Row, SortingFn, Table, TableOptions, TableState } from '@tanstack/react-table';
4
- import type { Options as VirtualizerOptions } from 'react-virtual';
4
+ import type { Options as VirtualizerOptions, VirtualItem } from 'react-virtual';
5
5
  import { MRT_Icons } from './icons';
6
6
  import { MRT_FilterFns } from './filterFns';
7
7
  import { MRT_Localization } from './localization';
@@ -154,7 +154,7 @@ export declare type MRT_ColumnDef<TData extends Record<string, any> = {}> = Omit
154
154
  enableClickToCopy?: boolean;
155
155
  enableColumnActions?: boolean;
156
156
  enableColumnDragging?: boolean;
157
- enableColumnFilterChangeMode?: boolean;
157
+ enableColumnFilterModes?: boolean;
158
158
  enableColumnOrdering?: boolean;
159
159
  enableEditing?: boolean;
160
160
  filterFn?: MRT_FilterFn<TData>;
@@ -216,6 +216,10 @@ 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
+ renderColumnFilterModeMenuItems?: ({ table, column, }: {
220
+ table: MRT_TableInstance<TData>;
221
+ column: MRT_Column<TData>;
222
+ }) => ReactNode[];
219
223
  sortingFn?: MRT_SortingFn;
220
224
  };
221
225
  export declare type MRT_DefinedColumnDef<TData extends Record<string, any> = {}> = Omit<MRT_ColumnDef<TData>, 'id'> & {
@@ -249,6 +253,12 @@ export declare type MRT_SortingOption = LiteralUnion<string & keyof typeof MRT_S
249
253
  export declare type MRT_SortingFn<TData extends Record<string, any> = {}> = SortingFn<TData> | MRT_SortingOption;
250
254
  export declare type MRT_FilterOption = LiteralUnion<string & keyof typeof MRT_FilterFns>;
251
255
  export declare type MRT_FilterFn<TData extends Record<string, any> = {}> = FilterFn<TData> | MRT_FilterOption;
256
+ export declare type MRT_InternalFilterOption = {
257
+ option: string;
258
+ symbol: string;
259
+ label: string;
260
+ divider: boolean;
261
+ };
252
262
  export declare type MRT_DisplayColumnIds = 'mrt-row-actions' | 'mrt-row-drag' | 'mrt-row-expand' | 'mrt-row-numbers' | 'mrt-row-select';
253
263
  /**
254
264
  * `columns` and `data` props are the only required props, but there are over 150 other optional props.
@@ -272,13 +282,13 @@ export declare type MaterialReactTableProps<TData extends Record<string, any> =
272
282
  enableClickToCopy?: boolean;
273
283
  enableColumnActions?: boolean;
274
284
  enableColumnDragging?: boolean;
275
- enableColumnFilterChangeMode?: boolean;
285
+ enableColumnFilterModes?: boolean;
276
286
  enableColumnOrdering?: boolean;
277
287
  enableDensityToggle?: boolean;
278
288
  enableEditing?: boolean;
279
289
  enableExpandAll?: boolean;
280
290
  enableFullScreenToggle?: boolean;
281
- enableGlobalFilterChangeMode?: boolean;
291
+ enableGlobalFilterModes?: boolean;
282
292
  enableGlobalFilterRankedResults?: boolean;
283
293
  enablePagination?: boolean;
284
294
  enableRowActions?: boolean;
@@ -460,10 +470,21 @@ export declare type MaterialReactTableProps<TData extends Record<string, any> =
460
470
  renderBottomToolbarCustomActions?: ({ table, }: {
461
471
  table: MRT_TableInstance<TData>;
462
472
  }) => ReactNode;
473
+ renderColumnFilterModeMenuItems?: ({ column, internalFilterOptions, onSelectFilterMode, table, }: {
474
+ column: MRT_Column<TData>;
475
+ internalFilterOptions: MRT_InternalFilterOption[];
476
+ onSelectFilterMode: (filterMode: MRT_FilterOption) => void;
477
+ table: MRT_TableInstance<TData>;
478
+ }) => ReactNode;
463
479
  renderDetailPanel?: ({ row, table, }: {
464
480
  row: MRT_Row<TData>;
465
481
  table: MRT_TableInstance<TData>;
466
482
  }) => ReactNode;
483
+ renderGlobalFilterModeMenuItems?: ({ internalFilterOptions, onSelectFilterMode, table, }: {
484
+ internalFilterOptions: MRT_InternalFilterOption[];
485
+ onSelectFilterMode: (filterMode: MRT_FilterOption) => void;
486
+ table: MRT_TableInstance<TData>;
487
+ }) => ReactNode[];
467
488
  renderRowActionMenuItems?: ({ closeMenu, row, table, }: {
468
489
  closeMenu: () => void;
469
490
  row: MRT_Row<TData>;
@@ -484,9 +505,18 @@ export declare type MaterialReactTableProps<TData extends Record<string, any> =
484
505
  rowNumberMode?: 'original' | 'static';
485
506
  selectAllMode?: 'all' | 'page';
486
507
  state?: Partial<MRT_TableState<TData>>;
508
+ tableInstanceRef?: MutableRefObject<MRT_TableInstance<TData> | null>;
487
509
  virtualizerProps?: Partial<VirtualizerOptions<HTMLDivElement>> | (({ table, }: {
488
510
  table: MRT_TableInstance<TData>;
489
511
  }) => Partial<VirtualizerOptions<HTMLDivElement>>);
512
+ virtualizerInstanceRef?: MutableRefObject<Virtualizer | null>;
513
+ };
514
+ export declare type Virtualizer = {
515
+ virtualItems: VirtualItem[];
516
+ totalSize: number;
517
+ scrollToOffset: (index: number, options?: any | undefined) => void;
518
+ scrollToIndex: (index: number, options?: any | undefined) => void;
519
+ measure: () => void;
490
520
  };
491
- declare const _default: <TData extends Record<string, any> = {}>({ aggregationFns, autoResetExpanded, columnResizeMode, defaultColumn, editingMode, enableBottomToolbar, enableColumnActions, enableColumnFilterChangeMode, enableColumnFilters, enableColumnOrdering, enableColumnResizing, enableDensityToggle, enableExpandAll, enableFilters, enableFullScreenToggle, enableGlobalFilter, enableGlobalFilterChangeMode, enableGlobalFilterRankedResults, enableGrouping, enableHiding, enableMultiRowSelection, enableMultiSort, enablePagination, enablePinning, enableRowSelection, enableSelectAll, enableSorting, enableStickyHeader, enableTableFooter, enableTableHead, enableToolbarInternalActions, enableTopToolbar, filterFns, icons, localization, positionActionsColumn, positionExpandColumn, positionGlobalFilter, positionPagination, positionToolbarAlertBanner, positionToolbarDropZone, rowNumberMode, selectAllMode, sortingFns, ...rest }: MaterialReactTableProps<TData>) => JSX.Element;
521
+ declare const _default: <TData extends Record<string, any> = {}>({ aggregationFns, autoResetExpanded, columnResizeMode, defaultColumn, editingMode, enableBottomToolbar, enableColumnActions, enableColumnFilters, enableColumnOrdering, enableColumnResizing, enableDensityToggle, enableExpandAll, enableFilters, enableFullScreenToggle, enableGlobalFilter, enableGlobalFilterRankedResults, enableGrouping, enableHiding, enableMultiRowSelection, enableMultiSort, enablePagination, enablePinning, enableRowSelection, enableSelectAll, enableSorting, enableStickyHeader, enableTableFooter, enableTableHead, enableToolbarInternalActions, enableTopToolbar, filterFns, icons, localization, positionActionsColumn, positionExpandColumn, positionGlobalFilter, positionPagination, positionToolbarAlertBanner, positionToolbarDropZone, rowNumberMode, selectAllMode, sortingFns, ...rest }: MaterialReactTableProps<TData>) => JSX.Element;
492
522
  export default _default;
@@ -3,6 +3,7 @@ import { MaterialReactTableProps, MRT_Column, MRT_ColumnDef, MRT_DefinedColumnDe
3
3
  import { MRT_FilterFns } from './filterFns';
4
4
  import { MRT_SortingFns } from './sortingFns';
5
5
  export declare const defaultDisplayColumnDefOptions: Partial<MRT_ColumnDef<{}>>;
6
+ export declare const getColumnId: <TData extends Record<string, any> = {}>(columnDef: MRT_ColumnDef<TData>) => string;
6
7
  export declare const getAllLeafColumnDefs: <TData extends Record<string, any> = {}>(columns: MRT_ColumnDef<TData>[]) => MRT_ColumnDef<TData>[];
7
8
  export declare const prepareColumns: <TData extends Record<string, any> = {}>(columnDefs: MRT_ColumnDef<TData>[], columnFilterFns: {
8
9
  [key: string]: MRT_FilterOption;
@@ -292,7 +292,7 @@ const MRT_ExpandButton = ({ row, table }) => {
292
292
  } })))));
293
293
  };
294
294
 
295
- const internalFilterOptions = (localization) => [
295
+ const mrtFilterOptions = (localization) => [
296
296
  {
297
297
  option: 'fuzzy',
298
298
  symbol: '≈',
@@ -379,19 +379,19 @@ const internalFilterOptions = (localization) => [
379
379
  },
380
380
  ];
381
381
  const MRT_FilterOptionMenu = ({ anchorEl, header, onSelect, setAnchorEl, table, }) => {
382
- var _a;
383
- const { getState, options: { enabledGlobalFilterOptions, columnFilterModeOptions, localization, }, setColumnFilterFns, setGlobalFilterFn, } = table;
384
- const { columnFilterFns, globalFilterFn, density } = getState();
382
+ var _a, _b;
383
+ const { getState, options: { enabledGlobalFilterOptions, columnFilterModeOptions, localization, renderColumnFilterModeMenuItems, renderGlobalFilterModeMenuItems, }, setColumnFilterFns, setGlobalFilterFn, } = table;
384
+ const { globalFilterFn, density } = getState();
385
385
  const { column } = header !== null && header !== void 0 ? header : {};
386
386
  const { columnDef } = column !== null && column !== void 0 ? column : {};
387
387
  const allowedColumnFilterOptions = (_a = columnDef === null || columnDef === void 0 ? void 0 : columnDef.columnFilterModeOptions) !== null && _a !== void 0 ? _a : columnFilterModeOptions;
388
- const filterOptions = useMemo(() => internalFilterOptions(localization).filter((filterOption) => columnDef
388
+ const internalFilterOptions = useMemo(() => mrtFilterOptions(localization).filter((filterOption) => columnDef
389
389
  ? allowedColumnFilterOptions === undefined ||
390
390
  (allowedColumnFilterOptions === null || allowedColumnFilterOptions === void 0 ? void 0 : allowedColumnFilterOptions.includes(filterOption.option))
391
391
  : (!enabledGlobalFilterOptions ||
392
392
  enabledGlobalFilterOptions.includes(filterOption.option)) &&
393
- ['fuzzy', 'contains'].includes(filterOption.option)), []);
394
- const handleSelectFilterType = (option) => {
393
+ ['fuzzy', 'contains', 'startsWith'].includes(filterOption.option)), []);
394
+ const handleSelectFilterMode = (option) => {
395
395
  if (header && column) {
396
396
  setColumnFilterFns((prev) => (Object.assign(Object.assign({}, prev), { [header.id]: option })));
397
397
  if (['empty', 'notEmpty'].includes(option)) {
@@ -410,15 +410,26 @@ const MRT_FilterOptionMenu = ({ anchorEl, header, onSelect, setAnchorEl, table,
410
410
  setAnchorEl(null);
411
411
  onSelect === null || onSelect === void 0 ? void 0 : onSelect();
412
412
  };
413
- const filterOption = !!header ? columnFilterFns[header.id] : globalFilterFn;
413
+ const filterOption = !!header && columnDef ? columnDef._filterFn : globalFilterFn;
414
414
  return (React.createElement(Menu, { anchorEl: anchorEl, anchorOrigin: { vertical: 'center', horizontal: 'right' }, onClose: () => setAnchorEl(null), open: !!anchorEl, MenuListProps: {
415
415
  dense: density === 'compact',
416
- } }, filterOptions.map(({ option, label, divider, symbol }, index) => (React.createElement(MenuItem, { divider: divider, key: index, onClick: () => handleSelectFilterType(option), selected: option === filterOption, sx: {
417
- py: '6px',
418
- my: 0,
416
+ } }, (_b = (header && column
417
+ ? renderColumnFilterModeMenuItems === null || renderColumnFilterModeMenuItems === void 0 ? void 0 : renderColumnFilterModeMenuItems({
418
+ column: column,
419
+ internalFilterOptions,
420
+ onSelectFilterMode: handleSelectFilterMode,
421
+ table,
422
+ })
423
+ : renderGlobalFilterModeMenuItems === null || renderGlobalFilterModeMenuItems === void 0 ? void 0 : renderGlobalFilterModeMenuItems({
424
+ internalFilterOptions,
425
+ onSelectFilterMode: handleSelectFilterMode,
426
+ table,
427
+ }))) !== null && _b !== void 0 ? _b : internalFilterOptions.map(({ option, label, divider, symbol }, index) => (React.createElement(MenuItem, { divider: divider, key: index, onClick: () => handleSelectFilterMode(option), selected: option === filterOption, sx: {
419
428
  alignItems: 'center',
420
429
  display: 'flex',
421
430
  gap: '2ch',
431
+ my: 0,
432
+ py: '6px',
422
433
  }, value: option },
423
434
  React.createElement(Box, { sx: { fontSize: '1.25rem', width: '2ch' } }, symbol),
424
435
  label)))));
@@ -604,7 +615,7 @@ const MRT_ShowHideColumnsMenuItems = ({ allColumns, hoveredColumn, setHoveredCol
604
615
  }
605
616
  };
606
617
  const handleDragEnter = (_e) => {
607
- if (!isDragging) {
618
+ if (!isDragging && columnDef.enableColumnOrdering !== false) {
608
619
  setHoveredColumn(column);
609
620
  }
610
621
  };
@@ -706,7 +717,7 @@ const commonListItemStyles = {
706
717
  };
707
718
  const MRT_ColumnActionMenu = ({ anchorEl, header, setAnchorEl, table, }) => {
708
719
  var _a, _b, _c, _d, _e, _f, _g;
709
- const { getState, toggleAllColumnsVisible, setColumnOrder, options: { enableColumnFilterChangeMode, enableColumnFilters, enableColumnResizing, enableGrouping, enableHiding, enablePinning, enableSorting, columnFilterModeOptions, icons: { ArrowRightIcon, ClearAllIcon, ViewColumnIcon, DynamicFeedIcon, FilterListIcon, FilterListOffIcon, PushPinIcon, SortIcon, RestartAltIcon, VisibilityOffIcon, }, localization, }, refs: { filterInputRefs }, setShowFilters, } = table;
720
+ 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;
710
721
  const { column } = header;
711
722
  const { columnDef } = column;
712
723
  const { columnSizing, columnVisibility, density } = getState();
@@ -764,8 +775,8 @@ const MRT_ColumnActionMenu = ({ anchorEl, header, setAnchorEl, table, }) => {
764
775
  };
765
776
  const isSelectFilter = !!columnDef.filterSelectOptions;
766
777
  const allowedColumnFilterOptions = (_a = columnDef === null || columnDef === void 0 ? void 0 : columnDef.columnFilterModeOptions) !== null && _a !== void 0 ? _a : columnFilterModeOptions;
767
- const showFilterModeSubMenu = enableColumnFilterChangeMode &&
768
- columnDef.enableColumnFilterChangeMode !== false &&
778
+ const showFilterModeSubMenu = enableColumnFilterModes &&
779
+ columnDef.enableColumnFilterModes !== false &&
769
780
  !isSelectFilter &&
770
781
  (allowedColumnFilterOptions === undefined ||
771
782
  !!(allowedColumnFilterOptions === null || allowedColumnFilterOptions === void 0 ? void 0 : allowedColumnFilterOptions.length));
@@ -967,7 +978,7 @@ const MRT_SelectCheckbox = ({ row, selectAll, table }) => {
967
978
 
968
979
  const MRT_GlobalFilterTextField = ({ table, }) => {
969
980
  var _a;
970
- const { getState, setGlobalFilter, options: { enableGlobalFilterChangeMode, icons: { SearchIcon, CloseIcon }, localization, muiSearchTextFieldProps, }, refs: { searchInputRef }, } = table;
981
+ const { getState, setGlobalFilter, options: { enableGlobalFilterModes, icons: { SearchIcon, CloseIcon }, localization, muiSearchTextFieldProps, }, refs: { searchInputRef }, } = table;
971
982
  const { globalFilter, showGlobalFilter } = getState();
972
983
  const [anchorEl, setAnchorEl] = useState(null);
973
984
  const [searchValue, setSearchValue] = useState(globalFilter !== null && globalFilter !== void 0 ? globalFilter : '');
@@ -991,7 +1002,7 @@ const MRT_GlobalFilterTextField = ({ table, }) => {
991
1002
  : muiSearchTextFieldProps;
992
1003
  return (React.createElement(Collapse, { in: showGlobalFilter, orientation: "horizontal" },
993
1004
  React.createElement(TextField, Object.assign({ placeholder: localization.search, onChange: handleChange, value: searchValue !== null && searchValue !== void 0 ? searchValue : '', variant: "standard", InputProps: {
994
- startAdornment: enableGlobalFilterChangeMode ? (React.createElement(InputAdornment, { position: "start" },
1005
+ startAdornment: enableGlobalFilterModes ? (React.createElement(InputAdornment, { position: "start" },
995
1006
  React.createElement(Tooltip, { arrow: true, title: localization.changeSearchMode },
996
1007
  React.createElement(IconButton, { "aria-label": localization.changeSearchMode, onClick: handleGlobalFilterMenuOpen, size: "small", sx: { height: '1.75rem', width: '1.75rem' } },
997
1008
  React.createElement(SearchIcon, null))))) : (React.createElement(SearchIcon, { style: { marginRight: '4px' } })),
@@ -1164,11 +1175,13 @@ const MRT_ToolbarInternalButtons = ({ table }) => {
1164
1175
  const MRT_ToolbarDropZone = ({ table }) => {
1165
1176
  var _a, _b;
1166
1177
  const { getState, options: { enableGrouping, localization }, setHoveredColumn, } = table;
1167
- const { draggingColumn, hoveredColumn } = getState();
1178
+ const { draggingColumn, hoveredColumn, grouping } = getState();
1168
1179
  const handleDragEnter = (_event) => {
1169
1180
  setHoveredColumn({ id: 'drop-zone' });
1170
1181
  };
1171
- return (React.createElement(Fade, { unmountOnExit: true, mountOnEnter: true, in: !!enableGrouping && !!draggingColumn },
1182
+ return (React.createElement(Fade, { unmountOnExit: true, mountOnEnter: true, in: !!enableGrouping &&
1183
+ !!draggingColumn &&
1184
+ !grouping.includes(draggingColumn.id) },
1172
1185
  React.createElement(Box, { sx: (theme) => ({
1173
1186
  alignItems: 'center',
1174
1187
  backgroundColor: alpha(theme.palette.info.main, (hoveredColumn === null || hoveredColumn === void 0 ? void 0 : hoveredColumn.id) === 'drop-zone' ? 0.2 : 0.1),
@@ -1302,10 +1315,9 @@ const MRT_TableHeadCellColumnActionsButton = ({ header, table, }) => {
1302
1315
 
1303
1316
  const MRT_FilterTextField = ({ header, rangeFilterIndex, table, }) => {
1304
1317
  var _a, _b, _c, _d, _e, _f, _g, _h;
1305
- const { getState, options: { enableColumnFilterChangeMode, columnFilterModeOptions, icons: { FilterListIcon, CloseIcon }, localization, muiTableHeadCellFilterTextFieldProps, }, refs: { filterInputRefs }, setColumnFilterFns, } = table;
1318
+ const { options: { enableColumnFilterModes, columnFilterModeOptions, icons: { FilterListIcon, CloseIcon }, localization, muiTableHeadCellFilterTextFieldProps, }, refs: { filterInputRefs }, setColumnFilterFns, } = table;
1306
1319
  const { column } = header;
1307
1320
  const { columnDef } = column;
1308
- const { columnFilterFns } = getState();
1309
1321
  const mTableHeadCellFilterTextFieldProps = muiTableHeadCellFilterTextFieldProps instanceof Function
1310
1322
  ? muiTableHeadCellFilterTextFieldProps({
1311
1323
  column,
@@ -1326,7 +1338,7 @@ const MRT_FilterTextField = ({ header, rangeFilterIndex, table, }) => {
1326
1338
  const isMultiSelectFilter = columnDef.filterVariant === 'multi-select';
1327
1339
  const isTextboxFilter = columnDef.filterVariant === 'text' ||
1328
1340
  (!isSelectFilter && !isMultiSelectFilter);
1329
- const currentFilterOption = columnFilterFns === null || columnFilterFns === void 0 ? void 0 : columnFilterFns[header.id];
1341
+ const currentFilterOption = columnDef._filterFn;
1330
1342
  const filterChipLabel = ['empty', 'notEmpty'].includes(currentFilterOption)
1331
1343
  ? //@ts-ignore
1332
1344
  localization[`filter${((_b = (_a = currentFilterOption === null || currentFilterOption === void 0 ? void 0 : currentFilterOption.charAt) === null || _a === void 0 ? void 0 : _a.call(currentFilterOption, 0)) === null || _b === void 0 ? void 0 : _b.toUpperCase()) +
@@ -1340,8 +1352,8 @@ const MRT_FilterTextField = ({ header, rangeFilterIndex, table, }) => {
1340
1352
  ? localization.max
1341
1353
  : '';
1342
1354
  const allowedColumnFilterOptions = (_d = columnDef === null || columnDef === void 0 ? void 0 : columnDef.columnFilterModeOptions) !== null && _d !== void 0 ? _d : columnFilterModeOptions;
1343
- const showChangeModeButton = enableColumnFilterChangeMode &&
1344
- columnDef.enableColumnFilterChangeMode !== false &&
1355
+ const showChangeModeButton = enableColumnFilterModes &&
1356
+ columnDef.enableColumnFilterModes !== false &&
1345
1357
  !rangeFilterIndex &&
1346
1358
  (allowedColumnFilterOptions === undefined ||
1347
1359
  !!(allowedColumnFilterOptions === null || allowedColumnFilterOptions === void 0 ? void 0 : allowedColumnFilterOptions.length));
@@ -1448,7 +1460,7 @@ const MRT_FilterTextField = ({ header, rangeFilterIndex, table, }) => {
1448
1460
  if (textFieldProps.inputRef) {
1449
1461
  textFieldProps.inputRef = inputRef;
1450
1462
  }
1451
- }, sx: (theme) => (Object.assign({ p: 0, minWidth: !filterChipLabel ? '150px' : 'auto', width: '100%', '& .MuiSelect-icon': {
1463
+ }, sx: (theme) => (Object.assign({ p: 0, minWidth: !filterChipLabel ? '120px' : 'auto', width: '100%', '& .MuiSelect-icon': {
1452
1464
  mr: '1.5rem',
1453
1465
  } }, ((textFieldProps === null || textFieldProps === void 0 ? void 0 : textFieldProps.sx) instanceof Function
1454
1466
  ? textFieldProps.sx(theme)
@@ -1482,9 +1494,10 @@ const MRT_FilterRangeFields = ({ header, table }) => {
1482
1494
 
1483
1495
  const MRT_TableHeadCellFilterContainer = ({ header, table, }) => {
1484
1496
  const { getState } = table;
1485
- const { columnFilterFns, showColumnFilters } = getState();
1497
+ const { showColumnFilters } = getState();
1486
1498
  const { column } = header;
1487
- return (React.createElement(Collapse, { in: showColumnFilters, mountOnEnter: true, unmountOnExit: true }, ['between', 'betweenInclusive', 'inNumberRange'].includes(columnFilterFns[column.id]) ? (React.createElement(MRT_FilterRangeFields, { header: header, table: table })) : (React.createElement(MRT_FilterTextField, { header: header, table: table }))));
1499
+ const { columnDef } = column;
1500
+ return (React.createElement(Collapse, { in: showColumnFilters, mountOnEnter: true, unmountOnExit: true }, ['between', 'betweenInclusive', 'inNumberRange'].includes(columnDef._filterFn) ? (React.createElement(MRT_FilterRangeFields, { header: header, table: table })) : (React.createElement(MRT_FilterTextField, { header: header, table: table }))));
1488
1501
  };
1489
1502
 
1490
1503
  const MRT_TableHeadCellFilterLabel = ({ header, table }) => {
@@ -1615,7 +1628,7 @@ const MRT_TableHeadCell = ({ header, table }) => {
1615
1628
  var _a, _b, _c, _d;
1616
1629
  const theme = useTheme();
1617
1630
  const { getState, options: { enableColumnActions, enableColumnDragging, enableColumnOrdering, enableColumnResizing, enableGrouping, enableMultiSort, muiTableHeadCellProps, }, setHoveredColumn, } = table;
1618
- const { density, draggingColumn, hoveredColumn, showColumnFilters } = getState();
1631
+ const { density, draggingColumn, grouping, hoveredColumn, showColumnFilters, } = getState();
1619
1632
  const { column } = header;
1620
1633
  const { columnDef } = column;
1621
1634
  const { columnDefType } = columnDef;
@@ -1731,11 +1744,14 @@ const MRT_TableHeadCell = ({ header, table }) => {
1731
1744
  column.getCanSort() && (React.createElement(MRT_TableHeadCellSortLabel, { header: header, table: table })),
1732
1745
  column.getCanFilter() && (React.createElement(MRT_TableHeadCellFilterLabel, { header: header, table: table }))),
1733
1746
  columnDefType !== 'group' && (React.createElement(Box, { sx: { whiteSpace: 'nowrap' } },
1734
- ((enableColumnDragging &&
1735
- columnDef.enableColumnDragging !== false) ||
1736
- (enableColumnOrdering &&
1737
- columnDef.enableColumnOrdering !== false) ||
1738
- (enableGrouping && columnDef.enableGrouping !== false)) && (React.createElement(MRT_TableHeadCellGrabHandle, { column: column, table: table, tableHeadCellRef: tableHeadCellRef })),
1747
+ enableColumnDragging !== false &&
1748
+ columnDef.enableColumnDragging !== false &&
1749
+ (enableColumnDragging ||
1750
+ (enableColumnOrdering &&
1751
+ columnDef.enableColumnOrdering !== false) ||
1752
+ (enableGrouping &&
1753
+ columnDef.enableGrouping !== false &&
1754
+ !grouping.includes(column.id))) && (React.createElement(MRT_TableHeadCellGrabHandle, { column: column, table: table, tableHeadCellRef: tableHeadCellRef })),
1739
1755
  (enableColumnActions || columnDef.enableColumnActions) &&
1740
1756
  columnDef.enableColumnActions !== false && (React.createElement(MRT_TableHeadCellColumnActionsButton, { header: header, table: table })))),
1741
1757
  column.getCanResize() && (React.createElement(MRT_TableHeadCellResizeHandle, { header: header, table: table })))),
@@ -1918,7 +1934,9 @@ const MRT_TableBodyCell = ({ cell, enableHover, rowIndex, rowRef, table, }) => {
1918
1934
  : Math.round(Math.random() * (column.getSize() - column.getSize() / 3) +
1919
1935
  column.getSize() / 3)
1920
1936
  : 100), [isLoading, showSkeletons]);
1921
- const handleDoubleClick = (_event) => {
1937
+ const handleDoubleClick = (event) => {
1938
+ var _a;
1939
+ (_a = tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.onDoubleClick) === null || _a === void 0 ? void 0 : _a.call(tableCellProps, event);
1922
1940
  if ((enableEditing || columnDef.enableEditing) &&
1923
1941
  columnDef.enableEditing !== false &&
1924
1942
  editingMode === 'cell') {
@@ -1942,7 +1960,9 @@ const MRT_TableBodyCell = ({ cell, enableHover, rowIndex, rowRef, table, }) => {
1942
1960
  const getTotalRight = () => {
1943
1961
  return ((table.getRightLeafHeaders().length - 1 - column.getPinnedIndex()) * 150);
1944
1962
  };
1945
- const handleDragEnter = (_e) => {
1963
+ const handleDragEnter = (e) => {
1964
+ var _a;
1965
+ (_a = tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.onDragEnter) === null || _a === void 0 ? void 0 : _a.call(tableCellProps, e);
1946
1966
  if (enableGrouping && (hoveredColumn === null || hoveredColumn === void 0 ? void 0 : hoveredColumn.id) === 'drop-zone') {
1947
1967
  setHoveredColumn(null);
1948
1968
  }
@@ -1968,7 +1988,7 @@ const MRT_TableBodyCell = ({ cell, enableHover, rowIndex, rowRef, table, }) => {
1968
1988
  : undefined,
1969
1989
  }
1970
1990
  : undefined;
1971
- return (React.createElement(TableCell, Object.assign({ onDoubleClick: handleDoubleClick, onDragEnter: handleDragEnter }, tableCellProps, { sx: (theme) => {
1991
+ return (React.createElement(TableCell, Object.assign({}, tableCellProps, { onDragEnter: handleDragEnter, onDoubleClick: handleDoubleClick, sx: (theme) => {
1972
1992
  var _a;
1973
1993
  return (Object.assign(Object.assign(Object.assign({ backgroundColor: column.getIsPinned()
1974
1994
  ? alpha(lighten(theme.palette.background.default, 0.04), 0.95)
@@ -2085,7 +2105,7 @@ const MRT_TableBodyRow = ({ row, rowIndex, table, virtualRow, }) => {
2085
2105
  };
2086
2106
 
2087
2107
  const MRT_TableBody = ({ table, tableContainerRef }) => {
2088
- const { getRowModel, getPrePaginationRowModel, getState, options: { enableGlobalFilterRankedResults, enablePagination, enableRowVirtualization, muiTableBodyProps, virtualizerProps, }, } = table;
2108
+ const { getRowModel, getPrePaginationRowModel, getState, options: { enableGlobalFilterRankedResults, enablePagination, enableRowVirtualization, muiTableBodyProps, virtualizerProps, virtualizerInstanceRef, }, } = table;
2089
2109
  const { globalFilter, pagination, sorting } = getState();
2090
2110
  const tableBodyProps = muiTableBodyProps instanceof Function
2091
2111
  ? muiTableBodyProps({ table })
@@ -2113,10 +2133,15 @@ const MRT_TableBody = ({ table, tableContainerRef }) => {
2113
2133
  : getRowModel().rows,
2114
2134
  globalFilter,
2115
2135
  ]);
2116
- const rowVirtualizer = enableRowVirtualization
2136
+ const virtualizer = enableRowVirtualization
2117
2137
  ? useVirtual(Object.assign({ size: rows.length, parentRef: tableContainerRef, overscan: 15 }, vProps))
2118
2138
  : {};
2119
- // const rowVirtualizer: Virtualizer = enableRowVirtualization
2139
+ useEffect(() => {
2140
+ if (virtualizerInstanceRef) {
2141
+ virtualizerInstanceRef.current = virtualizer;
2142
+ }
2143
+ }, [virtualizer]);
2144
+ // const virtualizer: Virtualizer = enableRowVirtualization
2120
2145
  // ? useVirtualizer({
2121
2146
  // count: rows.length,
2122
2147
  // estimateSize: () => (density === 'compact' ? 25 : 50),
@@ -2125,24 +2150,22 @@ const MRT_TableBody = ({ table, tableContainerRef }) => {
2125
2150
  // ...vProps,
2126
2151
  // })
2127
2152
  // : ({} as any);
2128
- const virtualRows = enableRowVirtualization
2129
- ? rowVirtualizer.virtualItems
2130
- : [];
2153
+ const virtualRows = enableRowVirtualization ? virtualizer.virtualItems : [];
2131
2154
  // const virtualRows = enableRowVirtualization
2132
- // ? rowVirtualizer.getVirtualItems()
2155
+ // ? virtualizer.getVirtualItems()
2133
2156
  // : [];
2134
2157
  let paddingTop = 0;
2135
2158
  let paddingBottom = 0;
2136
2159
  if (enableRowVirtualization) {
2137
2160
  paddingTop = !!virtualRows.length ? virtualRows[0].start : 0;
2138
2161
  paddingBottom = !!virtualRows.length
2139
- ? rowVirtualizer.totalSize - virtualRows[virtualRows.length - 1].end
2162
+ ? virtualizer.totalSize - virtualRows[virtualRows.length - 1].end
2140
2163
  : 0;
2141
2164
  }
2142
2165
  // if (enableRowVirtualization) {
2143
2166
  // paddingTop = !!virtualRows.length ? virtualRows[0].start : 0;
2144
2167
  // paddingBottom = !!virtualRows.length
2145
- // ? rowVirtualizer.getTotalSize() - virtualRows[virtualRows.length - 1].end
2168
+ // ? virtualizer.getTotalSize() - virtualRows[virtualRows.length - 1].end
2146
2169
  // : 0;
2147
2170
  // }
2148
2171
  return (React.createElement(TableBody, Object.assign({}, tableBodyProps),
@@ -2330,11 +2353,11 @@ const MRT_TableRoot = (props) => {
2330
2353
  return initState;
2331
2354
  }, []);
2332
2355
  const [columnFilterFns, setColumnFilterFns] = useState(() => Object.assign({}, ...getAllLeafColumnDefs(props.columns).map((col) => {
2333
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
2356
+ var _a, _b, _c, _d;
2334
2357
  return ({
2335
- [(_d = (_b = (_a = col.id) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : (_c = col.accessorKey) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : '']: col.filterFn instanceof Function
2336
- ? (_e = col.filterFn.name) !== null && _e !== void 0 ? _e : 'custom'
2337
- : (_m = (_f = col.filterFn) !== null && _f !== void 0 ? _f : (_g = initialState === null || initialState === void 0 ? void 0 : initialState.columnFilterFns) === null || _g === void 0 ? void 0 : _g[(_l = (_j = (_h = col.id) === null || _h === void 0 ? void 0 : _h.toString()) !== null && _j !== void 0 ? _j : (_k = col.accessorKey) === null || _k === void 0 ? void 0 : _k.toString()) !== null && _l !== void 0 ? _l : '']) !== null && _m !== void 0 ? _m : getDefaultColumnFilterFn(col),
2358
+ [getColumnId(col)]: col.filterFn instanceof Function
2359
+ ? (_a = col.filterFn.name) !== null && _a !== void 0 ? _a : 'custom'
2360
+ : (_d = (_b = col.filterFn) !== null && _b !== void 0 ? _b : (_c = initialState === null || initialState === void 0 ? void 0 : initialState.columnFilterFns) === null || _c === void 0 ? void 0 : _c[getColumnId(col)]) !== null && _d !== void 0 ? _d : getDefaultColumnFilterFn(col),
2338
2361
  });
2339
2362
  })));
2340
2363
  const [columnOrder, setColumnOrder] = useState((_a = initialState.columnOrder) !== null && _a !== void 0 ? _a : []);
@@ -2424,6 +2447,11 @@ const MRT_TableRoot = (props) => {
2424
2447
  tableContainerRef,
2425
2448
  topToolbarRef,
2426
2449
  }, 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 });
2450
+ useEffect(() => {
2451
+ if (props.tableInstanceRef) {
2452
+ props.tableInstanceRef.current = table;
2453
+ }
2454
+ }, [table]);
2427
2455
  return (React.createElement(React.Fragment, null,
2428
2456
  React.createElement(Dialog, { PaperComponent: Box, TransitionComponent: Grow, disablePortal: true, fullScreen: true, keepMounted: false, onClose: () => setIsFullScreen(false), open: isFullScreen, transitionDuration: 400 },
2429
2457
  React.createElement(MRT_TablePaper, { table: table })),
@@ -2432,8 +2460,8 @@ const MRT_TableRoot = (props) => {
2432
2460
  };
2433
2461
 
2434
2462
  var MaterialReactTable = (_a) => {
2435
- var { aggregationFns, autoResetExpanded = false, columnResizeMode = 'onEnd', defaultColumn = { minSize: 40, maxSize: 1000, size: 180 }, editingMode = 'modal', enableBottomToolbar = true, enableColumnActions = true, enableColumnFilterChangeMode = false, enableColumnFilters = true, enableColumnOrdering = false, enableColumnResizing = false, enableDensityToggle = true, enableExpandAll = true, enableFilters = true, enableFullScreenToggle = true, enableGlobalFilter = true, enableGlobalFilterChangeMode = false, enableGlobalFilterRankedResults = true, enableGrouping = false, enableHiding = true, enableMultiRowSelection = true, enableMultiSort = true, enablePagination = true, enablePinning = false, enableRowSelection = false, enableSelectAll = true, enableSorting = true, enableStickyHeader = false, enableTableFooter = true, enableTableHead = true, enableToolbarInternalActions = true, enableTopToolbar = true, filterFns, icons, localization, positionActionsColumn = 'first', positionExpandColumn = 'first', positionGlobalFilter = 'right', positionPagination = 'bottom', positionToolbarAlertBanner = 'top', positionToolbarDropZone = 'top', rowNumberMode = 'original', selectAllMode = 'all', sortingFns } = _a, rest = __rest(_a, ["aggregationFns", "autoResetExpanded", "columnResizeMode", "defaultColumn", "editingMode", "enableBottomToolbar", "enableColumnActions", "enableColumnFilterChangeMode", "enableColumnFilters", "enableColumnOrdering", "enableColumnResizing", "enableDensityToggle", "enableExpandAll", "enableFilters", "enableFullScreenToggle", "enableGlobalFilter", "enableGlobalFilterChangeMode", "enableGlobalFilterRankedResults", "enableGrouping", "enableHiding", "enableMultiRowSelection", "enableMultiSort", "enablePagination", "enablePinning", "enableRowSelection", "enableSelectAll", "enableSorting", "enableStickyHeader", "enableTableFooter", "enableTableHead", "enableToolbarInternalActions", "enableTopToolbar", "filterFns", "icons", "localization", "positionActionsColumn", "positionExpandColumn", "positionGlobalFilter", "positionPagination", "positionToolbarAlertBanner", "positionToolbarDropZone", "rowNumberMode", "selectAllMode", "sortingFns"]);
2436
- return (React.createElement(MRT_TableRoot, Object.assign({ aggregationFns: Object.assign(Object.assign({}, MRT_AggregationFns), aggregationFns), autoResetExpanded: autoResetExpanded, columnResizeMode: columnResizeMode, defaultColumn: defaultColumn, editingMode: editingMode, enableBottomToolbar: enableBottomToolbar, enableColumnActions: enableColumnActions, enableColumnFilterChangeMode: enableColumnFilterChangeMode, enableColumnFilters: enableColumnFilters, enableColumnOrdering: enableColumnOrdering, enableColumnResizing: enableColumnResizing, enableDensityToggle: enableDensityToggle, enableExpandAll: enableExpandAll, enableFilters: enableFilters, enableFullScreenToggle: enableFullScreenToggle, enableGlobalFilter: enableGlobalFilter, enableGlobalFilterChangeMode: enableGlobalFilterChangeMode, enableGlobalFilterRankedResults: enableGlobalFilterRankedResults, enableGrouping: enableGrouping, enableHiding: enableHiding, enableMultiRowSelection: enableMultiRowSelection, enableMultiSort: enableMultiSort, enablePagination: enablePagination, enablePinning: enablePinning, enableRowSelection: enableRowSelection, enableSelectAll: enableSelectAll, enableSorting: enableSorting, enableStickyHeader: enableStickyHeader, enableTableFooter: enableTableFooter, enableTableHead: enableTableHead, enableToolbarInternalActions: enableToolbarInternalActions, enableTopToolbar: enableTopToolbar, filterFns: Object.assign(Object.assign({}, MRT_FilterFns), filterFns), icons: Object.assign(Object.assign({}, MRT_Default_Icons), icons), localization: Object.assign(Object.assign({}, MRT_DefaultLocalization_EN), localization), positionActionsColumn: positionActionsColumn, positionExpandColumn: positionExpandColumn, positionGlobalFilter: positionGlobalFilter, positionPagination: positionPagination, positionToolbarAlertBanner: positionToolbarAlertBanner, positionToolbarDropZone: positionToolbarDropZone, rowNumberMode: rowNumberMode, selectAllMode: selectAllMode, sortingFns: Object.assign(Object.assign({}, MRT_SortingFns), sortingFns) }, rest)));
2463
+ var { aggregationFns, autoResetExpanded = false, columnResizeMode = 'onEnd', defaultColumn = { minSize: 40, maxSize: 1000, size: 180 }, editingMode = 'modal', enableBottomToolbar = true, enableColumnActions = true, enableColumnFilters = true, enableColumnOrdering = false, enableColumnResizing = false, enableDensityToggle = true, enableExpandAll = true, enableFilters = true, enableFullScreenToggle = true, enableGlobalFilter = true, enableGlobalFilterRankedResults = true, enableGrouping = false, enableHiding = true, enableMultiRowSelection = true, enableMultiSort = true, enablePagination = true, enablePinning = false, enableRowSelection = false, enableSelectAll = true, enableSorting = true, enableStickyHeader = false, enableTableFooter = true, enableTableHead = true, enableToolbarInternalActions = true, enableTopToolbar = true, filterFns, icons, localization, positionActionsColumn = 'first', positionExpandColumn = 'first', positionGlobalFilter = 'right', positionPagination = 'bottom', positionToolbarAlertBanner = 'top', positionToolbarDropZone = 'top', rowNumberMode = 'original', selectAllMode = 'all', sortingFns } = _a, rest = __rest(_a, ["aggregationFns", "autoResetExpanded", "columnResizeMode", "defaultColumn", "editingMode", "enableBottomToolbar", "enableColumnActions", "enableColumnFilters", "enableColumnOrdering", "enableColumnResizing", "enableDensityToggle", "enableExpandAll", "enableFilters", "enableFullScreenToggle", "enableGlobalFilter", "enableGlobalFilterRankedResults", "enableGrouping", "enableHiding", "enableMultiRowSelection", "enableMultiSort", "enablePagination", "enablePinning", "enableRowSelection", "enableSelectAll", "enableSorting", "enableStickyHeader", "enableTableFooter", "enableTableHead", "enableToolbarInternalActions", "enableTopToolbar", "filterFns", "icons", "localization", "positionActionsColumn", "positionExpandColumn", "positionGlobalFilter", "positionPagination", "positionToolbarAlertBanner", "positionToolbarDropZone", "rowNumberMode", "selectAllMode", "sortingFns"]);
2464
+ return (React.createElement(MRT_TableRoot, Object.assign({ aggregationFns: Object.assign(Object.assign({}, MRT_AggregationFns), aggregationFns), autoResetExpanded: autoResetExpanded, columnResizeMode: columnResizeMode, defaultColumn: defaultColumn, editingMode: editingMode, enableBottomToolbar: enableBottomToolbar, enableColumnActions: enableColumnActions, enableColumnFilterModes: enableColumnFilterModes, enableColumnFilters: enableColumnFilters, enableColumnOrdering: enableColumnOrdering, enableColumnResizing: enableColumnResizing, enableDensityToggle: enableDensityToggle, enableExpandAll: enableExpandAll, enableFilters: enableFilters, enableFullScreenToggle: enableFullScreenToggle, enableGlobalFilter: enableGlobalFilter, enableGlobalFilterModes: enableGlobalFilterModes, enableGlobalFilterRankedResults: enableGlobalFilterRankedResults, enableGrouping: enableGrouping, enableHiding: enableHiding, enableMultiRowSelection: enableMultiRowSelection, enableMultiSort: enableMultiSort, enablePagination: enablePagination, enablePinning: enablePinning, enableRowSelection: enableRowSelection, enableSelectAll: enableSelectAll, enableSorting: enableSorting, enableStickyHeader: enableStickyHeader, enableTableFooter: enableTableFooter, enableTableHead: enableTableHead, enableToolbarInternalActions: enableToolbarInternalActions, enableTopToolbar: enableTopToolbar, filterFns: Object.assign(Object.assign({}, MRT_FilterFns), filterFns), icons: Object.assign(Object.assign({}, MRT_Default_Icons), icons), localization: Object.assign(Object.assign({}, MRT_DefaultLocalization_EN), localization), positionActionsColumn: positionActionsColumn, positionExpandColumn: positionExpandColumn, positionGlobalFilter: positionGlobalFilter, positionPagination: positionPagination, positionToolbarAlertBanner: positionToolbarAlertBanner, positionToolbarDropZone: positionToolbarDropZone, rowNumberMode: rowNumberMode, selectAllMode: selectAllMode, sortingFns: Object.assign(Object.assign({}, MRT_SortingFns), sortingFns) }, rest)));
2437
2465
  };
2438
2466
 
2439
2467
  export { MRT_CopyButton, MRT_FullScreenToggleButton, MRT_GlobalFilterTextField, MRT_ShowHideColumnsButton, MRT_ToggleDensePaddingButton, MRT_ToggleFiltersButton, MRT_ToggleGlobalFilterButton, MaterialReactTable as default };