@mui/x-data-grid-pro 6.3.1 → 6.5.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 +113 -0
- package/DataGridPro/DataGridPro.js +25 -1
- package/DataGridPro/useDataGridProComponent.js +5 -3
- package/DataGridPro/useDataGridProProps.js +7 -13
- package/components/GridColumnHeaders.js +15 -1
- package/components/GridDetailPanel.js +1 -1
- 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 +12 -1
- package/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -0
- package/hooks/features/treeData/useGridTreeDataPreProcessors.js +1 -0
- package/index.js +1 -1
- package/internals/index.d.ts +1 -0
- package/internals/index.js +4 -0
- package/legacy/DataGridPro/DataGridPro.js +25 -1
- package/legacy/DataGridPro/useDataGridProComponent.js +5 -3
- package/legacy/DataGridPro/useDataGridProProps.js +10 -9
- package/legacy/components/GridColumnHeaders.js +15 -1
- package/legacy/components/GridDetailPanel.js +1 -1
- 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 +12 -1
- package/legacy/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -0
- package/legacy/hooks/features/treeData/useGridTreeDataPreProcessors.js +1 -0
- package/legacy/index.js +1 -1
- package/legacy/internals/index.js +4 -0
- 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 +20 -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 +25 -1
- package/modern/DataGridPro/useDataGridProComponent.js +5 -3
- package/modern/DataGridPro/useDataGridProProps.js +7 -13
- package/modern/components/GridColumnHeaders.js +15 -1
- package/modern/components/GridDetailPanel.js +1 -1
- 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 +11 -0
- package/modern/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -0
- package/modern/hooks/features/treeData/useGridTreeDataPreProcessors.js +1 -0
- package/modern/index.js +1 -1
- package/modern/internals/index.js +4 -0
- 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 +19 -13
- package/node/DataGridPro/DataGridPro.js +25 -1
- package/node/DataGridPro/useDataGridProComponent.js +4 -2
- package/node/DataGridPro/useDataGridProProps.js +6 -12
- package/node/components/GridColumnHeaders.js +15 -1
- package/node/components/GridDetailPanel.js +2 -2
- 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 +11 -0
- package/node/hooks/features/rowPinning/useGridRowPinningPreProcessors.js +1 -0
- package/node/hooks/features/treeData/useGridTreeDataPreProcessors.js +1 -0
- package/node/index.js +1 -1
- package/node/internals/index.js +8 -0
- 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 +19 -13
- package/package.json +2 -2
- 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 +4 -2
- package/utils/tree/utils.js +19 -13
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
3
|
+
var _excluded = ["operators", "item", "field", "buttonRef", "headerFilterMenuRef"];
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import PropTypes from 'prop-types';
|
|
6
|
+
import { useGridApiContext } from '@mui/x-data-grid';
|
|
7
|
+
import { unstable_useId as useId } from '@mui/utils';
|
|
8
|
+
import { unstable_gridHeaderFilteringMenuSelector } from '@mui/x-data-grid/internals';
|
|
9
|
+
import { useGridRootProps } from '../../hooks/utils/useGridRootProps';
|
|
10
|
+
import { OPERATOR_SYMBOL_MAPPING } from './constants';
|
|
11
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
12
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
var sx = {
|
|
14
|
+
width: 22,
|
|
15
|
+
height: 22,
|
|
16
|
+
padding: '0px 0px 2px 2px'
|
|
17
|
+
};
|
|
18
|
+
function GridHeaderFilterAdornment(props) {
|
|
19
|
+
var _rootProps$slotProps, _OPERATOR_SYMBOL_MAPP;
|
|
20
|
+
var operators = props.operators,
|
|
21
|
+
item = props.item,
|
|
22
|
+
field = props.field,
|
|
23
|
+
buttonRef = props.buttonRef,
|
|
24
|
+
headerFilterMenuRef = props.headerFilterMenuRef,
|
|
25
|
+
others = _objectWithoutProperties(props, _excluded);
|
|
26
|
+
var buttonId = useId();
|
|
27
|
+
var menuId = useId();
|
|
28
|
+
var rootProps = useGridRootProps();
|
|
29
|
+
var apiRef = useGridApiContext();
|
|
30
|
+
var open = Boolean(unstable_gridHeaderFilteringMenuSelector(apiRef) === field && headerFilterMenuRef.current);
|
|
31
|
+
var handleClick = function handleClick(event) {
|
|
32
|
+
headerFilterMenuRef.current = event.currentTarget;
|
|
33
|
+
apiRef.current.showHeaderFilterMenu(field);
|
|
34
|
+
};
|
|
35
|
+
if (!rootProps.slots.headerFilterMenu) {
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
return /*#__PURE__*/_jsxs(React.Fragment, {
|
|
39
|
+
children: [/*#__PURE__*/_jsx(rootProps.slots.baseInputAdornment, {
|
|
40
|
+
position: "start",
|
|
41
|
+
children: /*#__PURE__*/_jsx(rootProps.slots.baseIconButton, _extends({
|
|
42
|
+
id: buttonId,
|
|
43
|
+
ref: buttonRef,
|
|
44
|
+
"aria-label": apiRef.current.getLocaleText('filterPanelOperator'),
|
|
45
|
+
title: apiRef.current.getLocaleText('filterPanelOperator'),
|
|
46
|
+
"aria-controls": menuId,
|
|
47
|
+
"aria-expanded": open ? 'true' : undefined,
|
|
48
|
+
"aria-haspopup": "true",
|
|
49
|
+
tabIndex: -1,
|
|
50
|
+
size: "small",
|
|
51
|
+
onClick: handleClick,
|
|
52
|
+
sx: sx
|
|
53
|
+
}, (_rootProps$slotProps = rootProps.slotProps) == null ? void 0 : _rootProps$slotProps.baseIconButton, {
|
|
54
|
+
children: (_OPERATOR_SYMBOL_MAPP = OPERATOR_SYMBOL_MAPPING[item == null ? void 0 : item.operator]) != null ? _OPERATOR_SYMBOL_MAPP : '='
|
|
55
|
+
}))
|
|
56
|
+
}), /*#__PURE__*/_jsx(rootProps.slots.headerFilterMenu, _extends({
|
|
57
|
+
field: field,
|
|
58
|
+
open: open,
|
|
59
|
+
item: item,
|
|
60
|
+
targetRef: headerFilterMenuRef,
|
|
61
|
+
operators: operators,
|
|
62
|
+
labelledBy: buttonId,
|
|
63
|
+
id: menuId
|
|
64
|
+
}, others))]
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
process.env.NODE_ENV !== "production" ? GridHeaderFilterAdornment.propTypes = {
|
|
68
|
+
// ----------------------------- Warning --------------------------------
|
|
69
|
+
// | These PropTypes are generated from the TypeScript type definitions |
|
|
70
|
+
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
71
|
+
// ----------------------------------------------------------------------
|
|
72
|
+
applyFilterChanges: PropTypes.func.isRequired,
|
|
73
|
+
buttonRef: PropTypes.oneOfType([PropTypes.func, PropTypes.shape({
|
|
74
|
+
current: PropTypes.object
|
|
75
|
+
})]),
|
|
76
|
+
field: PropTypes.string.isRequired,
|
|
77
|
+
headerFilterMenuRef: PropTypes.shape({
|
|
78
|
+
current: PropTypes.object
|
|
79
|
+
}).isRequired,
|
|
80
|
+
item: PropTypes.shape({
|
|
81
|
+
field: PropTypes.string.isRequired,
|
|
82
|
+
id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
|
83
|
+
operator: PropTypes.string.isRequired,
|
|
84
|
+
value: PropTypes.any
|
|
85
|
+
}).isRequired,
|
|
86
|
+
operators: PropTypes.arrayOf(PropTypes.shape({
|
|
87
|
+
getApplyFilterFn: PropTypes.func.isRequired,
|
|
88
|
+
getValueAsString: PropTypes.func,
|
|
89
|
+
headerLabel: PropTypes.string,
|
|
90
|
+
InputComponent: PropTypes.elementType,
|
|
91
|
+
InputComponentProps: PropTypes.object,
|
|
92
|
+
label: PropTypes.string,
|
|
93
|
+
requiresFilterValue: PropTypes.bool,
|
|
94
|
+
value: PropTypes.string.isRequired
|
|
95
|
+
})).isRequired
|
|
96
|
+
} : void 0;
|
|
97
|
+
export { GridHeaderFilterAdornment };
|
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
3
|
+
var _excluded = ["colIndex", "height", "hasFocus", "headerFilterComponent", "filterOperators", "width", "headerClassName", "colDef", "item", "headerFilterMenuRef", "InputComponentProps", "showClearIcon"];
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import PropTypes from 'prop-types';
|
|
6
|
+
import clsx from 'clsx';
|
|
7
|
+
import { unstable_useForkRef as useForkRef, unstable_composeClasses as composeClasses, unstable_capitalize as capitalize } from '@mui/utils';
|
|
8
|
+
import { gridVisibleColumnFieldsSelector, getDataGridUtilityClass } from '@mui/x-data-grid';
|
|
9
|
+
import { useGridPrivateApiContext, unstable_gridHeaderFilteringEditFieldSelector, unstable_gridHeaderFilteringMenuSelector, isNavigationKey } from '@mui/x-data-grid/internals';
|
|
10
|
+
import { useGridRootProps } from '../../hooks/utils/useGridRootProps';
|
|
11
|
+
import { GridHeaderFilterAdornment } from './GridHeaderFilterAdornment';
|
|
12
|
+
import { GridHeaderFilterClearButton } from './GridHeaderFilterClearButton';
|
|
13
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
14
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
15
|
+
var useUtilityClasses = function useUtilityClasses(ownerState) {
|
|
16
|
+
var colDef = ownerState.colDef,
|
|
17
|
+
classes = ownerState.classes,
|
|
18
|
+
showColumnVerticalBorder = ownerState.showColumnVerticalBorder;
|
|
19
|
+
var slots = {
|
|
20
|
+
root: ['columnHeader', colDef.headerAlign === 'left' && 'columnHeader--alignLeft', colDef.headerAlign === 'center' && 'columnHeader--alignCenter', colDef.headerAlign === 'right' && 'columnHeader--alignRight', 'withBorderColor', showColumnVerticalBorder && 'columnHeader--withRightBorder']
|
|
21
|
+
};
|
|
22
|
+
return composeClasses(slots, getDataGridUtilityClass, classes);
|
|
23
|
+
};
|
|
24
|
+
var GridHeaderFilterCell = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
25
|
+
var _filterOperators$find, _currentOperator$head, _colDef$headerName;
|
|
26
|
+
var colIndex = props.colIndex,
|
|
27
|
+
height = props.height,
|
|
28
|
+
hasFocus = props.hasFocus,
|
|
29
|
+
headerFilterComponent = props.headerFilterComponent,
|
|
30
|
+
filterOperators = props.filterOperators,
|
|
31
|
+
width = props.width,
|
|
32
|
+
headerClassName = props.headerClassName,
|
|
33
|
+
colDef = props.colDef,
|
|
34
|
+
item = props.item,
|
|
35
|
+
headerFilterMenuRef = props.headerFilterMenuRef,
|
|
36
|
+
InputComponentProps = props.InputComponentProps,
|
|
37
|
+
_props$showClearIcon = props.showClearIcon,
|
|
38
|
+
showClearIcon = _props$showClearIcon === void 0 ? true : _props$showClearIcon,
|
|
39
|
+
other = _objectWithoutProperties(props, _excluded);
|
|
40
|
+
var apiRef = useGridPrivateApiContext();
|
|
41
|
+
var columnFields = gridVisibleColumnFieldsSelector(apiRef);
|
|
42
|
+
var rootProps = useGridRootProps();
|
|
43
|
+
var cellRef = React.useRef(null);
|
|
44
|
+
var handleRef = useForkRef(ref, cellRef);
|
|
45
|
+
var inputRef = React.useRef(null);
|
|
46
|
+
var buttonRef = React.useRef(null);
|
|
47
|
+
var isEditing = unstable_gridHeaderFilteringEditFieldSelector(apiRef) === colDef.field;
|
|
48
|
+
var isMenuOpen = unstable_gridHeaderFilteringMenuSelector(apiRef) === colDef.field;
|
|
49
|
+
var currentOperator = filterOperators[0];
|
|
50
|
+
var InputComponent = colDef.filterable ? currentOperator.InputComponent : null;
|
|
51
|
+
var applyFilterChanges = React.useCallback(function (updatedItem) {
|
|
52
|
+
if (item.value && !updatedItem.value) {
|
|
53
|
+
apiRef.current.deleteFilterItem(updatedItem);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
apiRef.current.upsertFilterItem(updatedItem);
|
|
57
|
+
}, [apiRef, item]);
|
|
58
|
+
var clearFilterItem = React.useCallback(function () {
|
|
59
|
+
apiRef.current.deleteFilterItem(item);
|
|
60
|
+
}, [apiRef, item]);
|
|
61
|
+
React.useLayoutEffect(function () {
|
|
62
|
+
if (hasFocus && !isMenuOpen) {
|
|
63
|
+
var focusableElement = cellRef.current.querySelector('[tabindex="0"]');
|
|
64
|
+
if (isEditing && InputComponent) {
|
|
65
|
+
focusableElement = inputRef.current;
|
|
66
|
+
}
|
|
67
|
+
var elementToFocus = focusableElement || cellRef.current;
|
|
68
|
+
elementToFocus == null ? void 0 : elementToFocus.focus();
|
|
69
|
+
apiRef.current.columnHeadersContainerElementRef.current.scrollLeft = 0;
|
|
70
|
+
}
|
|
71
|
+
}, [InputComponent, apiRef, hasFocus, isEditing, isMenuOpen]);
|
|
72
|
+
var onKeyDown = React.useCallback(function (event) {
|
|
73
|
+
if (isMenuOpen || isNavigationKey(event.key)) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
switch (event.key) {
|
|
77
|
+
case 'Escape':
|
|
78
|
+
if (isEditing) {
|
|
79
|
+
apiRef.current.stopHeaderFilterEditMode();
|
|
80
|
+
}
|
|
81
|
+
break;
|
|
82
|
+
case 'Enter':
|
|
83
|
+
if (isEditing) {
|
|
84
|
+
apiRef.current.stopHeaderFilterEditMode();
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
if (event.metaKey || event.ctrlKey) {
|
|
88
|
+
headerFilterMenuRef.current = buttonRef.current;
|
|
89
|
+
apiRef.current.showHeaderFilterMenu(colDef.field);
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
apiRef.current.startHeaderFilterEditMode(colDef.field);
|
|
93
|
+
break;
|
|
94
|
+
case 'Tab':
|
|
95
|
+
{
|
|
96
|
+
if (isEditing) {
|
|
97
|
+
var _columnFields;
|
|
98
|
+
var fieldToFocus = (_columnFields = columnFields[colIndex + (event.shiftKey ? -1 : 1)]) != null ? _columnFields : null;
|
|
99
|
+
if (fieldToFocus) {
|
|
100
|
+
apiRef.current.startHeaderFilterEditMode(fieldToFocus);
|
|
101
|
+
apiRef.current.setColumnHeaderFilterFocus(fieldToFocus, event);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
default:
|
|
107
|
+
if (isEditing || event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) {
|
|
108
|
+
break;
|
|
109
|
+
}
|
|
110
|
+
apiRef.current.startHeaderFilterEditMode(colDef.field);
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
}, [apiRef, colDef.field, colIndex, columnFields, headerFilterMenuRef, isEditing, isMenuOpen]);
|
|
114
|
+
var publish = React.useCallback(function (eventName, propHandler) {
|
|
115
|
+
return function (event) {
|
|
116
|
+
apiRef.current.publishEvent(eventName, apiRef.current.getColumnHeaderParams(colDef.field), event);
|
|
117
|
+
if (propHandler) {
|
|
118
|
+
propHandler(event);
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
}, [apiRef, colDef.field]);
|
|
122
|
+
var onMouseDown = React.useCallback(function (event) {
|
|
123
|
+
if (!hasFocus) {
|
|
124
|
+
if (inputRef.current) {
|
|
125
|
+
inputRef.current.focus();
|
|
126
|
+
}
|
|
127
|
+
apiRef.current.setColumnHeaderFilterFocus(colDef.field, event);
|
|
128
|
+
}
|
|
129
|
+
}, [apiRef, colDef.field, hasFocus]);
|
|
130
|
+
var mouseEventsHandlers = React.useMemo(function () {
|
|
131
|
+
return {
|
|
132
|
+
onKeyDown: publish('headerFilterKeyDown', onKeyDown),
|
|
133
|
+
onClick: publish('headerFilterClick'),
|
|
134
|
+
onMouseDown: publish('headerFilterMouseDown', onMouseDown)
|
|
135
|
+
};
|
|
136
|
+
}, [onMouseDown, onKeyDown, publish]);
|
|
137
|
+
var ownerState = _extends({}, rootProps, {
|
|
138
|
+
colDef: colDef
|
|
139
|
+
});
|
|
140
|
+
var classes = useUtilityClasses(ownerState);
|
|
141
|
+
var isNoInputOperator = (filterOperators == null ? void 0 : (_filterOperators$find = filterOperators.find(function (_ref) {
|
|
142
|
+
var value = _ref.value;
|
|
143
|
+
return item.operator === value;
|
|
144
|
+
})) == null ? void 0 : _filterOperators$find.requiresFilterValue) === false;
|
|
145
|
+
var isApplied = Boolean(item == null ? void 0 : item.value) || isNoInputOperator;
|
|
146
|
+
var label = (_currentOperator$head = currentOperator.headerLabel) != null ? _currentOperator$head : apiRef.current.getLocaleText("headerFilterOperator".concat(capitalize(item.operator)));
|
|
147
|
+
var isFilterActive = isApplied || hasFocus;
|
|
148
|
+
return /*#__PURE__*/_jsxs("div", _extends({
|
|
149
|
+
className: clsx(classes.root, headerClassName),
|
|
150
|
+
ref: handleRef,
|
|
151
|
+
style: {
|
|
152
|
+
height: height,
|
|
153
|
+
width: width,
|
|
154
|
+
minWidth: width,
|
|
155
|
+
maxWidth: width
|
|
156
|
+
},
|
|
157
|
+
role: "columnheader",
|
|
158
|
+
"aria-colindex": colIndex + 1,
|
|
159
|
+
"aria-label": headerFilterComponent == null ? (_colDef$headerName = colDef.headerName) != null ? _colDef$headerName : colDef.field : undefined
|
|
160
|
+
}, other, mouseEventsHandlers, {
|
|
161
|
+
children: [headerFilterComponent, InputComponent && headerFilterComponent === undefined ? /*#__PURE__*/_jsx(InputComponent, _extends({
|
|
162
|
+
apiRef: apiRef,
|
|
163
|
+
item: item,
|
|
164
|
+
inputRef: inputRef,
|
|
165
|
+
applyValue: applyFilterChanges,
|
|
166
|
+
onFocus: function onFocus() {
|
|
167
|
+
return apiRef.current.startHeaderFilterEditMode(colDef.field);
|
|
168
|
+
},
|
|
169
|
+
onBlur: function onBlur() {
|
|
170
|
+
return apiRef.current.stopHeaderFilterEditMode();
|
|
171
|
+
},
|
|
172
|
+
placeholder: apiRef.current.getLocaleText('columnMenuFilter'),
|
|
173
|
+
label: isFilterActive ? capitalize(label) : ' ',
|
|
174
|
+
isFilterActive: isFilterActive,
|
|
175
|
+
headerFilterMenu: /*#__PURE__*/_jsx(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__*/_jsx(GridHeaderFilterClearButton, {
|
|
184
|
+
onClick: clearFilterItem
|
|
185
|
+
}) : null,
|
|
186
|
+
disabled: isNoInputOperator,
|
|
187
|
+
tabIndex: -1
|
|
188
|
+
}, currentOperator == null ? void 0 : currentOperator.InputComponentProps, InputComponentProps)) : null]
|
|
189
|
+
}));
|
|
190
|
+
});
|
|
191
|
+
process.env.NODE_ENV !== "production" ? GridHeaderFilterCell.propTypes = {
|
|
192
|
+
// ----------------------------- Warning --------------------------------
|
|
193
|
+
// | These PropTypes are generated from the TypeScript type definitions |
|
|
194
|
+
// | To update them edit the TypeScript types and run "yarn proptypes" |
|
|
195
|
+
// ----------------------------------------------------------------------
|
|
196
|
+
colDef: PropTypes.object.isRequired,
|
|
197
|
+
colIndex: PropTypes.number.isRequired,
|
|
198
|
+
filterOperators: PropTypes.arrayOf(PropTypes.shape({
|
|
199
|
+
getApplyFilterFn: PropTypes.func.isRequired,
|
|
200
|
+
getValueAsString: PropTypes.func,
|
|
201
|
+
headerLabel: PropTypes.string,
|
|
202
|
+
InputComponent: PropTypes.elementType,
|
|
203
|
+
InputComponentProps: PropTypes.object,
|
|
204
|
+
label: PropTypes.string,
|
|
205
|
+
requiresFilterValue: PropTypes.bool,
|
|
206
|
+
value: PropTypes.string.isRequired
|
|
207
|
+
})),
|
|
208
|
+
hasFocus: PropTypes.bool,
|
|
209
|
+
/**
|
|
210
|
+
* Class name that will be added in the column header cell.
|
|
211
|
+
*/
|
|
212
|
+
headerClassName: PropTypes.oneOfType([PropTypes.func, PropTypes.string]),
|
|
213
|
+
headerFilterComponent: PropTypes.node,
|
|
214
|
+
headerFilterMenuRef: PropTypes.shape({
|
|
215
|
+
current: PropTypes.object
|
|
216
|
+
}).isRequired,
|
|
217
|
+
height: PropTypes.number.isRequired,
|
|
218
|
+
InputComponentProps: PropTypes.object,
|
|
219
|
+
item: PropTypes.shape({
|
|
220
|
+
field: PropTypes.string.isRequired,
|
|
221
|
+
id: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
|
|
222
|
+
operator: PropTypes.string.isRequired,
|
|
223
|
+
value: PropTypes.any
|
|
224
|
+
}).isRequired,
|
|
225
|
+
showClearIcon: PropTypes.bool,
|
|
226
|
+
sortIndex: PropTypes.number,
|
|
227
|
+
tabIndex: PropTypes.oneOf([-1, 0]).isRequired,
|
|
228
|
+
width: PropTypes.number.isRequired
|
|
229
|
+
} : void 0;
|
|
230
|
+
export { GridHeaderFilterCell };
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import { useGridRootProps } from '../../hooks/utils/useGridRootProps';
|
|
4
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
|
+
var sx = {
|
|
6
|
+
padding: '2px'
|
|
7
|
+
};
|
|
8
|
+
function GridHeaderFilterClearButton(_ref) {
|
|
9
|
+
var _rootProps$slotProps;
|
|
10
|
+
var onClick = _ref.onClick;
|
|
11
|
+
var rootProps = useGridRootProps();
|
|
12
|
+
return /*#__PURE__*/_jsx(rootProps.slots.baseIconButton, _extends({
|
|
13
|
+
tabIndex: -1,
|
|
14
|
+
"aria-label": "Clear filter",
|
|
15
|
+
size: "small",
|
|
16
|
+
onClick: onClick,
|
|
17
|
+
sx: sx
|
|
18
|
+
}, (_rootProps$slotProps = rootProps.slotProps) == null ? void 0 : _rootProps$slotProps.baseIconButton, {
|
|
19
|
+
children: /*#__PURE__*/_jsx(rootProps.slots.headerFilterClearIcon, {
|
|
20
|
+
fontSize: "inherit"
|
|
21
|
+
})
|
|
22
|
+
}));
|
|
23
|
+
}
|
|
24
|
+
export { GridHeaderFilterClearButton };
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
import MenuList from '@mui/material/MenuList';
|
|
4
|
+
import MenuItem from '@mui/material/MenuItem';
|
|
5
|
+
import ListItemIcon from '@mui/material/ListItemIcon';
|
|
6
|
+
import ListItemText from '@mui/material/ListItemText';
|
|
7
|
+
import { unstable_capitalize as capitalize } from '@mui/utils';
|
|
8
|
+
import { useGridApiContext, GridMenu } from '@mui/x-data-grid';
|
|
9
|
+
import { OPERATOR_SYMBOL_MAPPING } from './constants';
|
|
10
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
|
+
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
12
|
+
function GridHeaderFilterMenu(_ref) {
|
|
13
|
+
var open = _ref.open,
|
|
14
|
+
field = _ref.field,
|
|
15
|
+
targetRef = _ref.targetRef,
|
|
16
|
+
applyFilterChanges = _ref.applyFilterChanges,
|
|
17
|
+
operators = _ref.operators,
|
|
18
|
+
item = _ref.item,
|
|
19
|
+
id = _ref.id,
|
|
20
|
+
labelledBy = _ref.labelledBy;
|
|
21
|
+
var apiRef = useGridApiContext();
|
|
22
|
+
var hideMenu = React.useCallback(function () {
|
|
23
|
+
apiRef.current.hideHeaderFilterMenu();
|
|
24
|
+
}, [apiRef]);
|
|
25
|
+
var handleListKeyDown = React.useCallback(function (event) {
|
|
26
|
+
if (event.key === 'Tab') {
|
|
27
|
+
event.preventDefault();
|
|
28
|
+
}
|
|
29
|
+
if (event.key === 'Escape' || event.key === 'Tab') {
|
|
30
|
+
hideMenu();
|
|
31
|
+
}
|
|
32
|
+
}, [hideMenu]);
|
|
33
|
+
if (!targetRef.current) {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
return /*#__PURE__*/_jsx(GridMenu, {
|
|
37
|
+
placement: "bottom-start",
|
|
38
|
+
open: open,
|
|
39
|
+
target: targetRef.current,
|
|
40
|
+
onClickAway: hideMenu,
|
|
41
|
+
onExited: hideMenu,
|
|
42
|
+
children: /*#__PURE__*/_jsx(MenuList, {
|
|
43
|
+
"aria-labelledby": labelledBy,
|
|
44
|
+
id: id,
|
|
45
|
+
onKeyDown: handleListKeyDown,
|
|
46
|
+
children: operators.map(function (op, i) {
|
|
47
|
+
var _op$headerLabel;
|
|
48
|
+
var label = (_op$headerLabel = op == null ? void 0 : op.headerLabel) != null ? _op$headerLabel : apiRef.current.getLocaleText("headerFilterOperator".concat(capitalize(op.value)));
|
|
49
|
+
return /*#__PURE__*/_jsxs(MenuItem, {
|
|
50
|
+
onClick: function onClick() {
|
|
51
|
+
applyFilterChanges(_extends({}, item, {
|
|
52
|
+
operator: op.value
|
|
53
|
+
}));
|
|
54
|
+
hideMenu();
|
|
55
|
+
},
|
|
56
|
+
autoFocus: i === 0 ? open : false,
|
|
57
|
+
selected: op.value === item.operator,
|
|
58
|
+
children: [/*#__PURE__*/_jsx(ListItemIcon, {
|
|
59
|
+
children: OPERATOR_SYMBOL_MAPPING[op.value]
|
|
60
|
+
}), /*#__PURE__*/_jsx(ListItemText, {
|
|
61
|
+
children: label
|
|
62
|
+
})]
|
|
63
|
+
}, "".concat(field, "-").concat(op.value));
|
|
64
|
+
})
|
|
65
|
+
})
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
export { GridHeaderFilterMenu };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export var OPERATOR_SYMBOL_MAPPING = {
|
|
2
|
+
contains: '∋',
|
|
3
|
+
equals: '=',
|
|
4
|
+
'=': '=',
|
|
5
|
+
'!=': '≠',
|
|
6
|
+
'>': '>',
|
|
7
|
+
'>=': '≥',
|
|
8
|
+
'<': '<',
|
|
9
|
+
'<=': '≤',
|
|
10
|
+
startsWith: '⊃',
|
|
11
|
+
endsWith: '⊂',
|
|
12
|
+
is: '=',
|
|
13
|
+
not: '≠',
|
|
14
|
+
isNot: '≠',
|
|
15
|
+
isEmpty: '∅',
|
|
16
|
+
isNotEmpty: '∉',
|
|
17
|
+
isIn: '∈',
|
|
18
|
+
isNotIn: '∉',
|
|
19
|
+
isLessThan: '<',
|
|
20
|
+
isLessThanOrEqual: '≤',
|
|
21
|
+
isGreaterThan: '>',
|
|
22
|
+
isGreaterThanOrEqual: '≥',
|
|
23
|
+
isBetween: '∈',
|
|
24
|
+
isNotBetween: '∉',
|
|
25
|
+
isAnyOf: '∈',
|
|
26
|
+
after: '>',
|
|
27
|
+
onOrAfter: '≥',
|
|
28
|
+
before: '<',
|
|
29
|
+
onOrBefore: '≤'
|
|
30
|
+
};
|
|
@@ -2,8 +2,12 @@ import _extends from "@babel/runtime/helpers/esm/extends";
|
|
|
2
2
|
import { DATA_GRID_DEFAULT_SLOTS_COMPONENTS } from '@mui/x-data-grid/internals';
|
|
3
3
|
import { GridProColumnMenu } from '../components/GridProColumnMenu';
|
|
4
4
|
import { GridColumnHeaders } from '../components/GridColumnHeaders';
|
|
5
|
+
import { GridHeaderFilterMenu } from '../components/headerFiltering/GridHeaderFilterMenu';
|
|
6
|
+
import { GridHeaderFilterCell } from '../components/headerFiltering/GridHeaderFilterCell';
|
|
5
7
|
import materialSlots from '../material';
|
|
6
8
|
export var DATA_GRID_PRO_DEFAULT_SLOTS_COMPONENTS = _extends({}, DATA_GRID_DEFAULT_SLOTS_COMPONENTS, materialSlots, {
|
|
7
9
|
ColumnMenu: GridProColumnMenu,
|
|
8
|
-
ColumnHeaders: GridColumnHeaders
|
|
10
|
+
ColumnHeaders: GridColumnHeaders,
|
|
11
|
+
HeaderFilterCell: GridHeaderFilterCell,
|
|
12
|
+
HeaderFilterMenu: GridHeaderFilterMenu
|
|
9
13
|
});
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
3
|
+
var _excluded = ["getColumnsToRender", "getRootProps"];
|
|
4
|
+
import * as React from 'react';
|
|
5
|
+
import { unstable_gridFocusColumnHeaderFilterSelector, useGridSelector, gridFilterModelSelector, unstable_gridTabIndexColumnHeaderFilterSelector } from '@mui/x-data-grid';
|
|
6
|
+
import { styled } from '@mui/system';
|
|
7
|
+
import { useGridColumnHeaders as useGridColumnHeadersCommunity, getTotalHeaderHeight, useGridPrivateApiContext, getGridFilter } from '@mui/x-data-grid/internals';
|
|
8
|
+
import { useGridRootProps } from '../../utils/useGridRootProps';
|
|
9
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
10
|
+
var GridHeaderFilterRow = styled('div', {
|
|
11
|
+
name: 'MuiDataGrid',
|
|
12
|
+
slot: 'HeaderFilterRow',
|
|
13
|
+
overridesResolver: function overridesResolver(props, styles) {
|
|
14
|
+
return styles.headerFilterRow;
|
|
15
|
+
}
|
|
16
|
+
})(function () {
|
|
17
|
+
return {
|
|
18
|
+
display: 'flex',
|
|
19
|
+
borderTop: '1px solid rgba(224, 224, 224, 1)'
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
export var useGridColumnHeaders = function useGridColumnHeaders(props) {
|
|
23
|
+
var apiRef = useGridPrivateApiContext();
|
|
24
|
+
var headerGroupingMaxDepth = props.headerGroupingMaxDepth,
|
|
25
|
+
hasOtherElementInTabSequence = props.hasOtherElementInTabSequence;
|
|
26
|
+
var columnHeaderFilterTabIndexState = useGridSelector(apiRef, unstable_gridTabIndexColumnHeaderFilterSelector);
|
|
27
|
+
var _useGridColumnHeaders = useGridColumnHeadersCommunity(_extends({}, props, {
|
|
28
|
+
hasOtherElementInTabSequence: hasOtherElementInTabSequence || columnHeaderFilterTabIndexState !== null
|
|
29
|
+
})),
|
|
30
|
+
getColumnsToRender = _useGridColumnHeaders.getColumnsToRender,
|
|
31
|
+
getRootProps = _useGridColumnHeaders.getRootProps,
|
|
32
|
+
otherProps = _objectWithoutProperties(_useGridColumnHeaders, _excluded);
|
|
33
|
+
var headerFiltersRef = React.useRef(null);
|
|
34
|
+
apiRef.current.register('private', {
|
|
35
|
+
headerFiltersElementRef: headerFiltersRef
|
|
36
|
+
});
|
|
37
|
+
var headerFilterMenuRef = React.useRef(null);
|
|
38
|
+
var rootProps = useGridRootProps();
|
|
39
|
+
var disableHeaderFiltering = !rootProps.unstable_headerFilters;
|
|
40
|
+
var headerHeight = Math.floor(rootProps.columnHeaderHeight * props.densityFactor);
|
|
41
|
+
var filterModel = useGridSelector(apiRef, gridFilterModelSelector);
|
|
42
|
+
var totalHeaderHeight = getTotalHeaderHeight(apiRef, rootProps.columnHeaderHeight) + (disableHeaderFiltering ? 0 : headerHeight);
|
|
43
|
+
var columnHeaderFilterFocus = useGridSelector(apiRef, unstable_gridFocusColumnHeaderFilterSelector);
|
|
44
|
+
var getColumnFilters = function getColumnFilters(params) {
|
|
45
|
+
var other = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
46
|
+
if (disableHeaderFiltering) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
var columnsToRender = getColumnsToRender(params);
|
|
50
|
+
if (columnsToRender == null) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
var renderedColumns = columnsToRender.renderedColumns,
|
|
54
|
+
firstColumnToRender = columnsToRender.firstColumnToRender;
|
|
55
|
+
var filters = [];
|
|
56
|
+
var _loop = function _loop() {
|
|
57
|
+
var _colDef$filterOperato, _colDef$filterOperato2, _filterModel$items$fi, _rootProps$slotProps;
|
|
58
|
+
var colDef = renderedColumns[i];
|
|
59
|
+
var columnIndex = firstColumnToRender + i;
|
|
60
|
+
var hasFocus = (columnHeaderFilterFocus == null ? void 0 : columnHeaderFilterFocus.field) === colDef.field;
|
|
61
|
+
var isFirstColumn = columnIndex === 0;
|
|
62
|
+
var tabIndexField = columnHeaderFilterTabIndexState == null ? void 0 : columnHeaderFilterTabIndexState.field;
|
|
63
|
+
var tabIndex = tabIndexField === colDef.field || isFirstColumn && !props.hasOtherElementInTabSequence ? 0 : -1;
|
|
64
|
+
var headerFilterComponent;
|
|
65
|
+
if (colDef.renderHeaderFilter) {
|
|
66
|
+
headerFilterComponent = colDef.renderHeaderFilter(apiRef.current.getColumnHeaderParams(colDef.field));
|
|
67
|
+
}
|
|
68
|
+
var headerClassName = typeof colDef.headerClassName === 'function' ? colDef.headerClassName({
|
|
69
|
+
field: colDef.field,
|
|
70
|
+
colDef: colDef
|
|
71
|
+
}) : colDef.headerClassName;
|
|
72
|
+
|
|
73
|
+
// TODO: Support for `isAnyOf` operator
|
|
74
|
+
var filterOperators = (_colDef$filterOperato = (_colDef$filterOperato2 = colDef.filterOperators) == null ? void 0 : _colDef$filterOperato2.filter(function (operator) {
|
|
75
|
+
return operator.value !== 'isAnyOf';
|
|
76
|
+
})) != null ? _colDef$filterOperato : [];
|
|
77
|
+
var item = (_filterModel$items$fi = filterModel == null ? void 0 : filterModel.items.find(function (it) {
|
|
78
|
+
return it.field === colDef.field && it.operator !== 'isAnyOf';
|
|
79
|
+
})) != null ? _filterModel$items$fi : getGridFilter(colDef);
|
|
80
|
+
filters.push( /*#__PURE__*/_jsx(rootProps.slots.headerFilterCell, _extends({
|
|
81
|
+
colIndex: columnIndex,
|
|
82
|
+
height: headerHeight,
|
|
83
|
+
width: colDef.computedWidth,
|
|
84
|
+
colDef: colDef,
|
|
85
|
+
hasFocus: hasFocus,
|
|
86
|
+
tabIndex: tabIndex,
|
|
87
|
+
headerFilterMenuRef: headerFilterMenuRef,
|
|
88
|
+
headerFilterComponent: headerFilterComponent,
|
|
89
|
+
headerClassName: headerClassName,
|
|
90
|
+
filterOperators: filterOperators,
|
|
91
|
+
"data-field": colDef.field,
|
|
92
|
+
item: item
|
|
93
|
+
}, (_rootProps$slotProps = rootProps.slotProps) == null ? void 0 : _rootProps$slotProps.headerFilterCell, other), "".concat(colDef.field, "-filter")));
|
|
94
|
+
};
|
|
95
|
+
for (var i = 0; i < renderedColumns.length; i += 1) {
|
|
96
|
+
_loop();
|
|
97
|
+
}
|
|
98
|
+
return /*#__PURE__*/_jsx(GridHeaderFilterRow, {
|
|
99
|
+
ref: headerFiltersRef,
|
|
100
|
+
ownerState: rootProps,
|
|
101
|
+
role: "row",
|
|
102
|
+
"aria-rowindex": headerGroupingMaxDepth + 2,
|
|
103
|
+
children: filters
|
|
104
|
+
});
|
|
105
|
+
};
|
|
106
|
+
var rootStyle = {
|
|
107
|
+
minHeight: totalHeaderHeight,
|
|
108
|
+
maxHeight: totalHeaderHeight,
|
|
109
|
+
lineHeight: "".concat(headerHeight, "px")
|
|
110
|
+
};
|
|
111
|
+
return _extends({}, otherProps, {
|
|
112
|
+
getColumnFilters: getColumnFilters,
|
|
113
|
+
getRootProps: disableHeaderFiltering ? getRootProps : function () {
|
|
114
|
+
var other = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
115
|
+
return _extends({
|
|
116
|
+
style: rootStyle
|
|
117
|
+
}, other);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
};
|
|
@@ -90,6 +90,7 @@ export var useGridColumnResize = function useGridColumnResize(apiRef, props) {
|
|
|
90
90
|
var logger = useGridLogger(apiRef, 'useGridColumnResize');
|
|
91
91
|
var colDefRef = React.useRef();
|
|
92
92
|
var colElementRef = React.useRef();
|
|
93
|
+
var headerFilterElementRef = React.useRef();
|
|
93
94
|
var colGroupingElementRef = React.useRef();
|
|
94
95
|
var colCellElementsRef = React.useRef();
|
|
95
96
|
var theme = useTheme();
|
|
@@ -111,6 +112,12 @@ export var useGridColumnResize = function useGridColumnResize(apiRef, props) {
|
|
|
111
112
|
colElementRef.current.style.width = "".concat(newWidth, "px");
|
|
112
113
|
colElementRef.current.style.minWidth = "".concat(newWidth, "px");
|
|
113
114
|
colElementRef.current.style.maxWidth = "".concat(newWidth, "px");
|
|
115
|
+
var headerFilterElement = headerFilterElementRef.current;
|
|
116
|
+
if (headerFilterElement) {
|
|
117
|
+
headerFilterElement.style.width = "".concat(newWidth, "px");
|
|
118
|
+
headerFilterElement.style.minWidth = "".concat(newWidth, "px");
|
|
119
|
+
headerFilterElement.style.maxWidth = "".concat(newWidth, "px");
|
|
120
|
+
}
|
|
114
121
|
[].concat(_toConsumableArray(colCellElementsRef.current), _toConsumableArray(colGroupingElementRef.current)).forEach(function (element) {
|
|
115
122
|
var div = element;
|
|
116
123
|
var finalWidth;
|
|
@@ -161,7 +168,7 @@ export var useGridColumnResize = function useGridColumnResize(apiRef, props) {
|
|
|
161
168
|
apiRef.current.publishEvent('columnResize', params, nativeEvent);
|
|
162
169
|
});
|
|
163
170
|
var handleColumnResizeMouseDown = useEventCallback(function (_ref, event) {
|
|
164
|
-
var _apiRef$current$colum, _apiRef$current$colum2;
|
|
171
|
+
var _apiRef$current$colum, _apiRef$current$heade, _apiRef$current$colum2;
|
|
165
172
|
var colDef = _ref.colDef;
|
|
166
173
|
// Only handle left clicks
|
|
167
174
|
if (event.button !== 0) {
|
|
@@ -181,6 +188,10 @@ export var useGridColumnResize = function useGridColumnResize(apiRef, props) {
|
|
|
181
188
|
}, event);
|
|
182
189
|
colDefRef.current = colDef;
|
|
183
190
|
colElementRef.current = (_apiRef$current$colum = apiRef.current.columnHeadersContainerElementRef) == null ? void 0 : _apiRef$current$colum.current.querySelector("[data-field=\"".concat(colDef.field, "\"]"));
|
|
191
|
+
var headerFilterRowElement = (_apiRef$current$heade = apiRef.current.headerFiltersElementRef) == null ? void 0 : _apiRef$current$heade.current;
|
|
192
|
+
if (headerFilterRowElement) {
|
|
193
|
+
headerFilterElementRef.current = headerFilterRowElement.querySelector("[data-field=\"".concat(colDef.field, "\"]"));
|
|
194
|
+
}
|
|
184
195
|
colGroupingElementRef.current = findGroupHeaderElementsFromField((_apiRef$current$colum2 = apiRef.current.columnHeadersContainerElementRef) == null ? void 0 : _apiRef$current$colum2.current, colDef.field);
|
|
185
196
|
colCellElementsRef.current = findGridCellElementsFromCol(colElementRef.current, apiRef.current);
|
|
186
197
|
var doc = ownerDocument(apiRef.current.rootElementRef.current);
|
|
@@ -91,6 +91,7 @@ export var useGridTreeDataPreProcessors = function useGridTreeDataPreProcessors(
|
|
|
91
91
|
};
|
|
92
92
|
if (params.updates.type === 'full') {
|
|
93
93
|
return createRowTree({
|
|
94
|
+
previousTree: params.previousTree,
|
|
94
95
|
nodes: params.updates.rows.map(getRowTreeBuilderNode),
|
|
95
96
|
defaultGroupingExpansionDepth: props.defaultGroupingExpansionDepth,
|
|
96
97
|
isGroupExpandedByDefault: props.isGroupExpandedByDefault,
|
package/legacy/index.js
CHANGED