@mui/x-data-grid-pro 7.24.1 → 7.26.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 +148 -0
- package/DataGridPro/DataGridPro.js +5 -4
- package/DataGridPro/useDataGridProComponent.js +2 -2
- package/components/GridDetailPanelToggleCell.js +10 -1
- package/components/GridPinnedRows.js +3 -4
- package/esm/DataGridPro/DataGridPro.js +5 -4
- package/esm/DataGridPro/useDataGridProComponent.js +2 -2
- package/esm/components/GridDetailPanelToggleCell.js +11 -2
- package/esm/components/GridPinnedRows.js +4 -5
- package/esm/hooks/features/columnHeaders/useGridColumnHeaders.js +8 -7
- package/esm/hooks/features/columnPinning/useGridColumnPinning.js +1 -1
- package/esm/hooks/features/columnPinning/useGridColumnPinningPreProcessors.js +2 -9
- package/esm/hooks/features/dataSource/cache.js +1 -1
- package/esm/hooks/features/dataSource/useGridDataSource.js +6 -4
- package/esm/hooks/features/detailPanel/useGridDetailPanel.js +7 -12
- package/esm/hooks/features/index.js +1 -1
- package/esm/hooks/features/infiniteLoader/useGridInfiniteLoader.js +5 -5
- package/esm/hooks/features/serverSideTreeData/utils.js +2 -3
- package/esm/utils/releaseInfo.js +1 -1
- package/esm/utils/tree/utils.js +1 -1
- package/hooks/features/columnHeaders/useGridColumnHeaders.js +6 -5
- package/hooks/features/columnPinning/useGridColumnPinning.js +1 -1
- package/hooks/features/columnPinning/useGridColumnPinningPreProcessors.js +1 -8
- package/hooks/features/dataSource/cache.d.ts +1 -0
- package/hooks/features/dataSource/cache.js +1 -0
- package/hooks/features/dataSource/useGridDataSource.js +8 -6
- package/hooks/features/detailPanel/useGridDetailPanel.js +7 -12
- package/hooks/features/index.d.ts +1 -1
- package/hooks/features/index.js +17 -11
- package/hooks/features/infiniteLoader/useGridInfiniteLoader.js +3 -3
- package/hooks/features/serverSideTreeData/utils.d.ts +5 -5
- package/hooks/features/serverSideTreeData/utils.js +1 -2
- package/hooks/utils/useGridApiContext.d.ts +3 -1
- package/hooks/utils/useGridApiRef.d.ts +3 -1
- package/index.js +1 -1
- package/modern/DataGridPro/DataGridPro.js +5 -4
- package/modern/DataGridPro/useDataGridProComponent.js +2 -2
- package/modern/components/GridDetailPanelToggleCell.js +11 -2
- package/modern/components/GridPinnedRows.js +4 -5
- package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +8 -7
- package/modern/hooks/features/columnPinning/useGridColumnPinning.js +1 -1
- package/modern/hooks/features/columnPinning/useGridColumnPinningPreProcessors.js +2 -9
- package/modern/hooks/features/dataSource/cache.js +1 -1
- package/modern/hooks/features/dataSource/useGridDataSource.js +6 -4
- package/modern/hooks/features/detailPanel/useGridDetailPanel.js +7 -12
- package/modern/hooks/features/index.js +1 -1
- package/modern/hooks/features/infiniteLoader/useGridInfiniteLoader.js +5 -5
- package/modern/hooks/features/serverSideTreeData/utils.js +2 -3
- package/modern/index.js +1 -1
- package/modern/utils/releaseInfo.js +1 -1
- package/modern/utils/tree/utils.js +1 -1
- package/package.json +4 -4
- package/utils/releaseInfo.js +1 -1
- package/utils/tree/utils.d.ts +1 -1
- package/utils/tree/utils.js +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,154 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## 7.26.0
|
|
7
|
+
|
|
8
|
+
_Feb 7, 2025_
|
|
9
|
+
|
|
10
|
+
We'd like to offer a big thanks to the 6 contributors who made this release possible. Here are some highlights ✨:
|
|
11
|
+
|
|
12
|
+
- ⚡ Mount and resize performance improvements for the Data Grid
|
|
13
|
+
- 🐞 Bugfixes
|
|
14
|
+
|
|
15
|
+
Special thanks go out to the community contributors who have helped make this release possible:
|
|
16
|
+
@lauri865.
|
|
17
|
+
Following are all team members who have contributed to this release:
|
|
18
|
+
@arminmeh, @noraleonte, @LukasTy, @KenanYusuf, @flaviendelangle.
|
|
19
|
+
|
|
20
|
+
<!--/ HIGHLIGHT_ABOVE_SEPARATOR /-->
|
|
21
|
+
|
|
22
|
+
### Data Grid
|
|
23
|
+
|
|
24
|
+
#### `@mui/x-data-grid@7.26.0`
|
|
25
|
+
|
|
26
|
+
- [DataGrid] Avoid `<GridRoot />` double-render pass on mount in SPA mode (#16480) @lauri865
|
|
27
|
+
|
|
28
|
+
#### `@mui/x-data-grid-pro@7.26.0` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
29
|
+
|
|
30
|
+
Same changes as in `@mui/x-data-grid@7.26.0`, plus:
|
|
31
|
+
|
|
32
|
+
- [DataGridPro] Fix the return type of `useGridApiContext()` for Pro and Premium packages on React < 19 (#16446) @arminmeh
|
|
33
|
+
|
|
34
|
+
#### `@mui/x-data-grid-premium@7.26.0` [](https://mui.com/r/x-premium-svg-link 'Premium plan')
|
|
35
|
+
|
|
36
|
+
Same changes as in `@mui/x-data-grid-pro@7.26.0`, plus:
|
|
37
|
+
|
|
38
|
+
- [DataGridPremium] Fix "no rows" overlay not showing with active aggregation (#16468) @KenanYusuf
|
|
39
|
+
|
|
40
|
+
### Date and Time Pickers
|
|
41
|
+
|
|
42
|
+
#### `@mui/x-date-pickers@7.26.0`
|
|
43
|
+
|
|
44
|
+
Internal changes.
|
|
45
|
+
|
|
46
|
+
#### `@mui/x-date-pickers-pro@7.26.0` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
47
|
+
|
|
48
|
+
Same changes as in `@mui/x-date-pickers@7.26.0`, plus:
|
|
49
|
+
|
|
50
|
+
- [DateRangePicker] Fix `currentMonthCalendarPosition` prop behavior on mobile (#16457) @LukasTy
|
|
51
|
+
- [DateRangePicker] Fix vertical alignment for multi input fields (#16490) @noraleonte
|
|
52
|
+
|
|
53
|
+
### Charts
|
|
54
|
+
|
|
55
|
+
#### `@mui/x-charts@7.26.0`
|
|
56
|
+
|
|
57
|
+
Internal changes.
|
|
58
|
+
|
|
59
|
+
#### `@mui/x-charts-pro@7.26.0` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
60
|
+
|
|
61
|
+
Same changes as in `@mui/x-charts@7.26.0`.
|
|
62
|
+
|
|
63
|
+
### Tree View
|
|
64
|
+
|
|
65
|
+
#### `@mui/x-tree-view@7.26.0`
|
|
66
|
+
|
|
67
|
+
Internal changes.
|
|
68
|
+
|
|
69
|
+
#### `@mui/x-tree-view-pro@7.26.0` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
70
|
+
|
|
71
|
+
Same changes as in `@mui/x-tree-view@7.26.0`.
|
|
72
|
+
|
|
73
|
+
### Core
|
|
74
|
+
|
|
75
|
+
- [core] Fix corepack and pnpm installation in CircleCI (#16452) @flaviendelangle
|
|
76
|
+
|
|
77
|
+
## 7.25.0
|
|
78
|
+
|
|
79
|
+
_Jan 31, 2025_
|
|
80
|
+
|
|
81
|
+
We'd like to offer a big thanks to the 5 contributors who made this release possible. Here are some highlights ✨:
|
|
82
|
+
|
|
83
|
+
- 🐞 Bugfixes
|
|
84
|
+
|
|
85
|
+
Special thanks go out to the community contributors who have helped make this release possible:
|
|
86
|
+
@k-rajat19, @lauri865.
|
|
87
|
+
Following are all team members who have contributed to this release:
|
|
88
|
+
@KenanYusuf, @MBilalShafi, @arminmeh.
|
|
89
|
+
|
|
90
|
+
<!--/ HIGHLIGHT_ABOVE_SEPARATOR /-->
|
|
91
|
+
|
|
92
|
+
### Data Grid
|
|
93
|
+
|
|
94
|
+
#### `@mui/x-data-grid@7.25.0`
|
|
95
|
+
|
|
96
|
+
- [DataGrid] Fix `renderContext` calculation with scroll bounce / over-scroll (#16368) @lauri865
|
|
97
|
+
- [DataGrid] Refactor row state propagation (#16351) @lauri865
|
|
98
|
+
- [DataGrid] Add missing style overrides (#16272) (#16358) @KenanYusuf
|
|
99
|
+
- [DataGrid] Fix header filters keyboard navigation when there are no rows (#16369) @k-rajat19
|
|
100
|
+
- [DataGrid] Fix order of `onClick` prop on toolbar buttons (#16364) @KenanYusuf
|
|
101
|
+
- [DataGrid] Improve test coverage of server side data source (#15988) @MBilalShafi
|
|
102
|
+
- [DataGrid] Remove outdated warning (#16370) @MBilalShafi
|
|
103
|
+
- [DataGrid] Respect width of `iconContainer` during autosizing (#16409) @michelengelen
|
|
104
|
+
|
|
105
|
+
#### `@mui/x-data-grid-pro@7.25.0` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
106
|
+
|
|
107
|
+
Same changes as in `@mui/x-data-grid@7.25.0`, plus:
|
|
108
|
+
|
|
109
|
+
- [DataGridPro] Fix the return type of `useGridApiRef` for Pro and Premium packages on React < 19 (#16348) @arminmeh
|
|
110
|
+
- [DataGridPro] Fetch new rows only once when multiple models are changed in one cycle (#16382) @arminmeh
|
|
111
|
+
|
|
112
|
+
#### `@mui/x-data-grid-premium@7.25.0` [](https://mui.com/r/x-premium-svg-link 'Premium plan')
|
|
113
|
+
|
|
114
|
+
Same changes as in `@mui/x-data-grid-pro@7.25.0`.
|
|
115
|
+
|
|
116
|
+
### Date and Time Pickers
|
|
117
|
+
|
|
118
|
+
#### `@mui/x-date-pickers@7.25.0`
|
|
119
|
+
|
|
120
|
+
Internal changes.
|
|
121
|
+
|
|
122
|
+
#### `@mui/x-date-pickers-pro@7.25.0` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
123
|
+
|
|
124
|
+
Same changes as in `@mui/x-date-pickers@7.25.0`.
|
|
125
|
+
|
|
126
|
+
### Charts
|
|
127
|
+
|
|
128
|
+
#### `@mui/x-charts@7.25.0`
|
|
129
|
+
|
|
130
|
+
Internal changes.
|
|
131
|
+
|
|
132
|
+
#### `@mui/x-charts-pro@7.25.0` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
133
|
+
|
|
134
|
+
Same changes as in `@mui/x-charts@7.25.0`.
|
|
135
|
+
|
|
136
|
+
### Tree View
|
|
137
|
+
|
|
138
|
+
#### `@mui/x-tree-view@7.25.0`
|
|
139
|
+
|
|
140
|
+
Internal changes.
|
|
141
|
+
|
|
142
|
+
#### `@mui/x-tree-view-pro@7.25.0` [](https://mui.com/r/x-pro-svg-link 'Pro plan')
|
|
143
|
+
|
|
144
|
+
Same changes as in `@mui/x-tree-view@7.25.0`.
|
|
145
|
+
|
|
146
|
+
### Docs
|
|
147
|
+
|
|
148
|
+
- [docs] Improve release documentation (#16322) @MBilalShafi
|
|
149
|
+
|
|
150
|
+
### Core
|
|
151
|
+
|
|
152
|
+
- [test] Fix flaky data source tests in DataGrid (#16382) @lauri865
|
|
153
|
+
|
|
6
154
|
## 7.24.1
|
|
7
155
|
|
|
8
156
|
_Jan 24, 2025_
|
|
@@ -28,6 +28,10 @@ const configuration = {
|
|
|
28
28
|
}
|
|
29
29
|
};
|
|
30
30
|
const releaseInfo = (0, _releaseInfo.getReleaseInfo)();
|
|
31
|
+
const watermark = /*#__PURE__*/(0, _jsxRuntime.jsx)(_xLicense.Watermark, {
|
|
32
|
+
packageName: "x-data-grid-pro",
|
|
33
|
+
releaseInfo: releaseInfo
|
|
34
|
+
});
|
|
31
35
|
const DataGridProRaw = (0, _forwardRef.forwardRef)(function DataGridPro(inProps, ref) {
|
|
32
36
|
const props = (0, _useDataGridProProps.useDataGridProProps)(inProps);
|
|
33
37
|
const privateApiRef = (0, _useDataGridProComponent.useDataGridProComponent)(props.apiRef, props);
|
|
@@ -45,10 +49,7 @@ const DataGridProRaw = (0, _forwardRef.forwardRef)(function DataGridPro(inProps,
|
|
|
45
49
|
sx: props.sx
|
|
46
50
|
}, props.forwardedProps, props.slotProps?.root, {
|
|
47
51
|
ref: ref,
|
|
48
|
-
children:
|
|
49
|
-
packageName: "x-data-grid-pro",
|
|
50
|
-
releaseInfo: releaseInfo
|
|
51
|
-
})
|
|
52
|
+
children: watermark
|
|
52
53
|
}))
|
|
53
54
|
});
|
|
54
55
|
});
|
|
@@ -44,7 +44,6 @@ const useDataGridProComponent = (inputApiRef, props) => {
|
|
|
44
44
|
/**
|
|
45
45
|
* Register all state initializers here.
|
|
46
46
|
*/
|
|
47
|
-
(0, _internals.useGridInitializeState)(_internals.dimensionsStateInitializer, apiRef, props);
|
|
48
47
|
(0, _internals.useGridInitializeState)(_internals.headerFilteringStateInitializer, apiRef, props);
|
|
49
48
|
(0, _internals.useGridInitializeState)(_internals.rowSelectionStateInitializer, apiRef, props);
|
|
50
49
|
(0, _internals.useGridInitializeState)(_useGridDetailPanel.detailPanelStateInitializer, apiRef, props);
|
|
@@ -62,11 +61,12 @@ const useDataGridProComponent = (inputApiRef, props) => {
|
|
|
62
61
|
(0, _internals.useGridInitializeState)(_internals.densityStateInitializer, apiRef, props);
|
|
63
62
|
(0, _internals.useGridInitializeState)(_useGridColumnReorder.columnReorderStateInitializer, apiRef, props);
|
|
64
63
|
(0, _internals.useGridInitializeState)(_internals.columnResizeStateInitializer, apiRef, props);
|
|
65
|
-
(0, _internals.useGridInitializeState)(_internals.rowsMetaStateInitializer, apiRef, props);
|
|
66
64
|
(0, _internals.useGridInitializeState)(_internals.columnMenuStateInitializer, apiRef, props);
|
|
67
65
|
(0, _internals.useGridInitializeState)(_internals.columnGroupsStateInitializer, apiRef, props);
|
|
68
66
|
(0, _internals.useGridInitializeState)(_internals.virtualizationStateInitializer, apiRef, props);
|
|
69
67
|
(0, _internals.useGridInitializeState)(_useGridDataSource.dataSourceStateInitializer, apiRef, props);
|
|
68
|
+
(0, _internals.useGridInitializeState)(_internals.dimensionsStateInitializer, apiRef, props);
|
|
69
|
+
(0, _internals.useGridInitializeState)(_internals.rowsMetaStateInitializer, apiRef, props);
|
|
70
70
|
(0, _internals.useGridInitializeState)(_internals.listViewStateInitializer, apiRef, props);
|
|
71
71
|
(0, _internals.useGridHeaderFiltering)(apiRef, props);
|
|
72
72
|
(0, _useGridTreeData.useGridTreeData)(apiRef, props);
|
|
@@ -11,6 +11,7 @@ var React = _interopRequireWildcard(require("react"));
|
|
|
11
11
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
12
12
|
var _composeClasses = _interopRequireDefault(require("@mui/utils/composeClasses"));
|
|
13
13
|
var _xDataGrid = require("@mui/x-data-grid");
|
|
14
|
+
var _internals = require("@mui/x-data-grid/internals");
|
|
14
15
|
var _useGridRootProps = require("../hooks/utils/useGridRootProps");
|
|
15
16
|
var _useGridApiContext = require("../hooks/utils/useGridApiContext");
|
|
16
17
|
var _gridDetailPanelSelector = require("../hooks/features/detailPanel/gridDetailPanelSelector");
|
|
@@ -25,11 +26,19 @@ const useUtilityClasses = ownerState => {
|
|
|
25
26
|
};
|
|
26
27
|
return (0, _composeClasses.default)(slots, _xDataGrid.getDataGridUtilityClass, classes);
|
|
27
28
|
};
|
|
29
|
+
const isExpandedSelector = (0, _internals.createSelectorV8)(_gridDetailPanelSelector.gridDetailPanelExpandedRowIdsSelector, (expandedRowIds, rowId) => {
|
|
30
|
+
return expandedRowIds.includes(rowId);
|
|
31
|
+
});
|
|
28
32
|
function GridDetailPanelToggleCell(props) {
|
|
29
33
|
const {
|
|
30
34
|
id,
|
|
31
|
-
|
|
35
|
+
row,
|
|
36
|
+
api
|
|
32
37
|
} = props;
|
|
38
|
+
const rowId = api.getRowId(row);
|
|
39
|
+
const isExpanded = (0, _internals.useGridSelectorV8)({
|
|
40
|
+
current: api
|
|
41
|
+
}, isExpandedSelector, rowId);
|
|
33
42
|
const rootProps = (0, _useGridRootProps.useGridRootProps)();
|
|
34
43
|
const apiRef = (0, _useGridApiContext.useGridApiContext)();
|
|
35
44
|
const ownerState = {
|
|
@@ -24,15 +24,14 @@ function GridPinnedRows({
|
|
|
24
24
|
}) {
|
|
25
25
|
const classes = useUtilityClasses();
|
|
26
26
|
const apiRef = (0, _internals.useGridPrivateApiContext)();
|
|
27
|
-
const renderContext = (0, _xDataGrid.useGridSelector)(apiRef, _internals.gridRenderContextSelector);
|
|
28
27
|
const pinnedRowsData = (0, _xDataGrid.useGridSelector)(apiRef, _internals.gridPinnedRowsSelector);
|
|
29
28
|
const rows = pinnedRowsData[position];
|
|
30
29
|
const pinnedRenderContext = React.useMemo(() => ({
|
|
31
30
|
firstRowIndex: 0,
|
|
32
31
|
lastRowIndex: rows.length,
|
|
33
|
-
firstColumnIndex:
|
|
34
|
-
lastColumnIndex:
|
|
35
|
-
}), [rows
|
|
32
|
+
firstColumnIndex: -1,
|
|
33
|
+
lastColumnIndex: -1
|
|
34
|
+
}), [rows]);
|
|
36
35
|
if (rows.length === 0) {
|
|
37
36
|
return null;
|
|
38
37
|
}
|
|
@@ -21,6 +21,10 @@ const configuration = {
|
|
|
21
21
|
}
|
|
22
22
|
};
|
|
23
23
|
const releaseInfo = getReleaseInfo();
|
|
24
|
+
const watermark = /*#__PURE__*/_jsx(Watermark, {
|
|
25
|
+
packageName: "x-data-grid-pro",
|
|
26
|
+
releaseInfo: releaseInfo
|
|
27
|
+
});
|
|
24
28
|
const DataGridProRaw = forwardRef(function DataGridPro(inProps, ref) {
|
|
25
29
|
const props = useDataGridProProps(inProps);
|
|
26
30
|
const privateApiRef = useDataGridProComponent(props.apiRef, props);
|
|
@@ -38,10 +42,7 @@ const DataGridProRaw = forwardRef(function DataGridPro(inProps, ref) {
|
|
|
38
42
|
sx: props.sx
|
|
39
43
|
}, props.forwardedProps, props.slotProps?.root, {
|
|
40
44
|
ref: ref,
|
|
41
|
-
children:
|
|
42
|
-
packageName: "x-data-grid-pro",
|
|
43
|
-
releaseInfo: releaseInfo
|
|
44
|
-
})
|
|
45
|
+
children: watermark
|
|
45
46
|
}))
|
|
46
47
|
});
|
|
47
48
|
});
|
|
@@ -37,7 +37,6 @@ export const useDataGridProComponent = (inputApiRef, props) => {
|
|
|
37
37
|
/**
|
|
38
38
|
* Register all state initializers here.
|
|
39
39
|
*/
|
|
40
|
-
useGridInitializeState(dimensionsStateInitializer, apiRef, props);
|
|
41
40
|
useGridInitializeState(headerFilteringStateInitializer, apiRef, props);
|
|
42
41
|
useGridInitializeState(rowSelectionStateInitializer, apiRef, props);
|
|
43
42
|
useGridInitializeState(detailPanelStateInitializer, apiRef, props);
|
|
@@ -55,11 +54,12 @@ export const useDataGridProComponent = (inputApiRef, props) => {
|
|
|
55
54
|
useGridInitializeState(densityStateInitializer, apiRef, props);
|
|
56
55
|
useGridInitializeState(columnReorderStateInitializer, apiRef, props);
|
|
57
56
|
useGridInitializeState(columnResizeStateInitializer, apiRef, props);
|
|
58
|
-
useGridInitializeState(rowsMetaStateInitializer, apiRef, props);
|
|
59
57
|
useGridInitializeState(columnMenuStateInitializer, apiRef, props);
|
|
60
58
|
useGridInitializeState(columnGroupsStateInitializer, apiRef, props);
|
|
61
59
|
useGridInitializeState(virtualizationStateInitializer, apiRef, props);
|
|
62
60
|
useGridInitializeState(dataSourceStateInitializer, apiRef, props);
|
|
61
|
+
useGridInitializeState(dimensionsStateInitializer, apiRef, props);
|
|
62
|
+
useGridInitializeState(rowsMetaStateInitializer, apiRef, props);
|
|
63
63
|
useGridInitializeState(listViewStateInitializer, apiRef, props);
|
|
64
64
|
useGridHeaderFiltering(apiRef, props);
|
|
65
65
|
useGridTreeData(apiRef, props);
|
|
@@ -3,9 +3,10 @@ import * as React from 'react';
|
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
4
|
import composeClasses from '@mui/utils/composeClasses';
|
|
5
5
|
import { getDataGridUtilityClass, useGridSelector } from '@mui/x-data-grid';
|
|
6
|
+
import { createSelectorV8, useGridSelectorV8 } from '@mui/x-data-grid/internals';
|
|
6
7
|
import { useGridRootProps } from "../hooks/utils/useGridRootProps.js";
|
|
7
8
|
import { useGridApiContext } from "../hooks/utils/useGridApiContext.js";
|
|
8
|
-
import { gridDetailPanelExpandedRowsContentCacheSelector } from "../hooks/features/detailPanel/gridDetailPanelSelector.js";
|
|
9
|
+
import { gridDetailPanelExpandedRowIdsSelector, gridDetailPanelExpandedRowsContentCacheSelector } from "../hooks/features/detailPanel/gridDetailPanelSelector.js";
|
|
9
10
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
10
11
|
const useUtilityClasses = ownerState => {
|
|
11
12
|
const {
|
|
@@ -17,11 +18,19 @@ const useUtilityClasses = ownerState => {
|
|
|
17
18
|
};
|
|
18
19
|
return composeClasses(slots, getDataGridUtilityClass, classes);
|
|
19
20
|
};
|
|
21
|
+
const isExpandedSelector = createSelectorV8(gridDetailPanelExpandedRowIdsSelector, (expandedRowIds, rowId) => {
|
|
22
|
+
return expandedRowIds.includes(rowId);
|
|
23
|
+
});
|
|
20
24
|
function GridDetailPanelToggleCell(props) {
|
|
21
25
|
const {
|
|
22
26
|
id,
|
|
23
|
-
|
|
27
|
+
row,
|
|
28
|
+
api
|
|
24
29
|
} = props;
|
|
30
|
+
const rowId = api.getRowId(row);
|
|
31
|
+
const isExpanded = useGridSelectorV8({
|
|
32
|
+
current: api
|
|
33
|
+
}, isExpandedSelector, rowId);
|
|
25
34
|
const rootProps = useGridRootProps();
|
|
26
35
|
const apiRef = useGridApiContext();
|
|
27
36
|
const ownerState = {
|
|
@@ -2,7 +2,7 @@ import * as React from 'react';
|
|
|
2
2
|
import clsx from 'clsx';
|
|
3
3
|
import composeClasses from '@mui/utils/composeClasses';
|
|
4
4
|
import { getDataGridUtilityClass, gridClasses, useGridSelector } from '@mui/x-data-grid';
|
|
5
|
-
import { gridPinnedRowsSelector,
|
|
5
|
+
import { gridPinnedRowsSelector, useGridPrivateApiContext } from '@mui/x-data-grid/internals';
|
|
6
6
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
7
7
|
const useUtilityClasses = () => {
|
|
8
8
|
const slots = {
|
|
@@ -16,15 +16,14 @@ export function GridPinnedRows({
|
|
|
16
16
|
}) {
|
|
17
17
|
const classes = useUtilityClasses();
|
|
18
18
|
const apiRef = useGridPrivateApiContext();
|
|
19
|
-
const renderContext = useGridSelector(apiRef, gridRenderContextSelector);
|
|
20
19
|
const pinnedRowsData = useGridSelector(apiRef, gridPinnedRowsSelector);
|
|
21
20
|
const rows = pinnedRowsData[position];
|
|
22
21
|
const pinnedRenderContext = React.useMemo(() => ({
|
|
23
22
|
firstRowIndex: 0,
|
|
24
23
|
lastRowIndex: rows.length,
|
|
25
|
-
firstColumnIndex:
|
|
26
|
-
lastColumnIndex:
|
|
27
|
-
}), [rows
|
|
24
|
+
firstColumnIndex: -1,
|
|
25
|
+
lastColumnIndex: -1
|
|
26
|
+
}), [rows]);
|
|
28
27
|
if (rows.length === 0) {
|
|
29
28
|
return null;
|
|
30
29
|
}
|
|
@@ -2,8 +2,8 @@ import _extends from "@babel/runtime/helpers/esm/extends";
|
|
|
2
2
|
import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
|
3
3
|
const _excluded = ["getColumnsToRender", "getPinnedCellOffset", "renderContext", "leftRenderContext", "rightRenderContext", "pinnedColumns", "visibleColumns", "columnPositions"];
|
|
4
4
|
import * as React from 'react';
|
|
5
|
-
import { gridFocusColumnHeaderFilterSelector, useGridSelector, gridFilterModelSelector, gridTabIndexColumnHeaderFilterSelector, getDataGridUtilityClass
|
|
6
|
-
import { useGridColumnHeaders as useGridColumnHeadersCommunity, useGridPrivateApiContext, getGridFilter, GridColumnHeaderRow, shouldCellShowLeftBorder, shouldCellShowRightBorder, PinnedColumnPosition } from '@mui/x-data-grid/internals';
|
|
5
|
+
import { gridFocusColumnHeaderFilterSelector, useGridSelector, gridFilterModelSelector, gridTabIndexColumnHeaderFilterSelector, getDataGridUtilityClass } from '@mui/x-data-grid';
|
|
6
|
+
import { gridColumnsTotalWidthSelector, gridHasFillerSelector, gridHeaderFilterHeightSelector, gridVerticalScrollbarWidthSelector, useGridColumnHeaders as useGridColumnHeadersCommunity, useGridPrivateApiContext, getGridFilter, GridColumnHeaderRow, shouldCellShowLeftBorder, shouldCellShowRightBorder, PinnedColumnPosition } from '@mui/x-data-grid/internals';
|
|
7
7
|
import composeClasses from '@mui/utils/composeClasses';
|
|
8
8
|
import { useGridRootProps } from "../../utils/useGridRootProps.js";
|
|
9
9
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
@@ -48,9 +48,11 @@ export const useGridColumnHeaders = props => {
|
|
|
48
48
|
const rootProps = useGridRootProps();
|
|
49
49
|
const classes = useUtilityClasses(rootProps);
|
|
50
50
|
const disableHeaderFiltering = !rootProps.headerFilters;
|
|
51
|
-
const dimensions = useGridSelector(apiRef, gridDimensionsSelector);
|
|
52
51
|
const filterModel = useGridSelector(apiRef, gridFilterModelSelector);
|
|
53
|
-
const
|
|
52
|
+
const columnsTotalWidth = useGridSelector(apiRef, gridColumnsTotalWidthSelector);
|
|
53
|
+
const gridHasFiller = useGridSelector(apiRef, gridHasFillerSelector);
|
|
54
|
+
const headerFilterHeight = useGridSelector(apiRef, gridHeaderFilterHeightSelector);
|
|
55
|
+
const scrollbarWidth = useGridSelector(apiRef, gridVerticalScrollbarWidthSelector);
|
|
54
56
|
const columnHeaderFilterFocus = useGridSelector(apiRef, gridFocusColumnHeaderFilterSelector);
|
|
55
57
|
const getFilterItem = React.useCallback(colDef => {
|
|
56
58
|
const filterModelItem = filterModel?.items.find(it => it.field === colDef.field && it.operator !== 'isAnyOf');
|
|
@@ -87,15 +89,14 @@ export const useGridColumnHeaders = props => {
|
|
|
87
89
|
}) : colDef.headerClassName;
|
|
88
90
|
const item = getFilterItem(colDef);
|
|
89
91
|
const pinnedPosition = params?.position;
|
|
90
|
-
const
|
|
91
|
-
const pinnedOffset = getPinnedCellOffset(pinnedPosition, colDef.computedWidth, columnIndex, columnPositions, dimensions.columnsTotalWidth, scrollbarWidth);
|
|
92
|
+
const pinnedOffset = getPinnedCellOffset(pinnedPosition, colDef.computedWidth, columnIndex, columnPositions, columnsTotalWidth, scrollbarWidth);
|
|
92
93
|
const indexInSection = i;
|
|
93
94
|
const sectionLength = renderedColumns.length;
|
|
94
95
|
const showLeftBorder = shouldCellShowLeftBorder(pinnedPosition, indexInSection);
|
|
95
96
|
const showRightBorder = shouldCellShowRightBorder(pinnedPosition, indexInSection, sectionLength, rootProps.showCellVerticalBorder, gridHasFiller);
|
|
96
97
|
filters.push(/*#__PURE__*/_jsx(rootProps.slots.headerFilterCell, _extends({
|
|
97
98
|
colIndex: columnIndex,
|
|
98
|
-
height:
|
|
99
|
+
height: headerFilterHeight,
|
|
99
100
|
width: colDef.computedWidth,
|
|
100
101
|
colDef: colDef,
|
|
101
102
|
hasFocus: hasFocus,
|
|
@@ -140,7 +140,7 @@ export const useGridColumnPinning = (apiRef, props) => {
|
|
|
140
140
|
}, [apiRef]);
|
|
141
141
|
const setPinnedColumns = React.useCallback(newPinnedColumns => {
|
|
142
142
|
setState(apiRef, newPinnedColumns);
|
|
143
|
-
apiRef.current.
|
|
143
|
+
apiRef.current.requestPipeProcessorsApplication('hydrateColumns');
|
|
144
144
|
}, [apiRef]);
|
|
145
145
|
const isColumnPinned = React.useCallback(field => {
|
|
146
146
|
const leftPinnedColumns = pinnedColumns.left || [];
|
|
@@ -1,19 +1,12 @@
|
|
|
1
1
|
import _extends from "@babel/runtime/helpers/esm/extends";
|
|
2
2
|
import * as React from 'react';
|
|
3
|
-
import {
|
|
3
|
+
import { useGridRegisterPipeProcessor, gridVisiblePinnedColumnDefinitionsSelector } from '@mui/x-data-grid/internals';
|
|
4
4
|
export const useGridColumnPinningPreProcessors = (apiRef, props) => {
|
|
5
5
|
const {
|
|
6
6
|
disableColumnPinning
|
|
7
7
|
} = props;
|
|
8
|
-
let pinnedColumns;
|
|
9
|
-
if (apiRef.current.state.columns) {
|
|
10
|
-
pinnedColumns = gridPinnedColumnsSelector(apiRef.current.state);
|
|
11
|
-
} else {
|
|
12
|
-
pinnedColumns = null;
|
|
13
|
-
}
|
|
14
8
|
const prevAllPinnedColumns = React.useRef([]);
|
|
15
9
|
const reorderPinnedColumns = React.useCallback(columnsState => {
|
|
16
|
-
eslintUseValue(pinnedColumns);
|
|
17
10
|
if (columnsState.orderedFields.length === 0 || disableColumnPinning) {
|
|
18
11
|
return columnsState;
|
|
19
12
|
}
|
|
@@ -105,7 +98,7 @@ export const useGridColumnPinningPreProcessors = (apiRef, props) => {
|
|
|
105
98
|
return _extends({}, columnsState, {
|
|
106
99
|
orderedFields: [...leftPinnedColumns, ...centerColumns, ...rightPinnedColumns]
|
|
107
100
|
});
|
|
108
|
-
}, [apiRef, disableColumnPinning
|
|
101
|
+
}, [apiRef, disableColumnPinning]);
|
|
109
102
|
useGridRegisterPipeProcessor(apiRef, 'hydrateColumns', reorderPinnedColumns);
|
|
110
103
|
const isColumnPinned = React.useCallback((initialValue, field) => apiRef.current.isColumnPinned(field), [apiRef]);
|
|
111
104
|
useGridRegisterPipeProcessor(apiRef, 'isColumnPinned', isColumnPinned);
|
|
@@ -3,8 +3,9 @@ import * as React from 'react';
|
|
|
3
3
|
import useLazyRef from '@mui/utils/useLazyRef';
|
|
4
4
|
import { useGridApiEventHandler, gridRowsLoadingSelector, useGridApiMethod, useGridSelector } from '@mui/x-data-grid';
|
|
5
5
|
import { gridRowGroupsToFetchSelector } from '@mui/x-data-grid/internals';
|
|
6
|
+
import { unstable_debounce as debounce } from '@mui/utils';
|
|
6
7
|
import { gridGetRowsParamsSelector, gridDataSourceErrorsSelector } from "./gridDataSourceSelector.js";
|
|
7
|
-
import {
|
|
8
|
+
import { NestedDataManager, RequestStatus, runIfServerMode } from "./utils.js";
|
|
8
9
|
import { GridDataSourceCacheDefault } from "./cache.js";
|
|
9
10
|
const INITIAL_STATE = {
|
|
10
11
|
loading: {},
|
|
@@ -177,6 +178,7 @@ export const useGridDataSource = (apiRef, props) => {
|
|
|
177
178
|
});
|
|
178
179
|
});
|
|
179
180
|
}, [apiRef]);
|
|
181
|
+
const debouncedFetchRows = React.useMemo(() => debounce(fetchRows, 0), [fetchRows]);
|
|
180
182
|
const dataSourceApi = {
|
|
181
183
|
unstable_dataSource: {
|
|
182
184
|
setChildrenLoading,
|
|
@@ -191,9 +193,9 @@ export const useGridDataSource = (apiRef, props) => {
|
|
|
191
193
|
};
|
|
192
194
|
useGridApiMethod(apiRef, dataSourceApi, 'public');
|
|
193
195
|
useGridApiMethod(apiRef, dataSourcePrivateApi, 'private');
|
|
194
|
-
useGridApiEventHandler(apiRef, 'sortModelChange', runIfServerMode(props.sortingMode,
|
|
195
|
-
useGridApiEventHandler(apiRef, 'filterModelChange', runIfServerMode(props.filterMode,
|
|
196
|
-
useGridApiEventHandler(apiRef, 'paginationModelChange', runIfServerMode(props.paginationMode,
|
|
196
|
+
useGridApiEventHandler(apiRef, 'sortModelChange', runIfServerMode(props.sortingMode, debouncedFetchRows));
|
|
197
|
+
useGridApiEventHandler(apiRef, 'filterModelChange', runIfServerMode(props.filterMode, debouncedFetchRows));
|
|
198
|
+
useGridApiEventHandler(apiRef, 'paginationModelChange', runIfServerMode(props.paginationMode, debouncedFetchRows));
|
|
197
199
|
const isFirstRender = React.useRef(true);
|
|
198
200
|
React.useEffect(() => {
|
|
199
201
|
if (isFirstRender.current) {
|
|
@@ -4,9 +4,6 @@ import { useGridSelector, useGridApiEventHandler, useGridApiMethod, gridDataRowI
|
|
|
4
4
|
import { useGridRegisterPipeProcessor } from '@mui/x-data-grid/internals';
|
|
5
5
|
import { GRID_DETAIL_PANEL_TOGGLE_FIELD } from "./gridDetailPanelToggleColDef.js";
|
|
6
6
|
import { gridDetailPanelExpandedRowIdsSelector, gridDetailPanelExpandedRowsContentCacheSelector, gridDetailPanelExpandedRowsHeightCacheSelector, gridDetailPanelRawHeightCacheSelector } from "./gridDetailPanelSelector.js";
|
|
7
|
-
// FIXME: calling `api.updateDimensions()` here triggers a cycle where `updateDimensions` is
|
|
8
|
-
// called 3 times when opening/closing a panel.
|
|
9
|
-
|
|
10
7
|
export const detailPanelStateInitializer = (state, props) => {
|
|
11
8
|
return _extends({}, state, {
|
|
12
9
|
detailPanel: {
|
|
@@ -101,8 +98,6 @@ export const useGridDetailPanel = (apiRef, props) => {
|
|
|
101
98
|
})
|
|
102
99
|
});
|
|
103
100
|
});
|
|
104
|
-
apiRef.current.updateDimensions();
|
|
105
|
-
apiRef.current.forceUpdate();
|
|
106
101
|
}, [apiRef]);
|
|
107
102
|
const storeDetailPanelHeight = React.useCallback((id, height) => {
|
|
108
103
|
const heightCache = gridDetailPanelRawHeightCacheSelector(apiRef.current.state);
|
|
@@ -120,7 +115,6 @@ export const useGridDetailPanel = (apiRef, props) => {
|
|
|
120
115
|
})
|
|
121
116
|
});
|
|
122
117
|
});
|
|
123
|
-
apiRef.current.updateDimensions();
|
|
124
118
|
apiRef.current.requestPipeProcessorsApplication('rowHeight');
|
|
125
119
|
}, [apiRef]);
|
|
126
120
|
const detailPanelHasAutoHeight = React.useCallback(id => {
|
|
@@ -147,17 +141,19 @@ export const useGridDetailPanel = (apiRef, props) => {
|
|
|
147
141
|
}
|
|
148
142
|
}, [apiRef, props.detailPanelExpandedRowIds]);
|
|
149
143
|
const updateCachesAndForceUpdate = React.useCallback(() => {
|
|
144
|
+
if (!props.getDetailPanelContent) {
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
150
147
|
apiRef.current.setState(state => {
|
|
151
148
|
return _extends({}, state, {
|
|
152
149
|
detailPanel: _extends({}, state.detailPanel, cacheContentAndHeight(apiRef, props.getDetailPanelContent, props.getDetailPanelHeight, state.detailPanel.heightCache))
|
|
153
150
|
});
|
|
154
151
|
});
|
|
155
|
-
apiRef.current.updateDimensions?.();
|
|
156
152
|
apiRef.current.forceUpdate();
|
|
157
153
|
}, [apiRef, props.getDetailPanelContent, props.getDetailPanelHeight]);
|
|
158
154
|
useGridApiEventHandler(apiRef, 'sortedRowsSet', updateCachesAndForceUpdate);
|
|
159
|
-
const previousGetDetailPanelContentProp = React.useRef(
|
|
160
|
-
const previousGetDetailPanelHeightProp = React.useRef(
|
|
155
|
+
const previousGetDetailPanelContentProp = React.useRef(undefined);
|
|
156
|
+
const previousGetDetailPanelHeightProp = React.useRef(undefined);
|
|
161
157
|
const updateCachesIfNeeded = React.useCallback(() => {
|
|
162
158
|
if (props.getDetailPanelContent === previousGetDetailPanelContentProp.current && props.getDetailPanelHeight === previousGetDetailPanelHeightProp.current) {
|
|
163
159
|
return;
|
|
@@ -167,7 +163,6 @@ export const useGridDetailPanel = (apiRef, props) => {
|
|
|
167
163
|
detailPanel: _extends({}, state.detailPanel, cacheContentAndHeight(apiRef, props.getDetailPanelContent, props.getDetailPanelHeight, state.detailPanel.heightCache))
|
|
168
164
|
});
|
|
169
165
|
});
|
|
170
|
-
apiRef.current.updateDimensions?.();
|
|
171
166
|
previousGetDetailPanelContentProp.current = props.getDetailPanelContent;
|
|
172
167
|
previousGetDetailPanelHeightProp.current = props.getDetailPanelHeight;
|
|
173
168
|
}, [apiRef, props.getDetailPanelContent, props.getDetailPanelHeight]);
|
|
@@ -181,7 +176,8 @@ export const useGridDetailPanel = (apiRef, props) => {
|
|
|
181
176
|
initialValue.detail = heightCache[row.id] ?? 0; // Fallback to zero because the cache might not be ready yet (for example page was changed)
|
|
182
177
|
return initialValue;
|
|
183
178
|
}, [apiRef, expandedRowIds, updateCachesIfNeeded]);
|
|
184
|
-
|
|
179
|
+
const enabled = props.getDetailPanelContent !== undefined;
|
|
180
|
+
useGridRegisterPipeProcessor(apiRef, 'rowHeight', addDetailHeight, enabled);
|
|
185
181
|
const isFirstRender = React.useRef(true);
|
|
186
182
|
if (isFirstRender.current) {
|
|
187
183
|
updateCachesIfNeeded();
|
|
@@ -189,7 +185,6 @@ export const useGridDetailPanel = (apiRef, props) => {
|
|
|
189
185
|
React.useEffect(() => {
|
|
190
186
|
if (!isFirstRender.current) {
|
|
191
187
|
updateCachesIfNeeded();
|
|
192
|
-
apiRef.current.hydrateRowsMeta();
|
|
193
188
|
}
|
|
194
189
|
isFirstRender.current = false;
|
|
195
190
|
}, [apiRef, updateCachesIfNeeded]);
|
|
@@ -6,4 +6,4 @@ export * from "./treeData/index.js";
|
|
|
6
6
|
export * from "./detailPanel/index.js";
|
|
7
7
|
export * from "./rowPinning/index.js";
|
|
8
8
|
export * from "./dataSource/interfaces.js";
|
|
9
|
-
export
|
|
9
|
+
export { GridDataSourceCacheDefault } from "./dataSource/cache.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { useGridSelector, useGridApiOptionHandler, gridVisibleColumnDefinitionsSelector, useGridApiMethod
|
|
3
|
-
import { useGridVisibleRows, useTimeout } from '@mui/x-data-grid/internals';
|
|
2
|
+
import { useGridSelector, useGridApiOptionHandler, gridVisibleColumnDefinitionsSelector, useGridApiMethod } from '@mui/x-data-grid';
|
|
3
|
+
import { useGridVisibleRows, useTimeout, gridHorizontalScrollbarHeightSelector } from '@mui/x-data-grid/internals';
|
|
4
4
|
import useEventCallback from '@mui/utils/useEventCallback';
|
|
5
5
|
import { styled } from '@mui/system';
|
|
6
6
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
@@ -40,8 +40,6 @@ export const useGridInfiniteLoader = (apiRef, props) => {
|
|
|
40
40
|
}
|
|
41
41
|
});
|
|
42
42
|
const virtualScroller = apiRef.current.virtualScrollerRef.current;
|
|
43
|
-
const dimensions = useGridSelector(apiRef, gridDimensionsSelector);
|
|
44
|
-
const marginBottom = props.scrollEndThreshold - (dimensions.hasScrollX ? dimensions.scrollbarSize : 0);
|
|
45
43
|
React.useEffect(() => {
|
|
46
44
|
if (!isEnabled) {
|
|
47
45
|
return;
|
|
@@ -50,6 +48,8 @@ export const useGridInfiniteLoader = (apiRef, props) => {
|
|
|
50
48
|
return;
|
|
51
49
|
}
|
|
52
50
|
observer.current?.disconnect();
|
|
51
|
+
const horizontalScrollbarHeight = gridHorizontalScrollbarHeightSelector(apiRef.current.state);
|
|
52
|
+
const marginBottom = props.scrollEndThreshold - horizontalScrollbarHeight;
|
|
53
53
|
observer.current = new IntersectionObserver(handleLoadMoreRows, {
|
|
54
54
|
threshold: 1,
|
|
55
55
|
root: virtualScroller,
|
|
@@ -58,7 +58,7 @@ export const useGridInfiniteLoader = (apiRef, props) => {
|
|
|
58
58
|
if (triggerElement.current) {
|
|
59
59
|
observer.current.observe(triggerElement.current);
|
|
60
60
|
}
|
|
61
|
-
}, [virtualScroller, handleLoadMoreRows, isEnabled,
|
|
61
|
+
}, [apiRef, virtualScroller, handleLoadMoreRows, isEnabled, props.scrollEndThreshold]);
|
|
62
62
|
const updateTarget = node => {
|
|
63
63
|
if (triggerElement.current !== node) {
|
|
64
64
|
observer.current?.disconnect();
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { GRID_ROOT_GROUP_ID } from '@mui/x-data-grid';
|
|
2
|
-
import { getTreeNodeDescendants } from '@mui/x-data-grid/internals';
|
|
2
|
+
import { defaultGridFilterLookup, getTreeNodeDescendants } from '@mui/x-data-grid/internals';
|
|
3
3
|
export function skipFiltering(rowTree) {
|
|
4
4
|
const filteredRowsLookup = {};
|
|
5
5
|
const filteredChildrenCountLookup = {};
|
|
6
|
-
const filteredDescendantCountLookup = {};
|
|
7
6
|
const nodes = Object.values(rowTree);
|
|
8
7
|
for (let i = 0; i < nodes.length; i += 1) {
|
|
9
8
|
const node = nodes[i];
|
|
@@ -13,7 +12,7 @@ export function skipFiltering(rowTree) {
|
|
|
13
12
|
return {
|
|
14
13
|
filteredRowsLookup,
|
|
15
14
|
filteredChildrenCountLookup,
|
|
16
|
-
filteredDescendantCountLookup
|
|
15
|
+
filteredDescendantCountLookup: defaultGridFilterLookup.filteredDescendantCountLookup
|
|
17
16
|
};
|
|
18
17
|
}
|
|
19
18
|
export function skipSorting(rowTree) {
|
package/esm/utils/releaseInfo.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { ponyfillGlobal } from '@mui/utils';
|
|
2
2
|
export const getReleaseInfo = () => {
|
|
3
|
-
const releaseInfo = "
|
|
3
|
+
const releaseInfo = "MTczODg4MjgwMDAwMA==";
|
|
4
4
|
if (process.env.NODE_ENV !== 'production') {
|
|
5
5
|
// A simple hack to set the value in the test environment (has no build step).
|
|
6
6
|
// eslint-disable-next-line no-useless-concat
|
package/esm/utils/tree/utils.js
CHANGED
|
@@ -166,7 +166,7 @@ export const getVisibleRowsLookup = ({
|
|
|
166
166
|
}
|
|
167
167
|
const visibleRowsLookup = {};
|
|
168
168
|
const handleTreeNode = (node, areAncestorsExpanded) => {
|
|
169
|
-
const isPassingFiltering = filteredRowsLookup[node.id];
|
|
169
|
+
const isPassingFiltering = filteredRowsLookup[node.id] !== false;
|
|
170
170
|
if (node.type === 'group') {
|
|
171
171
|
node.children.forEach(childId => {
|
|
172
172
|
const childNode = tree[childId];
|