@mui/x-data-grid-pro 6.4.0 → 6.6.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 +134 -2
- package/DataGridPro/DataGridPro.js +15 -3
- package/DataGridPro/useDataGridProComponent.js +3 -1
- package/DataGridPro/useDataGridProProps.js +7 -13
- package/README.md +2 -2
- package/components/DataGridProVirtualScroller.js +12 -12
- package/components/GridColumnHeaders.js +23 -3
- package/components/GridColumnMenuPinningItem.d.ts +2 -2
- package/components/GridDetailPanel.d.ts +1 -1
- package/components/GridDetailPanel.js +1 -1
- package/components/GridDetailPanelToggleCell.d.ts +2 -2
- package/components/GridRowReorderCell.d.ts +3 -3
- package/components/GridScrollArea.d.ts +10 -0
- package/components/GridScrollArea.js +140 -0
- package/components/GridTreeDataGroupingCell.d.ts +2 -2
- package/components/headerFiltering/GridHeaderFilterAdornment.d.ts +14 -0
- package/components/headerFiltering/GridHeaderFilterAdornment.js +99 -0
- package/components/headerFiltering/GridHeaderFilterCell.d.ts +20 -0
- package/components/headerFiltering/GridHeaderFilterCell.js +224 -0
- package/components/headerFiltering/GridHeaderFilterClearButton.d.ts +6 -0
- package/components/headerFiltering/GridHeaderFilterClearButton.js +25 -0
- package/components/headerFiltering/GridHeaderFilterMenu.d.ts +14 -0
- package/components/headerFiltering/GridHeaderFilterMenu.js +69 -0
- package/components/headerFiltering/constants.d.ts +3 -0
- package/components/headerFiltering/constants.js +30 -0
- package/components/headerFiltering/index.d.ts +2 -0
- package/components/headerFiltering/index.js +2 -0
- package/components/index.d.ts +1 -0
- package/components/index.js +2 -1
- package/constants/dataGridProDefaultSlotsComponents.js +5 -1
- package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +21 -0
- package/hooks/features/columnHeaders/useGridColumnHeaders.js +111 -0
- package/hooks/features/columnResize/useGridColumnResize.js +23 -13
- package/hooks/features/detailPanel/useGridDetailPanel.js +4 -6
- package/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -0
- package/hooks/features/treeData/gridTreeDataUtils.js +0 -8
- package/hooks/features/treeData/useGridTreeDataPreProcessors.js +3 -0
- package/index.js +1 -1
- package/internals/index.d.ts +2 -1
- package/internals/index.js +5 -1
- package/legacy/DataGridPro/DataGridPro.js +15 -3
- package/legacy/DataGridPro/useDataGridProComponent.js +3 -1
- package/legacy/DataGridPro/useDataGridProProps.js +10 -9
- package/legacy/components/DataGridProVirtualScroller.js +12 -12
- package/legacy/components/GridColumnHeaders.js +23 -3
- package/legacy/components/GridDetailPanel.js +1 -1
- package/legacy/components/GridScrollArea.js +143 -0
- package/legacy/components/headerFiltering/GridHeaderFilterAdornment.js +97 -0
- package/legacy/components/headerFiltering/GridHeaderFilterCell.js +230 -0
- package/legacy/components/headerFiltering/GridHeaderFilterClearButton.js +24 -0
- package/legacy/components/headerFiltering/GridHeaderFilterMenu.js +68 -0
- package/legacy/components/headerFiltering/constants.js +30 -0
- package/legacy/components/headerFiltering/index.js +2 -0
- package/legacy/components/index.js +2 -1
- package/legacy/constants/dataGridProDefaultSlotsComponents.js +5 -1
- package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +120 -0
- package/legacy/hooks/features/columnResize/useGridColumnResize.js +23 -13
- package/legacy/hooks/features/detailPanel/useGridDetailPanel.js +4 -6
- package/legacy/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -0
- package/legacy/hooks/features/treeData/gridTreeDataUtils.js +0 -8
- package/legacy/hooks/features/treeData/useGridTreeDataPreProcessors.js +3 -0
- package/legacy/index.js +1 -1
- package/legacy/internals/index.js +5 -1
- package/legacy/material/icons.js +4 -1
- package/legacy/material/index.js +3 -2
- package/legacy/models/gridProSlotProps.js +1 -0
- package/legacy/utils/releaseInfo.js +1 -1
- package/legacy/utils/tree/createRowTree.js +1 -0
- package/legacy/utils/tree/insertDataRowInTree.js +4 -0
- package/legacy/utils/tree/removeDataRowFromTree.js +1 -0
- package/legacy/utils/tree/updateRowTree.js +2 -0
- package/legacy/utils/tree/utils.js +51 -12
- package/material/icons.d.ts +3 -0
- package/material/icons.js +4 -1
- package/material/index.d.ts +1 -0
- package/material/index.js +3 -2
- package/models/dataGridProProps.d.ts +16 -1
- package/models/gridProIconSlotsComponent.d.ts +5 -0
- package/models/gridProSlotProps.d.ts +9 -0
- package/models/gridProSlotProps.js +1 -0
- package/models/gridProSlotsComponent.d.ts +13 -2
- package/modern/DataGridPro/DataGridPro.js +15 -3
- package/modern/DataGridPro/useDataGridProComponent.js +3 -1
- package/modern/DataGridPro/useDataGridProProps.js +7 -13
- package/modern/components/DataGridProVirtualScroller.js +12 -12
- package/modern/components/GridColumnHeaders.js +23 -3
- package/modern/components/GridDetailPanel.js +1 -1
- package/modern/components/GridScrollArea.js +140 -0
- package/modern/components/headerFiltering/GridHeaderFilterAdornment.js +98 -0
- package/modern/components/headerFiltering/GridHeaderFilterCell.js +222 -0
- package/modern/components/headerFiltering/GridHeaderFilterClearButton.js +24 -0
- package/modern/components/headerFiltering/GridHeaderFilterMenu.js +68 -0
- package/modern/components/headerFiltering/constants.js +30 -0
- package/modern/components/headerFiltering/index.js +2 -0
- package/modern/components/index.js +2 -1
- package/modern/constants/dataGridProDefaultSlotsComponents.js +5 -1
- package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +110 -0
- package/modern/hooks/features/columnResize/useGridColumnResize.js +22 -12
- package/modern/hooks/features/detailPanel/useGridDetailPanel.js +4 -6
- package/modern/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -0
- package/modern/hooks/features/treeData/gridTreeDataUtils.js +0 -8
- package/modern/hooks/features/treeData/useGridTreeDataPreProcessors.js +3 -0
- package/modern/index.js +1 -1
- package/modern/internals/index.js +5 -1
- package/modern/material/icons.js +4 -1
- package/modern/material/index.js +3 -2
- package/modern/models/gridProSlotProps.js +1 -0
- package/modern/utils/releaseInfo.js +1 -1
- package/modern/utils/tree/createRowTree.js +1 -0
- package/modern/utils/tree/insertDataRowInTree.js +4 -0
- package/modern/utils/tree/removeDataRowFromTree.js +1 -0
- package/modern/utils/tree/updateRowTree.js +2 -0
- package/modern/utils/tree/utils.js +52 -14
- package/node/DataGridPro/DataGridPro.js +15 -3
- package/node/DataGridPro/useDataGridProComponent.js +2 -0
- package/node/DataGridPro/useDataGridProProps.js +6 -12
- package/node/components/DataGridProVirtualScroller.js +12 -12
- package/node/components/GridColumnHeaders.js +22 -3
- package/node/components/GridDetailPanel.js +2 -2
- package/node/components/GridScrollArea.js +149 -0
- package/node/components/headerFiltering/GridHeaderFilterAdornment.js +105 -0
- package/node/components/headerFiltering/GridHeaderFilterCell.js +230 -0
- package/node/components/headerFiltering/GridHeaderFilterClearButton.js +32 -0
- package/node/components/headerFiltering/GridHeaderFilterMenu.js +75 -0
- package/node/components/headerFiltering/constants.js +37 -0
- package/node/components/headerFiltering/index.js +27 -0
- package/node/components/index.js +11 -0
- package/node/constants/dataGridProDefaultSlotsComponents.js +5 -1
- package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +120 -0
- package/node/hooks/features/columnResize/useGridColumnResize.js +22 -12
- package/node/hooks/features/detailPanel/useGridDetailPanel.js +4 -6
- package/node/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -0
- package/node/hooks/features/treeData/gridTreeDataUtils.js +0 -8
- package/node/hooks/features/treeData/useGridTreeDataPreProcessors.js +3 -0
- package/node/index.js +1 -1
- package/node/internals/index.js +16 -1
- package/node/material/icons.js +6 -2
- package/node/material/index.js +2 -1
- package/node/models/gridProSlotProps.js +5 -0
- package/node/utils/releaseInfo.js +1 -1
- package/node/utils/tree/createRowTree.js +1 -0
- package/node/utils/tree/insertDataRowInTree.js +4 -0
- package/node/utils/tree/removeDataRowFromTree.js +1 -0
- package/node/utils/tree/updateRowTree.js +2 -0
- package/node/utils/tree/utils.js +54 -15
- package/package.json +6 -6
- package/typeOverloads/modules.d.ts +13 -1
- package/utils/releaseInfo.js +1 -1
- package/utils/tree/createRowTree.d.ts +2 -0
- package/utils/tree/createRowTree.js +1 -0
- package/utils/tree/insertDataRowInTree.d.ts +5 -1
- package/utils/tree/insertDataRowInTree.js +4 -0
- package/utils/tree/removeDataRowFromTree.js +1 -0
- package/utils/tree/updateRowTree.js +2 -0
- package/utils/tree/utils.d.ts +9 -3
- package/utils/tree/utils.js +52 -14
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.GridHeaderFilterCell = void 0;
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
10
|
+
var React = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
12
|
+
var _clsx = _interopRequireDefault(require("clsx"));
|
|
13
|
+
var _utils = require("@mui/utils");
|
|
14
|
+
var _xDataGrid = require("@mui/x-data-grid");
|
|
15
|
+
var _internals = require("@mui/x-data-grid/internals");
|
|
16
|
+
var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
|
|
17
|
+
var _GridHeaderFilterAdornment = require("./GridHeaderFilterAdornment");
|
|
18
|
+
var _GridHeaderFilterClearButton = require("./GridHeaderFilterClearButton");
|
|
19
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
20
|
+
const _excluded = ["colIndex", "height", "hasFocus", "headerFilterComponent", "filterOperators", "width", "headerClassName", "colDef", "item", "headerFilterMenuRef", "InputComponentProps", "showClearIcon"];
|
|
21
|
+
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
|
+
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
|
+
const useUtilityClasses = ownerState => {
|
|
24
|
+
const {
|
|
25
|
+
colDef,
|
|
26
|
+
classes,
|
|
27
|
+
showColumnVerticalBorder
|
|
28
|
+
} = ownerState;
|
|
29
|
+
const slots = {
|
|
30
|
+
root: ['columnHeader', colDef.headerAlign === 'left' && 'columnHeader--alignLeft', colDef.headerAlign === 'center' && 'columnHeader--alignCenter', colDef.headerAlign === 'right' && 'columnHeader--alignRight', 'withBorderColor', showColumnVerticalBorder && 'columnHeader--withRightBorder']
|
|
31
|
+
};
|
|
32
|
+
return (0, _utils.unstable_composeClasses)(slots, _xDataGrid.getDataGridUtilityClass, classes);
|
|
33
|
+
};
|
|
34
|
+
const GridHeaderFilterCell = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
35
|
+
const {
|
|
36
|
+
colIndex,
|
|
37
|
+
height,
|
|
38
|
+
hasFocus,
|
|
39
|
+
headerFilterComponent,
|
|
40
|
+
filterOperators,
|
|
41
|
+
width,
|
|
42
|
+
headerClassName,
|
|
43
|
+
colDef,
|
|
44
|
+
item,
|
|
45
|
+
headerFilterMenuRef,
|
|
46
|
+
InputComponentProps,
|
|
47
|
+
showClearIcon = true
|
|
48
|
+
} = props,
|
|
49
|
+
other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
|
|
50
|
+
const apiRef = (0, _internals.useGridPrivateApiContext)();
|
|
51
|
+
const columnFields = (0, _xDataGrid.gridVisibleColumnFieldsSelector)(apiRef);
|
|
52
|
+
const rootProps = (0, _useGridRootProps.useGridRootProps)();
|
|
53
|
+
const cellRef = React.useRef(null);
|
|
54
|
+
const handleRef = (0, _utils.unstable_useForkRef)(ref, cellRef);
|
|
55
|
+
const inputRef = React.useRef(null);
|
|
56
|
+
const buttonRef = React.useRef(null);
|
|
57
|
+
const isEditing = (0, _internals.unstable_gridHeaderFilteringEditFieldSelector)(apiRef) === colDef.field;
|
|
58
|
+
const isMenuOpen = (0, _internals.unstable_gridHeaderFilteringMenuSelector)(apiRef) === colDef.field;
|
|
59
|
+
const currentOperator = filterOperators[0];
|
|
60
|
+
const InputComponent = colDef.filterable ? currentOperator.InputComponent : null;
|
|
61
|
+
const applyFilterChanges = React.useCallback(updatedItem => {
|
|
62
|
+
if (item.value && !updatedItem.value) {
|
|
63
|
+
apiRef.current.deleteFilterItem(updatedItem);
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
apiRef.current.upsertFilterItem(updatedItem);
|
|
67
|
+
}, [apiRef, item]);
|
|
68
|
+
const clearFilterItem = React.useCallback(() => {
|
|
69
|
+
apiRef.current.deleteFilterItem(item);
|
|
70
|
+
}, [apiRef, item]);
|
|
71
|
+
React.useLayoutEffect(() => {
|
|
72
|
+
if (hasFocus && !isMenuOpen) {
|
|
73
|
+
let focusableElement = cellRef.current.querySelector('[tabindex="0"]');
|
|
74
|
+
if (isEditing && InputComponent) {
|
|
75
|
+
focusableElement = inputRef.current;
|
|
76
|
+
}
|
|
77
|
+
const elementToFocus = focusableElement || cellRef.current;
|
|
78
|
+
elementToFocus?.focus();
|
|
79
|
+
apiRef.current.columnHeadersContainerElementRef.current.scrollLeft = 0;
|
|
80
|
+
}
|
|
81
|
+
}, [InputComponent, apiRef, hasFocus, isEditing, isMenuOpen]);
|
|
82
|
+
const onKeyDown = React.useCallback(event => {
|
|
83
|
+
if (isMenuOpen || (0, _internals.isNavigationKey)(event.key)) {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
switch (event.key) {
|
|
87
|
+
case 'Escape':
|
|
88
|
+
if (isEditing) {
|
|
89
|
+
apiRef.current.stopHeaderFilterEditMode();
|
|
90
|
+
}
|
|
91
|
+
break;
|
|
92
|
+
case 'Enter':
|
|
93
|
+
if (isEditing) {
|
|
94
|
+
apiRef.current.stopHeaderFilterEditMode();
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
if (event.metaKey || event.ctrlKey) {
|
|
98
|
+
headerFilterMenuRef.current = buttonRef.current;
|
|
99
|
+
apiRef.current.showHeaderFilterMenu(colDef.field);
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
apiRef.current.startHeaderFilterEditMode(colDef.field);
|
|
103
|
+
break;
|
|
104
|
+
case 'Tab':
|
|
105
|
+
{
|
|
106
|
+
if (isEditing) {
|
|
107
|
+
const fieldToFocus = columnFields[colIndex + (event.shiftKey ? -1 : 1)] ?? null;
|
|
108
|
+
if (fieldToFocus) {
|
|
109
|
+
apiRef.current.startHeaderFilterEditMode(fieldToFocus);
|
|
110
|
+
apiRef.current.setColumnHeaderFilterFocus(fieldToFocus, event);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
break;
|
|
114
|
+
}
|
|
115
|
+
default:
|
|
116
|
+
if (isEditing || event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) {
|
|
117
|
+
break;
|
|
118
|
+
}
|
|
119
|
+
apiRef.current.startHeaderFilterEditMode(colDef.field);
|
|
120
|
+
break;
|
|
121
|
+
}
|
|
122
|
+
}, [apiRef, colDef.field, colIndex, columnFields, headerFilterMenuRef, isEditing, isMenuOpen]);
|
|
123
|
+
const publish = React.useCallback((eventName, propHandler) => event => {
|
|
124
|
+
apiRef.current.publishEvent(eventName, apiRef.current.getColumnHeaderParams(colDef.field), event);
|
|
125
|
+
if (propHandler) {
|
|
126
|
+
propHandler(event);
|
|
127
|
+
}
|
|
128
|
+
}, [apiRef, colDef.field]);
|
|
129
|
+
const onMouseDown = React.useCallback(event => {
|
|
130
|
+
if (!hasFocus) {
|
|
131
|
+
if (inputRef.current) {
|
|
132
|
+
inputRef.current.focus();
|
|
133
|
+
}
|
|
134
|
+
apiRef.current.setColumnHeaderFilterFocus(colDef.field, event);
|
|
135
|
+
}
|
|
136
|
+
}, [apiRef, colDef.field, hasFocus]);
|
|
137
|
+
const mouseEventsHandlers = React.useMemo(() => ({
|
|
138
|
+
onKeyDown: publish('headerFilterKeyDown', onKeyDown),
|
|
139
|
+
onClick: publish('headerFilterClick'),
|
|
140
|
+
onMouseDown: publish('headerFilterMouseDown', onMouseDown)
|
|
141
|
+
}), [onMouseDown, onKeyDown, publish]);
|
|
142
|
+
const ownerState = (0, _extends2.default)({}, rootProps, {
|
|
143
|
+
colDef
|
|
144
|
+
});
|
|
145
|
+
const classes = useUtilityClasses(ownerState);
|
|
146
|
+
const isNoInputOperator = filterOperators?.find(({
|
|
147
|
+
value
|
|
148
|
+
}) => item.operator === value)?.requiresFilterValue === false;
|
|
149
|
+
const isApplied = Boolean(item?.value) || isNoInputOperator;
|
|
150
|
+
const label = currentOperator.headerLabel ?? apiRef.current.getLocaleText(`headerFilterOperator${(0, _utils.unstable_capitalize)(item.operator)}`);
|
|
151
|
+
const isFilterActive = isApplied || hasFocus;
|
|
152
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", (0, _extends2.default)({
|
|
153
|
+
className: (0, _clsx.default)(classes.root, headerClassName),
|
|
154
|
+
ref: handleRef,
|
|
155
|
+
style: {
|
|
156
|
+
height,
|
|
157
|
+
width,
|
|
158
|
+
minWidth: width,
|
|
159
|
+
maxWidth: width
|
|
160
|
+
},
|
|
161
|
+
role: "columnheader",
|
|
162
|
+
"aria-colindex": colIndex + 1,
|
|
163
|
+
"aria-label": headerFilterComponent == null ? colDef.headerName ?? colDef.field : undefined
|
|
164
|
+
}, other, mouseEventsHandlers, {
|
|
165
|
+
children: [headerFilterComponent, InputComponent && headerFilterComponent === undefined ? /*#__PURE__*/(0, _jsxRuntime.jsx)(InputComponent, (0, _extends2.default)({
|
|
166
|
+
apiRef: apiRef,
|
|
167
|
+
item: item,
|
|
168
|
+
inputRef: inputRef,
|
|
169
|
+
applyValue: applyFilterChanges,
|
|
170
|
+
onFocus: () => apiRef.current.startHeaderFilterEditMode(colDef.field),
|
|
171
|
+
onBlur: () => apiRef.current.stopHeaderFilterEditMode(),
|
|
172
|
+
placeholder: apiRef.current.getLocaleText('columnMenuFilter'),
|
|
173
|
+
label: isFilterActive ? (0, _utils.unstable_capitalize)(label) : ' ',
|
|
174
|
+
isFilterActive: isFilterActive,
|
|
175
|
+
headerFilterMenu: /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridHeaderFilterAdornment.GridHeaderFilterAdornment, {
|
|
176
|
+
operators: filterOperators,
|
|
177
|
+
item: item,
|
|
178
|
+
field: colDef.field,
|
|
179
|
+
applyFilterChanges: applyFilterChanges,
|
|
180
|
+
headerFilterMenuRef: headerFilterMenuRef,
|
|
181
|
+
buttonRef: buttonRef
|
|
182
|
+
}),
|
|
183
|
+
clearButton: showClearIcon && isApplied ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridHeaderFilterClearButton.GridHeaderFilterClearButton, {
|
|
184
|
+
onClick: clearFilterItem
|
|
185
|
+
}) : null,
|
|
186
|
+
disabled: isNoInputOperator,
|
|
187
|
+
tabIndex: -1
|
|
188
|
+
}, currentOperator?.InputComponentProps, InputComponentProps)) : null]
|
|
189
|
+
}));
|
|
190
|
+
});
|
|
191
|
+
exports.GridHeaderFilterCell = GridHeaderFilterCell;
|
|
192
|
+
process.env.NODE_ENV !== "production" ? GridHeaderFilterCell.propTypes = {
|
|
193
|
+
// ----------------------------- Warning --------------------------------
|
|
194
|
+
// | These PropTypes are generated from the TypeScript type definitions |
|
|
195
|
+
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
196
|
+
// ----------------------------------------------------------------------
|
|
197
|
+
colDef: _propTypes.default.object.isRequired,
|
|
198
|
+
colIndex: _propTypes.default.number.isRequired,
|
|
199
|
+
filterOperators: _propTypes.default.arrayOf(_propTypes.default.shape({
|
|
200
|
+
getApplyFilterFn: _propTypes.default.func.isRequired,
|
|
201
|
+
getValueAsString: _propTypes.default.func,
|
|
202
|
+
headerLabel: _propTypes.default.string,
|
|
203
|
+
InputComponent: _propTypes.default.elementType,
|
|
204
|
+
InputComponentProps: _propTypes.default.object,
|
|
205
|
+
label: _propTypes.default.string,
|
|
206
|
+
requiresFilterValue: _propTypes.default.bool,
|
|
207
|
+
value: _propTypes.default.string.isRequired
|
|
208
|
+
})),
|
|
209
|
+
hasFocus: _propTypes.default.bool,
|
|
210
|
+
/**
|
|
211
|
+
* Class name that will be added in the column header cell.
|
|
212
|
+
*/
|
|
213
|
+
headerClassName: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.string]),
|
|
214
|
+
headerFilterComponent: _propTypes.default.node,
|
|
215
|
+
headerFilterMenuRef: _propTypes.default.shape({
|
|
216
|
+
current: _propTypes.default.object
|
|
217
|
+
}).isRequired,
|
|
218
|
+
height: _propTypes.default.number.isRequired,
|
|
219
|
+
InputComponentProps: _propTypes.default.object,
|
|
220
|
+
item: _propTypes.default.shape({
|
|
221
|
+
field: _propTypes.default.string.isRequired,
|
|
222
|
+
id: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
|
|
223
|
+
operator: _propTypes.default.string.isRequired,
|
|
224
|
+
value: _propTypes.default.any
|
|
225
|
+
}).isRequired,
|
|
226
|
+
showClearIcon: _propTypes.default.bool,
|
|
227
|
+
sortIndex: _propTypes.default.number,
|
|
228
|
+
tabIndex: _propTypes.default.oneOf([-1, 0]).isRequired,
|
|
229
|
+
width: _propTypes.default.number.isRequired
|
|
230
|
+
} : void 0;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.GridHeaderFilterClearButton = GridHeaderFilterClearButton;
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
var React = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
|
|
11
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
12
|
+
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
|
+
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
|
+
const sx = {
|
|
15
|
+
padding: '2px'
|
|
16
|
+
};
|
|
17
|
+
function GridHeaderFilterClearButton({
|
|
18
|
+
onClick
|
|
19
|
+
}) {
|
|
20
|
+
const rootProps = (0, _useGridRootProps.useGridRootProps)();
|
|
21
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.baseIconButton, (0, _extends2.default)({
|
|
22
|
+
tabIndex: -1,
|
|
23
|
+
"aria-label": "Clear filter",
|
|
24
|
+
size: "small",
|
|
25
|
+
onClick: onClick,
|
|
26
|
+
sx: sx
|
|
27
|
+
}, rootProps.slotProps?.baseIconButton, {
|
|
28
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.headerFilterClearIcon, {
|
|
29
|
+
fontSize: "inherit"
|
|
30
|
+
})
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.GridHeaderFilterMenu = GridHeaderFilterMenu;
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
var React = _interopRequireWildcard(require("react"));
|
|
10
|
+
var _MenuList = _interopRequireDefault(require("@mui/material/MenuList"));
|
|
11
|
+
var _MenuItem = _interopRequireDefault(require("@mui/material/MenuItem"));
|
|
12
|
+
var _ListItemIcon = _interopRequireDefault(require("@mui/material/ListItemIcon"));
|
|
13
|
+
var _ListItemText = _interopRequireDefault(require("@mui/material/ListItemText"));
|
|
14
|
+
var _utils = require("@mui/utils");
|
|
15
|
+
var _xDataGrid = require("@mui/x-data-grid");
|
|
16
|
+
var _constants = require("./constants");
|
|
17
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
18
|
+
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); }
|
|
19
|
+
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; }
|
|
20
|
+
function GridHeaderFilterMenu({
|
|
21
|
+
open,
|
|
22
|
+
field,
|
|
23
|
+
targetRef,
|
|
24
|
+
applyFilterChanges,
|
|
25
|
+
operators,
|
|
26
|
+
item,
|
|
27
|
+
id,
|
|
28
|
+
labelledBy
|
|
29
|
+
}) {
|
|
30
|
+
const apiRef = (0, _xDataGrid.useGridApiContext)();
|
|
31
|
+
const hideMenu = React.useCallback(() => {
|
|
32
|
+
apiRef.current.hideHeaderFilterMenu();
|
|
33
|
+
}, [apiRef]);
|
|
34
|
+
const handleListKeyDown = React.useCallback(event => {
|
|
35
|
+
if (event.key === 'Tab') {
|
|
36
|
+
event.preventDefault();
|
|
37
|
+
}
|
|
38
|
+
if (event.key === 'Escape' || event.key === 'Tab') {
|
|
39
|
+
hideMenu();
|
|
40
|
+
}
|
|
41
|
+
}, [hideMenu]);
|
|
42
|
+
if (!targetRef.current) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_xDataGrid.GridMenu, {
|
|
46
|
+
placement: "bottom-start",
|
|
47
|
+
open: open,
|
|
48
|
+
target: targetRef.current,
|
|
49
|
+
onClickAway: hideMenu,
|
|
50
|
+
onExited: hideMenu,
|
|
51
|
+
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_MenuList.default, {
|
|
52
|
+
"aria-labelledby": labelledBy,
|
|
53
|
+
id: id,
|
|
54
|
+
onKeyDown: handleListKeyDown,
|
|
55
|
+
children: operators.map((op, i) => {
|
|
56
|
+
const label = op?.headerLabel ?? apiRef.current.getLocaleText(`headerFilterOperator${(0, _utils.unstable_capitalize)(op.value)}`);
|
|
57
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_MenuItem.default, {
|
|
58
|
+
onClick: () => {
|
|
59
|
+
applyFilterChanges((0, _extends2.default)({}, item, {
|
|
60
|
+
operator: op.value
|
|
61
|
+
}));
|
|
62
|
+
hideMenu();
|
|
63
|
+
},
|
|
64
|
+
autoFocus: i === 0 ? open : false,
|
|
65
|
+
selected: op.value === item.operator,
|
|
66
|
+
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_ListItemIcon.default, {
|
|
67
|
+
children: _constants.OPERATOR_SYMBOL_MAPPING[op.value]
|
|
68
|
+
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_ListItemText.default, {
|
|
69
|
+
children: label
|
|
70
|
+
})]
|
|
71
|
+
}, `${field}-${op.value}`);
|
|
72
|
+
})
|
|
73
|
+
})
|
|
74
|
+
});
|
|
75
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.OPERATOR_SYMBOL_MAPPING = void 0;
|
|
7
|
+
const OPERATOR_SYMBOL_MAPPING = {
|
|
8
|
+
contains: '∋',
|
|
9
|
+
equals: '=',
|
|
10
|
+
'=': '=',
|
|
11
|
+
'!=': '≠',
|
|
12
|
+
'>': '>',
|
|
13
|
+
'>=': '≥',
|
|
14
|
+
'<': '<',
|
|
15
|
+
'<=': '≤',
|
|
16
|
+
startsWith: '⊃',
|
|
17
|
+
endsWith: '⊂',
|
|
18
|
+
is: '=',
|
|
19
|
+
not: '≠',
|
|
20
|
+
isNot: '≠',
|
|
21
|
+
isEmpty: '∅',
|
|
22
|
+
isNotEmpty: '∉',
|
|
23
|
+
isIn: '∈',
|
|
24
|
+
isNotIn: '∉',
|
|
25
|
+
isLessThan: '<',
|
|
26
|
+
isLessThanOrEqual: '≤',
|
|
27
|
+
isGreaterThan: '>',
|
|
28
|
+
isGreaterThanOrEqual: '≥',
|
|
29
|
+
isBetween: '∈',
|
|
30
|
+
isNotBetween: '∉',
|
|
31
|
+
isAnyOf: '∈',
|
|
32
|
+
after: '>',
|
|
33
|
+
onOrAfter: '≥',
|
|
34
|
+
before: '<',
|
|
35
|
+
onOrBefore: '≤'
|
|
36
|
+
};
|
|
37
|
+
exports.OPERATOR_SYMBOL_MAPPING = OPERATOR_SYMBOL_MAPPING;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _GridHeaderFilterAdornment = require("./GridHeaderFilterAdornment");
|
|
7
|
+
Object.keys(_GridHeaderFilterAdornment).forEach(function (key) {
|
|
8
|
+
if (key === "default" || key === "__esModule") return;
|
|
9
|
+
if (key in exports && exports[key] === _GridHeaderFilterAdornment[key]) return;
|
|
10
|
+
Object.defineProperty(exports, key, {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _GridHeaderFilterAdornment[key];
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
var _GridHeaderFilterCell = require("./GridHeaderFilterCell");
|
|
18
|
+
Object.keys(_GridHeaderFilterCell).forEach(function (key) {
|
|
19
|
+
if (key === "default" || key === "__esModule") return;
|
|
20
|
+
if (key in exports && exports[key] === _GridHeaderFilterCell[key]) return;
|
|
21
|
+
Object.defineProperty(exports, key, {
|
|
22
|
+
enumerable: true,
|
|
23
|
+
get: function () {
|
|
24
|
+
return _GridHeaderFilterCell[key];
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
});
|
package/node/components/index.js
CHANGED
|
@@ -46,4 +46,15 @@ Object.keys(_icons).forEach(function (key) {
|
|
|
46
46
|
return _icons[key];
|
|
47
47
|
}
|
|
48
48
|
});
|
|
49
|
+
});
|
|
50
|
+
var _headerFiltering = require("./headerFiltering");
|
|
51
|
+
Object.keys(_headerFiltering).forEach(function (key) {
|
|
52
|
+
if (key === "default" || key === "__esModule") return;
|
|
53
|
+
if (key in exports && exports[key] === _headerFiltering[key]) return;
|
|
54
|
+
Object.defineProperty(exports, key, {
|
|
55
|
+
enumerable: true,
|
|
56
|
+
get: function () {
|
|
57
|
+
return _headerFiltering[key];
|
|
58
|
+
}
|
|
59
|
+
});
|
|
49
60
|
});
|
|
@@ -9,9 +9,13 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
|
|
|
9
9
|
var _internals = require("@mui/x-data-grid/internals");
|
|
10
10
|
var _GridProColumnMenu = require("../components/GridProColumnMenu");
|
|
11
11
|
var _GridColumnHeaders = require("../components/GridColumnHeaders");
|
|
12
|
+
var _GridHeaderFilterMenu = require("../components/headerFiltering/GridHeaderFilterMenu");
|
|
13
|
+
var _GridHeaderFilterCell = require("../components/headerFiltering/GridHeaderFilterCell");
|
|
12
14
|
var _material = _interopRequireDefault(require("../material"));
|
|
13
15
|
const DATA_GRID_PRO_DEFAULT_SLOTS_COMPONENTS = (0, _extends2.default)({}, _internals.DATA_GRID_DEFAULT_SLOTS_COMPONENTS, _material.default, {
|
|
14
16
|
ColumnMenu: _GridProColumnMenu.GridProColumnMenu,
|
|
15
|
-
ColumnHeaders: _GridColumnHeaders.GridColumnHeaders
|
|
17
|
+
ColumnHeaders: _GridColumnHeaders.GridColumnHeaders,
|
|
18
|
+
HeaderFilterCell: _GridHeaderFilterCell.GridHeaderFilterCell,
|
|
19
|
+
HeaderFilterMenu: _GridHeaderFilterMenu.GridHeaderFilterMenu
|
|
16
20
|
});
|
|
17
21
|
exports.DATA_GRID_PRO_DEFAULT_SLOTS_COMPONENTS = DATA_GRID_PRO_DEFAULT_SLOTS_COMPONENTS;
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useGridColumnHeaders = void 0;
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
|
+
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
10
|
+
var React = _interopRequireWildcard(require("react"));
|
|
11
|
+
var _xDataGrid = require("@mui/x-data-grid");
|
|
12
|
+
var _system = require("@mui/system");
|
|
13
|
+
var _internals = require("@mui/x-data-grid/internals");
|
|
14
|
+
var _useGridRootProps = require("../../utils/useGridRootProps");
|
|
15
|
+
var _jsxRuntime = require("react/jsx-runtime");
|
|
16
|
+
const _excluded = ["getColumnsToRender", "getRootProps"];
|
|
17
|
+
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); }
|
|
18
|
+
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; }
|
|
19
|
+
const GridHeaderFilterRow = (0, _system.styled)('div', {
|
|
20
|
+
name: 'MuiDataGrid',
|
|
21
|
+
slot: 'HeaderFilterRow',
|
|
22
|
+
overridesResolver: (props, styles) => styles.headerFilterRow
|
|
23
|
+
})(() => ({
|
|
24
|
+
display: 'flex',
|
|
25
|
+
borderTop: '1px solid rgba(224, 224, 224, 1)'
|
|
26
|
+
}));
|
|
27
|
+
const useGridColumnHeaders = props => {
|
|
28
|
+
const apiRef = (0, _internals.useGridPrivateApiContext)();
|
|
29
|
+
const {
|
|
30
|
+
headerGroupingMaxDepth,
|
|
31
|
+
hasOtherElementInTabSequence
|
|
32
|
+
} = props;
|
|
33
|
+
const columnHeaderFilterTabIndexState = (0, _xDataGrid.useGridSelector)(apiRef, _xDataGrid.unstable_gridTabIndexColumnHeaderFilterSelector);
|
|
34
|
+
const _useGridColumnHeaders = (0, _internals.useGridColumnHeaders)((0, _extends2.default)({}, props, {
|
|
35
|
+
hasOtherElementInTabSequence: hasOtherElementInTabSequence || columnHeaderFilterTabIndexState !== null
|
|
36
|
+
})),
|
|
37
|
+
{
|
|
38
|
+
getColumnsToRender,
|
|
39
|
+
getRootProps
|
|
40
|
+
} = _useGridColumnHeaders,
|
|
41
|
+
otherProps = (0, _objectWithoutPropertiesLoose2.default)(_useGridColumnHeaders, _excluded);
|
|
42
|
+
const headerFiltersRef = React.useRef(null);
|
|
43
|
+
apiRef.current.register('private', {
|
|
44
|
+
headerFiltersElementRef: headerFiltersRef
|
|
45
|
+
});
|
|
46
|
+
const headerFilterMenuRef = React.useRef(null);
|
|
47
|
+
const rootProps = (0, _useGridRootProps.useGridRootProps)();
|
|
48
|
+
const disableHeaderFiltering = !rootProps.unstable_headerFilters;
|
|
49
|
+
const headerHeight = Math.floor(rootProps.columnHeaderHeight * props.densityFactor);
|
|
50
|
+
const filterModel = (0, _xDataGrid.useGridSelector)(apiRef, _xDataGrid.gridFilterModelSelector);
|
|
51
|
+
const totalHeaderHeight = (0, _internals.getTotalHeaderHeight)(apiRef, rootProps.columnHeaderHeight) + (disableHeaderFiltering ? 0 : headerHeight);
|
|
52
|
+
const columnHeaderFilterFocus = (0, _xDataGrid.useGridSelector)(apiRef, _xDataGrid.unstable_gridFocusColumnHeaderFilterSelector);
|
|
53
|
+
const getColumnFilters = (params, other = {}) => {
|
|
54
|
+
if (disableHeaderFiltering) {
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
const columnsToRender = getColumnsToRender(params);
|
|
58
|
+
if (columnsToRender == null) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
const {
|
|
62
|
+
renderedColumns,
|
|
63
|
+
firstColumnToRender
|
|
64
|
+
} = columnsToRender;
|
|
65
|
+
const filters = [];
|
|
66
|
+
for (let i = 0; i < renderedColumns.length; i += 1) {
|
|
67
|
+
const colDef = renderedColumns[i];
|
|
68
|
+
const columnIndex = firstColumnToRender + i;
|
|
69
|
+
const hasFocus = columnHeaderFilterFocus?.field === colDef.field;
|
|
70
|
+
const isFirstColumn = columnIndex === 0;
|
|
71
|
+
const tabIndexField = columnHeaderFilterTabIndexState?.field;
|
|
72
|
+
const tabIndex = tabIndexField === colDef.field || isFirstColumn && !props.hasOtherElementInTabSequence ? 0 : -1;
|
|
73
|
+
let headerFilterComponent;
|
|
74
|
+
if (colDef.renderHeaderFilter) {
|
|
75
|
+
headerFilterComponent = colDef.renderHeaderFilter(apiRef.current.getColumnHeaderParams(colDef.field));
|
|
76
|
+
}
|
|
77
|
+
const headerClassName = typeof colDef.headerClassName === 'function' ? colDef.headerClassName({
|
|
78
|
+
field: colDef.field,
|
|
79
|
+
colDef
|
|
80
|
+
}) : colDef.headerClassName;
|
|
81
|
+
|
|
82
|
+
// TODO: Support for `isAnyOf` operator
|
|
83
|
+
const filterOperators = colDef.filterOperators?.filter(operator => operator.value !== 'isAnyOf') ?? [];
|
|
84
|
+
const item = filterModel?.items.find(it => it.field === colDef.field && it.operator !== 'isAnyOf') ?? (0, _internals.getGridFilter)(colDef);
|
|
85
|
+
filters.push( /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.headerFilterCell, (0, _extends2.default)({
|
|
86
|
+
colIndex: columnIndex,
|
|
87
|
+
height: headerHeight,
|
|
88
|
+
width: colDef.computedWidth,
|
|
89
|
+
colDef: colDef,
|
|
90
|
+
hasFocus: hasFocus,
|
|
91
|
+
tabIndex: tabIndex,
|
|
92
|
+
headerFilterMenuRef: headerFilterMenuRef,
|
|
93
|
+
headerFilterComponent: headerFilterComponent,
|
|
94
|
+
headerClassName: headerClassName,
|
|
95
|
+
filterOperators: filterOperators,
|
|
96
|
+
"data-field": colDef.field,
|
|
97
|
+
item: item
|
|
98
|
+
}, rootProps.slotProps?.headerFilterCell, other), `${colDef.field}-filter`));
|
|
99
|
+
}
|
|
100
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(GridHeaderFilterRow, {
|
|
101
|
+
ref: headerFiltersRef,
|
|
102
|
+
ownerState: rootProps,
|
|
103
|
+
role: "row",
|
|
104
|
+
"aria-rowindex": headerGroupingMaxDepth + 2,
|
|
105
|
+
children: filters
|
|
106
|
+
});
|
|
107
|
+
};
|
|
108
|
+
const rootStyle = {
|
|
109
|
+
minHeight: totalHeaderHeight,
|
|
110
|
+
maxHeight: totalHeaderHeight,
|
|
111
|
+
lineHeight: `${headerHeight}px`
|
|
112
|
+
};
|
|
113
|
+
return (0, _extends2.default)({}, otherProps, {
|
|
114
|
+
getColumnFilters,
|
|
115
|
+
getRootProps: disableHeaderFiltering ? getRootProps : (other = {}) => (0, _extends2.default)({
|
|
116
|
+
style: rootStyle
|
|
117
|
+
}, other)
|
|
118
|
+
});
|
|
119
|
+
};
|
|
120
|
+
exports.useGridColumnHeaders = useGridColumnHeaders;
|
|
@@ -97,6 +97,7 @@ const useGridColumnResize = (apiRef, props) => {
|
|
|
97
97
|
const logger = (0, _xDataGrid.useGridLogger)(apiRef, 'useGridColumnResize');
|
|
98
98
|
const colDefRef = React.useRef();
|
|
99
99
|
const colElementRef = React.useRef();
|
|
100
|
+
const headerFilterElementRef = React.useRef();
|
|
100
101
|
const colGroupingElementRef = React.useRef();
|
|
101
102
|
const colCellElementsRef = React.useRef();
|
|
102
103
|
const theme = (0, _styles.useTheme)();
|
|
@@ -118,6 +119,12 @@ const useGridColumnResize = (apiRef, props) => {
|
|
|
118
119
|
colElementRef.current.style.width = `${newWidth}px`;
|
|
119
120
|
colElementRef.current.style.minWidth = `${newWidth}px`;
|
|
120
121
|
colElementRef.current.style.maxWidth = `${newWidth}px`;
|
|
122
|
+
const headerFilterElement = headerFilterElementRef.current;
|
|
123
|
+
if (headerFilterElement) {
|
|
124
|
+
headerFilterElement.style.width = `${newWidth}px`;
|
|
125
|
+
headerFilterElement.style.minWidth = `${newWidth}px`;
|
|
126
|
+
headerFilterElement.style.maxWidth = `${newWidth}px`;
|
|
127
|
+
}
|
|
121
128
|
[...colCellElementsRef.current, ...colGroupingElementRef.current].forEach(element => {
|
|
122
129
|
const div = element;
|
|
123
130
|
let finalWidth;
|
|
@@ -133,7 +140,7 @@ const useGridColumnResize = (apiRef, props) => {
|
|
|
133
140
|
div.style.maxWidth = finalWidth;
|
|
134
141
|
});
|
|
135
142
|
};
|
|
136
|
-
const
|
|
143
|
+
const finishResize = nativeEvent => {
|
|
137
144
|
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
138
145
|
stopListening();
|
|
139
146
|
apiRef.current.updateColumns([colDefRef.current]);
|
|
@@ -149,7 +156,8 @@ const useGridColumnResize = (apiRef, props) => {
|
|
|
149
156
|
}
|
|
150
157
|
});
|
|
151
158
|
logger.debug(`Updating col ${colDefRef.current.field} with new width: ${colDefRef.current.width}`);
|
|
152
|
-
}
|
|
159
|
+
};
|
|
160
|
+
const handleResizeMouseUp = (0, _utils.unstable_useEventCallback)(finishResize);
|
|
153
161
|
const handleResizeMouseMove = (0, _utils.unstable_useEventCallback)(nativeEvent => {
|
|
154
162
|
// Cancel move in case some other element consumed a mouseup event and it was not fired.
|
|
155
163
|
if (nativeEvent.buttons === 0) {
|
|
@@ -187,6 +195,10 @@ const useGridColumnResize = (apiRef, props) => {
|
|
|
187
195
|
}, event);
|
|
188
196
|
colDefRef.current = colDef;
|
|
189
197
|
colElementRef.current = apiRef.current.columnHeadersContainerElementRef?.current.querySelector(`[data-field="${colDef.field}"]`);
|
|
198
|
+
const headerFilterRowElement = apiRef.current.headerFiltersElementRef?.current;
|
|
199
|
+
if (headerFilterRowElement) {
|
|
200
|
+
headerFilterElementRef.current = headerFilterRowElement.querySelector(`[data-field="${colDef.field}"]`);
|
|
201
|
+
}
|
|
190
202
|
colGroupingElementRef.current = (0, _domUtils.findGroupHeaderElementsFromField)(apiRef.current.columnHeadersContainerElementRef?.current, colDef.field);
|
|
191
203
|
colCellElementsRef.current = (0, _domUtils.findGridCellElementsFromCol)(colElementRef.current, apiRef.current);
|
|
192
204
|
const doc = (0, _utils.unstable_ownerDocument)(apiRef.current.rootElementRef.current);
|
|
@@ -195,21 +207,16 @@ const useGridColumnResize = (apiRef, props) => {
|
|
|
195
207
|
initialOffsetToSeparator.current = computeOffsetToSeparator(event.clientX, colElementRef.current.getBoundingClientRect(), resizeDirection.current);
|
|
196
208
|
doc.addEventListener('mousemove', handleResizeMouseMove);
|
|
197
209
|
doc.addEventListener('mouseup', handleResizeMouseUp);
|
|
210
|
+
|
|
211
|
+
// Fixes https://github.com/mui/mui-x/issues/4777
|
|
212
|
+
colElementRef.current.style.pointerEvents = 'none';
|
|
198
213
|
});
|
|
199
214
|
const handleTouchEnd = (0, _utils.unstable_useEventCallback)(nativeEvent => {
|
|
200
215
|
const finger = trackFinger(nativeEvent, touchId.current);
|
|
201
216
|
if (!finger) {
|
|
202
217
|
return;
|
|
203
218
|
}
|
|
204
|
-
|
|
205
|
-
// eslint-disable-next-line @typescript-eslint/no-use-before-define
|
|
206
|
-
stopListening();
|
|
207
|
-
apiRef.current.updateColumns([colDefRef.current]);
|
|
208
|
-
clearTimeout(stopResizeEventTimeout.current);
|
|
209
|
-
stopResizeEventTimeout.current = setTimeout(() => {
|
|
210
|
-
apiRef.current.publishEvent('columnResizeStop', null, nativeEvent);
|
|
211
|
-
});
|
|
212
|
-
logger.debug(`Updating col ${colDefRef.current.field} with new width: ${colDefRef.current.width}`);
|
|
219
|
+
finishResize(nativeEvent);
|
|
213
220
|
});
|
|
214
221
|
const handleTouchMove = (0, _utils.unstable_useEventCallback)(nativeEvent => {
|
|
215
222
|
const finger = trackFinger(nativeEvent, touchId.current);
|
|
@@ -271,7 +278,10 @@ const useGridColumnResize = (apiRef, props) => {
|
|
|
271
278
|
doc.removeEventListener('mouseup', handleResizeMouseUp);
|
|
272
279
|
doc.removeEventListener('touchmove', handleTouchMove);
|
|
273
280
|
doc.removeEventListener('touchend', handleTouchEnd);
|
|
274
|
-
|
|
281
|
+
if (colElementRef.current) {
|
|
282
|
+
colElementRef.current.style.pointerEvents = 'unset';
|
|
283
|
+
}
|
|
284
|
+
}, [apiRef, colElementRef, handleResizeMouseMove, handleResizeMouseUp, handleTouchMove, handleTouchEnd]);
|
|
275
285
|
const handleResizeStart = React.useCallback(({
|
|
276
286
|
field
|
|
277
287
|
}) => {
|
|
@@ -176,15 +176,13 @@ const useGridDetailPanel = (apiRef, props) => {
|
|
|
176
176
|
}, [apiRef, props.getDetailPanelContent, props.getDetailPanelHeight]);
|
|
177
177
|
const addDetailHeight = React.useCallback((initialValue, row) => {
|
|
178
178
|
if (!expandedRowIds || expandedRowIds.length === 0 || !expandedRowIds.includes(row.id)) {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
});
|
|
179
|
+
initialValue.detail = 0;
|
|
180
|
+
return initialValue;
|
|
182
181
|
}
|
|
183
182
|
updateCachesIfNeeded();
|
|
184
183
|
const heightCache = (0, _gridDetailPanelSelector.gridDetailPanelExpandedRowsHeightCacheSelector)(apiRef);
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
});
|
|
184
|
+
initialValue.detail = heightCache[row.id] ?? 0; // Fallback to zero because the cache might not be ready yet (e.g. page was changed)
|
|
185
|
+
return initialValue;
|
|
188
186
|
}, [apiRef, expandedRowIds, updateCachesIfNeeded]);
|
|
189
187
|
(0, _internals.useGridRegisterPipeProcessor)(apiRef, 'rowHeight', addDetailHeight);
|
|
190
188
|
const isFirstRender = React.useRef(true);
|