@mui/x-data-grid 8.27.4 → 8.28.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 +143 -0
- package/components/columnHeaders/GridColumnGroupHeader.js +2 -1
- package/components/columnHeaders/GridColumnHeaderItem.js +2 -1
- package/components/columnSelection/GridHeaderCheckbox.js +7 -5
- package/components/containers/GridRootStyles.js +2 -6
- package/components/panel/filterPanel/GridFilterInputMultipleValue.js +12 -9
- package/constants/gridClasses.d.ts +16 -0
- package/constants/gridClasses.js +21 -4
- package/constants/index.d.ts +1 -1
- package/constants/index.js +19 -10
- package/esm/components/columnHeaders/GridColumnGroupHeader.js +2 -1
- package/esm/components/columnHeaders/GridColumnHeaderItem.js +2 -1
- package/esm/components/columnSelection/GridHeaderCheckbox.js +7 -5
- package/esm/components/containers/GridRootStyles.js +3 -7
- package/esm/components/panel/filterPanel/GridFilterInputMultipleValue.js +11 -8
- package/esm/constants/gridClasses.d.ts +16 -0
- package/esm/constants/gridClasses.js +20 -3
- package/esm/constants/index.d.ts +1 -1
- package/esm/constants/index.js +1 -1
- package/esm/hooks/features/columns/gridColumnsSelector.js +5 -14
- package/esm/hooks/features/dataSource/useGridDataSourceBase.js +2 -1
- package/esm/hooks/features/editing/useGridRowEditing.js +12 -4
- package/esm/index.js +1 -1
- package/hooks/features/columns/gridColumnsSelector.js +5 -14
- package/hooks/features/dataSource/useGridDataSourceBase.js +2 -1
- package/hooks/features/editing/useGridRowEditing.js +12 -4
- package/index.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,149 @@
|
|
|
5
5
|
All notable changes to this project will be documented in this file.
|
|
6
6
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
7
7
|
|
|
8
|
+
## 8.28.0
|
|
9
|
+
|
|
10
|
+
_Mar 19, 2026_
|
|
11
|
+
|
|
12
|
+
We'd like to extend a big thank you to the 5 contributors who made this release possible. Here are some highlights ✨:
|
|
13
|
+
|
|
14
|
+
TODO INSERT HIGHLIGHTS
|
|
15
|
+
|
|
16
|
+
The following team members contributed to this release:
|
|
17
|
+
@alexfauquette, @brijeshb42, @Janpot, @JCQuintas, @sai6855
|
|
18
|
+
|
|
19
|
+
### Data Grid
|
|
20
|
+
|
|
21
|
+
#### `@mui/x-data-grid@8.28.0`
|
|
22
|
+
|
|
23
|
+
- [DataGrid] Move `elementOverrides` to constants and remove duplicates (@sai6855) (#21752) @github-actions[bot]
|
|
24
|
+
|
|
25
|
+
#### `@mui/x-data-grid-pro@8.28.0` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
26
|
+
|
|
27
|
+
Same changes as in `@mui/x-data-grid@8.28.0`.
|
|
28
|
+
|
|
29
|
+
#### `@mui/x-data-grid-premium@8.28.0` [](https://mui.com/r/x-premium-svg-link 'Premium plan')
|
|
30
|
+
|
|
31
|
+
Same changes as in `@mui/x-data-grid-pro@8.28.0`.
|
|
32
|
+
|
|
33
|
+
### Date and Time Pickers
|
|
34
|
+
|
|
35
|
+
#### `@mui/x-date-pickers@8.27.2`
|
|
36
|
+
|
|
37
|
+
Internal changes.
|
|
38
|
+
|
|
39
|
+
#### `@mui/x-date-pickers-pro@8.27.2` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
40
|
+
|
|
41
|
+
Same changes as in `@mui/x-date-pickers@8.27.2`.
|
|
42
|
+
|
|
43
|
+
### Charts
|
|
44
|
+
|
|
45
|
+
#### `@mui/x-charts@8.28.0`
|
|
46
|
+
|
|
47
|
+
- [charts] Improve deprecation warnings (#21760) (#21767) @alexfauquette
|
|
48
|
+
- [charts] Refactor `FunnelChart` classes structure (@JCQuintas) (#21763) @github-actions[bot]
|
|
49
|
+
- [charts] Refactor `Heatmap` classes structure (#21653) (#21745) @JCQuintas
|
|
50
|
+
- [charts] Refactor `PieChart` classes structure (@JCQuintas) (#21715) @github-actions[bot]
|
|
51
|
+
- [charts] Refactor `RadarChart` classes structure (@JCQuintas) (#21730) @github-actions[bot]
|
|
52
|
+
- [charts] Refactor `SankeyChart` classes structure (#21654) (#21726) @JCQuintas
|
|
53
|
+
- [charts] Rename `data-series-id` by `data-series` (#21761) (#21772) @alexfauquette
|
|
54
|
+
|
|
55
|
+
#### `@mui/x-charts-pro@8.28.0` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
56
|
+
|
|
57
|
+
Same changes as in `@mui/x-charts@8.28.0`, plus:
|
|
58
|
+
|
|
59
|
+
- [charts-pro] Allow `brush` interaction to accept `requiredKeys/pointerMode` (#21723) @JCQuintas
|
|
60
|
+
|
|
61
|
+
#### `@mui/x-charts-premium@8.28.0` [](https://mui.com/r/x-premium-svg-link 'Premium plan')
|
|
62
|
+
|
|
63
|
+
Same changes as in `@mui/x-charts-pro@8.28.0`.
|
|
64
|
+
|
|
65
|
+
### Tree View
|
|
66
|
+
|
|
67
|
+
#### `@mui/x-tree-view@8.27.2`
|
|
68
|
+
|
|
69
|
+
Internal changes.
|
|
70
|
+
|
|
71
|
+
#### `@mui/x-tree-view-pro@8.27.2` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
72
|
+
|
|
73
|
+
Same changes as in `@mui/x-tree-view@8.27.2`.
|
|
74
|
+
|
|
75
|
+
### Codemod
|
|
76
|
+
|
|
77
|
+
#### `@mui/x-codemod@8.27.0`
|
|
78
|
+
|
|
79
|
+
Internal changes.
|
|
80
|
+
|
|
81
|
+
### Core
|
|
82
|
+
|
|
83
|
+
- [code-infra] Fix contributor generation in changelog (#21712) @brijeshb42
|
|
84
|
+
- [code-infra] Install pkg-pr-new (#21778) @Janpot
|
|
85
|
+
|
|
86
|
+
## 8.27.5
|
|
87
|
+
|
|
88
|
+
_Mar 11, 2026_
|
|
89
|
+
|
|
90
|
+
We'd like to extend a big thank you to the 7 contributors who made this release possible. Here are some highlights ✨:
|
|
91
|
+
|
|
92
|
+
- 🐞 Bugfixes
|
|
93
|
+
|
|
94
|
+
The following team members contributed to this release:
|
|
95
|
+
@bernardobelchior, @JCQuintas, @MBilalShafi, @michelengelen, @mj12albert, @sai6855, @siriwatknp
|
|
96
|
+
|
|
97
|
+
### Data Grid
|
|
98
|
+
|
|
99
|
+
#### `@mui/x-data-grid@8.27.5`
|
|
100
|
+
|
|
101
|
+
- [DataGrid] Fix crash when `rows` and `rowModesModel` are updated simultaneously (#21684) @michelengelen
|
|
102
|
+
- [DataGrid] Forward rest props in `GridFilterInputMultipleValue` (#21444) @siriwatknp
|
|
103
|
+
- [DataGrid] Remove double rtl inversion logic for columns pinning (#21443) @siriwatknp
|
|
104
|
+
- [DataGrid] Add missing `resizablePanelHandle` classes to `gridClasses` object (#21632) @sai6855
|
|
105
|
+
- [DataGrid] Refactor `headerAlign` style calls (#21633) @sai6855
|
|
106
|
+
- [DataGrid] Fix keyboard navigation with single-row checkbox selection (#21529) @mj12albert
|
|
107
|
+
|
|
108
|
+
#### `@mui/x-data-grid-pro@8.27.5` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
109
|
+
|
|
110
|
+
Same changes as in `@mui/x-data-grid@8.27.5`, plus:
|
|
111
|
+
|
|
112
|
+
- [DataGridPro] Add `role="presentation"` to detail panel toggle header content (#21691) @michelengelen
|
|
113
|
+
- [DataGridPro] Fix sorting not reflected in nested server-side data (#21641) @MBilalShafi
|
|
114
|
+
|
|
115
|
+
#### `@mui/x-data-grid-premium@8.27.5` [](https://mui.com/r/x-premium-svg-link 'Premium plan')
|
|
116
|
+
|
|
117
|
+
Same changes as in `@mui/x-data-grid-pro@8.27.5`.
|
|
118
|
+
|
|
119
|
+
### Charts
|
|
120
|
+
|
|
121
|
+
#### `@mui/x-charts@8.27.5`
|
|
122
|
+
|
|
123
|
+
- [charts] Refactor `BarChart` classes structure (#21601) (#21644) @JCQuintas
|
|
124
|
+
- [charts] Refactor `LineChart` classes structure (#21672) @JCQuintas
|
|
125
|
+
- [charts] Refactor `ScatterChart` classes structure (#21706) @JCQuintas
|
|
126
|
+
|
|
127
|
+
#### `@mui/x-charts-pro@8.27.5` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
128
|
+
|
|
129
|
+
Same changes as in `@mui/x-charts@8.27.5`, plus:
|
|
130
|
+
|
|
131
|
+
- [charts-pro] Fix image export truncated when page is zoomed out (#21696) @bernardobelchior
|
|
132
|
+
|
|
133
|
+
#### `@mui/x-charts-premium@8.27.5` [](https://mui.com/r/x-premium-svg-link 'Premium plan')
|
|
134
|
+
|
|
135
|
+
Same changes as in `@mui/x-charts-pro@8.27.5`.
|
|
136
|
+
|
|
137
|
+
### Docs
|
|
138
|
+
|
|
139
|
+
- [docs] Fix `AssistantWithDataSource` demo crashing (#21631) @sai6855
|
|
140
|
+
- [docs] Move Range Bar Chart to existing charts (#21122) @bernardobelchior
|
|
141
|
+
|
|
142
|
+
### Core
|
|
143
|
+
|
|
144
|
+
- [code-infra] Fix datagrid test flakyness (#21657) @JCQuintas
|
|
145
|
+
- [code-infra] Removed `getTeamMembers` function and usage from the release script (#21608) @michelengelen
|
|
146
|
+
|
|
147
|
+
### Miscellaneous
|
|
148
|
+
|
|
149
|
+
- [test] Add missing tests for forwarding props to filter operators in DataGrid (#21700) @siriwatknp
|
|
150
|
+
|
|
8
151
|
## 8.27.4
|
|
9
152
|
|
|
10
153
|
_Mar 5, 2026_
|
|
@@ -11,6 +11,7 @@ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")
|
|
|
11
11
|
var React = _interopRequireWildcard(require("react"));
|
|
12
12
|
var _useId = _interopRequireDefault(require("@mui/utils/useId"));
|
|
13
13
|
var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
|
|
14
|
+
var _capitalize = _interopRequireDefault(require("@mui/utils/capitalize"));
|
|
14
15
|
var _RtlProvider = require("@mui/system/RtlProvider");
|
|
15
16
|
var _doesSupportPreventScroll = require("../../utils/doesSupportPreventScroll");
|
|
16
17
|
var _gridClasses = require("../../constants/gridClasses");
|
|
@@ -35,7 +36,7 @@ const useUtilityClasses = ownerState => {
|
|
|
35
36
|
pinnedPosition
|
|
36
37
|
} = ownerState;
|
|
37
38
|
const slots = {
|
|
38
|
-
root: ['columnHeader', headerAlign
|
|
39
|
+
root: ['columnHeader', headerAlign && `columnHeader--align${(0, _capitalize.default)(headerAlign)}`, isDragging && 'columnHeader--moving', showRightBorder && 'columnHeader--withRightBorder', showLeftBorder && 'columnHeader--withLeftBorder', 'withBorderColor', groupId === null ? 'columnHeader--emptyGroup' : 'columnHeader--filledGroup', pinnedPosition === _constants.PinnedColumnPosition.LEFT && 'columnHeader--pinnedLeft', pinnedPosition === _constants.PinnedColumnPosition.RIGHT && 'columnHeader--pinnedRight', isLastColumn && 'columnHeader--last'],
|
|
39
40
|
draggableContainer: ['columnHeaderDraggableContainer'],
|
|
40
41
|
titleContainer: ['columnHeaderTitleContainer', 'withBorderColor'],
|
|
41
42
|
titleContainerContent: ['columnHeaderTitleContainerContent']
|
|
@@ -12,6 +12,7 @@ var React = _interopRequireWildcard(require("react"));
|
|
|
12
12
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
13
13
|
var _clsx = _interopRequireDefault(require("clsx"));
|
|
14
14
|
var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
|
|
15
|
+
var _capitalize = _interopRequireDefault(require("@mui/utils/capitalize"));
|
|
15
16
|
var _useId = _interopRequireDefault(require("@mui/utils/useId"));
|
|
16
17
|
var _fastMemo = require("@mui/x-internals/fastMemo");
|
|
17
18
|
var _RtlProvider = require("@mui/system/RtlProvider");
|
|
@@ -48,7 +49,7 @@ const useUtilityClasses = ownerState => {
|
|
|
48
49
|
// todo refactor to a prop on col isNumeric or ?? ie: coltype===price wont work
|
|
49
50
|
const isColumnNumeric = colDef.type === 'number';
|
|
50
51
|
const slots = {
|
|
51
|
-
root: ['columnHeader', colDef.headerAlign
|
|
52
|
+
root: ['columnHeader', colDef.headerAlign && `columnHeader--align${(0, _capitalize.default)(colDef.headerAlign)}`, isColumnSortable && 'columnHeader--sortable', isDragging && 'columnHeader--moving', isColumnSorted && 'columnHeader--sorted', isColumnFiltered && 'columnHeader--filtered', isColumnNumeric && 'columnHeader--numeric', 'withBorderColor', showRightBorder && 'columnHeader--withRightBorder', showLeftBorder && 'columnHeader--withLeftBorder', pinnedPosition === _constants.PinnedColumnPosition.LEFT && 'columnHeader--pinnedLeft', pinnedPosition === _constants.PinnedColumnPosition.RIGHT && 'columnHeader--pinnedRight',
|
|
52
53
|
// TODO: Remove classes below and restore `:has` selectors when they are supported in jsdom
|
|
53
54
|
// See https://github.com/mui/mui-x/pull/14559
|
|
54
55
|
isSiblingFocused && 'columnHeader--siblingFocused'],
|
|
@@ -12,6 +12,7 @@ var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runt
|
|
|
12
12
|
var React = _interopRequireWildcard(require("react"));
|
|
13
13
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
14
14
|
var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
|
|
15
|
+
var _useEnhancedEffect = _interopRequireDefault(require("@mui/utils/useEnhancedEffect"));
|
|
15
16
|
var _forwardRef = require("@mui/x-internals/forwardRef");
|
|
16
17
|
var _utils = require("../../hooks/features/rowSelection/utils");
|
|
17
18
|
var _useGridSelector = require("../../hooks/utils/useGridSelector");
|
|
@@ -125,13 +126,14 @@ const GridHeaderCheckbox = exports.GridHeaderCheckbox = (0, _forwardRef.forwardR
|
|
|
125
126
|
};
|
|
126
127
|
apiRef.current.publishEvent('headerSelectionCheckboxChange', params);
|
|
127
128
|
};
|
|
128
|
-
const
|
|
129
|
-
|
|
129
|
+
const multipleSelectionEnabled = (0, _utils.isMultipleRowSelectionEnabled)(rootProps);
|
|
130
|
+
const tabIndex = tabIndexState !== null && tabIndexState.field === props.field && multipleSelectionEnabled ? 0 : -1;
|
|
131
|
+
(0, _useEnhancedEffect.default)(() => {
|
|
130
132
|
const element = apiRef.current.getColumnHeaderElement(props.field);
|
|
131
|
-
if (tabIndex === 0 && element) {
|
|
133
|
+
if (tabIndex === 0 && element && multipleSelectionEnabled) {
|
|
132
134
|
element.tabIndex = -1;
|
|
133
135
|
}
|
|
134
|
-
}, [tabIndex, apiRef, props.field]);
|
|
136
|
+
}, [tabIndex, apiRef, props.field, multipleSelectionEnabled]);
|
|
135
137
|
const handleKeyDown = React.useCallback(event => {
|
|
136
138
|
if (event.key === ' ') {
|
|
137
139
|
// imperative toggle the checkbox because Space is disable by some preventDefault
|
|
@@ -160,7 +162,7 @@ const GridHeaderCheckbox = exports.GridHeaderCheckbox = (0, _forwardRef.forwardR
|
|
|
160
162
|
},
|
|
161
163
|
tabIndex: tabIndex,
|
|
162
164
|
onKeyDown: handleKeyDown,
|
|
163
|
-
disabled: !
|
|
165
|
+
disabled: !multipleSelectionEnabled
|
|
164
166
|
}, rootProps.slotProps?.baseCheckbox, other, {
|
|
165
167
|
ref: ref
|
|
166
168
|
}));
|
|
@@ -22,17 +22,13 @@ const separatorIconDragStyles = {
|
|
|
22
22
|
// https://github.com/emotion-js/emotion/issues/1105#issuecomment-1722524968
|
|
23
23
|
const ignoreSsrWarning = '/* emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason */';
|
|
24
24
|
const shouldShowBorderTopRightRadiusSelector = apiRef => !apiRef.current.state.dimensions.isReady ? apiRef.current.state.dimensions.scrollbarSize === 0 : apiRef.current.state.dimensions.hasScrollX && (!apiRef.current.state.dimensions.hasScrollY || apiRef.current.state.dimensions.scrollbarSize === 0);
|
|
25
|
-
const elementOverrides = {
|
|
26
|
-
root: ['autoHeight', 'autosizing', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'root--noToolbar', 'withVerticalBorder'],
|
|
27
|
-
children: ['actionsCell', 'booleanCell', 'cell', 'cell--editable', 'cell--editing', 'cell--flex', 'cell--pinnedLeft', 'cell--pinnedRight', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell--rangeTop', 'cell--selectionMode', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--withLeftBorder', 'cell--withRightBorder', 'cellCheckbox', 'cellEmpty', 'cellOffsetLeft', 'cellSkeleton', 'checkboxInput', 'columnHeader', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--emptyGroup', 'columnHeader--filledGroup', 'columnHeader--filtered', 'columnHeader--last', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--pinnedLeft', 'columnHeader--pinnedRight', 'columnHeader--siblingFocused', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--withLeftBorder', 'columnHeader--withRightBorder', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnSeparator', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'container--bottom', 'container--top', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'editBooleanCell', 'filterIcon', 'filler--borderBottom', 'filler--pinnedLeft', 'filler--pinnedRight', 'groupingCriteriaCell', 'groupingCriteriaCellLoadingContainer', 'groupingCriteriaCellToggle', 'headerFilterRow', 'iconSeparator', 'menuIcon', 'menuIconButton', 'menuList', 'menuOpen', 'overlayWrapperInner', 'pinnedRows', 'pinnedRows--bottom', 'pinnedRows--top', 'row', 'row--borderBottom', 'row--detailPanelExpanded', 'row--dragging', 'row--dynamicHeight', 'row--editable', 'row--editing', 'row--firstVisible', 'row--lastVisible', 'rowReorderCell', 'rowReorderCell--draggable', 'rowReorderCellContainer', 'rowReorderCellPlaceholder', 'rowSkeleton', 'scrollbar', 'scrollbar--horizontal', 'scrollbar--vertical', 'scrollbarFiller', 'scrollbarFiller--pinnedRight', 'sortIcon', 'treeDataGroupingCell', 'treeDataGroupingCellLoadingContainer', 'treeDataGroupingCellToggle', 'withBorderColor', 'row--beingDragged']
|
|
28
|
-
};
|
|
29
25
|
const GridRootStyles = exports.GridRootStyles = (0, _styles.styled)('div', {
|
|
30
26
|
name: 'MuiDataGrid',
|
|
31
27
|
slot: 'Root',
|
|
32
28
|
overridesResolver: (props, styles) => {
|
|
33
29
|
// Root overrides
|
|
34
30
|
const overrides = [styles.root];
|
|
35
|
-
|
|
31
|
+
_gridClasses.gridClassesOverrides.root.forEach(key => {
|
|
36
32
|
overrides.push({
|
|
37
33
|
[`&.${_gridClasses.gridClasses[key]}`]: styles[key]
|
|
38
34
|
});
|
|
@@ -41,7 +37,7 @@ const GridRootStyles = exports.GridRootStyles = (0, _styles.styled)('div', {
|
|
|
41
37
|
// Child element overrides
|
|
42
38
|
// - Only declare overrides here for class names that are not applied to `styled` components.
|
|
43
39
|
// - For `styled` components, declare overrides in the component itself.
|
|
44
|
-
|
|
40
|
+
_gridClasses.gridClassesOverrides.children.forEach(key => {
|
|
45
41
|
overrides.push({
|
|
46
42
|
[`& .${_gridClasses.gridClasses[key]}`]: styles[key]
|
|
47
43
|
});
|
|
@@ -1,27 +1,30 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
'use client';
|
|
3
3
|
|
|
4
|
-
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
5
4
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
5
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
6
6
|
Object.defineProperty(exports, "__esModule", {
|
|
7
7
|
value: true
|
|
8
8
|
});
|
|
9
9
|
exports.GridFilterInputMultipleValue = GridFilterInputMultipleValue;
|
|
10
10
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
|
+
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
11
12
|
var React = _interopRequireWildcard(require("react"));
|
|
12
13
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
13
14
|
var _useId = _interopRequireDefault(require("@mui/utils/useId"));
|
|
14
15
|
var _useGridRootProps = require("../../../hooks/utils/useGridRootProps");
|
|
15
16
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
17
|
+
const _excluded = ["item", "applyValue", "type", "apiRef", "focusElementRef", "slotProps"];
|
|
16
18
|
function GridFilterInputMultipleValue(props) {
|
|
17
19
|
const {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
item,
|
|
21
|
+
applyValue,
|
|
22
|
+
type,
|
|
23
|
+
apiRef,
|
|
24
|
+
focusElementRef,
|
|
25
|
+
slotProps
|
|
26
|
+
} = props,
|
|
27
|
+
other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
|
|
25
28
|
const id = (0, _useId.default)();
|
|
26
29
|
const [options, setOptions] = React.useState([]);
|
|
27
30
|
const [filterValueState, setFilterValueState] = React.useState(item.value || []);
|
|
@@ -60,7 +63,7 @@ function GridFilterInputMultipleValue(props) {
|
|
|
60
63
|
inputRef: focusElementRef
|
|
61
64
|
}
|
|
62
65
|
}
|
|
63
|
-
}, slotProps?.root));
|
|
66
|
+
}, other, slotProps?.root));
|
|
64
67
|
}
|
|
65
68
|
process.env.NODE_ENV !== "production" ? GridFilterInputMultipleValue.propTypes = {
|
|
66
69
|
// ----------------------------- Warning --------------------------------
|
|
@@ -960,4 +960,20 @@ export interface GridClasses {
|
|
|
960
960
|
}
|
|
961
961
|
export type GridClassKey = keyof GridClasses;
|
|
962
962
|
export declare function getDataGridUtilityClass(slot: string): string;
|
|
963
|
+
/**
|
|
964
|
+
* Class groups for the MuiDataGrid component used in GridRootStyles overridesResolver.
|
|
965
|
+
*
|
|
966
|
+
* Splits classes into two groups to support style overrides:
|
|
967
|
+
* - `root`: classes applied directly to the root element (use `&.className` selector)
|
|
968
|
+
* - `children`: classes applied to child elements (use `& .className` selector)
|
|
969
|
+
*
|
|
970
|
+
* These are spread into the gridClasses utility object and used for CSS-in-JS overrides.
|
|
971
|
+
*
|
|
972
|
+
* Only include class names here that are NOT applied via `styled` components.
|
|
973
|
+
* For `styled` components, declare overrides directly in the component definition.
|
|
974
|
+
*/
|
|
975
|
+
export declare const gridClassesOverrides: {
|
|
976
|
+
readonly root: ["autoHeight", "autosizing", "root--densityStandard", "root--densityComfortable", "root--densityCompact", "root--disableUserSelection", "root--noToolbar", "withVerticalBorder"];
|
|
977
|
+
readonly children: ["actionsCell", "booleanCell", "cell", "cell--editable", "cell--editing", "cell--flex", "cell--pinnedLeft", "cell--pinnedRight", "cell--rangeBottom", "cell--rangeLeft", "cell--rangeRight", "cell--rangeTop", "cell--selectionMode", "cell--textCenter", "cell--textLeft", "cell--textRight", "cell--withLeftBorder", "cell--withRightBorder", "cellCheckbox", "cellEmpty", "cellOffsetLeft", "cellSkeleton", "checkboxInput", "columnHeader", "columnHeader--alignCenter", "columnHeader--alignLeft", "columnHeader--alignRight", "columnHeader--dragging", "columnHeader--emptyGroup", "columnHeader--filledGroup", "columnHeader--filtered", "columnHeader--last", "columnHeader--moving", "columnHeader--numeric", "columnHeader--pinnedLeft", "columnHeader--pinnedRight", "columnHeader--siblingFocused", "columnHeader--sortable", "columnHeader--sorted", "columnHeader--withLeftBorder", "columnHeader--withRightBorder", "columnHeaderCheckbox", "columnHeaderDraggableContainer", "columnHeaderTitleContainer", "columnHeaderTitleContainerContent", "columnSeparator", "columnSeparator--resizable", "columnSeparator--resizing", "columnSeparator--sideLeft", "columnSeparator--sideRight", "container--bottom", "container--top", "detailPanelToggleCell", "detailPanelToggleCell--expanded", "editBooleanCell", "filterIcon", "filler--borderBottom", "filler--pinnedLeft", "filler--pinnedRight", "groupingCriteriaCell", "groupingCriteriaCellLoadingContainer", "groupingCriteriaCellToggle", "headerFilterRow", "iconSeparator", "menuIcon", "menuIconButton", "menuList", "menuOpen", "overlayWrapperInner", "pinnedRows", "pinnedRows--bottom", "pinnedRows--top", "row", "row--borderBottom", "row--detailPanelExpanded", "row--dragging", "row--dynamicHeight", "row--editable", "row--editing", "row--firstVisible", "row--lastVisible", "rowReorderCell", "rowReorderCell--draggable", "rowReorderCellContainer", "rowReorderCellPlaceholder", "rowSkeleton", "scrollbar", "scrollbar--horizontal", "scrollbar--vertical", "scrollbarFiller", "scrollbarFiller--pinnedRight", "sortIcon", "treeDataGroupingCell", "treeDataGroupingCellLoadingContainer", "treeDataGroupingCellToggle", "withBorderColor", "row--beingDragged"];
|
|
978
|
+
};
|
|
963
979
|
export declare const gridClasses: Record<keyof GridClasses, string>;
|
package/constants/gridClasses.js
CHANGED
|
@@ -5,12 +5,29 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.getDataGridUtilityClass = getDataGridUtilityClass;
|
|
8
|
-
exports.gridClasses = void 0;
|
|
8
|
+
exports.gridClassesOverrides = exports.gridClasses = void 0;
|
|
9
9
|
var _generateUtilityClass = _interopRequireDefault(require("@mui/utils/generateUtilityClass"));
|
|
10
10
|
var _generateUtilityClasses = _interopRequireDefault(require("@mui/utils/generateUtilityClasses"));
|
|
11
11
|
function getDataGridUtilityClass(slot) {
|
|
12
12
|
return (0, _generateUtilityClass.default)('MuiDataGrid', slot);
|
|
13
13
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Class groups for the MuiDataGrid component used in GridRootStyles overridesResolver.
|
|
17
|
+
*
|
|
18
|
+
* Splits classes into two groups to support style overrides:
|
|
19
|
+
* - `root`: classes applied directly to the root element (use `&.className` selector)
|
|
20
|
+
* - `children`: classes applied to child elements (use `& .className` selector)
|
|
21
|
+
*
|
|
22
|
+
* These are spread into the gridClasses utility object and used for CSS-in-JS overrides.
|
|
23
|
+
*
|
|
24
|
+
* Only include class names here that are NOT applied via `styled` components.
|
|
25
|
+
* For `styled` components, declare overrides directly in the component definition.
|
|
26
|
+
*/
|
|
27
|
+
const gridClassesOverrides = exports.gridClassesOverrides = {
|
|
28
|
+
root: ['autoHeight', 'autosizing', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'root--noToolbar', 'withVerticalBorder'],
|
|
29
|
+
children: ['actionsCell', 'booleanCell', 'cell', 'cell--editable', 'cell--editing', 'cell--flex', 'cell--pinnedLeft', 'cell--pinnedRight', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell--rangeTop', 'cell--selectionMode', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--withLeftBorder', 'cell--withRightBorder', 'cellCheckbox', 'cellEmpty', 'cellOffsetLeft', 'cellSkeleton', 'checkboxInput', 'columnHeader', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--emptyGroup', 'columnHeader--filledGroup', 'columnHeader--filtered', 'columnHeader--last', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--pinnedLeft', 'columnHeader--pinnedRight', 'columnHeader--siblingFocused', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--withLeftBorder', 'columnHeader--withRightBorder', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnSeparator', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'container--bottom', 'container--top', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'editBooleanCell', 'filterIcon', 'filler--borderBottom', 'filler--pinnedLeft', 'filler--pinnedRight', 'groupingCriteriaCell', 'groupingCriteriaCellLoadingContainer', 'groupingCriteriaCellToggle', 'headerFilterRow', 'iconSeparator', 'menuIcon', 'menuIconButton', 'menuList', 'menuOpen', 'overlayWrapperInner', 'pinnedRows', 'pinnedRows--bottom', 'pinnedRows--top', 'row', 'row--borderBottom', 'row--detailPanelExpanded',
|
|
30
|
+
// TODO v9: Rename to `cell--dragging`
|
|
31
|
+
'row--dragging', 'row--dynamicHeight', 'row--editable', 'row--editing', 'row--firstVisible', 'row--lastVisible', 'rowReorderCell', 'rowReorderCell--draggable', 'rowReorderCellContainer', 'rowReorderCellPlaceholder', 'rowSkeleton', 'scrollbar', 'scrollbar--horizontal', 'scrollbar--vertical', 'scrollbarFiller', 'scrollbarFiller--pinnedRight', 'sortIcon', 'treeDataGroupingCell', 'treeDataGroupingCellLoadingContainer', 'treeDataGroupingCellToggle', 'withBorderColor', 'row--beingDragged']
|
|
32
|
+
};
|
|
33
|
+
const gridClasses = exports.gridClasses = (0, _generateUtilityClasses.default)('MuiDataGrid', [...gridClassesOverrides.root, ...gridClassesOverrides.children, 'aiAssistantPanel', 'aiAssistantPanelHeader', 'aiAssistantPanelTitleContainer', 'aiAssistantPanelTitle', 'aiAssistantPanelBody', 'aiAssistantPanelEmptyText', 'aiAssistantPanelFooter', 'aiAssistantPanelConversation', 'aiAssistantPanelConversationList', 'aiAssistantPanelConversationTitle', 'aiAssistantPanelSuggestions', 'aiAssistantPanelSuggestionsList', 'aiAssistantPanelSuggestionsItem', 'aiAssistantPanelSuggestionsLabel', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'aggregationRowOverlayWrapper', 'mainContent', 'withSidePanel', 'collapsible', 'collapsibleTrigger', 'collapsibleIcon', 'collapsiblePanel', 'columnHeader--filter', 'columnHeaderFilterInput', 'columnHeaderFilterOperatorLabel', 'columnHeaderTitle', 'columnHeaders', 'columnsManagement', 'columnsManagementRow', 'columnsManagementHeader', 'columnsManagementSearchInput', 'columnsManagementFooter', 'columnsManagementScrollArea', 'columnsManagementEmptyText', 'detailPanel', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editInputCell', 'longTextCell', 'longTextCellContent', 'longTextCellExpandButton', 'longTextCellCollapseButton', 'longTextCellPopup', 'longTextCellPopperContent', 'editLongTextCell', 'editLongTextCellValue', 'editLongTextCellPopup', 'editLongTextCellPopperContent', 'editLongTextCellTextarea', 'filler', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'footerContainer', 'iconButtonContainer', 'main', 'main--hasPinnedRight', 'main--hiddenContent', 'menu', 'overlay', 'overlayWrapper', 'root', 'rowCount', 'rowReorderIcon', 'scrollArea--left', 'scrollArea--right', 'scrollArea--up', 'scrollArea--down', 'scrollArea', 'scrollShadow', 'scrollShadow--vertical', 'scrollShadow--horizontal', 'selectedRowCount', 'sortButton', 'shadowScrollArea', 'sidebar', 'sidebarHeader', 'toolbarContainer', 'toolbar', 'toolbarLabel', 'toolbarDivider', 'toolbarFilterList', 'toolbarQuickFilter', 'toolbarQuickFilterTrigger', 'toolbarQuickFilterControl', 'virtualScroller', 'virtualScroller--hasScrollX', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pivotPanelAvailableFields', 'pivotPanelField', 'pivotPanelField--sorted', 'pivotPanelFieldActionContainer', 'pivotPanelFieldCheckbox', 'pivotPanelFieldDragIcon', 'pivotPanelFieldList', 'pivotPanelFieldName', 'pivotPanelHeader', 'pivotPanelPlaceholder', 'pivotPanelScrollArea', 'pivotPanelSearchContainer', 'pivotPanelSection', 'pivotPanelSectionTitle', 'pivotPanelSections', 'pivotPanelSwitch', 'pivotPanelSwitchLabel', 'prompt', 'promptContent', 'promptText', 'promptFeedback', 'promptChangeList', 'promptChangesToggle', 'promptChangesToggleIcon', 'promptIcon', 'promptIconContainer', 'promptError', 'promptAction', 'resizablePanelHandle', 'resizablePanelHandle--horizontal', 'resizablePanelHandle--vertical']);
|
package/constants/index.d.ts
CHANGED
package/constants/index.js
CHANGED
|
@@ -3,9 +3,26 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
var _exportNames = {
|
|
7
|
+
getDataGridUtilityClass: true,
|
|
8
|
+
gridClasses: true
|
|
9
|
+
};
|
|
10
|
+
Object.defineProperty(exports, "getDataGridUtilityClass", {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
get: function () {
|
|
13
|
+
return _gridClasses.getDataGridUtilityClass;
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
Object.defineProperty(exports, "gridClasses", {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: function () {
|
|
19
|
+
return _gridClasses.gridClasses;
|
|
20
|
+
}
|
|
21
|
+
});
|
|
6
22
|
var _envConstants = require("./envConstants");
|
|
7
23
|
Object.keys(_envConstants).forEach(function (key) {
|
|
8
24
|
if (key === "default" || key === "__esModule") return;
|
|
25
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
9
26
|
if (key in exports && exports[key] === _envConstants[key]) return;
|
|
10
27
|
Object.defineProperty(exports, key, {
|
|
11
28
|
enumerable: true,
|
|
@@ -17,6 +34,7 @@ Object.keys(_envConstants).forEach(function (key) {
|
|
|
17
34
|
var _localeTextConstants = require("./localeTextConstants");
|
|
18
35
|
Object.keys(_localeTextConstants).forEach(function (key) {
|
|
19
36
|
if (key === "default" || key === "__esModule") return;
|
|
37
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
20
38
|
if (key in exports && exports[key] === _localeTextConstants[key]) return;
|
|
21
39
|
Object.defineProperty(exports, key, {
|
|
22
40
|
enumerable: true,
|
|
@@ -26,19 +44,10 @@ Object.keys(_localeTextConstants).forEach(function (key) {
|
|
|
26
44
|
});
|
|
27
45
|
});
|
|
28
46
|
var _gridClasses = require("./gridClasses");
|
|
29
|
-
Object.keys(_gridClasses).forEach(function (key) {
|
|
30
|
-
if (key === "default" || key === "__esModule") return;
|
|
31
|
-
if (key in exports && exports[key] === _gridClasses[key]) return;
|
|
32
|
-
Object.defineProperty(exports, key, {
|
|
33
|
-
enumerable: true,
|
|
34
|
-
get: function () {
|
|
35
|
-
return _gridClasses[key];
|
|
36
|
-
}
|
|
37
|
-
});
|
|
38
|
-
});
|
|
39
47
|
var _signature = require("./signature");
|
|
40
48
|
Object.keys(_signature).forEach(function (key) {
|
|
41
49
|
if (key === "default" || key === "__esModule") return;
|
|
50
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
42
51
|
if (key in exports && exports[key] === _signature[key]) return;
|
|
43
52
|
Object.defineProperty(exports, key, {
|
|
44
53
|
enumerable: true,
|
|
@@ -4,6 +4,7 @@ import _extends from "@babel/runtime/helpers/esm/extends";
|
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import useId from '@mui/utils/useId';
|
|
6
6
|
import composeClasses from '@mui/utils/composeClasses';
|
|
7
|
+
import capitalize from '@mui/utils/capitalize';
|
|
7
8
|
import { useRtl } from '@mui/system/RtlProvider';
|
|
8
9
|
import { doesSupportPreventScroll } from "../../utils/doesSupportPreventScroll.js";
|
|
9
10
|
import { getDataGridUtilityClass } from "../../constants/gridClasses.js";
|
|
@@ -28,7 +29,7 @@ const useUtilityClasses = ownerState => {
|
|
|
28
29
|
pinnedPosition
|
|
29
30
|
} = ownerState;
|
|
30
31
|
const slots = {
|
|
31
|
-
root: ['columnHeader', headerAlign
|
|
32
|
+
root: ['columnHeader', headerAlign && `columnHeader--align${capitalize(headerAlign)}`, isDragging && 'columnHeader--moving', showRightBorder && 'columnHeader--withRightBorder', showLeftBorder && 'columnHeader--withLeftBorder', 'withBorderColor', groupId === null ? 'columnHeader--emptyGroup' : 'columnHeader--filledGroup', pinnedPosition === PinnedColumnPosition.LEFT && 'columnHeader--pinnedLeft', pinnedPosition === PinnedColumnPosition.RIGHT && 'columnHeader--pinnedRight', isLastColumn && 'columnHeader--last'],
|
|
32
33
|
draggableContainer: ['columnHeaderDraggableContainer'],
|
|
33
34
|
titleContainer: ['columnHeaderTitleContainer', 'withBorderColor'],
|
|
34
35
|
titleContainerContent: ['columnHeaderTitleContainerContent']
|
|
@@ -5,6 +5,7 @@ import * as React from 'react';
|
|
|
5
5
|
import PropTypes from 'prop-types';
|
|
6
6
|
import clsx from 'clsx';
|
|
7
7
|
import composeClasses from '@mui/utils/composeClasses';
|
|
8
|
+
import capitalize from '@mui/utils/capitalize';
|
|
8
9
|
import useId from '@mui/utils/useId';
|
|
9
10
|
import { fastMemo } from '@mui/x-internals/fastMemo';
|
|
10
11
|
import { useRtl } from '@mui/system/RtlProvider';
|
|
@@ -41,7 +42,7 @@ const useUtilityClasses = ownerState => {
|
|
|
41
42
|
// todo refactor to a prop on col isNumeric or ?? ie: coltype===price wont work
|
|
42
43
|
const isColumnNumeric = colDef.type === 'number';
|
|
43
44
|
const slots = {
|
|
44
|
-
root: ['columnHeader', colDef.headerAlign
|
|
45
|
+
root: ['columnHeader', colDef.headerAlign && `columnHeader--align${capitalize(colDef.headerAlign)}`, isColumnSortable && 'columnHeader--sortable', isDragging && 'columnHeader--moving', isColumnSorted && 'columnHeader--sorted', isColumnFiltered && 'columnHeader--filtered', isColumnNumeric && 'columnHeader--numeric', 'withBorderColor', showRightBorder && 'columnHeader--withRightBorder', showLeftBorder && 'columnHeader--withLeftBorder', pinnedPosition === PinnedColumnPosition.LEFT && 'columnHeader--pinnedLeft', pinnedPosition === PinnedColumnPosition.RIGHT && 'columnHeader--pinnedRight',
|
|
45
46
|
// TODO: Remove classes below and restore `:has` selectors when they are supported in jsdom
|
|
46
47
|
// See https://github.com/mui/mui-x/pull/14559
|
|
47
48
|
isSiblingFocused && 'columnHeader--siblingFocused'],
|
|
@@ -6,6 +6,7 @@ const _excluded = ["field", "colDef"];
|
|
|
6
6
|
import * as React from 'react';
|
|
7
7
|
import PropTypes from 'prop-types';
|
|
8
8
|
import composeClasses from '@mui/utils/composeClasses';
|
|
9
|
+
import useEnhancedEffect from '@mui/utils/useEnhancedEffect';
|
|
9
10
|
import { forwardRef } from '@mui/x-internals/forwardRef';
|
|
10
11
|
import { isMultipleRowSelectionEnabled } from "../../hooks/features/rowSelection/utils.js";
|
|
11
12
|
import { useGridSelector } from "../../hooks/utils/useGridSelector.js";
|
|
@@ -118,13 +119,14 @@ const GridHeaderCheckbox = forwardRef(function GridHeaderCheckbox(props, ref) {
|
|
|
118
119
|
};
|
|
119
120
|
apiRef.current.publishEvent('headerSelectionCheckboxChange', params);
|
|
120
121
|
};
|
|
121
|
-
const
|
|
122
|
-
|
|
122
|
+
const multipleSelectionEnabled = isMultipleRowSelectionEnabled(rootProps);
|
|
123
|
+
const tabIndex = tabIndexState !== null && tabIndexState.field === props.field && multipleSelectionEnabled ? 0 : -1;
|
|
124
|
+
useEnhancedEffect(() => {
|
|
123
125
|
const element = apiRef.current.getColumnHeaderElement(props.field);
|
|
124
|
-
if (tabIndex === 0 && element) {
|
|
126
|
+
if (tabIndex === 0 && element && multipleSelectionEnabled) {
|
|
125
127
|
element.tabIndex = -1;
|
|
126
128
|
}
|
|
127
|
-
}, [tabIndex, apiRef, props.field]);
|
|
129
|
+
}, [tabIndex, apiRef, props.field, multipleSelectionEnabled]);
|
|
128
130
|
const handleKeyDown = React.useCallback(event => {
|
|
129
131
|
if (event.key === ' ') {
|
|
130
132
|
// imperative toggle the checkbox because Space is disable by some preventDefault
|
|
@@ -153,7 +155,7 @@ const GridHeaderCheckbox = forwardRef(function GridHeaderCheckbox(props, ref) {
|
|
|
153
155
|
},
|
|
154
156
|
tabIndex: tabIndex,
|
|
155
157
|
onKeyDown: handleKeyDown,
|
|
156
|
-
disabled: !
|
|
158
|
+
disabled: !multipleSelectionEnabled
|
|
157
159
|
}, rootProps.slotProps?.baseCheckbox, other, {
|
|
158
160
|
ref: ref
|
|
159
161
|
}));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { styled } from '@mui/material/styles';
|
|
2
|
-
import { gridClasses as c } from "../../constants/gridClasses.js";
|
|
2
|
+
import { gridClasses as c, gridClassesOverrides } from "../../constants/gridClasses.js";
|
|
3
3
|
import { vars } from "../../constants/cssVariables.js";
|
|
4
4
|
import { useGridSelector } from "../../hooks/utils/useGridSelector.js";
|
|
5
5
|
import { useGridPrivateApiContext } from "../../hooks/utils/useGridPrivateApiContext.js";
|
|
@@ -16,17 +16,13 @@ const separatorIconDragStyles = {
|
|
|
16
16
|
// https://github.com/emotion-js/emotion/issues/1105#issuecomment-1722524968
|
|
17
17
|
const ignoreSsrWarning = '/* emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason */';
|
|
18
18
|
const shouldShowBorderTopRightRadiusSelector = apiRef => !apiRef.current.state.dimensions.isReady ? apiRef.current.state.dimensions.scrollbarSize === 0 : apiRef.current.state.dimensions.hasScrollX && (!apiRef.current.state.dimensions.hasScrollY || apiRef.current.state.dimensions.scrollbarSize === 0);
|
|
19
|
-
const elementOverrides = {
|
|
20
|
-
root: ['autoHeight', 'autosizing', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'root--noToolbar', 'withVerticalBorder'],
|
|
21
|
-
children: ['actionsCell', 'booleanCell', 'cell', 'cell--editable', 'cell--editing', 'cell--flex', 'cell--pinnedLeft', 'cell--pinnedRight', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell--rangeTop', 'cell--selectionMode', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--withLeftBorder', 'cell--withRightBorder', 'cellCheckbox', 'cellEmpty', 'cellOffsetLeft', 'cellSkeleton', 'checkboxInput', 'columnHeader', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--emptyGroup', 'columnHeader--filledGroup', 'columnHeader--filtered', 'columnHeader--last', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--pinnedLeft', 'columnHeader--pinnedRight', 'columnHeader--siblingFocused', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--withLeftBorder', 'columnHeader--withRightBorder', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnSeparator', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'container--bottom', 'container--top', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'editBooleanCell', 'filterIcon', 'filler--borderBottom', 'filler--pinnedLeft', 'filler--pinnedRight', 'groupingCriteriaCell', 'groupingCriteriaCellLoadingContainer', 'groupingCriteriaCellToggle', 'headerFilterRow', 'iconSeparator', 'menuIcon', 'menuIconButton', 'menuList', 'menuOpen', 'overlayWrapperInner', 'pinnedRows', 'pinnedRows--bottom', 'pinnedRows--top', 'row', 'row--borderBottom', 'row--detailPanelExpanded', 'row--dragging', 'row--dynamicHeight', 'row--editable', 'row--editing', 'row--firstVisible', 'row--lastVisible', 'rowReorderCell', 'rowReorderCell--draggable', 'rowReorderCellContainer', 'rowReorderCellPlaceholder', 'rowSkeleton', 'scrollbar', 'scrollbar--horizontal', 'scrollbar--vertical', 'scrollbarFiller', 'scrollbarFiller--pinnedRight', 'sortIcon', 'treeDataGroupingCell', 'treeDataGroupingCellLoadingContainer', 'treeDataGroupingCellToggle', 'withBorderColor', 'row--beingDragged']
|
|
22
|
-
};
|
|
23
19
|
export const GridRootStyles = styled('div', {
|
|
24
20
|
name: 'MuiDataGrid',
|
|
25
21
|
slot: 'Root',
|
|
26
22
|
overridesResolver: (props, styles) => {
|
|
27
23
|
// Root overrides
|
|
28
24
|
const overrides = [styles.root];
|
|
29
|
-
|
|
25
|
+
gridClassesOverrides.root.forEach(key => {
|
|
30
26
|
overrides.push({
|
|
31
27
|
[`&.${c[key]}`]: styles[key]
|
|
32
28
|
});
|
|
@@ -35,7 +31,7 @@ export const GridRootStyles = styled('div', {
|
|
|
35
31
|
// Child element overrides
|
|
36
32
|
// - Only declare overrides here for class names that are not applied to `styled` components.
|
|
37
33
|
// - For `styled` components, declare overrides in the component itself.
|
|
38
|
-
|
|
34
|
+
gridClassesOverrides.children.forEach(key => {
|
|
39
35
|
overrides.push({
|
|
40
36
|
[`& .${c[key]}`]: styles[key]
|
|
41
37
|
});
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
3
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
4
|
+
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
5
|
+
const _excluded = ["item", "applyValue", "type", "apiRef", "focusElementRef", "slotProps"];
|
|
4
6
|
import * as React from 'react';
|
|
5
7
|
import PropTypes from 'prop-types';
|
|
6
8
|
import useId from '@mui/utils/useId';
|
|
@@ -8,13 +10,14 @@ import { useGridRootProps } from "../../../hooks/utils/useGridRootProps.js";
|
|
|
8
10
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
9
11
|
function GridFilterInputMultipleValue(props) {
|
|
10
12
|
const {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
item,
|
|
14
|
+
applyValue,
|
|
15
|
+
type,
|
|
16
|
+
apiRef,
|
|
17
|
+
focusElementRef,
|
|
18
|
+
slotProps
|
|
19
|
+
} = props,
|
|
20
|
+
other = _objectWithoutPropertiesLoose(props, _excluded);
|
|
18
21
|
const id = useId();
|
|
19
22
|
const [options, setOptions] = React.useState([]);
|
|
20
23
|
const [filterValueState, setFilterValueState] = React.useState(item.value || []);
|
|
@@ -53,7 +56,7 @@ function GridFilterInputMultipleValue(props) {
|
|
|
53
56
|
inputRef: focusElementRef
|
|
54
57
|
}
|
|
55
58
|
}
|
|
56
|
-
}, slotProps?.root));
|
|
59
|
+
}, other, slotProps?.root));
|
|
57
60
|
}
|
|
58
61
|
process.env.NODE_ENV !== "production" ? GridFilterInputMultipleValue.propTypes = {
|
|
59
62
|
// ----------------------------- Warning --------------------------------
|
|
@@ -960,4 +960,20 @@ export interface GridClasses {
|
|
|
960
960
|
}
|
|
961
961
|
export type GridClassKey = keyof GridClasses;
|
|
962
962
|
export declare function getDataGridUtilityClass(slot: string): string;
|
|
963
|
+
/**
|
|
964
|
+
* Class groups for the MuiDataGrid component used in GridRootStyles overridesResolver.
|
|
965
|
+
*
|
|
966
|
+
* Splits classes into two groups to support style overrides:
|
|
967
|
+
* - `root`: classes applied directly to the root element (use `&.className` selector)
|
|
968
|
+
* - `children`: classes applied to child elements (use `& .className` selector)
|
|
969
|
+
*
|
|
970
|
+
* These are spread into the gridClasses utility object and used for CSS-in-JS overrides.
|
|
971
|
+
*
|
|
972
|
+
* Only include class names here that are NOT applied via `styled` components.
|
|
973
|
+
* For `styled` components, declare overrides directly in the component definition.
|
|
974
|
+
*/
|
|
975
|
+
export declare const gridClassesOverrides: {
|
|
976
|
+
readonly root: ["autoHeight", "autosizing", "root--densityStandard", "root--densityComfortable", "root--densityCompact", "root--disableUserSelection", "root--noToolbar", "withVerticalBorder"];
|
|
977
|
+
readonly children: ["actionsCell", "booleanCell", "cell", "cell--editable", "cell--editing", "cell--flex", "cell--pinnedLeft", "cell--pinnedRight", "cell--rangeBottom", "cell--rangeLeft", "cell--rangeRight", "cell--rangeTop", "cell--selectionMode", "cell--textCenter", "cell--textLeft", "cell--textRight", "cell--withLeftBorder", "cell--withRightBorder", "cellCheckbox", "cellEmpty", "cellOffsetLeft", "cellSkeleton", "checkboxInput", "columnHeader", "columnHeader--alignCenter", "columnHeader--alignLeft", "columnHeader--alignRight", "columnHeader--dragging", "columnHeader--emptyGroup", "columnHeader--filledGroup", "columnHeader--filtered", "columnHeader--last", "columnHeader--moving", "columnHeader--numeric", "columnHeader--pinnedLeft", "columnHeader--pinnedRight", "columnHeader--siblingFocused", "columnHeader--sortable", "columnHeader--sorted", "columnHeader--withLeftBorder", "columnHeader--withRightBorder", "columnHeaderCheckbox", "columnHeaderDraggableContainer", "columnHeaderTitleContainer", "columnHeaderTitleContainerContent", "columnSeparator", "columnSeparator--resizable", "columnSeparator--resizing", "columnSeparator--sideLeft", "columnSeparator--sideRight", "container--bottom", "container--top", "detailPanelToggleCell", "detailPanelToggleCell--expanded", "editBooleanCell", "filterIcon", "filler--borderBottom", "filler--pinnedLeft", "filler--pinnedRight", "groupingCriteriaCell", "groupingCriteriaCellLoadingContainer", "groupingCriteriaCellToggle", "headerFilterRow", "iconSeparator", "menuIcon", "menuIconButton", "menuList", "menuOpen", "overlayWrapperInner", "pinnedRows", "pinnedRows--bottom", "pinnedRows--top", "row", "row--borderBottom", "row--detailPanelExpanded", "row--dragging", "row--dynamicHeight", "row--editable", "row--editing", "row--firstVisible", "row--lastVisible", "rowReorderCell", "rowReorderCell--draggable", "rowReorderCellContainer", "rowReorderCellPlaceholder", "rowSkeleton", "scrollbar", "scrollbar--horizontal", "scrollbar--vertical", "scrollbarFiller", "scrollbarFiller--pinnedRight", "sortIcon", "treeDataGroupingCell", "treeDataGroupingCellLoadingContainer", "treeDataGroupingCellToggle", "withBorderColor", "row--beingDragged"];
|
|
978
|
+
};
|
|
963
979
|
export declare const gridClasses: Record<keyof GridClasses, string>;
|
|
@@ -3,6 +3,23 @@ import generateUtilityClasses from '@mui/utils/generateUtilityClasses';
|
|
|
3
3
|
export function getDataGridUtilityClass(slot) {
|
|
4
4
|
return generateUtilityClass('MuiDataGrid', slot);
|
|
5
5
|
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Class groups for the MuiDataGrid component used in GridRootStyles overridesResolver.
|
|
9
|
+
*
|
|
10
|
+
* Splits classes into two groups to support style overrides:
|
|
11
|
+
* - `root`: classes applied directly to the root element (use `&.className` selector)
|
|
12
|
+
* - `children`: classes applied to child elements (use `& .className` selector)
|
|
13
|
+
*
|
|
14
|
+
* These are spread into the gridClasses utility object and used for CSS-in-JS overrides.
|
|
15
|
+
*
|
|
16
|
+
* Only include class names here that are NOT applied via `styled` components.
|
|
17
|
+
* For `styled` components, declare overrides directly in the component definition.
|
|
18
|
+
*/
|
|
19
|
+
export const gridClassesOverrides = {
|
|
20
|
+
root: ['autoHeight', 'autosizing', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'root--noToolbar', 'withVerticalBorder'],
|
|
21
|
+
children: ['actionsCell', 'booleanCell', 'cell', 'cell--editable', 'cell--editing', 'cell--flex', 'cell--pinnedLeft', 'cell--pinnedRight', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell--rangeTop', 'cell--selectionMode', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--withLeftBorder', 'cell--withRightBorder', 'cellCheckbox', 'cellEmpty', 'cellOffsetLeft', 'cellSkeleton', 'checkboxInput', 'columnHeader', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--emptyGroup', 'columnHeader--filledGroup', 'columnHeader--filtered', 'columnHeader--last', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--pinnedLeft', 'columnHeader--pinnedRight', 'columnHeader--siblingFocused', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--withLeftBorder', 'columnHeader--withRightBorder', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnSeparator', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'container--bottom', 'container--top', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'editBooleanCell', 'filterIcon', 'filler--borderBottom', 'filler--pinnedLeft', 'filler--pinnedRight', 'groupingCriteriaCell', 'groupingCriteriaCellLoadingContainer', 'groupingCriteriaCellToggle', 'headerFilterRow', 'iconSeparator', 'menuIcon', 'menuIconButton', 'menuList', 'menuOpen', 'overlayWrapperInner', 'pinnedRows', 'pinnedRows--bottom', 'pinnedRows--top', 'row', 'row--borderBottom', 'row--detailPanelExpanded',
|
|
22
|
+
// TODO v9: Rename to `cell--dragging`
|
|
23
|
+
'row--dragging', 'row--dynamicHeight', 'row--editable', 'row--editing', 'row--firstVisible', 'row--lastVisible', 'rowReorderCell', 'rowReorderCell--draggable', 'rowReorderCellContainer', 'rowReorderCellPlaceholder', 'rowSkeleton', 'scrollbar', 'scrollbar--horizontal', 'scrollbar--vertical', 'scrollbarFiller', 'scrollbarFiller--pinnedRight', 'sortIcon', 'treeDataGroupingCell', 'treeDataGroupingCellLoadingContainer', 'treeDataGroupingCellToggle', 'withBorderColor', 'row--beingDragged']
|
|
24
|
+
};
|
|
25
|
+
export const gridClasses = generateUtilityClasses('MuiDataGrid', [...gridClassesOverrides.root, ...gridClassesOverrides.children, 'aiAssistantPanel', 'aiAssistantPanelHeader', 'aiAssistantPanelTitleContainer', 'aiAssistantPanelTitle', 'aiAssistantPanelBody', 'aiAssistantPanelEmptyText', 'aiAssistantPanelFooter', 'aiAssistantPanelConversation', 'aiAssistantPanelConversationList', 'aiAssistantPanelConversationTitle', 'aiAssistantPanelSuggestions', 'aiAssistantPanelSuggestionsList', 'aiAssistantPanelSuggestionsItem', 'aiAssistantPanelSuggestionsLabel', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'aggregationRowOverlayWrapper', 'mainContent', 'withSidePanel', 'collapsible', 'collapsibleTrigger', 'collapsibleIcon', 'collapsiblePanel', 'columnHeader--filter', 'columnHeaderFilterInput', 'columnHeaderFilterOperatorLabel', 'columnHeaderTitle', 'columnHeaders', 'columnsManagement', 'columnsManagementRow', 'columnsManagementHeader', 'columnsManagementSearchInput', 'columnsManagementFooter', 'columnsManagementScrollArea', 'columnsManagementEmptyText', 'detailPanel', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editInputCell', 'longTextCell', 'longTextCellContent', 'longTextCellExpandButton', 'longTextCellCollapseButton', 'longTextCellPopup', 'longTextCellPopperContent', 'editLongTextCell', 'editLongTextCellValue', 'editLongTextCellPopup', 'editLongTextCellPopperContent', 'editLongTextCellTextarea', 'filler', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'footerContainer', 'iconButtonContainer', 'main', 'main--hasPinnedRight', 'main--hiddenContent', 'menu', 'overlay', 'overlayWrapper', 'root', 'rowCount', 'rowReorderIcon', 'scrollArea--left', 'scrollArea--right', 'scrollArea--up', 'scrollArea--down', 'scrollArea', 'scrollShadow', 'scrollShadow--vertical', 'scrollShadow--horizontal', 'selectedRowCount', 'sortButton', 'shadowScrollArea', 'sidebar', 'sidebarHeader', 'toolbarContainer', 'toolbar', 'toolbarLabel', 'toolbarDivider', 'toolbarFilterList', 'toolbarQuickFilter', 'toolbarQuickFilterTrigger', 'toolbarQuickFilterControl', 'virtualScroller', 'virtualScroller--hasScrollX', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pivotPanelAvailableFields', 'pivotPanelField', 'pivotPanelField--sorted', 'pivotPanelFieldActionContainer', 'pivotPanelFieldCheckbox', 'pivotPanelFieldDragIcon', 'pivotPanelFieldList', 'pivotPanelFieldName', 'pivotPanelHeader', 'pivotPanelPlaceholder', 'pivotPanelScrollArea', 'pivotPanelSearchContainer', 'pivotPanelSection', 'pivotPanelSectionTitle', 'pivotPanelSections', 'pivotPanelSwitch', 'pivotPanelSwitchLabel', 'prompt', 'promptContent', 'promptText', 'promptFeedback', 'promptChangeList', 'promptChangesToggle', 'promptChangesToggleIcon', 'promptIcon', 'promptIconContainer', 'promptError', 'promptAction', 'resizablePanelHandle', 'resizablePanelHandle--horizontal', 'resizablePanelHandle--vertical']);
|
package/esm/constants/index.d.ts
CHANGED
package/esm/constants/index.js
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { createSelector, createSelectorMemoized, createRootSelector } from "../../../utils/createSelector.js";
|
|
2
2
|
import { EMPTY_PINNED_COLUMN_FIELDS } from "./gridColumnsInterfaces.js";
|
|
3
|
-
import { gridIsRtlSelector } from "../../core/gridCoreSelector.js";
|
|
4
3
|
import { gridListColumnSelector, gridListViewSelector } from "../listView/index.js";
|
|
5
4
|
|
|
6
5
|
/**
|
|
@@ -65,24 +64,24 @@ export const gridPinnedColumnsSelector = createRootSelector(state => state.pinne
|
|
|
65
64
|
* @category Pinned Columns
|
|
66
65
|
* @ignore - Do not document
|
|
67
66
|
*/
|
|
68
|
-
export const gridExistingPinnedColumnSelector = createSelectorMemoized(gridPinnedColumnsSelector, gridColumnFieldsSelector,
|
|
67
|
+
export const gridExistingPinnedColumnSelector = createSelectorMemoized(gridPinnedColumnsSelector, gridColumnFieldsSelector, (model, orderedFields) => filterMissingColumns(model, orderedFields));
|
|
69
68
|
|
|
70
69
|
/**
|
|
71
70
|
* Get the visible pinned columns.
|
|
72
71
|
* @category Visible Columns
|
|
73
72
|
*/
|
|
74
|
-
export const gridVisiblePinnedColumnDefinitionsSelector = createSelectorMemoized(gridColumnsStateSelector, gridPinnedColumnsSelector, gridVisibleColumnFieldsSelector,
|
|
73
|
+
export const gridVisiblePinnedColumnDefinitionsSelector = createSelectorMemoized(gridColumnsStateSelector, gridPinnedColumnsSelector, gridVisibleColumnFieldsSelector, gridListViewSelector, (columnsState, model, visibleColumnFields, listView) => {
|
|
75
74
|
if (listView) {
|
|
76
75
|
return EMPTY_PINNED_COLUMN_FIELDS;
|
|
77
76
|
}
|
|
78
|
-
const visiblePinnedFields = filterMissingColumns(model, visibleColumnFields
|
|
77
|
+
const visiblePinnedFields = filterMissingColumns(model, visibleColumnFields);
|
|
79
78
|
const visiblePinnedColumns = {
|
|
80
79
|
left: visiblePinnedFields.left.map(field => columnsState.lookup[field]),
|
|
81
80
|
right: visiblePinnedFields.right.map(field => columnsState.lookup[field])
|
|
82
81
|
};
|
|
83
82
|
return visiblePinnedColumns;
|
|
84
83
|
});
|
|
85
|
-
function filterMissingColumns(pinnedColumns, columns
|
|
84
|
+
function filterMissingColumns(pinnedColumns, columns) {
|
|
86
85
|
if (!Array.isArray(pinnedColumns.left) && !Array.isArray(pinnedColumns.right)) {
|
|
87
86
|
return EMPTY_PINNED_COLUMN_FIELDS;
|
|
88
87
|
}
|
|
@@ -96,16 +95,8 @@ function filterMissingColumns(pinnedColumns, columns, invert) {
|
|
|
96
95
|
return newPinnedColumns.filter(field => remainingColumns.includes(field));
|
|
97
96
|
};
|
|
98
97
|
const leftPinnedColumns = filter(pinnedColumns.left, columns);
|
|
99
|
-
const columnsWithoutLeftPinnedColumns = columns.filter(
|
|
100
|
-
// Filter out from the remaining columns those columns already pinned to the left
|
|
101
|
-
field => !leftPinnedColumns.includes(field));
|
|
98
|
+
const columnsWithoutLeftPinnedColumns = columns.filter(field => !leftPinnedColumns.includes(field));
|
|
102
99
|
const rightPinnedColumns = filter(pinnedColumns.right, columnsWithoutLeftPinnedColumns);
|
|
103
|
-
if (invert) {
|
|
104
|
-
return {
|
|
105
|
-
left: rightPinnedColumns,
|
|
106
|
-
right: leftPinnedColumns
|
|
107
|
-
};
|
|
108
|
-
}
|
|
109
100
|
return {
|
|
110
101
|
left: leftPinnedColumns,
|
|
111
102
|
right: rightPinnedColumns
|
|
@@ -253,9 +253,10 @@ export const useGridDataSourceBase = (apiRef, props, options = {}) => {
|
|
|
253
253
|
};
|
|
254
254
|
const debouncedFetchRows = React.useMemo(() => debounce(fetchRows, 0), [fetchRows]);
|
|
255
255
|
const handleFetchRowsOnParamsChange = React.useCallback(() => {
|
|
256
|
+
apiRef.current.setRows([]);
|
|
256
257
|
stopPolling();
|
|
257
258
|
debouncedFetchRows();
|
|
258
|
-
}, [stopPolling, debouncedFetchRows]);
|
|
259
|
+
}, [stopPolling, debouncedFetchRows, apiRef]);
|
|
259
260
|
const isFirstRender = React.useRef(true);
|
|
260
261
|
React.useEffect(() => {
|
|
261
262
|
if (isFirstRender.current) {
|
|
@@ -403,11 +403,15 @@ export const useGridRowEditing = (apiRef, props) => {
|
|
|
403
403
|
updateRowInRowModesModel(id, null);
|
|
404
404
|
delete prevRowValuesLookup.current[id];
|
|
405
405
|
};
|
|
406
|
-
if (ignoreModifications) {
|
|
406
|
+
if (ignoreModifications && apiRef.current.getRow(id)) {
|
|
407
407
|
finishRowEditMode();
|
|
408
408
|
return;
|
|
409
409
|
}
|
|
410
410
|
const editingState = gridEditRowsStateSelector(apiRef);
|
|
411
|
+
if (!editingState[id]) {
|
|
412
|
+
finishRowEditMode();
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
411
415
|
const row = prevRowValuesLookup.current[id];
|
|
412
416
|
const isSomeFieldProcessingProps = Object.values(editingState[id]).some(fieldProps => fieldProps.isProcessingProps);
|
|
413
417
|
if (isSomeFieldProcessingProps) {
|
|
@@ -466,14 +470,18 @@ export const useGridRowEditing = (apiRef, props) => {
|
|
|
466
470
|
Promise.resolve(processRowUpdate(rowUpdate, row, {
|
|
467
471
|
rowId: id
|
|
468
472
|
})).then(finalRowUpdate => {
|
|
469
|
-
apiRef.current.
|
|
473
|
+
if (apiRef.current.getRow(id)) {
|
|
474
|
+
apiRef.current.updateRows([finalRowUpdate]);
|
|
475
|
+
}
|
|
470
476
|
finishRowEditMode();
|
|
471
477
|
}).catch(handleError);
|
|
472
478
|
} catch (errorThrown) {
|
|
473
479
|
handleError(errorThrown);
|
|
474
480
|
}
|
|
475
481
|
} else {
|
|
476
|
-
apiRef.current.
|
|
482
|
+
if (apiRef.current.getRow(id)) {
|
|
483
|
+
apiRef.current.updateRows([rowUpdate]);
|
|
484
|
+
}
|
|
477
485
|
finishRowEditMode();
|
|
478
486
|
}
|
|
479
487
|
});
|
|
@@ -641,5 +649,5 @@ export const useGridRowEditing = (apiRef, props) => {
|
|
|
641
649
|
}, params));
|
|
642
650
|
}
|
|
643
651
|
});
|
|
644
|
-
}, [apiRef, rowModesModel, updateStateToStartRowEditMode, updateStateToStopRowEditMode]);
|
|
652
|
+
}, [apiRef, rowModesModel, updateOrDeleteRowState, updateStateToStartRowEditMode, updateStateToStopRowEditMode, updateRowInRowModesModel]);
|
|
645
653
|
};
|
package/esm/index.js
CHANGED
|
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
exports.gridVisiblePinnedColumnDefinitionsSelector = exports.gridVisibleColumnFieldsSelector = exports.gridVisibleColumnDefinitionsSelector = exports.gridPinnedColumnsSelector = exports.gridInitialColumnVisibilityModelSelector = exports.gridHasColSpanSelector = exports.gridFilterableColumnLookupSelector = exports.gridFilterableColumnDefinitionsSelector = exports.gridExistingPinnedColumnSelector = exports.gridColumnsStateSelector = exports.gridColumnVisibilityModelSelector = exports.gridColumnPositionsSelector = exports.gridColumnLookupSelector = exports.gridColumnFieldsSelector = exports.gridColumnDefinitionsSelector = void 0;
|
|
7
7
|
var _createSelector = require("../../../utils/createSelector");
|
|
8
8
|
var _gridColumnsInterfaces = require("./gridColumnsInterfaces");
|
|
9
|
-
var _gridCoreSelector = require("../../core/gridCoreSelector");
|
|
10
9
|
var _listView = require("../listView");
|
|
11
10
|
/**
|
|
12
11
|
* Get the columns state
|
|
@@ -70,24 +69,24 @@ const gridPinnedColumnsSelector = exports.gridPinnedColumnsSelector = (0, _creat
|
|
|
70
69
|
* @category Pinned Columns
|
|
71
70
|
* @ignore - Do not document
|
|
72
71
|
*/
|
|
73
|
-
const gridExistingPinnedColumnSelector = exports.gridExistingPinnedColumnSelector = (0, _createSelector.createSelectorMemoized)(gridPinnedColumnsSelector, gridColumnFieldsSelector,
|
|
72
|
+
const gridExistingPinnedColumnSelector = exports.gridExistingPinnedColumnSelector = (0, _createSelector.createSelectorMemoized)(gridPinnedColumnsSelector, gridColumnFieldsSelector, (model, orderedFields) => filterMissingColumns(model, orderedFields));
|
|
74
73
|
|
|
75
74
|
/**
|
|
76
75
|
* Get the visible pinned columns.
|
|
77
76
|
* @category Visible Columns
|
|
78
77
|
*/
|
|
79
|
-
const gridVisiblePinnedColumnDefinitionsSelector = exports.gridVisiblePinnedColumnDefinitionsSelector = (0, _createSelector.createSelectorMemoized)(gridColumnsStateSelector, gridPinnedColumnsSelector, gridVisibleColumnFieldsSelector,
|
|
78
|
+
const gridVisiblePinnedColumnDefinitionsSelector = exports.gridVisiblePinnedColumnDefinitionsSelector = (0, _createSelector.createSelectorMemoized)(gridColumnsStateSelector, gridPinnedColumnsSelector, gridVisibleColumnFieldsSelector, _listView.gridListViewSelector, (columnsState, model, visibleColumnFields, listView) => {
|
|
80
79
|
if (listView) {
|
|
81
80
|
return _gridColumnsInterfaces.EMPTY_PINNED_COLUMN_FIELDS;
|
|
82
81
|
}
|
|
83
|
-
const visiblePinnedFields = filterMissingColumns(model, visibleColumnFields
|
|
82
|
+
const visiblePinnedFields = filterMissingColumns(model, visibleColumnFields);
|
|
84
83
|
const visiblePinnedColumns = {
|
|
85
84
|
left: visiblePinnedFields.left.map(field => columnsState.lookup[field]),
|
|
86
85
|
right: visiblePinnedFields.right.map(field => columnsState.lookup[field])
|
|
87
86
|
};
|
|
88
87
|
return visiblePinnedColumns;
|
|
89
88
|
});
|
|
90
|
-
function filterMissingColumns(pinnedColumns, columns
|
|
89
|
+
function filterMissingColumns(pinnedColumns, columns) {
|
|
91
90
|
if (!Array.isArray(pinnedColumns.left) && !Array.isArray(pinnedColumns.right)) {
|
|
92
91
|
return _gridColumnsInterfaces.EMPTY_PINNED_COLUMN_FIELDS;
|
|
93
92
|
}
|
|
@@ -101,16 +100,8 @@ function filterMissingColumns(pinnedColumns, columns, invert) {
|
|
|
101
100
|
return newPinnedColumns.filter(field => remainingColumns.includes(field));
|
|
102
101
|
};
|
|
103
102
|
const leftPinnedColumns = filter(pinnedColumns.left, columns);
|
|
104
|
-
const columnsWithoutLeftPinnedColumns = columns.filter(
|
|
105
|
-
// Filter out from the remaining columns those columns already pinned to the left
|
|
106
|
-
field => !leftPinnedColumns.includes(field));
|
|
103
|
+
const columnsWithoutLeftPinnedColumns = columns.filter(field => !leftPinnedColumns.includes(field));
|
|
107
104
|
const rightPinnedColumns = filter(pinnedColumns.right, columnsWithoutLeftPinnedColumns);
|
|
108
|
-
if (invert) {
|
|
109
|
-
return {
|
|
110
|
-
left: rightPinnedColumns,
|
|
111
|
-
right: leftPinnedColumns
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
105
|
return {
|
|
115
106
|
left: leftPinnedColumns,
|
|
116
107
|
right: rightPinnedColumns
|
|
@@ -260,9 +260,10 @@ const useGridDataSourceBase = (apiRef, props, options = {}) => {
|
|
|
260
260
|
};
|
|
261
261
|
const debouncedFetchRows = React.useMemo(() => (0, _debounce.default)(fetchRows, 0), [fetchRows]);
|
|
262
262
|
const handleFetchRowsOnParamsChange = React.useCallback(() => {
|
|
263
|
+
apiRef.current.setRows([]);
|
|
263
264
|
stopPolling();
|
|
264
265
|
debouncedFetchRows();
|
|
265
|
-
}, [stopPolling, debouncedFetchRows]);
|
|
266
|
+
}, [stopPolling, debouncedFetchRows, apiRef]);
|
|
266
267
|
const isFirstRender = React.useRef(true);
|
|
267
268
|
React.useEffect(() => {
|
|
268
269
|
if (isFirstRender.current) {
|
|
@@ -410,11 +410,15 @@ const useGridRowEditing = (apiRef, props) => {
|
|
|
410
410
|
updateRowInRowModesModel(id, null);
|
|
411
411
|
delete prevRowValuesLookup.current[id];
|
|
412
412
|
};
|
|
413
|
-
if (ignoreModifications) {
|
|
413
|
+
if (ignoreModifications && apiRef.current.getRow(id)) {
|
|
414
414
|
finishRowEditMode();
|
|
415
415
|
return;
|
|
416
416
|
}
|
|
417
417
|
const editingState = (0, _gridEditingSelectors.gridEditRowsStateSelector)(apiRef);
|
|
418
|
+
if (!editingState[id]) {
|
|
419
|
+
finishRowEditMode();
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
418
422
|
const row = prevRowValuesLookup.current[id];
|
|
419
423
|
const isSomeFieldProcessingProps = Object.values(editingState[id]).some(fieldProps => fieldProps.isProcessingProps);
|
|
420
424
|
if (isSomeFieldProcessingProps) {
|
|
@@ -473,14 +477,18 @@ const useGridRowEditing = (apiRef, props) => {
|
|
|
473
477
|
Promise.resolve(processRowUpdate(rowUpdate, row, {
|
|
474
478
|
rowId: id
|
|
475
479
|
})).then(finalRowUpdate => {
|
|
476
|
-
apiRef.current.
|
|
480
|
+
if (apiRef.current.getRow(id)) {
|
|
481
|
+
apiRef.current.updateRows([finalRowUpdate]);
|
|
482
|
+
}
|
|
477
483
|
finishRowEditMode();
|
|
478
484
|
}).catch(handleError);
|
|
479
485
|
} catch (errorThrown) {
|
|
480
486
|
handleError(errorThrown);
|
|
481
487
|
}
|
|
482
488
|
} else {
|
|
483
|
-
apiRef.current.
|
|
489
|
+
if (apiRef.current.getRow(id)) {
|
|
490
|
+
apiRef.current.updateRows([rowUpdate]);
|
|
491
|
+
}
|
|
484
492
|
finishRowEditMode();
|
|
485
493
|
}
|
|
486
494
|
});
|
|
@@ -648,6 +656,6 @@ const useGridRowEditing = (apiRef, props) => {
|
|
|
648
656
|
}, params));
|
|
649
657
|
}
|
|
650
658
|
});
|
|
651
|
-
}, [apiRef, rowModesModel, updateStateToStartRowEditMode, updateStateToStopRowEditMode]);
|
|
659
|
+
}, [apiRef, rowModesModel, updateOrDeleteRowState, updateStateToStartRowEditMode, updateStateToStopRowEditMode, updateRowInRowModesModel]);
|
|
652
660
|
};
|
|
653
661
|
exports.useGridRowEditing = useGridRowEditing;
|
package/index.js
CHANGED