@mui/x-data-grid 9.10.0 → 9.10.1
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 +106 -0
- package/components/cell/GridEditInputCell.js +1 -1
- package/components/cell/GridEditInputCell.mjs +1 -1
- package/components/cell/GridEditLongTextCell.js +1 -1
- package/components/cell/GridEditLongTextCell.mjs +1 -1
- package/hooks/features/columnResize/useGridColumnResize.js +3 -0
- package/hooks/features/columnResize/useGridColumnResize.mjs +3 -0
- package/hooks/features/columns/useGridColumns.js +5 -1
- package/hooks/features/columns/useGridColumns.mjs +5 -1
- package/hooks/features/editing/useGridCellEditing.js +9 -3
- package/hooks/features/editing/useGridCellEditing.mjs +9 -3
- package/hooks/features/editing/useGridRowEditing.js +7 -5
- package/hooks/features/editing/useGridRowEditing.mjs +7 -5
- package/hooks/features/filter/useGridFilter.js +1 -1
- package/hooks/features/filter/useGridFilter.mjs +1 -1
- package/hooks/features/rows/useGridParamsApi.d.mts +1 -1
- package/hooks/features/rows/useGridParamsApi.d.ts +1 -1
- package/hooks/features/rows/useGridParamsApi.js +1 -0
- package/hooks/features/rows/useGridParamsApi.mjs +1 -0
- package/hooks/features/sorting/useGridSorting.js +3 -0
- package/hooks/features/sorting/useGridSorting.mjs +3 -0
- package/index.js +1 -1
- package/index.mjs +1 -1
- package/models/api/gridColumnApi.d.mts +2 -2
- package/models/api/gridColumnApi.d.ts +2 -2
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,111 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 9.10.1
|
|
4
|
+
|
|
5
|
+
_Jul 23, 2026_
|
|
6
|
+
|
|
7
|
+
We'd like to extend a big thank you to the 11 contributors who made this release possible. Here are some highlights ✨:
|
|
8
|
+
|
|
9
|
+
- 🦮 Improve accessibility of the Charts and Pickers components.
|
|
10
|
+
- 🐞 Bugfixes
|
|
11
|
+
- 📚 Documentation improvements
|
|
12
|
+
|
|
13
|
+
Special thanks go out to these community members for their valuable contributions:
|
|
14
|
+
@kevincorizi-sbt, @mustafajw07, @SamanPandey-in
|
|
15
|
+
|
|
16
|
+
The following team members contributed to this release:
|
|
17
|
+
@brijeshb42, @hasdfa, @JCQuintas, @LukasTy, @michelengelen, @noraleonte, @rita-codes, @silviuaavram
|
|
18
|
+
|
|
19
|
+
### Data Grid
|
|
20
|
+
|
|
21
|
+
#### `@mui/x-data-grid@9.10.1`
|
|
22
|
+
|
|
23
|
+
- [data grid] Fix `getColumn` return type not reflecting that it can return undefined (#23165) @JCQuintas
|
|
24
|
+
|
|
25
|
+
#### `@mui/x-data-grid-pro@9.10.1` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
26
|
+
|
|
27
|
+
Same changes as in `@mui/x-data-grid@9.10.1`.
|
|
28
|
+
|
|
29
|
+
#### `@mui/x-data-grid-premium@9.10.1` [](https://mui.com/r/x-premium-svg-link 'Premium plan')
|
|
30
|
+
|
|
31
|
+
Same changes as in `@mui/x-data-grid-pro@9.10.1`.
|
|
32
|
+
|
|
33
|
+
### Date and Time Pickers
|
|
34
|
+
|
|
35
|
+
#### `@mui/x-date-pickers@9.10.1`
|
|
36
|
+
|
|
37
|
+
- [pickers] Fix format placeholder brightness with a start adornment (#23189) @LukasTy
|
|
38
|
+
|
|
39
|
+
#### `@mui/x-date-pickers-pro@9.10.1` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
40
|
+
|
|
41
|
+
Same changes as in `@mui/x-date-pickers@9.10.1`, plus:
|
|
42
|
+
|
|
43
|
+
- [DateRangePicker] Fix broken active range position underline in single input range fields (#23166) @LukasTy
|
|
44
|
+
|
|
45
|
+
### Charts
|
|
46
|
+
|
|
47
|
+
#### `@mui/x-charts@9.10.1`
|
|
48
|
+
|
|
49
|
+
- [charts] Fix pie chart disappearing when an arc spans almost the full circle (#23145) @JCQuintas
|
|
50
|
+
- [charts] Set `aria-hidden` on accessibility proxy divs at initialization (#23186) @kevincorizi-sbt
|
|
51
|
+
- [charts] Fix keyboard navigation on series with different lengths (#23182) @JCQuintas
|
|
52
|
+
- [charts] Fix out of bounds keyboard navigation (#23180) @silviuaavram
|
|
53
|
+
|
|
54
|
+
#### `@mui/x-charts-pro@9.10.1` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
55
|
+
|
|
56
|
+
Same changes as in `@mui/x-charts@9.10.1`, plus:
|
|
57
|
+
|
|
58
|
+
- [charts-pro] Fix highlight shifting on sampled bar charts (#23190) @noraleonte
|
|
59
|
+
- [charts-pro] Sampled band highlight falls back to single-band width for Date/object values (#23024) @SamanPandey-in
|
|
60
|
+
|
|
61
|
+
#### `@mui/x-charts-premium@9.10.1` [](https://mui.com/r/x-premium-svg-link 'Premium plan')
|
|
62
|
+
|
|
63
|
+
Same changes as in `@mui/x-charts-pro@9.10.1`.
|
|
64
|
+
|
|
65
|
+
### Tree View
|
|
66
|
+
|
|
67
|
+
#### `@mui/x-tree-view@9.10.1`
|
|
68
|
+
|
|
69
|
+
- [TreeView] Fix selection propagation to exclude disabled items (#23012) @michelengelen
|
|
70
|
+
|
|
71
|
+
#### `@mui/x-tree-view-pro@9.10.1` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
72
|
+
|
|
73
|
+
Same changes as in `@mui/x-tree-view@9.10.1`.
|
|
74
|
+
|
|
75
|
+
### Scheduler
|
|
76
|
+
|
|
77
|
+
#### `@mui/x-scheduler@9.0.0-beta.7`
|
|
78
|
+
|
|
79
|
+
- [scheduler] Polish `EventCalendar` rendering for multi-resource events (#23161) @mustafajw07
|
|
80
|
+
- [scheduler] Responsive header (#22954) @noraleonte
|
|
81
|
+
|
|
82
|
+
#### `@mui/x-scheduler-premium@9.0.0-beta.7` [](https://mui.com/r/x-premium-svg-link 'Premium plan')
|
|
83
|
+
|
|
84
|
+
Same changes as in `@mui/x-scheduler@9.0.0-beta.7`, plus:
|
|
85
|
+
|
|
86
|
+
- [scheduler-premium] Add the dependencies data model (#23117) @rita-codes
|
|
87
|
+
- [scheduler-premium] Dependencies - Render the FS arrow (#23162) @rita-codes
|
|
88
|
+
|
|
89
|
+
### Codemod
|
|
90
|
+
|
|
91
|
+
#### `@mui/x-codemod@9.10.1`
|
|
92
|
+
|
|
93
|
+
Internal changes.
|
|
94
|
+
|
|
95
|
+
### Docs
|
|
96
|
+
|
|
97
|
+
- [docs] Fix clearing, layout shift, and prop leak in Pickers demos (#23191) @LukasTy
|
|
98
|
+
|
|
99
|
+
### Core
|
|
100
|
+
|
|
101
|
+
- [code-infra] Validate working of specific code-infra canary (#23207) @brijeshb42
|
|
102
|
+
|
|
103
|
+
### Miscellaneous
|
|
104
|
+
|
|
105
|
+
- [chat] Normalize message part link URLs (#23187) @hasdfa
|
|
106
|
+
- [x-chat] Fix object URL leaks for submitted attachments (#23198) @hasdfa
|
|
107
|
+
- [internals] Make disposable types self-contained without `esnext.disposable` lib (#23164) @JCQuintas
|
|
108
|
+
|
|
3
109
|
## 9.10.0
|
|
4
110
|
|
|
5
111
|
_Jul 17, 2026_
|
|
@@ -64,7 +64,7 @@ const GridEditInputCell = exports.GridEditInputCell = (0, _forwardRef.forwardRef
|
|
|
64
64
|
const newValue = event.target.value;
|
|
65
65
|
const column = apiRef.current.getColumn(field);
|
|
66
66
|
let parsedValue = newValue;
|
|
67
|
-
if (column
|
|
67
|
+
if (column?.valueParser) {
|
|
68
68
|
parsedValue = column.valueParser(newValue, apiRef.current.getRow(id), column, apiRef);
|
|
69
69
|
}
|
|
70
70
|
setValueState(parsedValue);
|
|
@@ -57,7 +57,7 @@ const GridEditInputCell = forwardRef((props, ref) => {
|
|
|
57
57
|
const newValue = event.target.value;
|
|
58
58
|
const column = apiRef.current.getColumn(field);
|
|
59
59
|
let parsedValue = newValue;
|
|
60
|
-
if (column
|
|
60
|
+
if (column?.valueParser) {
|
|
61
61
|
parsedValue = column.valueParser(newValue, apiRef.current.getRow(id), column, apiRef);
|
|
62
62
|
}
|
|
63
63
|
setValueState(parsedValue);
|
|
@@ -274,7 +274,7 @@ function GridEditLongTextarea(props) {
|
|
|
274
274
|
const newValue = event.target.value;
|
|
275
275
|
const column = apiRef.current.getColumn(field);
|
|
276
276
|
let parsedValue = newValue;
|
|
277
|
-
if (column
|
|
277
|
+
if (column?.valueParser) {
|
|
278
278
|
parsedValue = column.valueParser(newValue, apiRef.current.getRow(id), column, apiRef);
|
|
279
279
|
}
|
|
280
280
|
setValueState(parsedValue);
|
|
@@ -266,7 +266,7 @@ function GridEditLongTextarea(props) {
|
|
|
266
266
|
const newValue = event.target.value;
|
|
267
267
|
const column = apiRef.current.getColumn(field);
|
|
268
268
|
let parsedValue = newValue;
|
|
269
|
-
if (column
|
|
269
|
+
if (column?.valueParser) {
|
|
270
270
|
parsedValue = column.valueParser(newValue, apiRef.current.getRow(id), column, apiRef);
|
|
271
271
|
}
|
|
272
272
|
setValueState(parsedValue);
|
|
@@ -450,6 +450,9 @@ const useGridColumnResize = (apiRef, props) => {
|
|
|
450
450
|
const columnHeaderElement = (0, _domUtils.findParentElementFromClassName)(event.target, _gridClasses.gridClasses.columnHeader);
|
|
451
451
|
const field = (0, _domUtils.getFieldFromHeaderElem)(columnHeaderElement);
|
|
452
452
|
const colDef = apiRef.current.getColumn(field);
|
|
453
|
+
if (!colDef) {
|
|
454
|
+
return;
|
|
455
|
+
}
|
|
453
456
|
logger.debug(`Start Resize on col ${colDef.field}`);
|
|
454
457
|
apiRef.current.publishEvent('columnResizeStart', {
|
|
455
458
|
field
|
|
@@ -442,6 +442,9 @@ export const useGridColumnResize = (apiRef, props) => {
|
|
|
442
442
|
const columnHeaderElement = findParentElementFromClassName(event.target, gridClasses.columnHeader);
|
|
443
443
|
const field = getFieldFromHeaderElem(columnHeaderElement);
|
|
444
444
|
const colDef = apiRef.current.getColumn(field);
|
|
445
|
+
if (!colDef) {
|
|
446
|
+
return;
|
|
447
|
+
}
|
|
445
448
|
logger.debug(`Start Resize on col ${colDef.field}`);
|
|
446
449
|
apiRef.current.publishEvent('columnResizeStart', {
|
|
447
450
|
field
|
|
@@ -137,6 +137,10 @@ function useGridColumns(apiRef, props) {
|
|
|
137
137
|
return allColumns.findIndex(col => col === field);
|
|
138
138
|
}, [apiRef]);
|
|
139
139
|
const setColumnIndex = React.useCallback((field, targetIndexPosition) => {
|
|
140
|
+
const column = apiRef.current.getColumn(field);
|
|
141
|
+
if (!column) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
140
144
|
const allColumns = (0, _gridColumnsSelector.gridColumnFieldsSelector)(apiRef);
|
|
141
145
|
const oldIndexPosition = getColumnIndexRelativeToVisibleColumns(field);
|
|
142
146
|
if (oldIndexPosition === targetIndexPosition) {
|
|
@@ -150,7 +154,7 @@ function useGridColumns(apiRef, props) {
|
|
|
150
154
|
orderedFields: updatedColumns
|
|
151
155
|
}));
|
|
152
156
|
const params = {
|
|
153
|
-
column
|
|
157
|
+
column,
|
|
154
158
|
targetIndex: apiRef.current.getColumnIndexRelativeToVisibleColumns(field),
|
|
155
159
|
oldIndex: oldIndexPosition
|
|
156
160
|
};
|
|
@@ -128,6 +128,10 @@ export function useGridColumns(apiRef, props) {
|
|
|
128
128
|
return allColumns.findIndex(col => col === field);
|
|
129
129
|
}, [apiRef]);
|
|
130
130
|
const setColumnIndex = React.useCallback((field, targetIndexPosition) => {
|
|
131
|
+
const column = apiRef.current.getColumn(field);
|
|
132
|
+
if (!column) {
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
131
135
|
const allColumns = gridColumnFieldsSelector(apiRef);
|
|
132
136
|
const oldIndexPosition = getColumnIndexRelativeToVisibleColumns(field);
|
|
133
137
|
if (oldIndexPosition === targetIndexPosition) {
|
|
@@ -141,7 +145,7 @@ export function useGridColumns(apiRef, props) {
|
|
|
141
145
|
orderedFields: updatedColumns
|
|
142
146
|
}));
|
|
143
147
|
const params = {
|
|
144
|
-
column
|
|
148
|
+
column,
|
|
145
149
|
targetIndex: apiRef.current.getColumnIndexRelativeToVisibleColumns(field),
|
|
146
150
|
oldIndex: oldIndexPosition
|
|
147
151
|
};
|
|
@@ -260,14 +260,17 @@ const useGridCellEditing = (apiRef, props) => {
|
|
|
260
260
|
deleteValue,
|
|
261
261
|
initialValue
|
|
262
262
|
} = params;
|
|
263
|
+
const column = apiRef.current.getColumn(field);
|
|
264
|
+
if (!column) {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
263
267
|
const value = apiRef.current.getCellValue(id, field);
|
|
264
268
|
let newValue = value;
|
|
265
269
|
if (deleteValue) {
|
|
266
|
-
newValue = (0, _utils2.getDefaultCellValue)(
|
|
270
|
+
newValue = (0, _utils2.getDefaultCellValue)(column);
|
|
267
271
|
} else if (initialValue) {
|
|
268
272
|
newValue = initialValue;
|
|
269
273
|
}
|
|
270
|
-
const column = apiRef.current.getColumn(field);
|
|
271
274
|
const shouldProcessEditCellProps = !!column.preProcessEditCellProps && deleteValue;
|
|
272
275
|
let newProps = {
|
|
273
276
|
value: newValue,
|
|
@@ -410,6 +413,9 @@ const useGridCellEditing = (apiRef, props) => {
|
|
|
410
413
|
throwIfNotEditable(id, field);
|
|
411
414
|
throwIfNotInMode(id, field, _gridEditRowModel.GridCellModes.Edit);
|
|
412
415
|
const column = apiRef.current.getColumn(field);
|
|
416
|
+
if (!column) {
|
|
417
|
+
return false;
|
|
418
|
+
}
|
|
413
419
|
const row = apiRef.current.getRow(id);
|
|
414
420
|
let parsedValue = value;
|
|
415
421
|
if (column.valueParser && !skipValueParser) {
|
|
@@ -461,7 +467,7 @@ const useGridCellEditing = (apiRef, props) => {
|
|
|
461
467
|
const {
|
|
462
468
|
value
|
|
463
469
|
} = editingState[id][field];
|
|
464
|
-
return column
|
|
470
|
+
return column?.valueSetter ? column.valueSetter(value, row, column, apiRef) : (0, _extends2.default)({}, row, {
|
|
465
471
|
[field]: value
|
|
466
472
|
});
|
|
467
473
|
}, [apiRef]);
|
|
@@ -253,14 +253,17 @@ export const useGridCellEditing = (apiRef, props) => {
|
|
|
253
253
|
deleteValue,
|
|
254
254
|
initialValue
|
|
255
255
|
} = params;
|
|
256
|
+
const column = apiRef.current.getColumn(field);
|
|
257
|
+
if (!column) {
|
|
258
|
+
return;
|
|
259
|
+
}
|
|
256
260
|
const value = apiRef.current.getCellValue(id, field);
|
|
257
261
|
let newValue = value;
|
|
258
262
|
if (deleteValue) {
|
|
259
|
-
newValue = getDefaultCellValue(
|
|
263
|
+
newValue = getDefaultCellValue(column);
|
|
260
264
|
} else if (initialValue) {
|
|
261
265
|
newValue = initialValue;
|
|
262
266
|
}
|
|
263
|
-
const column = apiRef.current.getColumn(field);
|
|
264
267
|
const shouldProcessEditCellProps = !!column.preProcessEditCellProps && deleteValue;
|
|
265
268
|
let newProps = {
|
|
266
269
|
value: newValue,
|
|
@@ -403,6 +406,9 @@ export const useGridCellEditing = (apiRef, props) => {
|
|
|
403
406
|
throwIfNotEditable(id, field);
|
|
404
407
|
throwIfNotInMode(id, field, GridCellModes.Edit);
|
|
405
408
|
const column = apiRef.current.getColumn(field);
|
|
409
|
+
if (!column) {
|
|
410
|
+
return false;
|
|
411
|
+
}
|
|
406
412
|
const row = apiRef.current.getRow(id);
|
|
407
413
|
let parsedValue = value;
|
|
408
414
|
if (column.valueParser && !skipValueParser) {
|
|
@@ -454,7 +460,7 @@ export const useGridCellEditing = (apiRef, props) => {
|
|
|
454
460
|
const {
|
|
455
461
|
value
|
|
456
462
|
} = editingState[id][field];
|
|
457
|
-
return column
|
|
463
|
+
return column?.valueSetter ? column.valueSetter(value, row, column, apiRef) : _extends({}, row, {
|
|
458
464
|
[field]: value
|
|
459
465
|
});
|
|
460
466
|
}, [apiRef]);
|
|
@@ -135,7 +135,7 @@ const useGridRowEditing = (apiRef, props) => {
|
|
|
135
135
|
} else if (event.key === 'Tab') {
|
|
136
136
|
const columnFields = (0, _gridColumnsSelector.gridVisibleColumnFieldsSelector)(apiRef).filter(field => {
|
|
137
137
|
const column = apiRef.current.getColumn(field);
|
|
138
|
-
if (column
|
|
138
|
+
if (column?.type === _colDef.GRID_ACTIONS_COLUMN_TYPE) {
|
|
139
139
|
return true;
|
|
140
140
|
}
|
|
141
141
|
return apiRef.current.isCellEditable(apiRef.current.getCellParams(params.id, field));
|
|
@@ -340,11 +340,10 @@ const useGridRowEditing = (apiRef, props) => {
|
|
|
340
340
|
if (!cellParams.isEditable) {
|
|
341
341
|
return acc;
|
|
342
342
|
}
|
|
343
|
-
const column = apiRef.current.getColumn(field);
|
|
344
343
|
let newValue = apiRef.current.getCellValue(id, field);
|
|
345
344
|
if (fieldToFocus === field && (deleteValue || initialValue)) {
|
|
346
345
|
if (deleteValue) {
|
|
347
|
-
newValue = (0, _utils2.getDefaultCellValue)(
|
|
346
|
+
newValue = (0, _utils2.getDefaultCellValue)(col);
|
|
348
347
|
} else if (initialValue) {
|
|
349
348
|
newValue = initialValue;
|
|
350
349
|
}
|
|
@@ -352,7 +351,7 @@ const useGridRowEditing = (apiRef, props) => {
|
|
|
352
351
|
acc[field] = {
|
|
353
352
|
value: newValue,
|
|
354
353
|
error: false,
|
|
355
|
-
isProcessingProps:
|
|
354
|
+
isProcessingProps: col.editable && !!col.preProcessEditCellProps && deleteValue
|
|
356
355
|
};
|
|
357
356
|
return acc;
|
|
358
357
|
}, {});
|
|
@@ -503,6 +502,9 @@ const useGridRowEditing = (apiRef, props) => {
|
|
|
503
502
|
} = params;
|
|
504
503
|
throwIfNotEditable(id, field);
|
|
505
504
|
const column = apiRef.current.getColumn(field);
|
|
505
|
+
if (!column) {
|
|
506
|
+
return Promise.resolve(false);
|
|
507
|
+
}
|
|
506
508
|
const row = apiRef.current.getRow(id);
|
|
507
509
|
let parsedValue = value;
|
|
508
510
|
if (column.valueParser && !skipValueParser) {
|
|
@@ -556,7 +558,7 @@ const useGridRowEditing = (apiRef, props) => {
|
|
|
556
558
|
return;
|
|
557
559
|
}
|
|
558
560
|
const fieldColumn = apiRef.current.getColumn(thisField);
|
|
559
|
-
if (!fieldColumn
|
|
561
|
+
if (!fieldColumn?.preProcessEditCellProps) {
|
|
560
562
|
return;
|
|
561
563
|
}
|
|
562
564
|
fieldProps = (0, _extends2.default)({}, fieldProps, {
|
|
@@ -128,7 +128,7 @@ export const useGridRowEditing = (apiRef, props) => {
|
|
|
128
128
|
} else if (event.key === 'Tab') {
|
|
129
129
|
const columnFields = gridVisibleColumnFieldsSelector(apiRef).filter(field => {
|
|
130
130
|
const column = apiRef.current.getColumn(field);
|
|
131
|
-
if (column
|
|
131
|
+
if (column?.type === GRID_ACTIONS_COLUMN_TYPE) {
|
|
132
132
|
return true;
|
|
133
133
|
}
|
|
134
134
|
return apiRef.current.isCellEditable(apiRef.current.getCellParams(params.id, field));
|
|
@@ -333,11 +333,10 @@ export const useGridRowEditing = (apiRef, props) => {
|
|
|
333
333
|
if (!cellParams.isEditable) {
|
|
334
334
|
return acc;
|
|
335
335
|
}
|
|
336
|
-
const column = apiRef.current.getColumn(field);
|
|
337
336
|
let newValue = apiRef.current.getCellValue(id, field);
|
|
338
337
|
if (fieldToFocus === field && (deleteValue || initialValue)) {
|
|
339
338
|
if (deleteValue) {
|
|
340
|
-
newValue = getDefaultCellValue(
|
|
339
|
+
newValue = getDefaultCellValue(col);
|
|
341
340
|
} else if (initialValue) {
|
|
342
341
|
newValue = initialValue;
|
|
343
342
|
}
|
|
@@ -345,7 +344,7 @@ export const useGridRowEditing = (apiRef, props) => {
|
|
|
345
344
|
acc[field] = {
|
|
346
345
|
value: newValue,
|
|
347
346
|
error: false,
|
|
348
|
-
isProcessingProps:
|
|
347
|
+
isProcessingProps: col.editable && !!col.preProcessEditCellProps && deleteValue
|
|
349
348
|
};
|
|
350
349
|
return acc;
|
|
351
350
|
}, {});
|
|
@@ -496,6 +495,9 @@ export const useGridRowEditing = (apiRef, props) => {
|
|
|
496
495
|
} = params;
|
|
497
496
|
throwIfNotEditable(id, field);
|
|
498
497
|
const column = apiRef.current.getColumn(field);
|
|
498
|
+
if (!column) {
|
|
499
|
+
return Promise.resolve(false);
|
|
500
|
+
}
|
|
499
501
|
const row = apiRef.current.getRow(id);
|
|
500
502
|
let parsedValue = value;
|
|
501
503
|
if (column.valueParser && !skipValueParser) {
|
|
@@ -549,7 +551,7 @@ export const useGridRowEditing = (apiRef, props) => {
|
|
|
549
551
|
return;
|
|
550
552
|
}
|
|
551
553
|
const fieldColumn = apiRef.current.getColumn(thisField);
|
|
552
|
-
if (!fieldColumn
|
|
554
|
+
if (!fieldColumn?.preProcessEditCellProps) {
|
|
553
555
|
return;
|
|
554
556
|
}
|
|
555
557
|
fieldProps = _extends({}, fieldProps, {
|
|
@@ -113,7 +113,7 @@ const useGridFilter = (apiRef, props, configuration) => {
|
|
|
113
113
|
return true;
|
|
114
114
|
}
|
|
115
115
|
const column = apiRef.current.getColumn(item.field);
|
|
116
|
-
const filterOperator = column
|
|
116
|
+
const filterOperator = column?.filterOperators?.find(operator => operator.value === item.operator);
|
|
117
117
|
const requiresFilterValue = typeof filterOperator?.requiresFilterValue === 'undefined' ? true : filterOperator?.requiresFilterValue;
|
|
118
118
|
|
|
119
119
|
// Operators like `isEmpty` don't have and don't require `item.value`.
|
|
@@ -104,7 +104,7 @@ export const useGridFilter = (apiRef, props, configuration) => {
|
|
|
104
104
|
return true;
|
|
105
105
|
}
|
|
106
106
|
const column = apiRef.current.getColumn(item.field);
|
|
107
|
-
const filterOperator = column
|
|
107
|
+
const filterOperator = column?.filterOperators?.find(operator => operator.value === item.operator);
|
|
108
108
|
const requiresFilterValue = typeof filterOperator?.requiresFilterValue === 'undefined' ? true : filterOperator?.requiresFilterValue;
|
|
109
109
|
|
|
110
110
|
// Operators like `isEmpty` don't have and don't require `item.value`.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { RefObject } from '@mui/x-internals/types';
|
|
2
2
|
import type { GridPrivateApiCommunity } from "../../../models/api/gridApiCommunity.mjs";
|
|
3
|
-
import type { DataGridProcessedProps } from "../../../models/props/DataGridProps.mjs";
|
|
4
3
|
import type { GridConfiguration } from "../../../models/configuration/gridConfiguration.mjs";
|
|
4
|
+
import type { DataGridProcessedProps } from "../../../models/props/DataGridProps.mjs";
|
|
5
5
|
/**
|
|
6
6
|
* @requires useGridColumns (method)
|
|
7
7
|
* @requires useGridRows (method)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { RefObject } from '@mui/x-internals/types';
|
|
2
2
|
import type { GridPrivateApiCommunity } from "../../../models/api/gridApiCommunity.js";
|
|
3
|
-
import type { DataGridProcessedProps } from "../../../models/props/DataGridProps.js";
|
|
4
3
|
import type { GridConfiguration } from "../../../models/configuration/gridConfiguration.js";
|
|
4
|
+
import type { DataGridProcessedProps } from "../../../models/props/DataGridProps.js";
|
|
5
5
|
/**
|
|
6
6
|
* @requires useGridColumns (method)
|
|
7
7
|
* @requires useGridRows (method)
|
|
@@ -76,6 +76,7 @@ function useGridParamsApi(apiRef, props, configuration) {
|
|
|
76
76
|
const cellTabIndex = (0, _gridFocusStateSelector.gridTabIndexCellSelector)(apiRef);
|
|
77
77
|
const cellMode = apiRef.current.getCellMode(id, field);
|
|
78
78
|
return apiRef.current.getCellParamsForRow(id, field, row, {
|
|
79
|
+
// Params keep a non-nullable `colDef`, but it can be `undefined` at runtime for an unknown field.
|
|
79
80
|
colDef: props.listView && props.listViewColumn?.field === field ? (0, _gridListViewSelectors.gridListColumnSelector)(apiRef) : apiRef.current.getColumn(field),
|
|
80
81
|
rowNode,
|
|
81
82
|
hasFocus: cellFocus !== null && cellFocus.field === field && cellFocus.id === id,
|
|
@@ -69,6 +69,7 @@ export function useGridParamsApi(apiRef, props, configuration) {
|
|
|
69
69
|
const cellTabIndex = gridTabIndexCellSelector(apiRef);
|
|
70
70
|
const cellMode = apiRef.current.getCellMode(id, field);
|
|
71
71
|
return apiRef.current.getCellParamsForRow(id, field, row, {
|
|
72
|
+
// Params keep a non-nullable `colDef`, but it can be `undefined` at runtime for an unknown field.
|
|
72
73
|
colDef: props.listView && props.listViewColumn?.field === field ? gridListColumnSelector(apiRef) : apiRef.current.getColumn(field),
|
|
73
74
|
rowNode,
|
|
74
75
|
hasFocus: cellFocus !== null && cellFocus.field === field && cellFocus.id === id,
|
|
@@ -120,6 +120,9 @@ const useGridSorting = (apiRef, props) => {
|
|
|
120
120
|
}, [apiRef, logger, props.disableMultipleColumnsSorting]);
|
|
121
121
|
const sortColumn = React.useCallback((field, direction, allowMultipleSorting) => {
|
|
122
122
|
const column = apiRef.current.getColumn(field);
|
|
123
|
+
if (!column) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
123
126
|
const sortItem = createSortItem(column, direction);
|
|
124
127
|
let sortModel;
|
|
125
128
|
if (!allowMultipleSorting || props.disableMultipleColumnsSorting) {
|
|
@@ -111,6 +111,9 @@ export const useGridSorting = (apiRef, props) => {
|
|
|
111
111
|
}, [apiRef, logger, props.disableMultipleColumnsSorting]);
|
|
112
112
|
const sortColumn = React.useCallback((field, direction, allowMultipleSorting) => {
|
|
113
113
|
const column = apiRef.current.getColumn(field);
|
|
114
|
+
if (!column) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
114
117
|
const sortItem = createSortItem(column, direction);
|
|
115
118
|
let sortModel;
|
|
116
119
|
if (!allowMultipleSorting || props.disableMultipleColumnsSorting) {
|
package/index.js
CHANGED
package/index.mjs
CHANGED
|
@@ -8,9 +8,9 @@ export interface GridColumnApi {
|
|
|
8
8
|
/**
|
|
9
9
|
* Returns the [[GridColDef]] for the given `field`.
|
|
10
10
|
* @param {string} field The column field.
|
|
11
|
-
* @returns {
|
|
11
|
+
* @returns {GridStateColDef | undefined} The [[GridStateColDef]], or `undefined` if the field is not in the current column set.
|
|
12
12
|
*/
|
|
13
|
-
getColumn: (field: string) => GridStateColDef;
|
|
13
|
+
getColumn: (field: string) => GridStateColDef | undefined;
|
|
14
14
|
/**
|
|
15
15
|
* Returns an array of [[GridColDef]] containing all the column definitions.
|
|
16
16
|
* @returns {GridStateColDef[]} An array of [[GridStateColDef]].
|
|
@@ -8,9 +8,9 @@ export interface GridColumnApi {
|
|
|
8
8
|
/**
|
|
9
9
|
* Returns the [[GridColDef]] for the given `field`.
|
|
10
10
|
* @param {string} field The column field.
|
|
11
|
-
* @returns {
|
|
11
|
+
* @returns {GridStateColDef | undefined} The [[GridStateColDef]], or `undefined` if the field is not in the current column set.
|
|
12
12
|
*/
|
|
13
|
-
getColumn: (field: string) => GridStateColDef;
|
|
13
|
+
getColumn: (field: string) => GridStateColDef | undefined;
|
|
14
14
|
/**
|
|
15
15
|
* Returns an array of [[GridColDef]] containing all the column definitions.
|
|
16
16
|
* @returns {GridStateColDef[]} An array of [[GridStateColDef]].
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mui/x-data-grid",
|
|
3
|
-
"version": "9.10.
|
|
3
|
+
"version": "9.10.1",
|
|
4
4
|
"author": "MUI Team",
|
|
5
5
|
"description": "The Community plan edition of the MUI X Data Grid components.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -43,8 +43,8 @@
|
|
|
43
43
|
"clsx": "^2.1.1",
|
|
44
44
|
"prop-types": "^15.8.1",
|
|
45
45
|
"use-sync-external-store": "^1.6.0",
|
|
46
|
-
"@mui/x-internals": "^9.10.
|
|
47
|
-
"@mui/x-virtualizer": "0.6.
|
|
46
|
+
"@mui/x-internals": "^9.10.1",
|
|
47
|
+
"@mui/x-virtualizer": "0.6.2"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
50
|
"@emotion/react": "^11.9.0",
|