@mui/x-data-grid 6.0.3 → 6.1.0
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/CHANGELOG.md +119 -0
- package/components/GridAutoSizer.js +3 -0
- package/components/GridPagination.d.ts +6 -6
- package/components/GridRow.js +4 -2
- package/components/cell/GridActionsCellItem.d.ts +2 -2
- package/components/cell/GridEditDateCell.js +37 -16
- package/components/columnHeaders/ColumnHeaderMenuIcon.js +20 -16
- package/components/columnHeaders/GridColumnHeaderTitle.js +5 -5
- package/components/menu/columnMenu/GridColumnHeaderMenu.js +4 -2
- package/components/menu/columnMenu/GridColumnMenu.d.ts +5 -5
- package/components/menu/columnMenu/GridColumnMenu.js +30 -30
- package/components/menu/columnMenu/GridColumnMenuProps.d.ts +1 -1
- package/components/panel/GridColumnsPanel.d.ts +8 -0
- package/components/panel/GridColumnsPanel.js +18 -6
- package/components/panel/GridPanel.d.ts +1 -1
- package/components/panel/filterPanel/GridFilterPanel.js +1 -1
- package/components/reexportable.d.ts +1 -1
- package/components/reexportable.js +1 -1
- package/components/toolbar/GridToolbarColumnsButton.d.ts +1 -1
- package/components/toolbar/GridToolbarDensitySelector.d.ts +1 -1
- package/components/toolbar/GridToolbarExportContainer.d.ts +1 -1
- package/hooks/core/useGridApiInitialization.js +3 -3
- package/hooks/features/columnMenu/columnMenuInterfaces.d.ts +11 -11
- package/hooks/features/columnMenu/{useGridColumnMenuComponents.d.ts → useGridColumnMenuSlots.d.ts} +4 -4
- package/hooks/features/columnMenu/{useGridColumnMenuComponents.js → useGridColumnMenuSlots.js} +21 -26
- package/hooks/features/columns/gridColumnsSelector.d.ts +3 -3
- package/hooks/features/columns/useGridColumns.js +1 -1
- package/hooks/features/editing/useGridCellEditing.js +5 -1
- package/hooks/features/editing/useGridEditing.js +1 -3
- package/hooks/features/editing/useGridRowEditing.js +5 -1
- package/hooks/features/filter/gridFilterState.js +6 -1
- package/hooks/features/filter/useGridFilter.js +6 -1
- package/hooks/features/sorting/useGridSorting.js +1 -1
- package/hooks/features/virtualization/useGridVirtualScroller.js +1 -1
- package/index.d.ts +1 -1
- package/index.js +10 -2
- package/legacy/components/GridAutoSizer.js +3 -0
- package/legacy/components/GridRow.js +5 -2
- package/legacy/components/cell/GridEditBooleanCell.js +19 -21
- package/legacy/components/cell/GridEditDateCell.js +69 -39
- package/legacy/components/cell/GridEditInputCell.js +25 -27
- package/legacy/components/cell/GridEditSingleSelectCell.js +26 -28
- package/legacy/components/columnHeaders/ColumnHeaderMenuIcon.js +20 -16
- package/legacy/components/columnHeaders/GridColumnHeaderTitle.js +5 -5
- package/legacy/components/menu/columnMenu/GridColumnHeaderMenu.js +4 -2
- package/legacy/components/menu/columnMenu/GridColumnMenu.js +32 -32
- package/legacy/components/panel/GridColumnsPanel.js +19 -6
- package/legacy/components/panel/filterPanel/GridFilterPanel.js +1 -1
- package/legacy/components/reexportable.js +1 -1
- package/legacy/hooks/core/useGridApiInitialization.js +3 -3
- package/legacy/hooks/features/columnMenu/{useGridColumnMenuComponents.js → useGridColumnMenuSlots.js} +25 -30
- package/legacy/hooks/features/columns/gridColumnsUtils.js +2 -2
- package/legacy/hooks/features/columns/useGridColumns.js +1 -1
- package/legacy/hooks/features/editing/useGridCellEditing.js +120 -120
- package/legacy/hooks/features/editing/useGridEditing.js +17 -21
- package/legacy/hooks/features/editing/useGridRowEditing.js +5 -1
- package/legacy/hooks/features/export/useGridPrintExport.js +45 -47
- package/legacy/hooks/features/filter/gridFilterState.js +6 -1
- package/legacy/hooks/features/filter/useGridFilter.js +6 -1
- package/legacy/hooks/features/rows/gridRowsUtils.js +2 -2
- package/legacy/hooks/features/sorting/useGridSorting.js +1 -1
- package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +7 -7
- package/legacy/index.js +10 -2
- package/legacy/locales/coreLocales.js +0 -1
- package/legacy/locales/daDK.js +16 -21
- package/legacy/locales/esES.js +1 -1
- package/legacy/locales/huHU.js +15 -20
- package/legacy/locales/jaJP.js +1 -1
- package/legacy/locales/nbNO.js +10 -12
- package/legacy/locales/nlNL.js +3 -3
- package/legacy/locales/ptBR.js +7 -9
- package/legacy/locales/ruRU.js +1 -1
- package/legacy/locales/svSE.js +2 -2
- package/legacy/models/gridColumnGrouping.js +4 -0
- package/legacy/models/params/gridRowParams.js +8 -0
- package/legacy/utils/createSelector.js +14 -22
- package/locales/coreLocales.js +0 -1
- package/locales/daDK.js +16 -21
- package/locales/esES.js +1 -1
- package/locales/huHU.js +15 -20
- package/locales/jaJP.js +1 -1
- package/locales/nbNO.js +10 -12
- package/locales/nlNL.js +3 -3
- package/locales/ptBR.js +7 -9
- package/locales/ruRU.js +1 -1
- package/locales/svSE.js +2 -2
- package/models/api/gridCoreApi.d.ts +3 -1
- package/models/api/gridEditingApi.d.ts +4 -0
- package/models/gridColumnGrouping.js +4 -0
- package/models/params/gridRowParams.js +8 -0
- package/modern/components/GridAutoSizer.js +3 -0
- package/modern/components/GridRow.js +4 -2
- package/modern/components/cell/GridEditDateCell.js +37 -16
- package/modern/components/columnHeaders/ColumnHeaderMenuIcon.js +19 -15
- package/modern/components/columnHeaders/GridColumnHeaderTitle.js +5 -5
- package/modern/components/menu/columnMenu/GridColumnHeaderMenu.js +4 -2
- package/modern/components/menu/columnMenu/GridColumnMenu.js +30 -30
- package/modern/components/panel/GridColumnsPanel.js +18 -6
- package/modern/components/panel/filterPanel/GridFilterPanel.js +1 -1
- package/modern/components/reexportable.js +1 -1
- package/modern/hooks/core/useGridApiInitialization.js +3 -3
- package/modern/hooks/features/columnMenu/{useGridColumnMenuComponents.js → useGridColumnMenuSlots.js} +21 -26
- package/modern/hooks/features/columns/useGridColumns.js +1 -1
- package/modern/hooks/features/editing/useGridCellEditing.js +5 -1
- package/modern/hooks/features/editing/useGridEditing.js +1 -3
- package/modern/hooks/features/editing/useGridRowEditing.js +5 -1
- package/modern/hooks/features/filter/gridFilterState.js +6 -1
- package/modern/hooks/features/filter/useGridFilter.js +6 -1
- package/modern/hooks/features/sorting/useGridSorting.js +1 -1
- package/modern/hooks/features/virtualization/useGridVirtualScroller.js +1 -1
- package/modern/index.js +10 -2
- package/modern/locales/coreLocales.js +0 -1
- package/modern/locales/daDK.js +16 -21
- package/modern/locales/esES.js +1 -1
- package/modern/locales/huHU.js +15 -20
- package/modern/locales/jaJP.js +1 -1
- package/modern/locales/nbNO.js +10 -12
- package/modern/locales/nlNL.js +3 -3
- package/modern/locales/ptBR.js +7 -9
- package/modern/locales/ruRU.js +1 -1
- package/modern/locales/svSE.js +2 -2
- package/modern/models/gridColumnGrouping.js +4 -0
- package/modern/models/params/gridRowParams.js +8 -0
- package/modern/utils/createSelector.js +12 -22
- package/node/components/GridAutoSizer.js +3 -1
- package/node/components/GridRow.js +4 -2
- package/node/components/cell/GridCell.js +1 -0
- package/node/components/cell/GridEditDateCell.js +37 -16
- package/node/components/columnHeaders/ColumnHeaderMenuIcon.js +19 -15
- package/node/components/columnHeaders/GridColumnHeaderTitle.js +5 -5
- package/node/components/menu/columnMenu/GridColumnHeaderMenu.js +4 -2
- package/node/components/menu/columnMenu/GridColumnMenu.js +33 -33
- package/node/components/panel/GridColumnsPanel.js +18 -6
- package/node/components/panel/filterPanel/GridFilterPanel.js +1 -1
- package/node/components/reexportable.js +4 -4
- package/node/hooks/core/useGridApiInitialization.js +3 -3
- package/node/hooks/features/columnMenu/{useGridColumnMenuComponents.js → useGridColumnMenuSlots.js} +22 -27
- package/node/hooks/features/columns/useGridColumns.js +1 -1
- package/node/hooks/features/editing/useGridCellEditing.js +5 -1
- package/node/hooks/features/editing/useGridEditing.js +1 -3
- package/node/hooks/features/editing/useGridRowEditing.js +5 -1
- package/node/hooks/features/filter/gridFilterState.js +5 -0
- package/node/hooks/features/filter/useGridFilter.js +6 -1
- package/node/hooks/features/sorting/useGridSorting.js +1 -1
- package/node/hooks/features/virtualization/useGridVirtualScroller.js +1 -1
- package/node/index.js +7 -7
- package/node/locales/daDK.js +16 -21
- package/node/locales/esES.js +1 -1
- package/node/locales/huHU.js +15 -20
- package/node/locales/jaJP.js +1 -1
- package/node/locales/nbNO.js +10 -12
- package/node/locales/nlNL.js +3 -3
- package/node/locales/ptBR.js +7 -9
- package/node/locales/ruRU.js +1 -1
- package/node/locales/svSE.js +2 -2
- package/node/models/gridColumnGrouping.js +4 -0
- package/node/models/params/gridEditCellParams.js +1 -0
- package/node/models/params/gridRowParams.js +9 -0
- package/node/utils/createSelector.js +12 -22
- package/package.json +1 -1
- package/utils/createSelector.d.ts +4 -4
- package/utils/createSelector.js +14 -22
|
@@ -29,7 +29,7 @@ var _utils2 = require("../utils/utils");
|
|
|
29
29
|
var _gridEditingSelectors = require("../hooks/features/editing/gridEditingSelectors");
|
|
30
30
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
31
31
|
const _excluded = ["selected", "rowId", "row", "index", "style", "position", "rowHeight", "className", "visibleColumns", "renderedColumns", "containerWidth", "firstColumnToRender", "lastColumnToRender", "isLastVisible", "focusedCell", "tabbableCell", "onClick", "onDoubleClick", "onMouseEnter", "onMouseLeave"],
|
|
32
|
-
_excluded2 = ["changeReason"];
|
|
32
|
+
_excluded2 = ["changeReason", "unstable_updateValueOnRender"];
|
|
33
33
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
34
34
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
35
35
|
const useUtilityClasses = ownerState => {
|
|
@@ -56,7 +56,7 @@ function EmptyCell({
|
|
|
56
56
|
width
|
|
57
57
|
};
|
|
58
58
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
59
|
-
className:
|
|
59
|
+
className: `${_gridClasses.gridClasses.cell} ${_gridClasses.gridClasses.withBorderColor}`,
|
|
60
60
|
style: style
|
|
61
61
|
}); // TODO change to .MuiDataGrid-emptyCell or .MuiDataGrid-rowFiller
|
|
62
62
|
}
|
|
@@ -218,6 +218,8 @@ const GridRow = /*#__PURE__*/React.forwardRef(function GridRow(props, refProp) {
|
|
|
218
218
|
}
|
|
219
219
|
if (editCellState != null && column.renderEditCell) {
|
|
220
220
|
const updatedRow = apiRef.current.getRowWithUpdatedValues(rowId, column.field);
|
|
221
|
+
|
|
222
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
221
223
|
const editCellStateRest = (0, _objectWithoutPropertiesLoose2.default)(editCellState, _excluded2);
|
|
222
224
|
const params = (0, _extends2.default)({}, cellParams, {
|
|
223
225
|
row: updatedRow
|
|
@@ -18,6 +18,7 @@ var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
|
|
|
18
18
|
var _gridFocusStateSelector = require("../../hooks/features/focus/gridFocusStateSelector");
|
|
19
19
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
20
20
|
const _excluded = ["align", "children", "colIndex", "colDef", "cellMode", "field", "formattedValue", "hasFocus", "height", "isEditable", "isSelected", "rowId", "tabIndex", "value", "width", "className", "showRightBorder", "extendRowFullWidth", "row", "colSpan", "disableDragEvents", "onClick", "onDoubleClick", "onMouseDown", "onMouseUp", "onMouseOver", "onKeyDown", "onKeyUp", "onDragEnter", "onDragOver"];
|
|
21
|
+
/* eslint-disable jsx-a11y/no-noninteractive-element-interactions */
|
|
21
22
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
22
23
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
23
24
|
// Based on https://stackoverflow.com/a/59518678
|
|
@@ -73,22 +73,25 @@ function GridEditDateCell(props) {
|
|
|
73
73
|
classes: rootProps.classes
|
|
74
74
|
};
|
|
75
75
|
const classes = useUtilityClasses(ownerState);
|
|
76
|
+
const hasUpdatedEditValueOnMount = React.useRef(false);
|
|
77
|
+
const parseValueToDate = React.useCallback(value => {
|
|
78
|
+
if (value === '') {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
const [date, time] = value.split('T');
|
|
82
|
+
const [year, month, day] = date.split('-');
|
|
83
|
+
const parsedDate = new Date();
|
|
84
|
+
parsedDate.setFullYear(Number(year), Number(month) - 1, Number(day));
|
|
85
|
+
parsedDate.setHours(0, 0, 0, 0);
|
|
86
|
+
if (time) {
|
|
87
|
+
const [hours, minutes] = time.split(':');
|
|
88
|
+
parsedDate.setHours(Number(hours), Number(minutes), 0, 0);
|
|
89
|
+
}
|
|
90
|
+
return parsedDate;
|
|
91
|
+
}, []);
|
|
76
92
|
const handleChange = React.useCallback(async event => {
|
|
77
93
|
const newFormattedDate = event.target.value;
|
|
78
|
-
|
|
79
|
-
if (newFormattedDate === '') {
|
|
80
|
-
newParsedDate = null;
|
|
81
|
-
} else {
|
|
82
|
-
const [date, time] = newFormattedDate.split('T');
|
|
83
|
-
const [year, month, day] = date.split('-');
|
|
84
|
-
newParsedDate = new Date();
|
|
85
|
-
newParsedDate.setFullYear(Number(year), Number(month) - 1, Number(day));
|
|
86
|
-
newParsedDate.setHours(0, 0, 0, 0);
|
|
87
|
-
if (time) {
|
|
88
|
-
const [hours, minutes] = time.split(':');
|
|
89
|
-
newParsedDate.setHours(Number(hours), Number(minutes), 0, 0);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
94
|
+
const newParsedDate = parseValueToDate(newFormattedDate);
|
|
92
95
|
if (onValueChange) {
|
|
93
96
|
await onValueChange(event, newParsedDate);
|
|
94
97
|
}
|
|
@@ -101,7 +104,7 @@ function GridEditDateCell(props) {
|
|
|
101
104
|
field,
|
|
102
105
|
value: newParsedDate
|
|
103
106
|
}, event);
|
|
104
|
-
}, [apiRef, field, id, onValueChange]);
|
|
107
|
+
}, [apiRef, field, id, onValueChange, parseValueToDate]);
|
|
105
108
|
React.useEffect(() => {
|
|
106
109
|
setValueState(state => {
|
|
107
110
|
if (valueTransformed.parsed !== state.parsed && valueTransformed.parsed?.getTime() !== state.parsed?.getTime()) {
|
|
@@ -115,8 +118,26 @@ function GridEditDateCell(props) {
|
|
|
115
118
|
inputRef.current.focus();
|
|
116
119
|
}
|
|
117
120
|
}, [hasFocus]);
|
|
121
|
+
const meta = apiRef.current.unstable_getEditCellMeta(id, field);
|
|
122
|
+
const handleInputRef = el => {
|
|
123
|
+
inputRef.current = el;
|
|
124
|
+
if (meta.unstable_updateValueOnRender && !hasUpdatedEditValueOnMount.current) {
|
|
125
|
+
const inputValue = inputRef.current.value;
|
|
126
|
+
const parsedDate = parseValueToDate(inputValue);
|
|
127
|
+
setValueState({
|
|
128
|
+
parsed: parsedDate,
|
|
129
|
+
formatted: inputValue
|
|
130
|
+
});
|
|
131
|
+
apiRef.current.setEditCellValue({
|
|
132
|
+
id,
|
|
133
|
+
field,
|
|
134
|
+
value: parsedDate
|
|
135
|
+
});
|
|
136
|
+
hasUpdatedEditValueOnMount.current = true;
|
|
137
|
+
}
|
|
138
|
+
};
|
|
118
139
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(StyledInputBase, (0, _extends2.default)({
|
|
119
|
-
inputRef:
|
|
140
|
+
inputRef: handleInputRef,
|
|
120
141
|
fullWidth: true,
|
|
121
142
|
className: classes.root,
|
|
122
143
|
type: isDateTime ? 'datetime-local' : 'date',
|
|
@@ -46,22 +46,26 @@ const ColumnHeaderMenuIcon = /*#__PURE__*/React.memo(props => {
|
|
|
46
46
|
}, [apiRef, colDef.field]);
|
|
47
47
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
48
48
|
className: classes.root,
|
|
49
|
-
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.
|
|
50
|
-
ref: iconButtonRef,
|
|
51
|
-
tabIndex: -1,
|
|
52
|
-
className: classes.button,
|
|
53
|
-
"aria-label": apiRef.current.getLocaleText('columnMenuLabel'),
|
|
49
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseTooltip, (0, _extends2.default)({
|
|
54
50
|
title: apiRef.current.getLocaleText('columnMenuLabel'),
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
51
|
+
enterDelay: 1000
|
|
52
|
+
}, rootProps.slotProps?.baseTooltip, {
|
|
53
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseIconButton, (0, _extends2.default)({
|
|
54
|
+
ref: iconButtonRef,
|
|
55
|
+
tabIndex: -1,
|
|
56
|
+
className: classes.button,
|
|
57
|
+
"aria-label": apiRef.current.getLocaleText('columnMenuLabel'),
|
|
58
|
+
size: "small",
|
|
59
|
+
onClick: handleMenuIconClick,
|
|
60
|
+
"aria-expanded": open ? 'true' : undefined,
|
|
61
|
+
"aria-haspopup": "true",
|
|
62
|
+
"aria-controls": columnMenuId,
|
|
63
|
+
id: columnMenuButtonId
|
|
64
|
+
}, rootProps.slotProps?.baseIconButton, {
|
|
65
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.columnMenuIcon, {
|
|
66
|
+
fontSize: "small"
|
|
67
|
+
})
|
|
68
|
+
}))
|
|
65
69
|
}))
|
|
66
70
|
});
|
|
67
71
|
});
|
|
@@ -55,14 +55,13 @@ const ColumnHeaderInnerTitle = /*#__PURE__*/React.forwardRef(function ColumnHead
|
|
|
55
55
|
function GridColumnHeaderTitle(props) {
|
|
56
56
|
const {
|
|
57
57
|
label,
|
|
58
|
-
description
|
|
59
|
-
columnWidth
|
|
58
|
+
description
|
|
60
59
|
} = props;
|
|
61
60
|
const rootProps = (0, _useGridRootProps.useGridRootProps)();
|
|
62
61
|
const titleRef = React.useRef(null);
|
|
63
62
|
const [tooltip, setTooltip] = React.useState('');
|
|
64
|
-
React.
|
|
65
|
-
if (!description && titleRef
|
|
63
|
+
const handleMouseOver = React.useCallback(() => {
|
|
64
|
+
if (!description && titleRef?.current) {
|
|
66
65
|
const isOver = (0, _domUtils.isOverflown)(titleRef.current);
|
|
67
66
|
if (isOver) {
|
|
68
67
|
setTooltip(label);
|
|
@@ -70,11 +69,12 @@ function GridColumnHeaderTitle(props) {
|
|
|
70
69
|
setTooltip('');
|
|
71
70
|
}
|
|
72
71
|
}
|
|
73
|
-
}, [
|
|
72
|
+
}, [description, label]);
|
|
74
73
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseTooltip, (0, _extends2.default)({
|
|
75
74
|
title: description || tooltip
|
|
76
75
|
}, rootProps.slotProps?.baseTooltip, {
|
|
77
76
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(ColumnHeaderInnerTitle, {
|
|
77
|
+
onMouseOver: handleMouseOver,
|
|
78
78
|
ref: titleRef,
|
|
79
79
|
children: label
|
|
80
80
|
})
|
|
@@ -29,8 +29,10 @@ function GridColumnHeaderMenu({
|
|
|
29
29
|
const hideMenu = React.useCallback(event => {
|
|
30
30
|
// Prevent triggering the sorting
|
|
31
31
|
event.stopPropagation();
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
if (!target?.contains(event.target)) {
|
|
33
|
+
apiRef.current.hideColumnMenu();
|
|
34
|
+
}
|
|
35
|
+
}, [apiRef, target]);
|
|
34
36
|
if (!target) {
|
|
35
37
|
return null;
|
|
36
38
|
}
|
|
@@ -4,27 +4,27 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.GridGenericColumnMenu = exports.GridColumnMenu = exports.
|
|
7
|
+
exports.GridGenericColumnMenu = exports.GridColumnMenu = exports.GRID_COLUMN_MENU_SLOT_PROPS = exports.GRID_COLUMN_MENU_SLOTS = void 0;
|
|
8
8
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
9
|
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
10
10
|
var React = _interopRequireWildcard(require("react"));
|
|
11
11
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
12
|
-
var
|
|
12
|
+
var _useGridColumnMenuSlots = require("../../../hooks/features/columnMenu/useGridColumnMenuSlots");
|
|
13
13
|
var _GridColumnMenuContainer = require("./GridColumnMenuContainer");
|
|
14
14
|
var _GridColumnMenuColumnsItem = require("./menuItems/GridColumnMenuColumnsItem");
|
|
15
15
|
var _GridColumnMenuFilterItem = require("./menuItems/GridColumnMenuFilterItem");
|
|
16
16
|
var _GridColumnMenuSortItem = require("./menuItems/GridColumnMenuSortItem");
|
|
17
17
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
18
|
-
const _excluded = ["
|
|
18
|
+
const _excluded = ["defaultSlots", "defaultSlotProps", "slots", "slotProps"];
|
|
19
19
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
20
20
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
const GRID_COLUMN_MENU_SLOTS = {
|
|
22
|
+
columnMenuSortItem: _GridColumnMenuSortItem.GridColumnMenuSortItem,
|
|
23
|
+
columnMenuFilterItem: _GridColumnMenuFilterItem.GridColumnMenuFilterItem,
|
|
24
|
+
columnMenuColumnsItem: _GridColumnMenuColumnsItem.GridColumnMenuColumnsItem
|
|
25
25
|
};
|
|
26
|
-
exports.
|
|
27
|
-
const
|
|
26
|
+
exports.GRID_COLUMN_MENU_SLOTS = GRID_COLUMN_MENU_SLOTS;
|
|
27
|
+
const GRID_COLUMN_MENU_SLOT_PROPS = {
|
|
28
28
|
columnMenuSortItem: {
|
|
29
29
|
displayOrder: 10
|
|
30
30
|
},
|
|
@@ -35,33 +35,33 @@ const GRID_COLUMN_MENU_COMPONENTS_PROPS = {
|
|
|
35
35
|
displayOrder: 30
|
|
36
36
|
}
|
|
37
37
|
};
|
|
38
|
-
exports.
|
|
38
|
+
exports.GRID_COLUMN_MENU_SLOT_PROPS = GRID_COLUMN_MENU_SLOT_PROPS;
|
|
39
39
|
const GridGenericColumnMenu = /*#__PURE__*/React.forwardRef(function GridGenericColumnMenu(props, ref) {
|
|
40
40
|
const {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
41
|
+
defaultSlots,
|
|
42
|
+
defaultSlotProps,
|
|
43
|
+
slots,
|
|
44
|
+
slotProps
|
|
45
45
|
} = props,
|
|
46
46
|
other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
47
|
+
const orderedSlots = (0, _useGridColumnMenuSlots.useGridColumnMenuSlots)((0, _extends2.default)({}, other, {
|
|
48
|
+
defaultSlots,
|
|
49
|
+
defaultSlotProps,
|
|
50
|
+
slots,
|
|
51
|
+
slotProps
|
|
52
52
|
}));
|
|
53
53
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridColumnMenuContainer.GridColumnMenuContainer, (0, _extends2.default)({
|
|
54
54
|
ref: ref
|
|
55
55
|
}, other, {
|
|
56
|
-
children:
|
|
56
|
+
children: orderedSlots.map(([Component, otherProps], index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(Component, (0, _extends2.default)({}, otherProps), index))
|
|
57
57
|
}));
|
|
58
58
|
});
|
|
59
59
|
exports.GridGenericColumnMenu = GridGenericColumnMenu;
|
|
60
60
|
const GridColumnMenu = /*#__PURE__*/React.forwardRef(function GridColumnMenu(props, ref) {
|
|
61
61
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridGenericColumnMenu, (0, _extends2.default)({}, props, {
|
|
62
62
|
ref: ref,
|
|
63
|
-
|
|
64
|
-
|
|
63
|
+
defaultSlots: GRID_COLUMN_MENU_SLOTS,
|
|
64
|
+
defaultSlotProps: GRID_COLUMN_MENU_SLOT_PROPS
|
|
65
65
|
}));
|
|
66
66
|
});
|
|
67
67
|
exports.GridColumnMenu = GridColumnMenu;
|
|
@@ -71,19 +71,19 @@ process.env.NODE_ENV !== "production" ? GridColumnMenu.propTypes = {
|
|
|
71
71
|
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
72
72
|
// ----------------------------------------------------------------------
|
|
73
73
|
colDef: _propTypes.default.object.isRequired,
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
*/
|
|
79
|
-
components: _propTypes.default.object,
|
|
74
|
+
hideMenu: _propTypes.default.func.isRequired,
|
|
75
|
+
id: _propTypes.default.string,
|
|
76
|
+
labelledby: _propTypes.default.string,
|
|
77
|
+
open: _propTypes.default.bool.isRequired,
|
|
80
78
|
/**
|
|
81
79
|
* Could be used to pass new props or override props specific to a column menu component
|
|
82
80
|
* e.g. `displayOrder`
|
|
83
81
|
*/
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
82
|
+
slotProps: _propTypes.default.object,
|
|
83
|
+
/**
|
|
84
|
+
* `slots` could be used to add new and (or) override default column menu items
|
|
85
|
+
* If you register a nee component you must pass it's `displayOrder` in `slotProps`
|
|
86
|
+
* or it will be placed in the end of the list
|
|
87
|
+
*/
|
|
88
|
+
slots: _propTypes.default.object
|
|
89
89
|
} : void 0;
|
|
@@ -25,7 +25,7 @@ var _envConstants = require("../../constants/envConstants");
|
|
|
25
25
|
var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
|
|
26
26
|
var _gridClasses = require("../../constants/gridClasses");
|
|
27
27
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
28
|
-
const _excluded = ["sort", "searchPredicate", "autoFocusSearchField", "disableHideAllButton", "disableShowAllButton"];
|
|
28
|
+
const _excluded = ["sort", "searchPredicate", "autoFocusSearchField", "disableHideAllButton", "disableShowAllButton", "getTogglableColumns"];
|
|
29
29
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
30
30
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
31
31
|
const useUtilityClasses = ownerState => {
|
|
@@ -79,7 +79,8 @@ function GridColumnsPanel(props) {
|
|
|
79
79
|
searchPredicate = defaultSearchPredicate,
|
|
80
80
|
autoFocusSearchField = true,
|
|
81
81
|
disableHideAllButton = false,
|
|
82
|
-
disableShowAllButton = false
|
|
82
|
+
disableShowAllButton = false,
|
|
83
|
+
getTogglableColumns
|
|
83
84
|
} = props,
|
|
84
85
|
other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
|
|
85
86
|
const sortedColumns = React.useMemo(() => {
|
|
@@ -117,12 +118,15 @@ function GridColumnsPanel(props) {
|
|
|
117
118
|
setSearchValue(event.target.value);
|
|
118
119
|
}, []);
|
|
119
120
|
const currentColumns = React.useMemo(() => {
|
|
121
|
+
const togglableColumns = getTogglableColumns ? getTogglableColumns(sortedColumns) : null;
|
|
122
|
+
const togglableSortedColumns = togglableColumns ? sortedColumns.filter(({
|
|
123
|
+
field
|
|
124
|
+
}) => togglableColumns.includes(field)) : sortedColumns;
|
|
120
125
|
if (!searchValue) {
|
|
121
|
-
return
|
|
126
|
+
return togglableSortedColumns;
|
|
122
127
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}, [sortedColumns, searchValue, searchPredicate]);
|
|
128
|
+
return togglableSortedColumns.filter(column => searchPredicate(column, searchValue.toLowerCase()));
|
|
129
|
+
}, [sortedColumns, searchValue, searchPredicate, getTogglableColumns]);
|
|
126
130
|
const firstSwitchRef = React.useRef(null);
|
|
127
131
|
React.useEffect(() => {
|
|
128
132
|
if (autoFocusSearchField) {
|
|
@@ -200,6 +204,14 @@ process.env.NODE_ENV !== "production" ? GridColumnsPanel.propTypes = {
|
|
|
200
204
|
autoFocusSearchField: _propTypes.default.bool,
|
|
201
205
|
disableHideAllButton: _propTypes.default.bool,
|
|
202
206
|
disableShowAllButton: _propTypes.default.bool,
|
|
207
|
+
/**
|
|
208
|
+
* Returns the list of togglable columns.
|
|
209
|
+
* If used, only those columns will be displayed in the panel
|
|
210
|
+
* which are passed as the return value of the function.
|
|
211
|
+
* @param {GridColDef[]} columns The `ColDef` list of all columns.
|
|
212
|
+
* @returns {GridColDef['field'][]} The list of togglable columns' field names.
|
|
213
|
+
*/
|
|
214
|
+
getTogglableColumns: _propTypes.default.func,
|
|
203
215
|
searchPredicate: _propTypes.default.func,
|
|
204
216
|
slotProps: _propTypes.default.object,
|
|
205
217
|
sort: _propTypes.default.oneOf(['asc', 'desc'])
|
|
@@ -151,7 +151,7 @@ const GridFilterPanel = /*#__PURE__*/React.forwardRef(function GridFilterPanel(p
|
|
|
151
151
|
logicOperators: logicOperators,
|
|
152
152
|
columnsSort: columnsSort
|
|
153
153
|
}, filterFormProps), item.id == null ? index : item.id))
|
|
154
|
-
}), !rootProps.disableMultipleColumnsFiltering && !disableAddFilterButton &&
|
|
154
|
+
}), !rootProps.disableMultipleColumnsFiltering && !(disableAddFilterButton && disableRemoveAllButton) ? /*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridPanelFooter.GridPanelFooter, {
|
|
155
155
|
children: [!disableAddFilterButton ? /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseButton, (0, _extends2.default)({
|
|
156
156
|
onClick: addNewFilter,
|
|
157
157
|
startIcon: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.filterPanelAddIcon, {})
|
|
@@ -3,16 +3,16 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
Object.defineProperty(exports, "
|
|
6
|
+
Object.defineProperty(exports, "GRID_COLUMN_MENU_SLOTS", {
|
|
7
7
|
enumerable: true,
|
|
8
8
|
get: function () {
|
|
9
|
-
return _GridColumnMenu.
|
|
9
|
+
return _GridColumnMenu.GRID_COLUMN_MENU_SLOTS;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
|
-
Object.defineProperty(exports, "
|
|
12
|
+
Object.defineProperty(exports, "GRID_COLUMN_MENU_SLOT_PROPS", {
|
|
13
13
|
enumerable: true,
|
|
14
14
|
get: function () {
|
|
15
|
-
return _GridColumnMenu.
|
|
15
|
+
return _GridColumnMenu.GRID_COLUMN_MENU_SLOT_PROPS;
|
|
16
16
|
}
|
|
17
17
|
});
|
|
18
18
|
Object.defineProperty(exports, "GridColumnMenu", {
|
|
@@ -8,7 +8,6 @@ var React = _interopRequireWildcard(require("react"));
|
|
|
8
8
|
var _useGridApiMethod = require("../utils/useGridApiMethod");
|
|
9
9
|
var _useGridApiEventHandler = require("../utils/useGridApiEventHandler");
|
|
10
10
|
var _EventManager = require("../../utils/EventManager");
|
|
11
|
-
var _createSelector = require("../../utils/createSelector");
|
|
12
11
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
13
12
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
14
13
|
const isSyntheticEvent = event => {
|
|
@@ -46,7 +45,9 @@ function useGridApiInitialization(inputApiRef, props) {
|
|
|
46
45
|
if (!publicApiRef.current) {
|
|
47
46
|
publicApiRef.current = {
|
|
48
47
|
state: {},
|
|
49
|
-
instanceId:
|
|
48
|
+
instanceId: {
|
|
49
|
+
id: globalId
|
|
50
|
+
}
|
|
50
51
|
};
|
|
51
52
|
globalId += 1;
|
|
52
53
|
}
|
|
@@ -84,7 +85,6 @@ function useGridApiInitialization(inputApiRef, props) {
|
|
|
84
85
|
React.useEffect(() => {
|
|
85
86
|
const api = privateApiRef.current;
|
|
86
87
|
return () => {
|
|
87
|
-
(0, _createSelector.unstable_resetCreateSelectorCache)(api.instanceId);
|
|
88
88
|
api.publishEvent('unmount');
|
|
89
89
|
};
|
|
90
90
|
}, [privateApiRef]);
|
package/node/hooks/features/columnMenu/{useGridColumnMenuComponents.js → useGridColumnMenuSlots.js}
RENAMED
|
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.
|
|
7
|
+
exports.useGridColumnMenuSlots = void 0;
|
|
8
8
|
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
9
9
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
10
|
var React = _interopRequireWildcard(require("react"));
|
|
@@ -13,44 +13,39 @@ var _useGridPrivateApiContext = require("../../utils/useGridPrivateApiContext");
|
|
|
13
13
|
const _excluded = ["displayOrder"];
|
|
14
14
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
15
15
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
16
|
-
const
|
|
17
|
-
const camelCase = pascalCase.split('');
|
|
18
|
-
camelCase[0] = camelCase[0].toLowerCase();
|
|
19
|
-
return camelCase.join('');
|
|
20
|
-
};
|
|
21
|
-
const useGridColumnMenuComponents = props => {
|
|
16
|
+
const useGridColumnMenuSlots = props => {
|
|
22
17
|
const apiRef = (0, _useGridPrivateApiContext.useGridPrivateApiContext)();
|
|
23
18
|
const {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
19
|
+
defaultSlots,
|
|
20
|
+
defaultSlotProps,
|
|
21
|
+
slots = {},
|
|
22
|
+
slotProps = {},
|
|
28
23
|
hideMenu,
|
|
29
24
|
colDef,
|
|
30
25
|
addDividers = true
|
|
31
26
|
} = props;
|
|
32
|
-
const processedComponents = React.useMemo(() => (0, _extends2.default)({},
|
|
33
|
-
const
|
|
34
|
-
if (!
|
|
35
|
-
return
|
|
27
|
+
const processedComponents = React.useMemo(() => (0, _extends2.default)({}, defaultSlots, slots), [defaultSlots, slots]);
|
|
28
|
+
const processedSlotProps = React.useMemo(() => {
|
|
29
|
+
if (!slotProps || Object.keys(slotProps).length === 0) {
|
|
30
|
+
return defaultSlotProps;
|
|
36
31
|
}
|
|
37
|
-
const mergedProps = (0, _extends2.default)({},
|
|
38
|
-
Object.entries(
|
|
39
|
-
mergedProps[key] = (0, _extends2.default)({},
|
|
32
|
+
const mergedProps = (0, _extends2.default)({}, slotProps);
|
|
33
|
+
Object.entries(defaultSlotProps).forEach(([key, currentSlotProps]) => {
|
|
34
|
+
mergedProps[key] = (0, _extends2.default)({}, currentSlotProps, slotProps[key] || {});
|
|
40
35
|
});
|
|
41
36
|
return mergedProps;
|
|
42
|
-
}, [
|
|
37
|
+
}, [defaultSlotProps, slotProps]);
|
|
43
38
|
const defaultItems = apiRef.current.unstable_applyPipeProcessors('columnMenu', [], props.colDef);
|
|
44
39
|
const userItems = React.useMemo(() => {
|
|
45
|
-
const defaultComponentKeys = Object.keys(
|
|
46
|
-
return Object.keys(
|
|
47
|
-
}, [
|
|
40
|
+
const defaultComponentKeys = Object.keys(defaultSlots);
|
|
41
|
+
return Object.keys(slots).filter(key => !defaultComponentKeys.includes(key));
|
|
42
|
+
}, [slots, defaultSlots]);
|
|
48
43
|
return React.useMemo(() => {
|
|
49
44
|
const uniqueItems = Array.from(new Set([...defaultItems, ...userItems]));
|
|
50
45
|
const cleansedItems = uniqueItems.filter(key => processedComponents[key] != null);
|
|
51
46
|
const sorted = cleansedItems.sort((a, b) => {
|
|
52
|
-
const leftItemProps =
|
|
53
|
-
const rightItemProps =
|
|
47
|
+
const leftItemProps = processedSlotProps[a];
|
|
48
|
+
const rightItemProps = processedSlotProps[b];
|
|
54
49
|
const leftDisplayOrder = Number.isFinite(leftItemProps?.displayOrder) ? leftItemProps.displayOrder : 100;
|
|
55
50
|
const rightDisplayOrder = Number.isFinite(rightItemProps?.displayOrder) ? rightItemProps.displayOrder : 100;
|
|
56
51
|
return leftDisplayOrder - rightDisplayOrder;
|
|
@@ -60,13 +55,13 @@ const useGridColumnMenuComponents = props => {
|
|
|
60
55
|
colDef,
|
|
61
56
|
onClick: hideMenu
|
|
62
57
|
};
|
|
63
|
-
const processedComponentProps =
|
|
58
|
+
const processedComponentProps = processedSlotProps[key];
|
|
64
59
|
if (processedComponentProps) {
|
|
65
60
|
const customProps = (0, _objectWithoutPropertiesLoose2.default)(processedComponentProps, _excluded);
|
|
66
61
|
itemProps = (0, _extends2.default)({}, itemProps, customProps);
|
|
67
62
|
}
|
|
68
63
|
return addDividers && index !== sorted.length - 1 ? [...acc, [processedComponents[key], itemProps], [_Divider.default, {}]] : [...acc, [processedComponents[key], itemProps]];
|
|
69
64
|
}, []);
|
|
70
|
-
}, [addDividers, colDef, defaultItems, hideMenu, processedComponents,
|
|
65
|
+
}, [addDividers, colDef, defaultItems, hideMenu, processedComponents, processedSlotProps, userItems]);
|
|
71
66
|
};
|
|
72
|
-
exports.
|
|
67
|
+
exports.useGridColumnMenuSlots = useGridColumnMenuSlots;
|
|
@@ -237,7 +237,7 @@ function useGridColumns(apiRef, props) {
|
|
|
237
237
|
if (props.disableColumnSelector) {
|
|
238
238
|
return columnMenuItems;
|
|
239
239
|
}
|
|
240
|
-
return [...columnMenuItems, '
|
|
240
|
+
return [...columnMenuItems, 'columnMenuColumnsItem'];
|
|
241
241
|
}, [props.disableColumnSelector]);
|
|
242
242
|
(0, _pipeProcessing.useGridRegisterPipeProcessor)(apiRef, 'columnMenu', addColumnMenuItems);
|
|
243
243
|
(0, _pipeProcessing.useGridRegisterPipeProcessor)(apiRef, 'exportState', stateExportPreProcessing);
|
|
@@ -251,13 +251,17 @@ const useGridCellEditing = (apiRef, props) => {
|
|
|
251
251
|
initialValue
|
|
252
252
|
} = params;
|
|
253
253
|
let newValue = apiRef.current.getCellValue(id, field);
|
|
254
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
255
|
+
let unstable_updateValueOnRender = false;
|
|
254
256
|
if (deleteValue || initialValue) {
|
|
255
257
|
newValue = deleteValue ? '' : initialValue;
|
|
258
|
+
unstable_updateValueOnRender = true;
|
|
256
259
|
}
|
|
257
260
|
const newProps = {
|
|
258
261
|
value: newValue,
|
|
259
262
|
error: false,
|
|
260
|
-
isProcessingProps: false
|
|
263
|
+
isProcessingProps: false,
|
|
264
|
+
unstable_updateValueOnRender
|
|
261
265
|
};
|
|
262
266
|
updateOrDeleteFieldState(id, field, newProps);
|
|
263
267
|
apiRef.current.setCellFocus(id, field);
|
|
@@ -120,9 +120,7 @@ const useGridEditing = (apiRef, props) => {
|
|
|
120
120
|
}, [apiRef, props.editMode]);
|
|
121
121
|
const getEditCellMeta = React.useCallback((id, field) => {
|
|
122
122
|
const editingState = (0, _gridEditingSelectors.gridEditRowsStateSelector)(apiRef.current.state);
|
|
123
|
-
return
|
|
124
|
-
changeReason: editingState[id][field].changeReason
|
|
125
|
-
};
|
|
123
|
+
return editingState[id][field];
|
|
126
124
|
}, [apiRef]);
|
|
127
125
|
const editingSharedApi = {
|
|
128
126
|
isCellEditable,
|
|
@@ -319,13 +319,17 @@ const useGridRowEditing = (apiRef, props) => {
|
|
|
319
319
|
return acc;
|
|
320
320
|
}
|
|
321
321
|
let newValue = apiRef.current.getCellValue(id, field);
|
|
322
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
323
|
+
let unstable_updateValueOnRender = false;
|
|
322
324
|
if (fieldToFocus === field && (deleteValue || initialValue)) {
|
|
323
325
|
newValue = deleteValue ? '' : initialValue;
|
|
326
|
+
unstable_updateValueOnRender = true;
|
|
324
327
|
}
|
|
325
328
|
acc[field] = {
|
|
326
329
|
value: newValue,
|
|
327
330
|
error: false,
|
|
328
|
-
isProcessingProps: false
|
|
331
|
+
isProcessingProps: false,
|
|
332
|
+
unstable_updateValueOnRender
|
|
329
333
|
};
|
|
330
334
|
return acc;
|
|
331
335
|
}, {});
|
|
@@ -11,4 +11,9 @@ const getDefaultGridFilterModel = () => ({
|
|
|
11
11
|
quickFilterValues: [],
|
|
12
12
|
quickFilterLogicOperator: _gridFilterItem.GridLogicOperator.And
|
|
13
13
|
});
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* @param {GridRowId} rowId The id of the row we want to filter.
|
|
17
|
+
* @param {(filterItem: GridFilterItem) => boolean} shouldApplyItem An optional callback to allow the filtering engine to only apply some items.
|
|
18
|
+
*/
|
|
14
19
|
exports.getDefaultGridFilterModel = getDefaultGridFilterModel;
|
|
@@ -67,7 +67,7 @@ const useGridFilter = (apiRef, props) => {
|
|
|
67
67
|
if (colDef == null || colDef.filterable === false || props.disableColumnFilter) {
|
|
68
68
|
return columnMenuItems;
|
|
69
69
|
}
|
|
70
|
-
return [...columnMenuItems, '
|
|
70
|
+
return [...columnMenuItems, 'columnMenuFilterItem'];
|
|
71
71
|
}, [props.disableColumnFilter]);
|
|
72
72
|
|
|
73
73
|
/**
|
|
@@ -121,6 +121,11 @@ const useGridFilter = (apiRef, props) => {
|
|
|
121
121
|
const filterModel = (0, _gridFilterSelector.gridFilterModelSelector)(apiRef);
|
|
122
122
|
const filterItemsWithValue = filterModel.items.filter(item => {
|
|
123
123
|
if (item.value !== undefined) {
|
|
124
|
+
// Some filters like `isAnyOf` support array as `item.value`.
|
|
125
|
+
// If array is empty, we want to remove it from the filter model.
|
|
126
|
+
if (Array.isArray(item.value) && item.value.length === 0) {
|
|
127
|
+
return false;
|
|
128
|
+
}
|
|
124
129
|
return true;
|
|
125
130
|
}
|
|
126
131
|
const column = apiRef.current.getColumn(item.field);
|
|
@@ -80,7 +80,7 @@ const useGridSorting = (apiRef, props) => {
|
|
|
80
80
|
}
|
|
81
81
|
const sortingOrder = colDef.sortingOrder || props.sortingOrder;
|
|
82
82
|
if (sortingOrder.some(item => !!item)) {
|
|
83
|
-
return [...columnMenuItems, '
|
|
83
|
+
return [...columnMenuItems, 'columnMenuSortItem'];
|
|
84
84
|
}
|
|
85
85
|
return columnMenuItems;
|
|
86
86
|
}, [props.sortingOrder]);
|