@mui/x-data-grid 5.8.0 → 5.9.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 +141 -63
- package/DataGrid/DataGrid.js +1 -1
- package/DataGrid/useDataGridComponent.js +3 -1
- package/LICENSE +21 -0
- package/README.md +1 -1
- package/components/GridRow.d.ts +4 -0
- package/components/GridRow.js +49 -23
- package/components/base/GridOverlays.js +4 -3
- package/components/cell/GridActionsCell.d.ts +5 -1
- package/components/cell/GridActionsCell.js +170 -21
- package/components/cell/GridActionsCellItem.d.ts +66 -4
- package/components/cell/GridActionsCellItem.js +7 -5
- package/components/cell/GridCell.d.ts +1 -0
- package/components/cell/GridCell.js +28 -7
- package/components/cell/GridEditInputCell.js +1 -1
- package/components/cell/GridEditSingleSelectCell.js +22 -13
- package/components/columnHeaders/GridColumnHeaderItem.js +4 -7
- package/components/columnHeaders/GridColumnHeaders.d.ts +0 -1
- package/components/columnHeaders/GridColumnHeaders.js +1 -1
- package/components/columnSelection/GridCellCheckboxRenderer.d.ts +3 -3
- package/components/columnSelection/GridCellCheckboxRenderer.js +20 -3
- package/components/panel/GridPanel.js +1 -0
- package/components/panel/filterPanel/GridFilterForm.js +14 -10
- package/components/panel/filterPanel/GridFilterInputBoolean.js +13 -8
- package/components/panel/filterPanel/GridFilterInputSingleSelect.js +22 -15
- package/components/panel/filterPanel/GridFilterInputValue.js +22 -15
- package/components/toolbar/GridToolbarDensitySelector.js +1 -1
- package/components/toolbar/GridToolbarFilterButton.d.ts +1 -1
- package/components/virtualization/GridVirtualScroller.js +2 -0
- package/components/virtualization/GridVirtualScrollerContent.js +1 -3
- package/constants/gridDetailPanelToggleField.d.ts +1 -0
- package/constants/gridDetailPanelToggleField.js +2 -0
- package/hooks/core/pipeProcessing/gridPipeProcessingApi.d.ts +32 -15
- package/hooks/core/pipeProcessing/index.d.ts +1 -0
- package/hooks/core/pipeProcessing/index.js +2 -1
- package/hooks/core/pipeProcessing/useGridPipeProcessing.d.ts +8 -3
- package/hooks/core/pipeProcessing/useGridPipeProcessing.js +53 -19
- package/hooks/core/pipeProcessing/useGridRegisterPipeApplier.d.ts +3 -0
- package/hooks/core/pipeProcessing/useGridRegisterPipeApplier.js +27 -0
- package/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.d.ts +0 -3
- package/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +0 -4
- package/hooks/features/columnHeaders/useGridColumnHeaders.d.ts +0 -1
- package/hooks/features/columnHeaders/useGridColumnHeaders.js +76 -10
- package/hooks/features/columns/gridColumnsInterfaces.d.ts +3 -1
- package/hooks/features/columns/gridColumnsUtils.d.ts +19 -1
- package/hooks/features/columns/gridColumnsUtils.js +61 -8
- package/hooks/features/columns/useGridColumnSpanning.d.ts +7 -0
- package/hooks/features/columns/useGridColumnSpanning.js +109 -0
- package/hooks/features/columns/useGridColumns.js +24 -18
- package/hooks/features/dimensions/useGridDimensions.js +3 -3
- package/hooks/features/editRows/useGridCellEditing.new.js +18 -10
- package/hooks/features/editRows/useGridEditing.new.js +7 -3
- package/hooks/features/editRows/useGridRowEditing.new.js +23 -15
- package/hooks/features/filter/useGridFilter.js +14 -9
- package/hooks/features/focus/useGridFocus.js +19 -9
- package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.d.ts +1 -0
- package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +39 -7
- package/hooks/features/rows/gridRowsSelector.d.ts +1 -0
- package/hooks/features/rows/gridRowsSelector.js +1 -0
- package/hooks/features/rows/gridRowsState.d.ts +4 -0
- package/hooks/features/rows/useGridRows.d.ts +2 -2
- package/hooks/features/rows/useGridRows.js +5 -4
- package/hooks/features/rows/useGridRowsMeta.js +6 -13
- package/hooks/features/scroll/useGridScroll.d.ts +2 -0
- package/hooks/features/scroll/useGridScroll.js +25 -3
- package/hooks/features/selection/useGridSelection.js +3 -2
- package/hooks/features/sorting/useGridSorting.js +10 -10
- package/hooks/features/virtualization/useGridVirtualScroller.d.ts +7 -0
- package/hooks/features/virtualization/useGridVirtualScroller.js +54 -27
- package/index.js +1 -1
- package/internals/index.d.ts +1 -0
- package/internals/index.js +1 -0
- package/legacy/DataGrid/DataGrid.js +1 -1
- package/legacy/DataGrid/useDataGridComponent.js +3 -1
- package/legacy/components/GridRow.js +47 -23
- package/legacy/components/base/GridOverlays.js +4 -3
- package/legacy/components/cell/GridActionsCell.js +188 -27
- package/legacy/components/cell/GridActionsCellItem.js +7 -5
- package/legacy/components/cell/GridCell.js +29 -7
- package/legacy/components/cell/GridEditInputCell.js +1 -1
- package/legacy/components/cell/GridEditSingleSelectCell.js +33 -24
- package/legacy/components/columnHeaders/GridColumnHeaderItem.js +4 -7
- package/legacy/components/columnHeaders/GridColumnHeaders.js +2 -3
- package/legacy/components/columnSelection/GridCellCheckboxRenderer.js +21 -3
- package/legacy/components/panel/GridPanel.js +1 -0
- package/legacy/components/panel/filterPanel/GridFilterForm.js +14 -10
- package/legacy/components/panel/filterPanel/GridFilterInputBoolean.js +13 -8
- package/legacy/components/panel/filterPanel/GridFilterInputSingleSelect.js +22 -17
- package/legacy/components/panel/filterPanel/GridFilterInputValue.js +22 -17
- package/legacy/components/toolbar/GridToolbarDensitySelector.js +1 -1
- package/legacy/components/virtualization/GridVirtualScroller.js +2 -0
- package/legacy/components/virtualization/GridVirtualScrollerContent.js +1 -3
- package/legacy/constants/gridDetailPanelToggleField.js +2 -0
- package/legacy/hooks/core/pipeProcessing/index.js +2 -1
- package/legacy/hooks/core/pipeProcessing/useGridPipeProcessing.js +60 -24
- package/legacy/hooks/core/pipeProcessing/useGridRegisterPipeApplier.js +27 -0
- package/legacy/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +0 -4
- package/legacy/hooks/features/columnHeaders/useGridColumnHeaders.js +89 -10
- package/legacy/hooks/features/columns/gridColumnsUtils.js +79 -22
- package/legacy/hooks/features/columns/useGridColumnSpanning.js +107 -0
- package/legacy/hooks/features/columns/useGridColumns.js +24 -18
- package/legacy/hooks/features/dimensions/useGridDimensions.js +3 -3
- package/legacy/hooks/features/editRows/useGridCellEditing.new.js +14 -8
- package/legacy/hooks/features/editRows/useGridEditing.new.js +7 -3
- package/legacy/hooks/features/editRows/useGridRowEditing.new.js +32 -24
- package/legacy/hooks/features/filter/useGridFilter.js +14 -9
- package/legacy/hooks/features/focus/useGridFocus.js +19 -9
- package/legacy/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +39 -6
- package/legacy/hooks/features/rows/gridRowsSelector.js +3 -0
- package/legacy/hooks/features/rows/useGridRows.js +5 -4
- package/legacy/hooks/features/rows/useGridRowsMeta.js +6 -13
- package/legacy/hooks/features/scroll/useGridScroll.js +25 -3
- package/legacy/hooks/features/selection/useGridSelection.js +3 -2
- package/legacy/hooks/features/sorting/useGridSorting.js +5 -7
- package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +65 -37
- package/legacy/index.js +1 -1
- package/legacy/internals/index.js +1 -0
- package/legacy/locales/huHU.js +120 -0
- package/legacy/locales/index.js +1 -0
- package/legacy/models/api/gridColumnSpanning.js +1 -0
- package/legacy/models/events/gridEvents.js +2 -3
- package/legacy/models/gridColumnSpanning.js +1 -0
- package/locales/huHU.d.ts +2 -0
- package/locales/huHU.js +108 -0
- package/locales/index.d.ts +1 -0
- package/locales/index.js +1 -0
- package/models/api/gridApiCommon.d.ts +2 -1
- package/models/api/gridColumnSpanning.d.ts +28 -0
- package/models/api/gridColumnSpanning.js +1 -0
- package/models/api/gridEditingApi.d.ts +49 -3
- package/models/colDef/gridColDef.d.ts +5 -0
- package/models/events/gridEventLookup.d.ts +3 -8
- package/models/events/gridEvents.d.ts +9 -14
- package/models/events/gridEvents.js +2 -3
- package/models/gridColumnSpanning.d.ts +12 -0
- package/models/gridColumnSpanning.js +1 -0
- package/models/gridEditRowModel.d.ts +1 -1
- package/models/params/gridCellParams.d.ts +12 -2
- package/models/params/gridRowParams.d.ts +5 -0
- package/models/props/DataGridProps.d.ts +1 -1
- package/modern/DataGrid/DataGrid.js +1 -1
- package/modern/DataGrid/useDataGridComponent.js +3 -1
- package/modern/components/GridRow.js +47 -21
- package/modern/components/base/GridOverlays.js +4 -3
- package/modern/components/cell/GridActionsCell.js +168 -21
- package/modern/components/cell/GridActionsCellItem.js +7 -5
- package/modern/components/cell/GridCell.js +28 -7
- package/modern/components/cell/GridEditInputCell.js +1 -1
- package/modern/components/cell/GridEditSingleSelectCell.js +20 -11
- package/modern/components/columnHeaders/GridColumnHeaderItem.js +4 -7
- package/modern/components/columnHeaders/GridColumnHeaders.js +1 -1
- package/modern/components/columnSelection/GridCellCheckboxRenderer.js +20 -3
- package/modern/components/panel/GridPanel.js +1 -0
- package/modern/components/panel/filterPanel/GridFilterForm.js +10 -6
- package/modern/components/panel/filterPanel/GridFilterInputBoolean.js +11 -6
- package/modern/components/panel/filterPanel/GridFilterInputSingleSelect.js +20 -13
- package/modern/components/panel/filterPanel/GridFilterInputValue.js +20 -13
- package/modern/components/toolbar/GridToolbarDensitySelector.js +1 -1
- package/modern/components/virtualization/GridVirtualScroller.js +2 -0
- package/modern/components/virtualization/GridVirtualScrollerContent.js +1 -3
- package/modern/constants/gridDetailPanelToggleField.js +2 -0
- package/modern/hooks/core/pipeProcessing/index.js +2 -1
- package/modern/hooks/core/pipeProcessing/useGridPipeProcessing.js +53 -19
- package/modern/hooks/core/pipeProcessing/useGridRegisterPipeApplier.js +27 -0
- package/modern/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +0 -4
- package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +76 -10
- package/modern/hooks/features/columns/gridColumnsUtils.js +61 -8
- package/modern/hooks/features/columns/useGridColumnSpanning.js +107 -0
- package/modern/hooks/features/columns/useGridColumns.js +24 -18
- package/modern/hooks/features/dimensions/useGridDimensions.js +3 -3
- package/modern/hooks/features/editRows/useGridCellEditing.new.js +18 -10
- package/modern/hooks/features/editRows/useGridEditing.new.js +7 -3
- package/modern/hooks/features/editRows/useGridRowEditing.new.js +23 -15
- package/modern/hooks/features/filter/useGridFilter.js +14 -9
- package/modern/hooks/features/focus/useGridFocus.js +19 -9
- package/modern/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +37 -7
- package/modern/hooks/features/rows/gridRowsSelector.js +1 -0
- package/modern/hooks/features/rows/useGridRows.js +5 -4
- package/modern/hooks/features/rows/useGridRowsMeta.js +6 -13
- package/modern/hooks/features/scroll/useGridScroll.js +23 -3
- package/modern/hooks/features/selection/useGridSelection.js +3 -2
- package/modern/hooks/features/sorting/useGridSorting.js +10 -10
- package/modern/hooks/features/virtualization/useGridVirtualScroller.js +54 -23
- package/modern/index.js +1 -1
- package/modern/internals/index.js +1 -0
- package/modern/locales/huHU.js +108 -0
- package/modern/locales/index.js +1 -0
- package/modern/models/api/gridColumnSpanning.js +1 -0
- package/modern/models/events/gridEvents.js +2 -3
- package/modern/models/gridColumnSpanning.js +1 -0
- package/node/DataGrid/DataGrid.js +1 -1
- package/node/DataGrid/useDataGridComponent.js +4 -1
- package/node/components/GridRow.js +50 -23
- package/node/components/base/GridOverlays.js +3 -2
- package/node/components/cell/GridActionsCell.js +172 -21
- package/node/components/cell/GridActionsCellItem.js +7 -4
- package/node/components/cell/GridCell.js +28 -7
- package/node/components/cell/GridEditInputCell.js +1 -1
- package/node/components/cell/GridEditSingleSelectCell.js +23 -13
- package/node/components/columnHeaders/GridColumnHeaderItem.js +4 -7
- package/node/components/columnHeaders/GridColumnHeaders.js +1 -1
- package/node/components/columnSelection/GridCellCheckboxRenderer.js +20 -3
- package/node/components/panel/GridPanel.js +1 -0
- package/node/components/panel/filterPanel/GridFilterForm.js +15 -10
- package/node/components/panel/filterPanel/GridFilterInputBoolean.js +14 -8
- package/node/components/panel/filterPanel/GridFilterInputSingleSelect.js +23 -15
- package/node/components/panel/filterPanel/GridFilterInputValue.js +23 -15
- package/node/components/toolbar/GridToolbarDensitySelector.js +1 -1
- package/node/components/virtualization/GridVirtualScroller.js +2 -0
- package/node/components/virtualization/GridVirtualScrollerContent.js +1 -3
- package/node/constants/gridDetailPanelToggleField.js +9 -0
- package/node/hooks/core/pipeProcessing/index.js +13 -0
- package/node/hooks/core/pipeProcessing/useGridPipeProcessing.js +51 -20
- package/node/hooks/core/pipeProcessing/useGridRegisterPipeApplier.js +42 -0
- package/node/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.js +0 -3
- package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +80 -10
- package/node/hooks/features/columns/gridColumnsUtils.js +65 -9
- package/node/hooks/features/columns/useGridColumnSpanning.js +130 -0
- package/node/hooks/features/columns/useGridColumns.js +23 -17
- package/node/hooks/features/dimensions/useGridDimensions.js +3 -3
- package/node/hooks/features/editRows/useGridCellEditing.new.js +18 -10
- package/node/hooks/features/editRows/useGridEditing.new.js +6 -2
- package/node/hooks/features/editRows/useGridRowEditing.new.js +21 -14
- package/node/hooks/features/filter/useGridFilter.js +14 -9
- package/node/hooks/features/focus/useGridFocus.js +19 -9
- package/node/hooks/features/keyboardNavigation/useGridKeyboardNavigation.js +40 -7
- package/node/hooks/features/rows/gridRowsSelector.js +3 -1
- package/node/hooks/features/rows/useGridRows.js +5 -4
- package/node/hooks/features/rows/useGridRowsMeta.js +6 -14
- package/node/hooks/features/scroll/useGridScroll.js +26 -2
- package/node/hooks/features/selection/useGridSelection.js +4 -2
- package/node/hooks/features/sorting/useGridSorting.js +10 -10
- package/node/hooks/features/virtualization/useGridVirtualScroller.js +59 -27
- package/node/index.js +1 -1
- package/node/internals/index.js +8 -0
- package/node/locales/huHU.js +118 -0
- package/node/locales/index.js +13 -0
- package/node/models/api/gridColumnSpanning.js +5 -0
- package/node/models/events/gridEvents.js +2 -3
- package/node/models/gridColumnSpanning.js +5 -0
- package/package.json +4 -4
- package/utils/domUtils.d.ts +2 -2
|
@@ -41,6 +41,8 @@ var _gridCheckboxSelectionColDef = require("../colDef/gridCheckboxSelectionColDe
|
|
|
41
41
|
|
|
42
42
|
var _gridActionsColDef = require("../colDef/gridActionsColDef");
|
|
43
43
|
|
|
44
|
+
var _gridDetailPanelToggleField = require("../constants/gridDetailPanelToggleField");
|
|
45
|
+
|
|
44
46
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
45
47
|
|
|
46
48
|
const _excluded = ["selected", "rowId", "row", "index", "style", "rowHeight", "className", "visibleColumns", "renderedColumns", "containerWidth", "firstColumnToRender", "lastColumnToRender", "cellFocus", "cellTabIndex", "editRowsState", "isLastVisible", "onClick", "onDoubleClick", "onMouseEnter", "onMouseLeave"];
|
|
@@ -87,6 +89,7 @@ function GridRow(props) {
|
|
|
87
89
|
const {
|
|
88
90
|
selected,
|
|
89
91
|
rowId,
|
|
92
|
+
row,
|
|
90
93
|
index,
|
|
91
94
|
style: styleProp,
|
|
92
95
|
rowHeight,
|
|
@@ -157,7 +160,7 @@ function GridRow(props) {
|
|
|
157
160
|
} // User opened a detail panel
|
|
158
161
|
|
|
159
162
|
|
|
160
|
-
if (field ===
|
|
163
|
+
if (field === _gridDetailPanelToggleField.GRID_DETAIL_PANEL_TOGGLE_FIELD) {
|
|
161
164
|
return;
|
|
162
165
|
} // User is editing a cell
|
|
163
166
|
|
|
@@ -198,7 +201,8 @@ function GridRow(props) {
|
|
|
198
201
|
const indexRelativeToCurrentPage = index - currentPage.range.firstRowIndex;
|
|
199
202
|
const rowParams = (0, _extends2.default)({}, apiRef.current.getRowParams(rowId), {
|
|
200
203
|
isFirstVisible: indexRelativeToCurrentPage === 0,
|
|
201
|
-
isLastVisible: indexRelativeToCurrentPage === currentPage.rows.length - 1
|
|
204
|
+
isLastVisible: indexRelativeToCurrentPage === currentPage.rows.length - 1,
|
|
205
|
+
indexRelativeToCurrentPage
|
|
202
206
|
});
|
|
203
207
|
rowClassName = rootProps.getRowClassName(rowParams);
|
|
204
208
|
}
|
|
@@ -206,8 +210,6 @@ function GridRow(props) {
|
|
|
206
210
|
const cells = [];
|
|
207
211
|
|
|
208
212
|
for (let i = 0; i < renderedColumns.length; i += 1) {
|
|
209
|
-
var _rootProps$components;
|
|
210
|
-
|
|
211
213
|
const column = renderedColumns[i];
|
|
212
214
|
const indexRelativeToAllColumns = firstColumnToRender + i;
|
|
213
215
|
const isLastColumn = indexRelativeToAllColumns === visibleColumns.length - 1;
|
|
@@ -236,7 +238,16 @@ function GridRow(props) {
|
|
|
236
238
|
if (editCellState != null && column.renderEditCell) {
|
|
237
239
|
var _rootProps$classes2;
|
|
238
240
|
|
|
239
|
-
|
|
241
|
+
let updatedRow = row;
|
|
242
|
+
|
|
243
|
+
if (apiRef.current.unstable_getRowWithUpdatedValues) {
|
|
244
|
+
// Only the new editing API has this method
|
|
245
|
+
updatedRow = apiRef.current.unstable_getRowWithUpdatedValues(rowId, column.field);
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
const params = (0, _extends2.default)({}, cellParams, {
|
|
249
|
+
row: updatedRow
|
|
250
|
+
}, editCellState, {
|
|
240
251
|
api: apiRef.current
|
|
241
252
|
});
|
|
242
253
|
content = column.renderEditCell(params); // TODO move to GridCell
|
|
@@ -251,24 +262,35 @@ function GridRow(props) {
|
|
|
251
262
|
|
|
252
263
|
const hasFocus = cellFocus !== null && cellFocus.id === rowId && cellFocus.field === column.field;
|
|
253
264
|
const tabIndex = cellTabIndex !== null && cellTabIndex.id === rowId && cellTabIndex.field === column.field && cellParams.cellMode === 'view' ? 0 : -1;
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
265
|
+
const cellColSpanInfo = apiRef.current.unstable_getCellColSpanInfo(rowId, indexRelativeToAllColumns);
|
|
266
|
+
|
|
267
|
+
if (cellColSpanInfo && !cellColSpanInfo.spannedByColSpan) {
|
|
268
|
+
var _rootProps$components;
|
|
269
|
+
|
|
270
|
+
const {
|
|
271
|
+
colSpan,
|
|
272
|
+
width
|
|
273
|
+
} = cellColSpanInfo.cellProps;
|
|
274
|
+
cells.push( /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.components.Cell, (0, _extends2.default)({
|
|
275
|
+
value: cellParams.value,
|
|
276
|
+
field: column.field,
|
|
277
|
+
width: width,
|
|
278
|
+
rowId: rowId,
|
|
279
|
+
height: rowHeight,
|
|
280
|
+
showRightBorder: showRightBorder,
|
|
281
|
+
formattedValue: cellParams.formattedValue,
|
|
282
|
+
align: column.align || 'left',
|
|
283
|
+
cellMode: cellParams.cellMode,
|
|
284
|
+
colIndex: indexRelativeToAllColumns,
|
|
285
|
+
isEditable: cellParams.isEditable,
|
|
286
|
+
hasFocus: hasFocus,
|
|
287
|
+
tabIndex: tabIndex,
|
|
288
|
+
className: (0, _clsx.default)(classNames),
|
|
289
|
+
colSpan: colSpan
|
|
290
|
+
}, (_rootProps$components = rootProps.componentsProps) == null ? void 0 : _rootProps$components.cell, {
|
|
291
|
+
children: content
|
|
292
|
+
}), column.field));
|
|
293
|
+
}
|
|
272
294
|
}
|
|
273
295
|
|
|
274
296
|
const emptyCellWidth = containerWidth - columnsTotalWidth;
|
|
@@ -302,6 +324,11 @@ process.env.NODE_ENV !== "production" ? GridRow.propTypes = {
|
|
|
302
324
|
containerWidth: _propTypes.default.number.isRequired,
|
|
303
325
|
editRowsState: _propTypes.default.object.isRequired,
|
|
304
326
|
firstColumnToRender: _propTypes.default.number.isRequired,
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* Index of the row in the whole sorted and filtered dataset.
|
|
330
|
+
* If some rows above have expanded children, this index also take those children into account.
|
|
331
|
+
*/
|
|
305
332
|
index: _propTypes.default.number.isRequired,
|
|
306
333
|
isLastVisible: _propTypes.default.bool,
|
|
307
334
|
lastColumnToRender: _propTypes.default.number.isRequired,
|
|
@@ -78,8 +78,9 @@ function GridOverlays() {
|
|
|
78
78
|
const rootProps = (0, _useGridRootProps.useGridRootProps)();
|
|
79
79
|
const totalRowCount = (0, _useGridSelector.useGridSelector)(apiRef, _gridRowsSelector.gridRowCountSelector);
|
|
80
80
|
const visibleRowCount = (0, _useGridSelector.useGridSelector)(apiRef, _gridFilterSelector.gridVisibleRowCountSelector);
|
|
81
|
-
const
|
|
82
|
-
const
|
|
81
|
+
const loading = (0, _useGridSelector.useGridSelector)(apiRef, _gridRowsSelector.gridRowsLoadingSelector);
|
|
82
|
+
const showNoRowsOverlay = !loading && totalRowCount === 0;
|
|
83
|
+
const showNoResultsOverlay = !loading && totalRowCount > 0 && visibleRowCount === 0;
|
|
83
84
|
let overlay = null;
|
|
84
85
|
|
|
85
86
|
if (showNoRowsOverlay) {
|
|
@@ -9,6 +9,8 @@ exports.renderActionsCell = exports.GridActionsCell = void 0;
|
|
|
9
9
|
|
|
10
10
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
11
11
|
|
|
12
|
+
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
13
|
+
|
|
12
14
|
var React = _interopRequireWildcard(require("react"));
|
|
13
15
|
|
|
14
16
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
@@ -25,8 +27,12 @@ var _GridMenu = require("../menu/GridMenu");
|
|
|
25
27
|
|
|
26
28
|
var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
|
|
27
29
|
|
|
30
|
+
var _useGridApiContext = require("../../hooks/utils/useGridApiContext");
|
|
31
|
+
|
|
28
32
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
29
33
|
|
|
34
|
+
const _excluded = ["colDef", "id", "api", "hasFocus", "isEditable", "field", "value", "formattedValue", "row", "rowNode", "cellMode", "getValue", "tabIndex", "position", "focusElementRef"];
|
|
35
|
+
|
|
30
36
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
31
37
|
|
|
32
38
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
@@ -34,20 +40,25 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
34
40
|
const hasActions = colDef => typeof colDef.getActions === 'function';
|
|
35
41
|
|
|
36
42
|
const GridActionsCell = props => {
|
|
43
|
+
const {
|
|
44
|
+
colDef,
|
|
45
|
+
id,
|
|
46
|
+
hasFocus,
|
|
47
|
+
tabIndex,
|
|
48
|
+
position = 'bottom-end',
|
|
49
|
+
focusElementRef
|
|
50
|
+
} = props,
|
|
51
|
+
other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
|
|
52
|
+
const [focusedButtonIndex, setFocusedButtonIndex] = React.useState(-1);
|
|
37
53
|
const [open, setOpen] = React.useState(false);
|
|
54
|
+
const apiRef = (0, _useGridApiContext.useGridApiContext)();
|
|
55
|
+
const rootRef = React.useRef(null);
|
|
38
56
|
const buttonRef = React.useRef(null);
|
|
57
|
+
const ignoreCallToFocus = React.useRef(false);
|
|
39
58
|
const touchRippleRefs = React.useRef({});
|
|
40
59
|
const menuId = (0, _utils.unstable_useId)();
|
|
41
60
|
const buttonId = (0, _utils.unstable_useId)();
|
|
42
61
|
const rootProps = (0, _useGridRootProps.useGridRootProps)();
|
|
43
|
-
const {
|
|
44
|
-
colDef,
|
|
45
|
-
id,
|
|
46
|
-
api,
|
|
47
|
-
hasFocus,
|
|
48
|
-
position = 'bottom-end'
|
|
49
|
-
} = props; // TODO apply the rest to the root element
|
|
50
|
-
|
|
51
62
|
React.useLayoutEffect(() => {
|
|
52
63
|
if (!hasFocus) {
|
|
53
64
|
Object.entries(touchRippleRefs.current).forEach(([index, ref]) => {
|
|
@@ -57,56 +68,144 @@ const GridActionsCell = props => {
|
|
|
57
68
|
});
|
|
58
69
|
}
|
|
59
70
|
}, [hasFocus]);
|
|
71
|
+
React.useEffect(() => {
|
|
72
|
+
if (focusedButtonIndex >= 0) {
|
|
73
|
+
var _rootRef$current;
|
|
74
|
+
|
|
75
|
+
const child = (_rootRef$current = rootRef.current) == null ? void 0 : _rootRef$current.children[focusedButtonIndex];
|
|
76
|
+
child.focus();
|
|
77
|
+
}
|
|
78
|
+
}, [focusedButtonIndex]);
|
|
79
|
+
React.useEffect(() => {
|
|
80
|
+
if (!hasFocus) {
|
|
81
|
+
setFocusedButtonIndex(-1);
|
|
82
|
+
ignoreCallToFocus.current = false;
|
|
83
|
+
}
|
|
84
|
+
}, [hasFocus]);
|
|
85
|
+
React.useImperativeHandle(focusElementRef, () => ({
|
|
86
|
+
focus() {
|
|
87
|
+
// If ignoreCallToFocus is true, then one of the buttons was clicked and the focus is already set
|
|
88
|
+
if (!ignoreCallToFocus.current) {
|
|
89
|
+
setFocusedButtonIndex(0);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
}), []);
|
|
60
94
|
|
|
61
95
|
if (!hasActions(colDef)) {
|
|
62
96
|
throw new Error('MUI: Missing the `getActions` property in the `GridColDef`.');
|
|
63
97
|
}
|
|
64
98
|
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
const hideMenu = () => setOpen(false);
|
|
68
|
-
|
|
69
|
-
const options = colDef.getActions(api.getRowParams(id));
|
|
99
|
+
const options = colDef.getActions(apiRef.current.getRowParams(id));
|
|
70
100
|
const iconButtons = options.filter(option => !option.props.showInMenu);
|
|
71
101
|
const menuButtons = options.filter(option => option.props.showInMenu);
|
|
102
|
+
const numberOfButtons = iconButtons.length + (menuButtons.length ? 1 : 0);
|
|
103
|
+
|
|
104
|
+
const showMenu = () => {
|
|
105
|
+
setOpen(true);
|
|
106
|
+
setFocusedButtonIndex(numberOfButtons - 1);
|
|
107
|
+
ignoreCallToFocus.current = true;
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
const hideMenu = () => {
|
|
111
|
+
setOpen(false);
|
|
112
|
+
};
|
|
72
113
|
|
|
73
114
|
const handleTouchRippleRef = index => instance => {
|
|
74
115
|
touchRippleRefs.current[index] = instance;
|
|
75
116
|
};
|
|
76
117
|
|
|
77
|
-
|
|
118
|
+
const handleButtonClick = (index, onClick) => event => {
|
|
119
|
+
setFocusedButtonIndex(index);
|
|
120
|
+
ignoreCallToFocus.current = true;
|
|
121
|
+
|
|
122
|
+
if (onClick) {
|
|
123
|
+
onClick(event);
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
const handleRootKeyDown = event => {
|
|
128
|
+
if (numberOfButtons <= 1) {
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
let newIndex = focusedButtonIndex;
|
|
133
|
+
|
|
134
|
+
if (event.key === 'ArrowRight') {
|
|
135
|
+
newIndex += 1;
|
|
136
|
+
} else if (event.key === 'ArrowLeft') {
|
|
137
|
+
newIndex -= 1;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (newIndex < 0 || newIndex >= numberOfButtons) {
|
|
141
|
+
return; // We're already in the first or last item = do nothing and let the grid listen the event
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
if (newIndex !== focusedButtonIndex) {
|
|
145
|
+
event.preventDefault(); // Prevent scrolling
|
|
146
|
+
|
|
147
|
+
event.stopPropagation(); // Don't stop propagation for other keys, e.g. ArrowUp
|
|
148
|
+
|
|
149
|
+
setFocusedButtonIndex(newIndex);
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
|
|
153
|
+
const handleListKeyDown = event => {
|
|
154
|
+
if (event.key === 'Tab') {
|
|
155
|
+
event.preventDefault();
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (['Tab', 'Enter', 'Escape'].includes(event.key)) {
|
|
159
|
+
hideMenu();
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", (0, _extends2.default)({
|
|
164
|
+
role: "menu",
|
|
165
|
+
ref: rootRef,
|
|
166
|
+
tabIndex: -1,
|
|
78
167
|
className: _gridClasses.gridClasses.actionsCell,
|
|
168
|
+
onKeyDown: handleRootKeyDown
|
|
169
|
+
}, other, {
|
|
79
170
|
children: [iconButtons.map((button, index) => /*#__PURE__*/React.cloneElement(button, {
|
|
80
171
|
key: index,
|
|
81
|
-
touchRippleRef: handleTouchRippleRef(index)
|
|
82
|
-
|
|
172
|
+
touchRippleRef: handleTouchRippleRef(index),
|
|
173
|
+
onClick: handleButtonClick(index, button.props.onClick),
|
|
174
|
+
tabIndex: focusedButtonIndex === index ? tabIndex : -1
|
|
175
|
+
})), menuButtons.length > 0 && buttonId && /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, {
|
|
83
176
|
ref: buttonRef,
|
|
84
177
|
id: buttonId,
|
|
85
|
-
"aria-label":
|
|
178
|
+
"aria-label": apiRef.current.getLocaleText('actionsCellMore'),
|
|
86
179
|
"aria-controls": menuId,
|
|
87
180
|
"aria-expanded": open ? 'true' : undefined,
|
|
88
181
|
"aria-haspopup": "true",
|
|
182
|
+
role: "menuitem",
|
|
89
183
|
size: "small",
|
|
90
184
|
onClick: showMenu,
|
|
185
|
+
touchRippleRef: handleTouchRippleRef(buttonId),
|
|
186
|
+
tabIndex: focusedButtonIndex === iconButtons.length ? tabIndex : -1,
|
|
91
187
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.components.MoreActionsIcon, {
|
|
92
188
|
fontSize: "small"
|
|
93
189
|
})
|
|
94
190
|
}), menuButtons.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridMenu.GridMenu, {
|
|
95
|
-
id: menuId,
|
|
96
191
|
onClickAway: hideMenu,
|
|
97
192
|
onClick: hideMenu,
|
|
98
193
|
open: open,
|
|
99
194
|
target: buttonRef.current,
|
|
100
195
|
position: position,
|
|
101
|
-
"aria-labelledby": buttonId,
|
|
102
196
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_MenuList.default, {
|
|
197
|
+
id: menuId,
|
|
103
198
|
className: _gridClasses.gridClasses.menuList,
|
|
199
|
+
onKeyDown: handleListKeyDown,
|
|
200
|
+
"aria-labelledby": buttonId,
|
|
201
|
+
variant: "menu",
|
|
202
|
+
autoFocusItem: true,
|
|
104
203
|
children: menuButtons.map((button, index) => /*#__PURE__*/React.cloneElement(button, {
|
|
105
204
|
key: index
|
|
106
205
|
}))
|
|
107
206
|
})
|
|
108
207
|
})]
|
|
109
|
-
});
|
|
208
|
+
}));
|
|
110
209
|
};
|
|
111
210
|
|
|
112
211
|
exports.GridActionsCell = GridActionsCell;
|
|
@@ -122,11 +221,42 @@ process.env.NODE_ENV !== "production" ? GridActionsCell.propTypes = {
|
|
|
122
221
|
*/
|
|
123
222
|
api: _propTypes.default.any.isRequired,
|
|
124
223
|
|
|
224
|
+
/**
|
|
225
|
+
* The mode of the cell.
|
|
226
|
+
*/
|
|
227
|
+
cellMode: _propTypes.default.oneOf(['edit', 'view']).isRequired,
|
|
228
|
+
|
|
125
229
|
/**
|
|
126
230
|
* The column of the row that the current cell belongs to.
|
|
127
231
|
*/
|
|
128
232
|
colDef: _propTypes.default.object.isRequired,
|
|
129
233
|
|
|
234
|
+
/**
|
|
235
|
+
* The column field of the cell that triggered the event.
|
|
236
|
+
*/
|
|
237
|
+
field: _propTypes.default.string.isRequired,
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* A ref allowing to set imperative focus.
|
|
241
|
+
* It can be passed to the element that should receive focus.
|
|
242
|
+
* @ignore - do not document.
|
|
243
|
+
*/
|
|
244
|
+
focusElementRef: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.shape({
|
|
245
|
+
current: _propTypes.default.shape({
|
|
246
|
+
focus: _propTypes.default.func.isRequired
|
|
247
|
+
})
|
|
248
|
+
})]),
|
|
249
|
+
formattedValue: _propTypes.default.any,
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* Get the cell value of a row and field.
|
|
253
|
+
* @param {GridRowId} id The row id.
|
|
254
|
+
* @param {string} field The field.
|
|
255
|
+
* @returns {any} The cell value.
|
|
256
|
+
* @deprecated Use `params.row` to directly access the fields you want instead.
|
|
257
|
+
*/
|
|
258
|
+
getValue: _propTypes.default.func.isRequired,
|
|
259
|
+
|
|
130
260
|
/**
|
|
131
261
|
* If true, the cell is the active element.
|
|
132
262
|
*/
|
|
@@ -136,7 +266,28 @@ process.env.NODE_ENV !== "production" ? GridActionsCell.propTypes = {
|
|
|
136
266
|
* The grid row id.
|
|
137
267
|
*/
|
|
138
268
|
id: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]).isRequired,
|
|
139
|
-
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* If true, the cell is editable.
|
|
272
|
+
*/
|
|
273
|
+
isEditable: _propTypes.default.bool,
|
|
274
|
+
position: _propTypes.default.oneOf(['bottom-end', 'bottom-start', 'bottom', 'left-end', 'left-start', 'left', 'right-end', 'right-start', 'right', 'top-end', 'top-start', 'top']),
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* The row model of the row that the current cell belongs to.
|
|
278
|
+
*/
|
|
279
|
+
row: _propTypes.default.object.isRequired,
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* The node of the row that the current cell belongs to.
|
|
283
|
+
*/
|
|
284
|
+
rowNode: _propTypes.default.object.isRequired,
|
|
285
|
+
|
|
286
|
+
/**
|
|
287
|
+
* the tabIndex value.
|
|
288
|
+
*/
|
|
289
|
+
tabIndex: _propTypes.default.oneOf([-1, 0]).isRequired,
|
|
290
|
+
value: _propTypes.default.any
|
|
140
291
|
} : void 0;
|
|
141
292
|
|
|
142
293
|
const renderActionsCell = params => /*#__PURE__*/(0, _jsxRuntime.jsx)(GridActionsCell, (0, _extends2.default)({}, params));
|
|
@@ -29,7 +29,7 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
|
|
|
29
29
|
|
|
30
30
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
31
31
|
|
|
32
|
-
const GridActionsCellItem = props => {
|
|
32
|
+
const GridActionsCellItem = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
33
33
|
const {
|
|
34
34
|
label,
|
|
35
35
|
icon,
|
|
@@ -46,7 +46,9 @@ const GridActionsCellItem = props => {
|
|
|
46
46
|
|
|
47
47
|
if (!showInMenu) {
|
|
48
48
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_IconButton.default, (0, _extends2.default)({
|
|
49
|
+
ref: ref,
|
|
49
50
|
size: "small",
|
|
51
|
+
role: "menuitem",
|
|
50
52
|
"aria-label": label
|
|
51
53
|
}, other, {
|
|
52
54
|
onClick: handleClick,
|
|
@@ -56,14 +58,15 @@ const GridActionsCellItem = props => {
|
|
|
56
58
|
}));
|
|
57
59
|
}
|
|
58
60
|
|
|
59
|
-
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_MenuItem.default, (0, _extends2.default)({
|
|
61
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_MenuItem.default, (0, _extends2.default)({
|
|
62
|
+
ref: ref
|
|
63
|
+
}, other, {
|
|
60
64
|
onClick: onClick,
|
|
61
65
|
children: [icon && /*#__PURE__*/(0, _jsxRuntime.jsx)(_ListItemIcon.default, {
|
|
62
66
|
children: icon
|
|
63
67
|
}), label]
|
|
64
68
|
}));
|
|
65
|
-
};
|
|
66
|
-
|
|
69
|
+
});
|
|
67
70
|
exports.GridActionsCellItem = GridActionsCellItem;
|
|
68
71
|
process.env.NODE_ENV !== "production" ? GridActionsCellItem.propTypes = {
|
|
69
72
|
// ----------------------------- Warning --------------------------------
|
|
@@ -33,7 +33,7 @@ var _gridFocusStateSelector = require("../../hooks/features/focus/gridFocusState
|
|
|
33
33
|
|
|
34
34
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
35
35
|
|
|
36
|
-
const _excluded = ["align", "children", "colIndex", "cellMode", "field", "formattedValue", "hasFocus", "height", "isEditable", "rowId", "tabIndex", "value", "width", "className", "showRightBorder", "extendRowFullWidth", "row", "onClick", "onDoubleClick", "onMouseDown", "onMouseUp", "onKeyDown", "onDragEnter", "onDragOver"];
|
|
36
|
+
const _excluded = ["align", "children", "colIndex", "colDef", "cellMode", "field", "formattedValue", "hasFocus", "height", "isEditable", "rowId", "tabIndex", "value", "width", "className", "showRightBorder", "extendRowFullWidth", "row", "colSpan", "onClick", "onDoubleClick", "onMouseDown", "onMouseUp", "onKeyDown", "onDragEnter", "onDragOver"];
|
|
37
37
|
|
|
38
38
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
39
39
|
|
|
@@ -91,6 +91,7 @@ function GridCell(props) {
|
|
|
91
91
|
width,
|
|
92
92
|
className,
|
|
93
93
|
showRightBorder,
|
|
94
|
+
colSpan,
|
|
94
95
|
onClick,
|
|
95
96
|
onDoubleClick,
|
|
96
97
|
onMouseDown,
|
|
@@ -102,6 +103,7 @@ function GridCell(props) {
|
|
|
102
103
|
other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
|
|
103
104
|
const valueToRender = formattedValue == null ? value : formattedValue;
|
|
104
105
|
const cellRef = React.useRef(null);
|
|
106
|
+
const focusElementRef = React.useRef(null);
|
|
105
107
|
const apiRef = (0, _useGridApiContext.useGridApiContext)();
|
|
106
108
|
const rootProps = (0, _useGridRootProps.useGridRootProps)();
|
|
107
109
|
const ownerState = {
|
|
@@ -152,7 +154,7 @@ function GridCell(props) {
|
|
|
152
154
|
|
|
153
155
|
if (cellRef.current && !cellRef.current.contains(doc.activeElement)) {
|
|
154
156
|
const focusableElement = cellRef.current.querySelector('[tabindex="0"]');
|
|
155
|
-
const elementToFocus = focusableElement || cellRef.current;
|
|
157
|
+
const elementToFocus = focusElementRef.current || focusableElement || cellRef.current;
|
|
156
158
|
|
|
157
159
|
if (doesSupportPreventScroll()) {
|
|
158
160
|
elementToFocus.focus({
|
|
@@ -186,6 +188,26 @@ function GridCell(props) {
|
|
|
186
188
|
};
|
|
187
189
|
}
|
|
188
190
|
|
|
191
|
+
const column = apiRef.current.getColumn(field);
|
|
192
|
+
const managesOwnFocus = column.type === 'actions';
|
|
193
|
+
|
|
194
|
+
const renderChildren = () => {
|
|
195
|
+
if (children == null) {
|
|
196
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
197
|
+
className: classes.content,
|
|
198
|
+
children: valueToRender == null ? void 0 : valueToRender.toString()
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
if ( /*#__PURE__*/React.isValidElement(children) && managesOwnFocus) {
|
|
203
|
+
return /*#__PURE__*/React.cloneElement(children, {
|
|
204
|
+
focusElementRef
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
return children;
|
|
209
|
+
};
|
|
210
|
+
|
|
189
211
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", (0, _extends2.default)({
|
|
190
212
|
ref: cellRef,
|
|
191
213
|
className: (0, _clsx.default)(className, classes.root),
|
|
@@ -193,8 +215,9 @@ function GridCell(props) {
|
|
|
193
215
|
"data-field": field,
|
|
194
216
|
"data-colindex": colIndex,
|
|
195
217
|
"aria-colindex": colIndex + 1,
|
|
218
|
+
"aria-colspan": colSpan,
|
|
196
219
|
style: style,
|
|
197
|
-
tabIndex: cellMode === 'view' || !isEditable ? tabIndex : -1,
|
|
220
|
+
tabIndex: (cellMode === 'view' || !isEditable) && !managesOwnFocus ? tabIndex : -1,
|
|
198
221
|
onClick: publish(_models.GridEvents.cellClick, onClick),
|
|
199
222
|
onDoubleClick: publish(_models.GridEvents.cellDoubleClick, onDoubleClick),
|
|
200
223
|
onMouseDown: publish(_models.GridEvents.cellMouseDown, onMouseDown),
|
|
@@ -204,10 +227,7 @@ function GridCell(props) {
|
|
|
204
227
|
onDragOver: publish(_models.GridEvents.cellDragOver, onDragOver)
|
|
205
228
|
}, other, {
|
|
206
229
|
onFocus: handleFocus,
|
|
207
|
-
children:
|
|
208
|
-
className: classes.content,
|
|
209
|
-
children: valueToRender == null ? void 0 : valueToRender.toString()
|
|
210
|
-
})
|
|
230
|
+
children: renderChildren()
|
|
211
231
|
}));
|
|
212
232
|
}
|
|
213
233
|
|
|
@@ -221,6 +241,7 @@ process.env.NODE_ENV !== "production" ? GridCell.propTypes = {
|
|
|
221
241
|
children: _propTypes.default.node,
|
|
222
242
|
className: _propTypes.default.string,
|
|
223
243
|
colIndex: _propTypes.default.number.isRequired,
|
|
244
|
+
colSpan: _propTypes.default.number,
|
|
224
245
|
field: _propTypes.default.string.isRequired,
|
|
225
246
|
formattedValue: _propTypes.default.any,
|
|
226
247
|
hasFocus: _propTypes.default.bool,
|
|
@@ -145,7 +145,7 @@ process.env.NODE_ENV !== "production" ? GridEditInputCell.propTypes = {
|
|
|
145
145
|
/**
|
|
146
146
|
* The cell value formatted with the column valueFormatter.
|
|
147
147
|
*/
|
|
148
|
-
formattedValue: _propTypes.default.any
|
|
148
|
+
formattedValue: _propTypes.default.any,
|
|
149
149
|
|
|
150
150
|
/**
|
|
151
151
|
* Get the cell value of a row and field.
|
|
@@ -28,6 +28,8 @@ var _gridEditRowModel = require("../../models/gridEditRowModel");
|
|
|
28
28
|
|
|
29
29
|
var _gridEvents = require("../../models/events/gridEvents");
|
|
30
30
|
|
|
31
|
+
var _filterPanelUtils = require("../panel/filterPanel/filterPanelUtils");
|
|
32
|
+
|
|
31
33
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
32
34
|
|
|
33
35
|
const _excluded = ["id", "value", "formattedValue", "api", "field", "row", "rowNode", "colDef", "cellMode", "isEditable", "tabIndex", "className", "getValue", "hasFocus", "isValidating", "isProcessingProps", "error"];
|
|
@@ -36,16 +38,19 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
|
|
|
36
38
|
|
|
37
39
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
38
40
|
|
|
39
|
-
const renderSingleSelectOptions = option
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
41
|
+
const renderSingleSelectOptions = (option, OptionComponent) => {
|
|
42
|
+
const isOptionTypeObject = typeof option === 'object';
|
|
43
|
+
const key = isOptionTypeObject ? option.value : option;
|
|
44
|
+
const value = isOptionTypeObject ? option.value : option;
|
|
45
|
+
const content = isOptionTypeObject ? option.label : option;
|
|
46
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(OptionComponent, {
|
|
47
|
+
value: value,
|
|
48
|
+
children: content
|
|
49
|
+
}, key);
|
|
50
|
+
};
|
|
46
51
|
|
|
47
52
|
function GridEditSingleSelectCell(props) {
|
|
48
|
-
var _rootProps$components;
|
|
53
|
+
var _rootProps$components, _baseSelectProps$nati, _rootProps$components2;
|
|
49
54
|
|
|
50
55
|
const {
|
|
51
56
|
id,
|
|
@@ -62,6 +67,8 @@ function GridEditSingleSelectCell(props) {
|
|
|
62
67
|
const inputRef = React.useRef();
|
|
63
68
|
const rootProps = (0, _useGridRootProps.useGridRootProps)();
|
|
64
69
|
const [open, setOpen] = React.useState(rootProps.editMode === 'cell');
|
|
70
|
+
const baseSelectProps = ((_rootProps$components = rootProps.componentsProps) == null ? void 0 : _rootProps$components.baseSelect) || {};
|
|
71
|
+
const isSelectNative = (_baseSelectProps$nati = baseSelectProps.native) != null ? _baseSelectProps$nati : false;
|
|
65
72
|
let valueOptionsFormatted;
|
|
66
73
|
|
|
67
74
|
if (typeof colDef.valueOptions === 'function') {
|
|
@@ -96,11 +103,13 @@ function GridEditSingleSelectCell(props) {
|
|
|
96
103
|
var _rootProps$experiment;
|
|
97
104
|
|
|
98
105
|
setOpen(false);
|
|
99
|
-
const target = event.target;
|
|
106
|
+
const target = event.target; // NativeSelect casts the value to a string.
|
|
107
|
+
|
|
108
|
+
const formattedTargetValue = (0, _filterPanelUtils.getValueFromValueOptions)(target.value, valueOptionsFormatted);
|
|
100
109
|
const isValid = await api.setEditCellValue({
|
|
101
110
|
id,
|
|
102
111
|
field,
|
|
103
|
-
value:
|
|
112
|
+
value: formattedTargetValue
|
|
104
113
|
}, event);
|
|
105
114
|
|
|
106
115
|
if ((_rootProps$experiment = rootProps.experimentalFeatures) != null && _rootProps$experiment.newEditingApi) {
|
|
@@ -169,9 +178,10 @@ function GridEditSingleSelectCell(props) {
|
|
|
169
178
|
onClose: handleClose
|
|
170
179
|
},
|
|
171
180
|
error: error,
|
|
181
|
+
native: isSelectNative,
|
|
172
182
|
fullWidth: true
|
|
173
|
-
}, other, (_rootProps$
|
|
174
|
-
children: valueOptionsFormatted.map(renderSingleSelectOptions)
|
|
183
|
+
}, other, (_rootProps$components2 = rootProps.componentsProps) == null ? void 0 : _rootProps$components2.baseSelect, {
|
|
184
|
+
children: valueOptionsFormatted.map(valueOptions => renderSingleSelectOptions(valueOptions, isSelectNative ? 'option' : _MenuItem.default))
|
|
175
185
|
}));
|
|
176
186
|
}
|
|
177
187
|
|
|
@@ -205,7 +215,7 @@ process.env.NODE_ENV !== "production" ? GridEditSingleSelectCell.propTypes = {
|
|
|
205
215
|
/**
|
|
206
216
|
* The cell value formatted with the column valueFormatter.
|
|
207
217
|
*/
|
|
208
|
-
formattedValue: _propTypes.default.any
|
|
218
|
+
formattedValue: _propTypes.default.any,
|
|
209
219
|
|
|
210
220
|
/**
|
|
211
221
|
* Get the cell value of a row and field.
|
|
@@ -179,14 +179,11 @@ function GridColumnHeaderItem(props) {
|
|
|
179
179
|
|
|
180
180
|
if (hasFocus && !columnMenuState.open) {
|
|
181
181
|
const focusableElement = headerCellRef.current.querySelector('[tabindex="0"]');
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
} else {
|
|
186
|
-
headerCellRef.current.focus();
|
|
187
|
-
}
|
|
182
|
+
const elementToFocus = focusableElement || headerCellRef.current;
|
|
183
|
+
elementToFocus == null ? void 0 : elementToFocus.focus();
|
|
184
|
+
apiRef.current.columnHeadersContainerElementRef.current.scrollLeft = 0;
|
|
188
185
|
}
|
|
189
|
-
});
|
|
186
|
+
}, [apiRef, hasFocus]);
|
|
190
187
|
const headerClassName = typeof column.headerClassName === 'function' ? column.headerClassName({
|
|
191
188
|
field: column.field,
|
|
192
189
|
colDef: column
|