material-react-table 0.36.1 → 0.36.2
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 +1 -1
- package/dist/cjs/body/MRT_EditRowModal.d.ts +8 -0
- package/dist/cjs/buttons/MRT_EditActionButtons.d.ts +5 -5
- package/dist/cjs/index.js +65 -40
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/inputs/MRT_EditCellTextField.d.ts +5 -5
- package/dist/esm/MaterialReactTable.d.ts +1 -1
- package/dist/esm/body/MRT_EditRowModal.d.ts +8 -0
- package/dist/esm/buttons/MRT_EditActionButtons.d.ts +5 -5
- package/dist/esm/inputs/MRT_EditCellTextField.d.ts +5 -5
- package/dist/esm/material-react-table.esm.js +66 -41
- package/dist/esm/material-react-table.esm.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/package.json +1 -1
- package/src/MaterialReactTable.tsx +1 -1
- package/src/body/MRT_EditRowModal.tsx +57 -0
- package/src/body/MRT_TableBodyCell.tsx +4 -6
- package/src/buttons/MRT_EditActionButtons.tsx +36 -21
- package/src/buttons/MRT_ToggleRowActionMenuButton.tsx +2 -1
- package/src/column.utils.ts +4 -2
- package/src/inputs/MRT_EditCellTextField.tsx +19 -16
- package/src/table/MRT_TableRoot.tsx +4 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { FC } from 'react';
|
|
2
1
|
import type { MRT_Cell, MRT_TableInstance } from '..';
|
|
3
|
-
interface Props {
|
|
4
|
-
cell: MRT_Cell
|
|
5
|
-
table: MRT_TableInstance
|
|
2
|
+
interface Props<TData extends Record<string, any> = {}> {
|
|
3
|
+
cell: MRT_Cell<TData>;
|
|
4
|
+
table: MRT_TableInstance<TData>;
|
|
5
|
+
showLabel?: boolean;
|
|
6
6
|
}
|
|
7
|
-
export declare const MRT_EditCellTextField:
|
|
7
|
+
export declare const MRT_EditCellTextField: <TData extends Record<string, any> = {}>({ cell, showLabel, table, }: Props<TData>) => JSX.Element;
|
|
8
8
|
export {};
|
|
@@ -249,7 +249,7 @@ export declare type MaterialReactTableProps<TData extends Record<string, any> =
|
|
|
249
249
|
displayColumnDefOptions?: Partial<{
|
|
250
250
|
[key in MRT_DisplayColumnIds]: Partial<MRT_ColumnDef>;
|
|
251
251
|
}>;
|
|
252
|
-
editingMode?: 'table' | 'row' | 'cell';
|
|
252
|
+
editingMode?: 'table' | 'modal' | 'row' | 'cell';
|
|
253
253
|
enableBottomToolbar?: boolean;
|
|
254
254
|
enableClickToCopy?: boolean;
|
|
255
255
|
enableColumnActions?: boolean;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { MRT_Row, MRT_TableInstance } from '..';
|
|
2
|
+
interface Props<TData extends Record<string, any> = {}> {
|
|
3
|
+
open: boolean;
|
|
4
|
+
row: MRT_Row<TData>;
|
|
5
|
+
table: MRT_TableInstance<TData>;
|
|
6
|
+
}
|
|
7
|
+
export declare const MRT_EditRowModal: <TData extends Record<string, any> = {}>({ open, row, table, }: Props<TData>) => JSX.Element;
|
|
8
|
+
export {};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { FC } from 'react';
|
|
2
1
|
import type { MRT_Row, MRT_TableInstance } from '..';
|
|
3
|
-
interface Props {
|
|
4
|
-
row: MRT_Row
|
|
5
|
-
table: MRT_TableInstance
|
|
2
|
+
interface Props<TData extends Record<string, any> = {}> {
|
|
3
|
+
row: MRT_Row<TData>;
|
|
4
|
+
table: MRT_TableInstance<TData>;
|
|
5
|
+
variant?: 'icon' | 'text';
|
|
6
6
|
}
|
|
7
|
-
export declare const MRT_EditActionButtons:
|
|
7
|
+
export declare const MRT_EditActionButtons: <TData extends Record<string, any> = {}>({ row, table, variant, }: Props<TData>) => JSX.Element;
|
|
8
8
|
export {};
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { FC } from 'react';
|
|
2
1
|
import type { MRT_Cell, MRT_TableInstance } from '..';
|
|
3
|
-
interface Props {
|
|
4
|
-
cell: MRT_Cell
|
|
5
|
-
table: MRT_TableInstance
|
|
2
|
+
interface Props<TData extends Record<string, any> = {}> {
|
|
3
|
+
cell: MRT_Cell<TData>;
|
|
4
|
+
table: MRT_TableInstance<TData>;
|
|
5
|
+
showLabel?: boolean;
|
|
6
6
|
}
|
|
7
|
-
export declare const MRT_EditCellTextField:
|
|
7
|
+
export declare const MRT_EditCellTextField: <TData extends Record<string, any> = {}>({ cell, showLabel, table, }: Props<TData>) => JSX.Element;
|
|
8
8
|
export {};
|
|
@@ -2,7 +2,7 @@ import React, { useMemo, useRef, useState, useCallback, Fragment, useEffect, use
|
|
|
2
2
|
import { aggregationFns, filterFns, sortingFns, useReactTable, getCoreRowModel, getExpandedRowModel, getFacetedRowModel, getFilteredRowModel, getGroupedRowModel, getPaginationRowModel, getSortedRowModel } from '@tanstack/react-table';
|
|
3
3
|
import { ArrowRight, Cancel, CheckBox, ClearAll, Close, DensityLarge, DensityMedium, DensitySmall, DragHandle, DynamicFeed, Edit, ExpandLess, ExpandMore, FilterAlt, FilterAltOff, FilterList, FilterListOff, FullscreenExit, Fullscreen, KeyboardDoubleArrowDown, MoreHoriz, MoreVert, PushPin, RestartAlt, Save, Search, SearchOff, Sort, ViewColumn, VisibilityOff } from '@mui/icons-material';
|
|
4
4
|
import { rankItem, rankings, compareItems } from '@tanstack/match-sorter-utils';
|
|
5
|
-
import { Tooltip, IconButton, Menu, MenuItem, Box, FormControlLabel, Switch, Typography, Button, Divider, ListItemIcon, Checkbox, debounce, Collapse, TextField, InputAdornment, LinearProgress, TablePagination, Chip, Alert, AlertTitle, Fade, alpha, useMediaQuery, Toolbar, lighten, ListItemText, Grow, TableSortLabel, useTheme, TableCell, TableRow, TableHead, darken, Skeleton, TableBody, TableFooter, Table, TableContainer, Paper, Dialog } from '@mui/material';
|
|
5
|
+
import { Tooltip, IconButton, Menu, MenuItem, Box, FormControlLabel, Switch, Typography, Button, Divider, ListItemIcon, Checkbox, debounce, Collapse, TextField, InputAdornment, LinearProgress, TablePagination, Chip, Alert, AlertTitle, Fade, alpha, useMediaQuery, Toolbar, lighten, ListItemText, Grow, TableSortLabel, useTheme, TableCell, TableRow, TableHead, darken, Skeleton, TableBody, TableFooter, Table, TableContainer, Paper, Dialog, DialogTitle, DialogContent, Stack, DialogActions } from '@mui/material';
|
|
6
6
|
import { useVirtual } from 'react-virtual';
|
|
7
7
|
|
|
8
8
|
/******************************************************************************
|
|
@@ -522,29 +522,37 @@ const reorderColumn = (draggedColumn, targetColumn, columnOrder) => {
|
|
|
522
522
|
columnOrder.splice(columnOrder.indexOf(targetColumn.id), 0, columnOrder.splice(columnOrder.indexOf(draggedColumn.id), 1)[0]);
|
|
523
523
|
return [...columnOrder];
|
|
524
524
|
};
|
|
525
|
-
const getLeadingDisplayColumnIds = (props) =>
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
(props.
|
|
529
|
-
'
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
]
|
|
525
|
+
const getLeadingDisplayColumnIds = (props) => {
|
|
526
|
+
var _a;
|
|
527
|
+
return [
|
|
528
|
+
(props.enableRowDragging || props.enableRowOrdering) && 'mrt-row-drag',
|
|
529
|
+
((props.positionActionsColumn === 'first' && props.enableRowActions) ||
|
|
530
|
+
(props.enableEditing &&
|
|
531
|
+
['row', 'modal'].includes((_a = props.editingMode) !== null && _a !== void 0 ? _a : ''))) &&
|
|
532
|
+
'mrt-row-actions',
|
|
533
|
+
props.positionExpandColumn === 'first' &&
|
|
534
|
+
(props.enableExpanding ||
|
|
535
|
+
props.enableGrouping ||
|
|
536
|
+
props.renderDetailPanel) &&
|
|
537
|
+
'mrt-row-expand',
|
|
538
|
+
props.enableRowSelection && 'mrt-row-select',
|
|
539
|
+
props.enableRowNumbers && 'mrt-row-numbers',
|
|
540
|
+
].filter(Boolean);
|
|
541
|
+
};
|
|
542
|
+
const getTrailingDisplayColumnIds = (props) => {
|
|
543
|
+
var _a;
|
|
544
|
+
return [
|
|
545
|
+
((props.positionActionsColumn === 'last' && props.enableRowActions) ||
|
|
546
|
+
(props.enableEditing &&
|
|
547
|
+
['row', 'modal'].includes((_a = props.editingMode) !== null && _a !== void 0 ? _a : ''))) &&
|
|
548
|
+
'mrt-row-actions',
|
|
549
|
+
props.positionExpandColumn === 'last' &&
|
|
550
|
+
(props.enableExpanding ||
|
|
551
|
+
props.enableGrouping ||
|
|
552
|
+
props.renderDetailPanel) &&
|
|
553
|
+
'mrt-row-expand',
|
|
554
|
+
];
|
|
555
|
+
};
|
|
548
556
|
const getDefaultColumnOrderIds = (props) => [
|
|
549
557
|
...getLeadingDisplayColumnIds(props),
|
|
550
558
|
...getAllLeafColumnDefs(props.columns).map((columnDef) => getColumnId(columnDef)),
|
|
@@ -873,11 +881,10 @@ const MRT_RowActionMenu = ({ anchorEl, handleEdit, row, setAnchorEl, table, }) =
|
|
|
873
881
|
})));
|
|
874
882
|
};
|
|
875
883
|
|
|
876
|
-
const MRT_EditActionButtons = ({ row, table }) => {
|
|
884
|
+
const MRT_EditActionButtons = ({ row, table, variant = 'icon', }) => {
|
|
877
885
|
const { getState, options: { icons: { CancelIcon, SaveIcon }, localization, onEditingRowSave, }, setEditingRow, } = table;
|
|
878
886
|
const { editingRow } = getState();
|
|
879
887
|
const handleCancel = () => {
|
|
880
|
-
row._valuesCache = Object.assign({}, row.original);
|
|
881
888
|
setEditingRow(null);
|
|
882
889
|
};
|
|
883
890
|
const handleSave = () => {
|
|
@@ -889,13 +896,15 @@ const MRT_EditActionButtons = ({ row, table }) => {
|
|
|
889
896
|
});
|
|
890
897
|
setEditingRow(null);
|
|
891
898
|
};
|
|
892
|
-
return (React.createElement(Box, { sx: { display: 'flex', gap: '0.75rem' } },
|
|
899
|
+
return (React.createElement(Box, { sx: { display: 'flex', gap: '0.75rem' } }, variant === 'icon' ? (React.createElement(React.Fragment, null,
|
|
893
900
|
React.createElement(Tooltip, { arrow: true, title: localization.cancel },
|
|
894
901
|
React.createElement(IconButton, { "aria-label": localization.cancel, onClick: handleCancel },
|
|
895
902
|
React.createElement(CancelIcon, null))),
|
|
896
903
|
React.createElement(Tooltip, { arrow: true, title: localization.save },
|
|
897
904
|
React.createElement(IconButton, { "aria-label": localization.save, color: "info", onClick: handleSave },
|
|
898
|
-
React.createElement(SaveIcon, null)))))
|
|
905
|
+
React.createElement(SaveIcon, null))))) : (React.createElement(React.Fragment, null,
|
|
906
|
+
React.createElement(Button, { onClick: handleCancel }, localization.cancel),
|
|
907
|
+
React.createElement(Button, { onClick: handleSave, variant: "contained" }, localization.save)))));
|
|
899
908
|
};
|
|
900
909
|
|
|
901
910
|
const commonIconButtonStyles = {
|
|
@@ -909,7 +918,7 @@ const commonIconButtonStyles = {
|
|
|
909
918
|
},
|
|
910
919
|
};
|
|
911
920
|
const MRT_ToggleRowActionMenuButton = ({ row, table }) => {
|
|
912
|
-
const { getState, options: { enableEditing, icons: { EditIcon, MoreHorizIcon }, localization, renderRowActionMenuItems, renderRowActions, }, setEditingRow, } = table;
|
|
921
|
+
const { getState, options: { editingMode, enableEditing, icons: { EditIcon, MoreHorizIcon }, localization, renderRowActionMenuItems, renderRowActions, }, setEditingRow, } = table;
|
|
913
922
|
const { editingRow } = getState();
|
|
914
923
|
const [anchorEl, setAnchorEl] = useState(null);
|
|
915
924
|
const handleOpenRowActionMenu = (event) => {
|
|
@@ -921,7 +930,7 @@ const MRT_ToggleRowActionMenuButton = ({ row, table }) => {
|
|
|
921
930
|
setEditingRow(Object.assign({}, row));
|
|
922
931
|
setAnchorEl(null);
|
|
923
932
|
};
|
|
924
|
-
return (React.createElement(React.Fragment, null, renderRowActions ? (React.createElement(React.Fragment, null, renderRowActions({ row, table }))) : row.id === (editingRow === null || editingRow === void 0 ? void 0 : editingRow.id) ? (React.createElement(MRT_EditActionButtons, { row: row, table: table })) : !renderRowActionMenuItems && enableEditing ? (React.createElement(Tooltip, { placement: "right", arrow: true, title: localization.edit },
|
|
933
|
+
return (React.createElement(React.Fragment, null, renderRowActions ? (React.createElement(React.Fragment, null, renderRowActions({ row, table }))) : row.id === (editingRow === null || editingRow === void 0 ? void 0 : editingRow.id) && editingMode === 'row' ? (React.createElement(MRT_EditActionButtons, { row: row, table: table })) : !renderRowActionMenuItems && enableEditing ? (React.createElement(Tooltip, { placement: "right", arrow: true, title: localization.edit },
|
|
925
934
|
React.createElement(IconButton, { sx: commonIconButtonStyles, onClick: handleStartEditMode },
|
|
926
935
|
React.createElement(EditIcon, null)))) : renderRowActionMenuItems ? (React.createElement(React.Fragment, null,
|
|
927
936
|
React.createElement(Tooltip, { arrow: true, enterDelay: 1000, enterNextDelay: 1000, title: localization.rowActions },
|
|
@@ -1731,10 +1740,10 @@ const MRT_TableHead = ({ table }) => {
|
|
|
1731
1740
|
return (React.createElement(TableHead, Object.assign({}, tableHeadProps), getHeaderGroups().map((headerGroup) => (React.createElement(MRT_TableHeadRow, { headerGroup: headerGroup, key: headerGroup.id, table: table })))));
|
|
1732
1741
|
};
|
|
1733
1742
|
|
|
1734
|
-
const MRT_EditCellTextField = ({ cell, table }) => {
|
|
1743
|
+
const MRT_EditCellTextField = ({ cell, showLabel, table, }) => {
|
|
1735
1744
|
var _a;
|
|
1736
1745
|
const { getState, options: { tableId, muiTableBodyCellEditTextFieldProps }, setEditingCell, setEditingRow, } = table;
|
|
1737
|
-
const { column
|
|
1746
|
+
const { column } = cell;
|
|
1738
1747
|
const { columnDef } = column;
|
|
1739
1748
|
const { editingRow } = getState();
|
|
1740
1749
|
const [value, setValue] = useState(() => cell.getValue());
|
|
@@ -1757,17 +1766,14 @@ const MRT_EditCellTextField = ({ cell, table }) => {
|
|
|
1757
1766
|
var _a;
|
|
1758
1767
|
(_a = textFieldProps.onBlur) === null || _a === void 0 ? void 0 : _a.call(textFieldProps, event);
|
|
1759
1768
|
if (editingRow) {
|
|
1760
|
-
|
|
1761
|
-
row._valuesCache = {};
|
|
1762
|
-
row._valuesCache[column.id] = value;
|
|
1763
|
-
setEditingRow(Object.assign({}, editingRow));
|
|
1769
|
+
setEditingRow(Object.assign(Object.assign({}, editingRow), { _valuesCache: Object.assign(Object.assign({}, editingRow._valuesCache), { [column.id]: value }) }));
|
|
1764
1770
|
}
|
|
1765
1771
|
setEditingCell(null);
|
|
1766
1772
|
};
|
|
1767
1773
|
if (columnDef.Edit) {
|
|
1768
1774
|
return React.createElement(React.Fragment, null, (_a = columnDef.Edit) === null || _a === void 0 ? void 0 : _a.call(columnDef, { cell, column, table }));
|
|
1769
1775
|
}
|
|
1770
|
-
return (React.createElement(TextField, Object.assign({ id: `mrt-${tableId}-edit-cell-text-field-${cell.id}`, margin: "none", onClick: (e) => e.stopPropagation(), placeholder: columnDef.header, value: value, variant: "standard" }, textFieldProps, { onBlur: handleBlur, onChange: handleChange })));
|
|
1776
|
+
return (React.createElement(TextField, Object.assign({ disabled: columnDef.enableEditing === false, fullWidth: true, id: `mrt-${tableId}-edit-cell-text-field-${cell.id}`, label: showLabel ? column.columnDef.header : undefined, margin: "none", onClick: (e) => e.stopPropagation(), placeholder: columnDef.header, value: value, variant: "standard" }, textFieldProps, { onBlur: handleBlur, onChange: handleChange })));
|
|
1771
1777
|
};
|
|
1772
1778
|
|
|
1773
1779
|
const MRT_CopyButton = ({ cell, children, table }) => {
|
|
@@ -1835,6 +1841,7 @@ const MRT_TableBodyCell = ({ cell, enableHover, rowIndex, rowRef, table, }) => {
|
|
|
1835
1841
|
const isEditable = (enableEditing || columnDef.enableEditing) &&
|
|
1836
1842
|
columnDef.enableEditing !== false;
|
|
1837
1843
|
const isEditing = isEditable &&
|
|
1844
|
+
editingMode !== 'modal' &&
|
|
1838
1845
|
(editingMode === 'table' ||
|
|
1839
1846
|
(editingRow === null || editingRow === void 0 ? void 0 : editingRow.id) === row.id ||
|
|
1840
1847
|
(editingCell === null || editingCell === void 0 ? void 0 : editingCell.id) === cell.id);
|
|
@@ -1932,10 +1939,10 @@ const MRT_TableBodyCell = ({ cell, enableHover, rowIndex, rowRef, table, }) => {
|
|
|
1932
1939
|
backgroundColor: enableHover &&
|
|
1933
1940
|
enableEditing &&
|
|
1934
1941
|
columnDef.enableEditing !== false &&
|
|
1935
|
-
editingMode !== '
|
|
1942
|
+
['table', 'cell'].includes(editingMode !== null && editingMode !== void 0 ? editingMode : '')
|
|
1936
1943
|
? theme.palette.mode === 'dark'
|
|
1937
|
-
? `${lighten(theme.palette.background.default, 0.
|
|
1938
|
-
: `${darken(theme.palette.background.default, 0.
|
|
1944
|
+
? `${lighten(theme.palette.background.default, 0.2)} !important`
|
|
1945
|
+
: `${darken(theme.palette.background.default, 0.1)} !important`
|
|
1939
1946
|
: undefined,
|
|
1940
1947
|
} }, ((tableCellProps === null || tableCellProps === void 0 ? void 0 : tableCellProps.sx) instanceof Function
|
|
1941
1948
|
? tableCellProps.sx(theme)
|
|
@@ -2209,6 +2216,23 @@ const MRT_TablePaper = ({ table }) => {
|
|
|
2209
2216
|
enableBottomToolbar && React.createElement(MRT_BottomToolbar, { table: table })));
|
|
2210
2217
|
};
|
|
2211
2218
|
|
|
2219
|
+
const MRT_EditRowModal = ({ open, row, table, }) => {
|
|
2220
|
+
const { options: { localization }, } = table;
|
|
2221
|
+
return (React.createElement(Dialog, { open: open },
|
|
2222
|
+
React.createElement(DialogTitle, { textAlign: "center" }, localization.edit),
|
|
2223
|
+
React.createElement(DialogContent, null,
|
|
2224
|
+
React.createElement(Stack, { sx: {
|
|
2225
|
+
width: '100%',
|
|
2226
|
+
minWidth: { xs: '300px', sm: '360px', md: '400px' },
|
|
2227
|
+
gap: '1.5rem',
|
|
2228
|
+
} }, row
|
|
2229
|
+
.getVisibleCells()
|
|
2230
|
+
.filter((cell) => cell.column.columnDef.columnDefType === 'data')
|
|
2231
|
+
.map((cell) => (React.createElement(MRT_EditCellTextField, { cell: cell, key: cell.id, showLabel: true, table: table }))))),
|
|
2232
|
+
React.createElement(DialogActions, { sx: { p: '1.25rem' } },
|
|
2233
|
+
React.createElement(MRT_EditActionButtons, { row: row, table: table, variant: "text" }))));
|
|
2234
|
+
};
|
|
2235
|
+
|
|
2212
2236
|
const MRT_TableRoot = (props) => {
|
|
2213
2237
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7;
|
|
2214
2238
|
const [tableId, setIdPrefix] = useState(props.tableId);
|
|
@@ -2310,7 +2334,8 @@ const MRT_TableRoot = (props) => {
|
|
|
2310
2334
|
return (React.createElement(React.Fragment, null,
|
|
2311
2335
|
React.createElement(Dialog, { PaperComponent: Box, TransitionComponent: Grow, disablePortal: true, fullScreen: true, keepMounted: false, onClose: () => setIsFullScreen(false), open: isFullScreen, transitionDuration: 400 },
|
|
2312
2336
|
React.createElement(MRT_TablePaper, { table: table })),
|
|
2313
|
-
!isFullScreen && React.createElement(MRT_TablePaper, { table: table })
|
|
2337
|
+
!isFullScreen && React.createElement(MRT_TablePaper, { table: table }),
|
|
2338
|
+
editingRow && props.editingMode === 'modal' && (React.createElement(MRT_EditRowModal, { row: editingRow, table: table, open: true }))));
|
|
2314
2339
|
};
|
|
2315
2340
|
|
|
2316
2341
|
var MaterialReactTable = (_a) => {
|