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.
- package/dist/cjs/MaterialReactTable.d.ts +35 -5
- package/dist/cjs/column.utils.d.ts +1 -0
- package/dist/cjs/index.js +79 -51
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/menus/MRT_FilterOptionMenu.d.ts +2 -7
- package/dist/esm/MaterialReactTable.d.ts +35 -5
- package/dist/esm/column.utils.d.ts +1 -0
- package/dist/esm/material-react-table.esm.js +79 -51
- package/dist/esm/material-react-table.esm.js.map +1 -1
- package/dist/esm/menus/MRT_FilterOptionMenu.d.ts +2 -7
- package/dist/index.d.ts +36 -6
- package/package.json +1 -1
- package/src/MaterialReactTable.tsx +50 -8
- package/src/body/MRT_TableBody.tsx +15 -10
- package/src/body/MRT_TableBodyCell.tsx +6 -4
- package/src/column.utils.ts +1 -1
- package/src/head/MRT_TableHeadCell.tsx +21 -13
- package/src/head/MRT_TableHeadCellFilterContainer.tsx +3 -2
- package/src/inputs/MRT_FilterTextField.tsx +5 -8
- package/src/inputs/MRT_GlobalFilterTextField.tsx +2 -2
- package/src/menus/MRT_ColumnActionMenu.tsx +3 -3
- package/src/menus/MRT_FilterOptionMenu.tsx +50 -33
- package/src/menus/MRT_ShowHideColumnsMenuItems.tsx +1 -1
- package/src/table/MRT_TableRoot.tsx +18 -13
- package/src/toolbar/MRT_ToolbarDropZone.tsx +10 -2
|
@@ -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
|
|
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
|
-
|
|
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
|
-
|
|
285
|
+
enableColumnFilterModes?: boolean;
|
|
276
286
|
enableColumnOrdering?: boolean;
|
|
277
287
|
enableDensityToggle?: boolean;
|
|
278
288
|
enableEditing?: boolean;
|
|
279
289
|
enableExpandAll?: boolean;
|
|
280
290
|
enableFullScreenToggle?: boolean;
|
|
281
|
-
|
|
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,
|
|
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
|
|
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 {
|
|
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
|
|
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
|
|
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 ?
|
|
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
|
-
} },
|
|
417
|
-
|
|
418
|
-
|
|
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: {
|
|
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 =
|
|
768
|
-
columnDef.
|
|
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: {
|
|
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:
|
|
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 &&
|
|
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 {
|
|
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 =
|
|
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 =
|
|
1344
|
-
columnDef.
|
|
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 ? '
|
|
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 {
|
|
1497
|
+
const { showColumnFilters } = getState();
|
|
1486
1498
|
const { column } = header;
|
|
1487
|
-
|
|
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
|
-
|
|
1735
|
-
columnDef.enableColumnDragging !== false
|
|
1736
|
-
(
|
|
1737
|
-
|
|
1738
|
-
|
|
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 = (
|
|
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 = (
|
|
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({
|
|
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
|
|
2136
|
+
const virtualizer = enableRowVirtualization
|
|
2117
2137
|
? useVirtual(Object.assign({ size: rows.length, parentRef: tableContainerRef, overscan: 15 }, vProps))
|
|
2118
2138
|
: {};
|
|
2119
|
-
|
|
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
|
-
// ?
|
|
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
|
-
?
|
|
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
|
-
// ?
|
|
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
|
|
2356
|
+
var _a, _b, _c, _d;
|
|
2334
2357
|
return ({
|
|
2335
|
-
[(
|
|
2336
|
-
? (
|
|
2337
|
-
: (
|
|
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,
|
|
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,
|
|
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 };
|