@mui/x-data-grid 6.16.1 → 6.16.2
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 +104 -0
- package/DataGrid/DataGrid.d.ts +7 -0
- package/DataGrid/DataGrid.js +8 -1
- package/colDef/gridDateColDef.js +0 -4
- package/components/GridRow.js +7 -3
- package/components/cell/GridCell.js +7 -3
- package/components/containers/GridRootStyles.js +3 -0
- package/components/panel/filterPanel/GridFilterForm.d.ts +7 -0
- package/components/panel/filterPanel/GridFilterForm.js +8 -0
- package/components/panel/filterPanel/GridFilterPanel.d.ts +7 -0
- package/components/panel/filterPanel/GridFilterPanel.js +8 -0
- package/components/toolbar/GridToolbarQuickFilter.d.ts +8 -0
- package/components/toolbar/GridToolbarQuickFilter.js +9 -0
- package/components/virtualization/GridVirtualScroller.js +3 -1
- package/constants/gridClasses.d.ts +4 -0
- package/constants/gridClasses.js +1 -1
- package/hooks/features/columnGrouping/gridColumnGroupsUtils.d.ts +4 -1
- package/hooks/features/columnGrouping/gridColumnGroupsUtils.js +13 -2
- package/hooks/features/columnGrouping/useGridColumnGrouping.js +12 -6
- package/hooks/features/columns/gridColumnsUtils.js +0 -1
- package/hooks/features/filter/gridFilterUtils.js +4 -4
- package/hooks/features/virtualization/useGridVirtualScroller.js +8 -2
- package/index.js +1 -1
- package/legacy/DataGrid/DataGrid.js +8 -1
- package/legacy/colDef/gridDateColDef.js +0 -4
- package/legacy/components/GridRow.js +6 -2
- package/legacy/components/cell/GridCell.js +7 -3
- package/legacy/components/containers/GridRootStyles.js +2 -0
- package/legacy/components/panel/filterPanel/GridFilterForm.js +8 -0
- package/legacy/components/panel/filterPanel/GridFilterPanel.js +8 -0
- package/legacy/components/toolbar/GridToolbarQuickFilter.js +9 -0
- package/legacy/components/virtualization/GridVirtualScroller.js +3 -1
- package/legacy/constants/gridClasses.js +1 -1
- package/legacy/hooks/features/columnGrouping/gridColumnGroupsUtils.js +13 -2
- package/legacy/hooks/features/columnGrouping/useGridColumnGrouping.js +12 -6
- package/legacy/hooks/features/columns/gridColumnsUtils.js +0 -1
- package/legacy/hooks/features/filter/gridFilterUtils.js +4 -4
- package/legacy/hooks/features/virtualization/useGridVirtualScroller.js +8 -2
- package/legacy/index.js +1 -1
- package/legacy/locales/arSD.js +26 -28
- package/legacy/locales/roRO.js +1 -1
- package/locales/arSD.js +26 -28
- package/locales/roRO.js +1 -1
- package/models/events/gridEventLookup.d.ts +14 -0
- package/models/props/DataGridProps.d.ts +1 -1
- package/modern/DataGrid/DataGrid.js +8 -1
- package/modern/colDef/gridDateColDef.js +0 -4
- package/modern/components/GridRow.js +7 -3
- package/modern/components/cell/GridCell.js +6 -2
- package/modern/components/containers/GridRootStyles.js +3 -0
- package/modern/components/panel/filterPanel/GridFilterForm.js +8 -0
- package/modern/components/panel/filterPanel/GridFilterPanel.js +8 -0
- package/modern/components/toolbar/GridToolbarQuickFilter.js +9 -0
- package/modern/components/virtualization/GridVirtualScroller.js +3 -1
- package/modern/constants/gridClasses.js +1 -1
- package/modern/hooks/features/columnGrouping/gridColumnGroupsUtils.js +13 -2
- package/modern/hooks/features/columnGrouping/useGridColumnGrouping.js +10 -3
- package/modern/hooks/features/columns/gridColumnsUtils.js +0 -1
- package/modern/hooks/features/filter/gridFilterUtils.js +4 -4
- package/modern/hooks/features/virtualization/useGridVirtualScroller.js +8 -2
- package/modern/index.js +1 -1
- package/modern/locales/arSD.js +26 -28
- package/modern/locales/roRO.js +1 -1
- package/node/DataGrid/DataGrid.js +8 -1
- package/node/colDef/gridDateColDef.js +0 -4
- package/node/components/GridRow.js +7 -3
- package/node/components/cell/GridCell.js +6 -2
- package/node/components/containers/GridRootStyles.js +3 -0
- package/node/components/panel/filterPanel/GridFilterForm.js +9 -1
- package/node/components/panel/filterPanel/GridFilterPanel.js +9 -1
- package/node/components/toolbar/GridToolbarQuickFilter.js +10 -1
- package/node/components/virtualization/GridVirtualScroller.js +3 -1
- package/node/constants/gridClasses.js +1 -1
- package/node/hooks/features/columnGrouping/gridColumnGroupsUtils.js +13 -2
- package/node/hooks/features/columnGrouping/useGridColumnGrouping.js +10 -3
- package/node/hooks/features/columns/gridColumnsUtils.js +0 -1
- package/node/hooks/features/filter/gridFilterUtils.js +4 -4
- package/node/hooks/features/virtualization/useGridVirtualScroller.js +8 -2
- package/node/index.js +1 -1
- package/node/locales/arSD.js +26 -28
- package/node/locales/roRO.js +1 -1
- package/package.json +1 -1
|
@@ -132,4 +132,13 @@ process.env.NODE_ENV !== "production" ? GridToolbarQuickFilter.propTypes = {
|
|
|
132
132
|
*/
|
|
133
133
|
quickFilterParser: PropTypes.func
|
|
134
134
|
} : void 0;
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* Demos:
|
|
138
|
+
* - [Filtering - overview](https://mui.com/x/react-data-grid/filtering/)
|
|
139
|
+
* - [Filtering - quick filter](https://mui.com/x/react-data-grid/filtering/quick-filter/)
|
|
140
|
+
*
|
|
141
|
+
* API:
|
|
142
|
+
* - [GridToolbarQuickFilter API](https://mui.com/x/api/data-grid/grid-toolbar-quick-filter/)
|
|
143
|
+
*/
|
|
135
144
|
export { GridToolbarQuickFilter };
|
|
@@ -26,8 +26,10 @@ const VirtualScrollerRoot = styled('div', {
|
|
|
26
26
|
position: 'relative',
|
|
27
27
|
'@media print': {
|
|
28
28
|
overflow: 'hidden'
|
|
29
|
-
}
|
|
29
|
+
},
|
|
30
|
+
zIndex: 0 // See https://github.com/mui/mui-x/issues/10547
|
|
30
31
|
});
|
|
32
|
+
|
|
31
33
|
const GridVirtualScroller = /*#__PURE__*/React.forwardRef(function GridVirtualScroller(props, ref) {
|
|
32
34
|
const rootProps = useGridRootProps();
|
|
33
35
|
const classes = useUtilityClasses(rootProps);
|
|
@@ -2,4 +2,4 @@ import { unstable_generateUtilityClasses as generateUtilityClasses, unstable_gen
|
|
|
2
2
|
export function getDataGridUtilityClass(slot) {
|
|
3
3
|
return generateUtilityClass('MuiDataGrid', slot);
|
|
4
4
|
}
|
|
5
|
-
export const gridClasses = generateUtilityClasses('MuiDataGrid', ['actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'autoHeight', 'autosizing', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--withRenderer', 'cell--rangeTop', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell', 'cellContent', 'cellCheckbox', 'cellSkeleton', 'checkboxInput', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderDropZone', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnGroupHeader', 'columnHeader--filledGroup', 'columnHeader--emptyGroup', 'columnHeader--showColumnBorder', 'columnHeaders', 'columnHeadersInner', 'columnHeadersInner--scrollable', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsPanel', 'columnsPanelRow', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'headerFilterRow', 'iconButtonContainer', 'iconSeparator', 'main', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'overlayWrapper', 'overlayWrapperInner', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'row', 'row--editable', 'row--editing', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'row--detailPanelExpanded', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'pinnedColumns--left', 'pinnedColumns--right', 'pinnedColumnHeaders', 'pinnedColumnHeaders--left', 'pinnedColumnHeaders--right', 'withBorderColor', 'cell--withRightBorder', 'columnHeader--withRightBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pinnedRowsRenderZone']);
|
|
5
|
+
export const gridClasses = generateUtilityClasses('MuiDataGrid', ['actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'autoHeight', 'autosizing', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--withRenderer', 'cell--rangeTop', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell--selectionMode', 'cell', 'cellContent', 'cellCheckbox', 'cellSkeleton', 'checkboxInput', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderDropZone', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnGroupHeader', 'columnHeader--filledGroup', 'columnHeader--emptyGroup', 'columnHeader--showColumnBorder', 'columnHeaders', 'columnHeadersInner', 'columnHeadersInner--scrollable', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsPanel', 'columnsPanelRow', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'headerFilterRow', 'iconButtonContainer', 'iconSeparator', 'main', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'overlayWrapper', 'overlayWrapperInner', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'row', 'row--editable', 'row--editing', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'row--detailPanelExpanded', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'pinnedColumns--left', 'pinnedColumns--right', 'pinnedColumnHeaders', 'pinnedColumnHeaders--left', 'pinnedColumnHeaders--right', 'withBorderColor', 'cell--withRightBorder', 'columnHeader--withRightBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pinnedRowsRenderZone']);
|
|
@@ -34,11 +34,20 @@ export const unwrapGroupingColumnModel = columnGroupingModel => {
|
|
|
34
34
|
});
|
|
35
35
|
return unwrappedSubTree;
|
|
36
36
|
};
|
|
37
|
-
export const getColumnGroupsHeaderStructure = (orderedColumns, unwrappedGroupingModel) => {
|
|
37
|
+
export const getColumnGroupsHeaderStructure = (orderedColumns, unwrappedGroupingModel, pinnedFields) => {
|
|
38
38
|
const getParents = field => unwrappedGroupingModel[field] ?? [];
|
|
39
39
|
const groupingHeaderStructure = [];
|
|
40
40
|
const maxDepth = Math.max(...orderedColumns.map(field => getParents(field).length));
|
|
41
41
|
const haveSameParents = (field1, field2, depth) => isDeepEqual(getParents(field1).slice(0, depth + 1), getParents(field2).slice(0, depth + 1));
|
|
42
|
+
const haveDifferentContainers = (field1, field2) => {
|
|
43
|
+
if (pinnedFields?.left && pinnedFields.left.includes(field1) && !pinnedFields.left.includes(field2)) {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
if (pinnedFields?.right && !pinnedFields.right.includes(field1) && pinnedFields.right.includes(field2)) {
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
return false;
|
|
50
|
+
};
|
|
42
51
|
for (let depth = 0; depth < maxDepth; depth += 1) {
|
|
43
52
|
const depthStructure = orderedColumns.reduce((structure, newField) => {
|
|
44
53
|
const groupId = getParents(newField)[depth] ?? null;
|
|
@@ -51,7 +60,9 @@ export const getColumnGroupsHeaderStructure = (orderedColumns, unwrappedGrouping
|
|
|
51
60
|
const lastGroup = structure[structure.length - 1];
|
|
52
61
|
const prevField = lastGroup.columnFields[lastGroup.columnFields.length - 1];
|
|
53
62
|
const prevGroupId = lastGroup.groupId;
|
|
54
|
-
if (prevGroupId !== groupId || !haveSameParents(prevField, newField, depth)
|
|
63
|
+
if (prevGroupId !== groupId || !haveSameParents(prevField, newField, depth) ||
|
|
64
|
+
// Fix for https://github.com/mui/mui-x/issues/7041
|
|
65
|
+
haveDifferentContainers(prevField, newField)) {
|
|
55
66
|
// It's a new group
|
|
56
67
|
return [...structure, {
|
|
57
68
|
columnFields: [newField],
|
|
@@ -46,7 +46,9 @@ export const columnGroupsStateInitializer = (state, props, apiRef) => {
|
|
|
46
46
|
const visibleColumnFields = gridVisibleColumnFieldsSelector(apiRef);
|
|
47
47
|
const groupLookup = createGroupLookup(props.columnGroupingModel ?? []);
|
|
48
48
|
const unwrappedGroupingModel = unwrapGroupingColumnModel(props.columnGroupingModel ?? []);
|
|
49
|
-
const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(columnFields, unwrappedGroupingModel
|
|
49
|
+
const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(columnFields, unwrappedGroupingModel,
|
|
50
|
+
// @ts-expect-error Move this part to `Pro` package
|
|
51
|
+
apiRef.current.state.pinnedColumns ?? {});
|
|
50
52
|
const maxDepth = visibleColumnFields.length === 0 ? 0 : Math.max(...visibleColumnFields.map(field => unwrappedGroupingModel[field]?.length ?? 0));
|
|
51
53
|
return _extends({}, state, {
|
|
52
54
|
columnGrouping: {
|
|
@@ -83,7 +85,10 @@ export const useGridColumnGrouping = (apiRef, props) => {
|
|
|
83
85
|
const unwrappedGroupingModel = unwrapGroupingColumnModel(props.columnGroupingModel ?? []);
|
|
84
86
|
apiRef.current.setState(state => {
|
|
85
87
|
const orderedFields = state.columns?.orderedFields ?? [];
|
|
86
|
-
|
|
88
|
+
|
|
89
|
+
// @ts-expect-error Move this logic to `Pro` package
|
|
90
|
+
const pinnedColumns = state.pinnedColumns ?? {};
|
|
91
|
+
const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(orderedFields, unwrappedGroupingModel, pinnedColumns);
|
|
87
92
|
return _extends({}, state, {
|
|
88
93
|
columnGrouping: _extends({}, state.columnGrouping, {
|
|
89
94
|
headerStructure: columnGroupsHeaderStructure
|
|
@@ -95,11 +100,13 @@ export const useGridColumnGrouping = (apiRef, props) => {
|
|
|
95
100
|
if (!props.experimentalFeatures?.columnGrouping) {
|
|
96
101
|
return;
|
|
97
102
|
}
|
|
103
|
+
// @ts-expect-error Move this logic to `Pro` package
|
|
104
|
+
const pinnedColumns = apiRef.current.getPinnedColumns?.() ?? {};
|
|
98
105
|
const columnFields = gridColumnFieldsSelector(apiRef);
|
|
99
106
|
const visibleColumnFields = gridVisibleColumnFieldsSelector(apiRef);
|
|
100
107
|
const groupLookup = createGroupLookup(columnGroupingModel ?? []);
|
|
101
108
|
const unwrappedGroupingModel = unwrapGroupingColumnModel(columnGroupingModel ?? []);
|
|
102
|
-
const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(columnFields, unwrappedGroupingModel);
|
|
109
|
+
const columnGroupsHeaderStructure = getColumnGroupsHeaderStructure(columnFields, unwrappedGroupingModel, pinnedColumns);
|
|
103
110
|
const maxDepth = visibleColumnFields.length === 0 ? 0 : Math.max(...visibleColumnFields.map(field => unwrappedGroupingModel[field]?.length ?? 0));
|
|
104
111
|
apiRef.current.setState(state => {
|
|
105
112
|
return _extends({}, state, {
|
|
@@ -50,7 +50,6 @@ export function computeFlexColumnsWidth({
|
|
|
50
50
|
for (let i = 0; i < flexColumns.length; i += 1) {
|
|
51
51
|
const column = flexColumns[i];
|
|
52
52
|
if (flexColumnsLookup.all[column.field] && flexColumnsLookup.all[column.field].frozen === true) {
|
|
53
|
-
// eslint-disable-next-line no-continue
|
|
54
53
|
continue;
|
|
55
54
|
}
|
|
56
55
|
|
|
@@ -160,7 +160,7 @@ export const buildAggregatedFilterItemsApplier = (getRowId, filterModel, apiRef,
|
|
|
160
160
|
|
|
161
161
|
// We generate a new function with `eval()` to avoid expensive patterns for JS engines
|
|
162
162
|
// such as a dynamic object assignment, e.g. `{ [dynamicKey]: value }`.
|
|
163
|
-
const filterItemTemplate = `(function filterItem$$(appliers, row, shouldApplyFilter) {
|
|
163
|
+
const filterItemTemplate = `(function filterItem$$(getRowId, appliers, row, shouldApplyFilter) {
|
|
164
164
|
${appliers.map((applier, i) => `const shouldApply${i} = !shouldApplyFilter || shouldApplyFilter(${JSON.stringify(applier.item.field)});`).join('\n')}
|
|
165
165
|
|
|
166
166
|
const result$$ = {
|
|
@@ -174,7 +174,7 @@ export const buildAggregatedFilterItemsApplier = (getRowId, filterModel, apiRef,
|
|
|
174
174
|
})`;
|
|
175
175
|
const filterItemCore = evalCode(filterItemTemplate.replaceAll('$$', String(filterItemsApplierId)));
|
|
176
176
|
const filterItem = (row, shouldApplyItem) => {
|
|
177
|
-
return filterItemCore(appliers, row, shouldApplyItem);
|
|
177
|
+
return filterItemCore(getRowId, appliers, row, shouldApplyItem);
|
|
178
178
|
};
|
|
179
179
|
filterItemsApplierId += 1;
|
|
180
180
|
return filterItem;
|
|
@@ -223,7 +223,7 @@ export const buildAggregatedQuickFilterApplier = (getRowId, filterModel, apiRef)
|
|
|
223
223
|
const result = {};
|
|
224
224
|
const usedCellParams = {};
|
|
225
225
|
|
|
226
|
-
/* eslint-disable no-restricted-syntax, no-labels
|
|
226
|
+
/* eslint-disable no-restricted-syntax, no-labels */
|
|
227
227
|
outer: for (let v = 0; v < quickFilterValues.length; v += 1) {
|
|
228
228
|
const filterValue = quickFilterValues[v];
|
|
229
229
|
for (let i = 0; i < appliersPerField.length; i += 1) {
|
|
@@ -260,7 +260,7 @@ export const buildAggregatedQuickFilterApplier = (getRowId, filterModel, apiRef)
|
|
|
260
260
|
}
|
|
261
261
|
result[filterValue] = false;
|
|
262
262
|
}
|
|
263
|
-
/* eslint-enable no-restricted-syntax, no-labels
|
|
263
|
+
/* eslint-enable no-restricted-syntax, no-labels */
|
|
264
264
|
|
|
265
265
|
return result;
|
|
266
266
|
};
|
|
@@ -348,10 +348,16 @@ export const useGridVirtualScroller = props => {
|
|
|
348
348
|
}
|
|
349
349
|
return -1;
|
|
350
350
|
}, [cellFocus, currentPage.rows]);
|
|
351
|
-
useGridApiEventHandler(apiRef, '
|
|
351
|
+
useGridApiEventHandler(apiRef, 'rowMouseOver', (params, event) => {
|
|
352
|
+
if (event.currentTarget.contains(event.relatedTarget)) {
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
352
355
|
setHoveredRowId(params.id ?? null);
|
|
353
356
|
});
|
|
354
|
-
useGridApiEventHandler(apiRef, '
|
|
357
|
+
useGridApiEventHandler(apiRef, 'rowMouseOut', (params, event) => {
|
|
358
|
+
if (event.currentTarget.contains(event.relatedTarget)) {
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
355
361
|
setHoveredRowId(null);
|
|
356
362
|
});
|
|
357
363
|
const getRows = (params = {
|
package/modern/index.js
CHANGED
package/modern/locales/arSD.js
CHANGED
|
@@ -37,7 +37,7 @@ const arSDGrid = {
|
|
|
37
37
|
columnsPanelHideAllButton: 'إخفاء الكل',
|
|
38
38
|
// Filter panel text
|
|
39
39
|
filterPanelAddFilter: 'إضافة مرشِح',
|
|
40
|
-
|
|
40
|
+
filterPanelRemoveAll: 'حذف الكل',
|
|
41
41
|
filterPanelDeleteIconLabel: 'حذف',
|
|
42
42
|
filterPanelLogicOperator: 'عامل منطقي',
|
|
43
43
|
filterPanelOperator: 'عامل',
|
|
@@ -60,34 +60,32 @@ const arSDGrid = {
|
|
|
60
60
|
filterOperatorIsEmpty: 'خالي',
|
|
61
61
|
filterOperatorIsNotEmpty: 'غير خالي',
|
|
62
62
|
filterOperatorIsAnyOf: 'أي من',
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
63
|
+
'filterOperator=': '=',
|
|
64
|
+
'filterOperator!=': '!=',
|
|
65
|
+
'filterOperator>': '>',
|
|
66
|
+
'filterOperator>=': '>=',
|
|
67
|
+
'filterOperator<': '<',
|
|
68
|
+
'filterOperator<=': '<=',
|
|
70
69
|
// Header filter operators text
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
70
|
+
headerFilterOperatorContains: 'يحتوي على',
|
|
71
|
+
headerFilterOperatorEquals: 'يساوي',
|
|
72
|
+
headerFilterOperatorStartsWith: 'يبدأ ب',
|
|
73
|
+
headerFilterOperatorEndsWith: 'ينتهي ب',
|
|
74
|
+
headerFilterOperatorIs: 'هو',
|
|
75
|
+
headerFilterOperatorNot: 'هو ليس',
|
|
76
|
+
headerFilterOperatorAfter: 'يقع بعد',
|
|
77
|
+
headerFilterOperatorOnOrAfter: 'هو على او بعد',
|
|
78
|
+
headerFilterOperatorBefore: 'يقع قبل',
|
|
79
|
+
headerFilterOperatorOnOrBefore: 'هو على او بعد',
|
|
80
|
+
headerFilterOperatorIsEmpty: 'هو فارغ',
|
|
81
|
+
headerFilterOperatorIsNotEmpty: 'هو ليس فارغ',
|
|
82
|
+
headerFilterOperatorIsAnyOf: 'هو أي من',
|
|
83
|
+
'headerFilterOperator=': 'يساوي',
|
|
84
|
+
'headerFilterOperator!=': 'لا يساوي',
|
|
85
|
+
'headerFilterOperator>': 'أكبر من',
|
|
86
|
+
'headerFilterOperator>=': 'أكبر من او يساوي',
|
|
87
|
+
'headerFilterOperator<': 'اصغر من',
|
|
88
|
+
'headerFilterOperator<=': 'اصغر من او يساوي',
|
|
91
89
|
// Filter values text
|
|
92
90
|
filterValueAny: 'أي',
|
|
93
91
|
filterValueTrue: 'صائب',
|
package/modern/locales/roRO.js
CHANGED
|
@@ -74,7 +74,7 @@ const roROGrid = {
|
|
|
74
74
|
headerFilterOperatorIs: 'Este',
|
|
75
75
|
headerFilterOperatorNot: 'Nu este',
|
|
76
76
|
headerFilterOperatorAfter: 'Este după',
|
|
77
|
-
headerFilterOperatorOnOrAfter: 'Este la sau
|
|
77
|
+
headerFilterOperatorOnOrAfter: 'Este la sau după',
|
|
78
78
|
headerFilterOperatorBefore: 'Este înainte de',
|
|
79
79
|
headerFilterOperatorOnOrBefore: 'este la sau înainte de',
|
|
80
80
|
headerFilterOperatorIsEmpty: 'Este gol',
|
|
@@ -35,6 +35,13 @@ const DataGridRaw = /*#__PURE__*/React.forwardRef(function DataGrid(inProps, ref
|
|
|
35
35
|
}))
|
|
36
36
|
});
|
|
37
37
|
});
|
|
38
|
+
/**
|
|
39
|
+
* Demos:
|
|
40
|
+
* - [DataGrid](https://mui.com/x/react-data-grid/demo/)
|
|
41
|
+
*
|
|
42
|
+
* API:
|
|
43
|
+
* - [DataGrid API](https://mui.com/x/api/data-grid/data-grid/)
|
|
44
|
+
*/
|
|
38
45
|
const DataGrid = exports.DataGrid = /*#__PURE__*/React.memo(DataGridRaw);
|
|
39
46
|
|
|
40
47
|
/**
|
|
@@ -668,7 +675,7 @@ DataGridRaw.propTypes = {
|
|
|
668
675
|
/**
|
|
669
676
|
* If `true`, the grid will not use `valueFormatter` when exporting to CSV or copying to clipboard.
|
|
670
677
|
* If an object is provided, you can choose to ignore the `valueFormatter` for CSV export or clipboard export.
|
|
671
|
-
* @default
|
|
678
|
+
* @default false
|
|
672
679
|
*/
|
|
673
680
|
unstable_ignoreValueFormatterDuringExport: _propTypes.default.oneOfType([_propTypes.default.shape({
|
|
674
681
|
clipboardExport: _propTypes.default.bool,
|
|
@@ -60,8 +60,6 @@ const GRID_DATE_COL_DEF = exports.GRID_DATE_COL_DEF = (0, _extends2.default)({},
|
|
|
60
60
|
valueFormatter: gridDateFormatter,
|
|
61
61
|
filterOperators: (0, _gridDateOperators.getGridDateOperators)(),
|
|
62
62
|
renderEditCell: _GridEditDateCell.renderEditDateCell,
|
|
63
|
-
getApplyQuickFilterFn: undefined,
|
|
64
|
-
getApplyQuickFilterFnV7: undefined,
|
|
65
63
|
// @ts-ignore
|
|
66
64
|
pastedValueParser: value => new Date(value)
|
|
67
65
|
});
|
|
@@ -71,8 +69,6 @@ const GRID_DATETIME_COL_DEF = exports.GRID_DATETIME_COL_DEF = (0, _extends2.defa
|
|
|
71
69
|
valueFormatter: gridDateTimeFormatter,
|
|
72
70
|
filterOperators: (0, _gridDateOperators.getGridDateOperators)(true),
|
|
73
71
|
renderEditCell: _GridEditDateCell.renderEditDateCell,
|
|
74
|
-
getApplyQuickFilterFn: undefined,
|
|
75
|
-
getApplyQuickFilterFnV7: undefined,
|
|
76
72
|
// @ts-ignore
|
|
77
73
|
pastedValueParser: value => new Date(value)
|
|
78
74
|
});
|
|
@@ -30,7 +30,7 @@ var _utils2 = require("../utils/utils");
|
|
|
30
30
|
var _GridCell = require("./cell/GridCell");
|
|
31
31
|
var _gridEditingSelectors = require("../hooks/features/editing/gridEditingSelectors");
|
|
32
32
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
33
|
-
const _excluded = ["selected", "hovered", "rowId", "row", "index", "style", "position", "rowHeight", "className", "visibleColumns", "renderedColumns", "containerWidth", "firstColumnToRender", "lastColumnToRender", "isLastVisible", "focusedCellColumnIndexNotInRange", "isNotVisible", "focusedCell", "tabbableCell", "onClick", "onDoubleClick", "onMouseEnter", "onMouseLeave"];
|
|
33
|
+
const _excluded = ["selected", "hovered", "rowId", "row", "index", "style", "position", "rowHeight", "className", "visibleColumns", "renderedColumns", "containerWidth", "firstColumnToRender", "lastColumnToRender", "isLastVisible", "focusedCellColumnIndexNotInRange", "isNotVisible", "focusedCell", "tabbableCell", "onClick", "onDoubleClick", "onMouseEnter", "onMouseLeave", "onMouseOut", "onMouseOver"];
|
|
34
34
|
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); }
|
|
35
35
|
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; }
|
|
36
36
|
const useUtilityClasses = ownerState => {
|
|
@@ -84,7 +84,9 @@ const GridRow = /*#__PURE__*/React.forwardRef(function GridRow(props, refProp) {
|
|
|
84
84
|
onClick,
|
|
85
85
|
onDoubleClick,
|
|
86
86
|
onMouseEnter,
|
|
87
|
-
onMouseLeave
|
|
87
|
+
onMouseLeave,
|
|
88
|
+
onMouseOut,
|
|
89
|
+
onMouseOver
|
|
88
90
|
} = props,
|
|
89
91
|
other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
|
|
90
92
|
const apiRef = (0, _useGridApiContext.useGridApiContext)();
|
|
@@ -329,7 +331,9 @@ const GridRow = /*#__PURE__*/React.forwardRef(function GridRow(props, refProp) {
|
|
|
329
331
|
onClick: publishClick,
|
|
330
332
|
onDoubleClick: publish('rowDoubleClick', onDoubleClick),
|
|
331
333
|
onMouseEnter: publish('rowMouseEnter', onMouseEnter),
|
|
332
|
-
onMouseLeave: publish('rowMouseLeave', onMouseLeave)
|
|
334
|
+
onMouseLeave: publish('rowMouseLeave', onMouseLeave),
|
|
335
|
+
onMouseOut: publish('rowMouseOut', onMouseOut),
|
|
336
|
+
onMouseOver: publish('rowMouseOver', onMouseOver)
|
|
333
337
|
} : null;
|
|
334
338
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", (0, _extends2.default)({
|
|
335
339
|
ref: handleRef,
|
|
@@ -57,10 +57,11 @@ const useUtilityClasses = ownerState => {
|
|
|
57
57
|
showRightBorder,
|
|
58
58
|
isEditable,
|
|
59
59
|
isSelected,
|
|
60
|
+
isSelectionMode,
|
|
60
61
|
classes
|
|
61
62
|
} = ownerState;
|
|
62
63
|
const slots = {
|
|
63
|
-
root: ['cell', `cell--text${(0, _utils.unstable_capitalize)(align)}`, isEditable && 'cell--editable', isSelected && 'selected', showRightBorder && 'cell--withRightBorder', 'withBorderColor'],
|
|
64
|
+
root: ['cell', `cell--text${(0, _utils.unstable_capitalize)(align)}`, isEditable && 'cell--editable', isSelected && 'selected', showRightBorder && 'cell--withRightBorder', isSelectionMode && !isEditable && 'cell--selectionMode', 'withBorderColor'],
|
|
64
65
|
content: ['cellContent']
|
|
65
66
|
};
|
|
66
67
|
return (0, _utils.unstable_composeClasses)(slots, _gridClasses.getDataGridUtilityClass, classes);
|
|
@@ -466,12 +467,15 @@ const GridCellV7 = /*#__PURE__*/React.forwardRef((props, ref) => {
|
|
|
466
467
|
const cellRef = React.useRef(null);
|
|
467
468
|
const handleRef = (0, _utils.unstable_useForkRef)(ref, cellRef);
|
|
468
469
|
const focusElementRef = React.useRef(null);
|
|
470
|
+
// @ts-expect-error To access `unstable_cellSelection` flag as it's a `premium` feature
|
|
471
|
+
const isSelectionMode = rootProps.unstable_cellSelection ?? false;
|
|
469
472
|
const ownerState = {
|
|
470
473
|
align,
|
|
471
474
|
showRightBorder,
|
|
472
475
|
isEditable,
|
|
473
476
|
classes: rootProps.classes,
|
|
474
|
-
isSelected
|
|
477
|
+
isSelected,
|
|
478
|
+
isSelectionMode
|
|
475
479
|
};
|
|
476
480
|
const classes = useUtilityClasses(ownerState);
|
|
477
481
|
const publishMouseUp = React.useCallback(eventName => event => {
|
|
@@ -402,6 +402,9 @@ const GridRootStyles = exports.GridRootStyles = (0, _styles.styled)('div', {
|
|
|
402
402
|
overflow: 'hidden',
|
|
403
403
|
textOverflow: 'ellipsis'
|
|
404
404
|
},
|
|
405
|
+
[`& .${_gridClasses.gridClasses.cell}.${_gridClasses.gridClasses['cell--selectionMode']}`]: {
|
|
406
|
+
cursor: 'default'
|
|
407
|
+
},
|
|
405
408
|
[`& .${_gridClasses.gridClasses.cell}.${_gridClasses.gridClasses['cell--editing']}`]: {
|
|
406
409
|
padding: 1,
|
|
407
410
|
display: 'flex',
|
|
@@ -435,4 +435,12 @@ process.env.NODE_ENV !== "production" ? GridFilterForm.propTypes = {
|
|
|
435
435
|
* @default {}
|
|
436
436
|
*/
|
|
437
437
|
valueInputProps: _propTypes.default.any
|
|
438
|
-
} : void 0;
|
|
438
|
+
} : void 0;
|
|
439
|
+
|
|
440
|
+
/**
|
|
441
|
+
* Demos:
|
|
442
|
+
* - [Filtering - overview](https://mui.com/x/react-data-grid/filtering/)
|
|
443
|
+
*
|
|
444
|
+
* API:
|
|
445
|
+
* - [GridFilterForm API](https://mui.com/x/api/data-grid/grid-filter-form/)
|
|
446
|
+
*/
|
|
@@ -219,4 +219,12 @@ process.env.NODE_ENV !== "production" ? GridFilterPanel.propTypes = {
|
|
|
219
219
|
* The system prop that allows defining system overrides as well as additional CSS styles.
|
|
220
220
|
*/
|
|
221
221
|
sx: _propTypes.default.oneOfType([_propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.object, _propTypes.default.bool])), _propTypes.default.func, _propTypes.default.object])
|
|
222
|
-
} : void 0;
|
|
222
|
+
} : void 0;
|
|
223
|
+
|
|
224
|
+
/**
|
|
225
|
+
* Demos:
|
|
226
|
+
* - [Filtering - overview](https://mui.com/x/react-data-grid/filtering/)
|
|
227
|
+
*
|
|
228
|
+
* API:
|
|
229
|
+
* - [GridFilterPanel API](https://mui.com/x/api/data-grid/grid-filter-panel/)
|
|
230
|
+
*/
|
|
@@ -140,4 +140,13 @@ process.env.NODE_ENV !== "production" ? GridToolbarQuickFilter.propTypes = {
|
|
|
140
140
|
* @returns {any[]} The array of value on which quick filter is applied
|
|
141
141
|
*/
|
|
142
142
|
quickFilterParser: _propTypes.default.func
|
|
143
|
-
} : void 0;
|
|
143
|
+
} : void 0;
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Demos:
|
|
147
|
+
* - [Filtering - overview](https://mui.com/x/react-data-grid/filtering/)
|
|
148
|
+
* - [Filtering - quick filter](https://mui.com/x/react-data-grid/filtering/quick-filter/)
|
|
149
|
+
*
|
|
150
|
+
* API:
|
|
151
|
+
* - [GridToolbarQuickFilter API](https://mui.com/x/api/data-grid/grid-toolbar-quick-filter/)
|
|
152
|
+
*/
|
|
@@ -35,8 +35,10 @@ const VirtualScrollerRoot = (0, _system.styled)('div', {
|
|
|
35
35
|
position: 'relative',
|
|
36
36
|
'@media print': {
|
|
37
37
|
overflow: 'hidden'
|
|
38
|
-
}
|
|
38
|
+
},
|
|
39
|
+
zIndex: 0 // See https://github.com/mui/mui-x/issues/10547
|
|
39
40
|
});
|
|
41
|
+
|
|
40
42
|
const GridVirtualScroller = exports.GridVirtualScroller = /*#__PURE__*/React.forwardRef(function GridVirtualScroller(props, ref) {
|
|
41
43
|
const rootProps = (0, _useGridRootProps.useGridRootProps)();
|
|
42
44
|
const classes = useUtilityClasses(rootProps);
|
|
@@ -9,4 +9,4 @@ var _utils = require("@mui/utils");
|
|
|
9
9
|
function getDataGridUtilityClass(slot) {
|
|
10
10
|
return (0, _utils.unstable_generateUtilityClass)('MuiDataGrid', slot);
|
|
11
11
|
}
|
|
12
|
-
const gridClasses = exports.gridClasses = (0, _utils.unstable_generateUtilityClasses)('MuiDataGrid', ['actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'autoHeight', 'autosizing', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--withRenderer', 'cell--rangeTop', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell', 'cellContent', 'cellCheckbox', 'cellSkeleton', 'checkboxInput', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderDropZone', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnGroupHeader', 'columnHeader--filledGroup', 'columnHeader--emptyGroup', 'columnHeader--showColumnBorder', 'columnHeaders', 'columnHeadersInner', 'columnHeadersInner--scrollable', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsPanel', 'columnsPanelRow', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'headerFilterRow', 'iconButtonContainer', 'iconSeparator', 'main', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'overlayWrapper', 'overlayWrapperInner', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'row', 'row--editable', 'row--editing', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'row--detailPanelExpanded', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'pinnedColumns--left', 'pinnedColumns--right', 'pinnedColumnHeaders', 'pinnedColumnHeaders--left', 'pinnedColumnHeaders--right', 'withBorderColor', 'cell--withRightBorder', 'columnHeader--withRightBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pinnedRowsRenderZone']);
|
|
12
|
+
const gridClasses = exports.gridClasses = (0, _utils.unstable_generateUtilityClasses)('MuiDataGrid', ['actionsCell', 'aggregationColumnHeader', 'aggregationColumnHeader--alignLeft', 'aggregationColumnHeader--alignCenter', 'aggregationColumnHeader--alignRight', 'aggregationColumnHeaderLabel', 'autoHeight', 'autosizing', 'booleanCell', 'cell--editable', 'cell--editing', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--withRenderer', 'cell--rangeTop', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell--selectionMode', 'cell', 'cellContent', 'cellCheckbox', 'cellSkeleton', 'checkboxInput', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderDropZone', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnGroupHeader', 'columnHeader--filledGroup', 'columnHeader--emptyGroup', 'columnHeader--showColumnBorder', 'columnHeaders', 'columnHeadersInner', 'columnHeadersInner--scrollable', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsPanel', 'columnsPanelRow', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'headerFilterRow', 'iconButtonContainer', 'iconSeparator', 'main', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'overlayWrapper', 'overlayWrapperInner', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'row', 'row--editable', 'row--editing', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'row--detailPanelExpanded', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'pinnedColumns--left', 'pinnedColumns--right', 'pinnedColumnHeaders', 'pinnedColumnHeaders--left', 'pinnedColumnHeaders--right', 'withBorderColor', 'cell--withRightBorder', 'columnHeader--withRightBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pinnedRowsRenderZone']);
|
|
@@ -41,11 +41,20 @@ const unwrapGroupingColumnModel = columnGroupingModel => {
|
|
|
41
41
|
return unwrappedSubTree;
|
|
42
42
|
};
|
|
43
43
|
exports.unwrapGroupingColumnModel = unwrapGroupingColumnModel;
|
|
44
|
-
const getColumnGroupsHeaderStructure = (orderedColumns, unwrappedGroupingModel) => {
|
|
44
|
+
const getColumnGroupsHeaderStructure = (orderedColumns, unwrappedGroupingModel, pinnedFields) => {
|
|
45
45
|
const getParents = field => unwrappedGroupingModel[field] ?? [];
|
|
46
46
|
const groupingHeaderStructure = [];
|
|
47
47
|
const maxDepth = Math.max(...orderedColumns.map(field => getParents(field).length));
|
|
48
48
|
const haveSameParents = (field1, field2, depth) => (0, _utils.isDeepEqual)(getParents(field1).slice(0, depth + 1), getParents(field2).slice(0, depth + 1));
|
|
49
|
+
const haveDifferentContainers = (field1, field2) => {
|
|
50
|
+
if (pinnedFields?.left && pinnedFields.left.includes(field1) && !pinnedFields.left.includes(field2)) {
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
if (pinnedFields?.right && !pinnedFields.right.includes(field1) && pinnedFields.right.includes(field2)) {
|
|
54
|
+
return true;
|
|
55
|
+
}
|
|
56
|
+
return false;
|
|
57
|
+
};
|
|
49
58
|
for (let depth = 0; depth < maxDepth; depth += 1) {
|
|
50
59
|
const depthStructure = orderedColumns.reduce((structure, newField) => {
|
|
51
60
|
const groupId = getParents(newField)[depth] ?? null;
|
|
@@ -58,7 +67,9 @@ const getColumnGroupsHeaderStructure = (orderedColumns, unwrappedGroupingModel)
|
|
|
58
67
|
const lastGroup = structure[structure.length - 1];
|
|
59
68
|
const prevField = lastGroup.columnFields[lastGroup.columnFields.length - 1];
|
|
60
69
|
const prevGroupId = lastGroup.groupId;
|
|
61
|
-
if (prevGroupId !== groupId || !haveSameParents(prevField, newField, depth)
|
|
70
|
+
if (prevGroupId !== groupId || !haveSameParents(prevField, newField, depth) ||
|
|
71
|
+
// Fix for https://github.com/mui/mui-x/issues/7041
|
|
72
|
+
haveDifferentContainers(prevField, newField)) {
|
|
62
73
|
// It's a new group
|
|
63
74
|
return [...structure, {
|
|
64
75
|
columnFields: [newField],
|
|
@@ -55,7 +55,9 @@ const columnGroupsStateInitializer = (state, props, apiRef) => {
|
|
|
55
55
|
const visibleColumnFields = (0, _columns.gridVisibleColumnFieldsSelector)(apiRef);
|
|
56
56
|
const groupLookup = createGroupLookup(props.columnGroupingModel ?? []);
|
|
57
57
|
const unwrappedGroupingModel = (0, _gridColumnGroupsUtils.unwrapGroupingColumnModel)(props.columnGroupingModel ?? []);
|
|
58
|
-
const columnGroupsHeaderStructure = (0, _gridColumnGroupsUtils.getColumnGroupsHeaderStructure)(columnFields, unwrappedGroupingModel
|
|
58
|
+
const columnGroupsHeaderStructure = (0, _gridColumnGroupsUtils.getColumnGroupsHeaderStructure)(columnFields, unwrappedGroupingModel,
|
|
59
|
+
// @ts-expect-error Move this part to `Pro` package
|
|
60
|
+
apiRef.current.state.pinnedColumns ?? {});
|
|
59
61
|
const maxDepth = visibleColumnFields.length === 0 ? 0 : Math.max(...visibleColumnFields.map(field => unwrappedGroupingModel[field]?.length ?? 0));
|
|
60
62
|
return (0, _extends2.default)({}, state, {
|
|
61
63
|
columnGrouping: {
|
|
@@ -93,7 +95,10 @@ const useGridColumnGrouping = (apiRef, props) => {
|
|
|
93
95
|
const unwrappedGroupingModel = (0, _gridColumnGroupsUtils.unwrapGroupingColumnModel)(props.columnGroupingModel ?? []);
|
|
94
96
|
apiRef.current.setState(state => {
|
|
95
97
|
const orderedFields = state.columns?.orderedFields ?? [];
|
|
96
|
-
|
|
98
|
+
|
|
99
|
+
// @ts-expect-error Move this logic to `Pro` package
|
|
100
|
+
const pinnedColumns = state.pinnedColumns ?? {};
|
|
101
|
+
const columnGroupsHeaderStructure = (0, _gridColumnGroupsUtils.getColumnGroupsHeaderStructure)(orderedFields, unwrappedGroupingModel, pinnedColumns);
|
|
97
102
|
return (0, _extends2.default)({}, state, {
|
|
98
103
|
columnGrouping: (0, _extends2.default)({}, state.columnGrouping, {
|
|
99
104
|
headerStructure: columnGroupsHeaderStructure
|
|
@@ -105,11 +110,13 @@ const useGridColumnGrouping = (apiRef, props) => {
|
|
|
105
110
|
if (!props.experimentalFeatures?.columnGrouping) {
|
|
106
111
|
return;
|
|
107
112
|
}
|
|
113
|
+
// @ts-expect-error Move this logic to `Pro` package
|
|
114
|
+
const pinnedColumns = apiRef.current.getPinnedColumns?.() ?? {};
|
|
108
115
|
const columnFields = (0, _columns.gridColumnFieldsSelector)(apiRef);
|
|
109
116
|
const visibleColumnFields = (0, _columns.gridVisibleColumnFieldsSelector)(apiRef);
|
|
110
117
|
const groupLookup = createGroupLookup(columnGroupingModel ?? []);
|
|
111
118
|
const unwrappedGroupingModel = (0, _gridColumnGroupsUtils.unwrapGroupingColumnModel)(columnGroupingModel ?? []);
|
|
112
|
-
const columnGroupsHeaderStructure = (0, _gridColumnGroupsUtils.getColumnGroupsHeaderStructure)(columnFields, unwrappedGroupingModel);
|
|
119
|
+
const columnGroupsHeaderStructure = (0, _gridColumnGroupsUtils.getColumnGroupsHeaderStructure)(columnFields, unwrappedGroupingModel, pinnedColumns);
|
|
113
120
|
const maxDepth = visibleColumnFields.length === 0 ? 0 : Math.max(...visibleColumnFields.map(field => unwrappedGroupingModel[field]?.length ?? 0));
|
|
114
121
|
apiRef.current.setState(state => {
|
|
115
122
|
return (0, _extends2.default)({}, state, {
|
|
@@ -63,7 +63,6 @@ function computeFlexColumnsWidth({
|
|
|
63
63
|
for (let i = 0; i < flexColumns.length; i += 1) {
|
|
64
64
|
const column = flexColumns[i];
|
|
65
65
|
if (flexColumnsLookup.all[column.field] && flexColumnsLookup.all[column.field].frozen === true) {
|
|
66
|
-
// eslint-disable-next-line no-continue
|
|
67
66
|
continue;
|
|
68
67
|
}
|
|
69
68
|
|
|
@@ -169,7 +169,7 @@ const buildAggregatedFilterItemsApplier = (getRowId, filterModel, apiRef, disabl
|
|
|
169
169
|
|
|
170
170
|
// We generate a new function with `eval()` to avoid expensive patterns for JS engines
|
|
171
171
|
// such as a dynamic object assignment, e.g. `{ [dynamicKey]: value }`.
|
|
172
|
-
const filterItemTemplate = `(function filterItem$$(appliers, row, shouldApplyFilter) {
|
|
172
|
+
const filterItemTemplate = `(function filterItem$$(getRowId, appliers, row, shouldApplyFilter) {
|
|
173
173
|
${appliers.map((applier, i) => `const shouldApply${i} = !shouldApplyFilter || shouldApplyFilter(${JSON.stringify(applier.item.field)});`).join('\n')}
|
|
174
174
|
|
|
175
175
|
const result$$ = {
|
|
@@ -183,7 +183,7 @@ const buildAggregatedFilterItemsApplier = (getRowId, filterModel, apiRef, disabl
|
|
|
183
183
|
})`;
|
|
184
184
|
const filterItemCore = evalCode(filterItemTemplate.replaceAll('$$', String(filterItemsApplierId)));
|
|
185
185
|
const filterItem = (row, shouldApplyItem) => {
|
|
186
|
-
return filterItemCore(appliers, row, shouldApplyItem);
|
|
186
|
+
return filterItemCore(getRowId, appliers, row, shouldApplyItem);
|
|
187
187
|
};
|
|
188
188
|
filterItemsApplierId += 1;
|
|
189
189
|
return filterItem;
|
|
@@ -233,7 +233,7 @@ const buildAggregatedQuickFilterApplier = (getRowId, filterModel, apiRef) => {
|
|
|
233
233
|
const result = {};
|
|
234
234
|
const usedCellParams = {};
|
|
235
235
|
|
|
236
|
-
/* eslint-disable no-restricted-syntax, no-labels
|
|
236
|
+
/* eslint-disable no-restricted-syntax, no-labels */
|
|
237
237
|
outer: for (let v = 0; v < quickFilterValues.length; v += 1) {
|
|
238
238
|
const filterValue = quickFilterValues[v];
|
|
239
239
|
for (let i = 0; i < appliersPerField.length; i += 1) {
|
|
@@ -270,7 +270,7 @@ const buildAggregatedQuickFilterApplier = (getRowId, filterModel, apiRef) => {
|
|
|
270
270
|
}
|
|
271
271
|
result[filterValue] = false;
|
|
272
272
|
}
|
|
273
|
-
/* eslint-enable no-restricted-syntax, no-labels
|
|
273
|
+
/* eslint-enable no-restricted-syntax, no-labels */
|
|
274
274
|
|
|
275
275
|
return result;
|
|
276
276
|
};
|
|
@@ -359,10 +359,16 @@ const useGridVirtualScroller = props => {
|
|
|
359
359
|
}
|
|
360
360
|
return -1;
|
|
361
361
|
}, [cellFocus, currentPage.rows]);
|
|
362
|
-
(0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, '
|
|
362
|
+
(0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'rowMouseOver', (params, event) => {
|
|
363
|
+
if (event.currentTarget.contains(event.relatedTarget)) {
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
363
366
|
setHoveredRowId(params.id ?? null);
|
|
364
367
|
});
|
|
365
|
-
(0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, '
|
|
368
|
+
(0, _useGridApiEventHandler.useGridApiEventHandler)(apiRef, 'rowMouseOut', (params, event) => {
|
|
369
|
+
if (event.currentTarget.contains(event.relatedTarget)) {
|
|
370
|
+
return;
|
|
371
|
+
}
|
|
366
372
|
setHoveredRowId(null);
|
|
367
373
|
});
|
|
368
374
|
const getRows = (params = {
|
package/node/index.js
CHANGED