@mui/x-data-grid 7.0.0-beta.4 → 7.0.0-beta.6
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 +271 -61
- package/DataGrid/DataGrid.js +2 -0
- package/colDef/gridBooleanOperators.js +1 -1
- package/components/GridPinnedRows.d.ts +1 -2
- package/components/GridRow.d.ts +7 -9
- package/components/GridRow.js +41 -54
- package/components/cell/GridCell.d.ts +2 -3
- package/components/cell/GridCell.js +10 -10
- package/components/cell/GridSkeletonCell.d.ts +3 -2
- package/components/cell/GridSkeletonCell.js +14 -6
- package/components/columnSelection/GridCellCheckboxRenderer.js +6 -4
- package/components/columnsManagement/GridColumnsManagement.js +1 -1
- package/components/containers/GridRootStyles.js +9 -4
- package/components/virtualization/GridBottomContainer.js +1 -1
- package/components/virtualization/GridTopContainer.js +1 -1
- package/components/virtualization/GridVirtualScroller.js +7 -5
- package/components/virtualization/GridVirtualScrollerRenderZone.js +9 -3
- package/hooks/core/pipeProcessing/useGridPipeProcessing.js +22 -20
- package/hooks/features/columnHeaders/useGridColumnHeaders.js +11 -8
- package/hooks/features/columns/gridColumnsSelector.d.ts +6 -0
- package/hooks/features/columns/gridColumnsSelector.js +8 -1
- package/hooks/features/columns/useGridColumns.js +4 -0
- package/hooks/features/dimensions/useGridDimensions.js +1 -0
- package/hooks/features/editing/useGridRowEditing.js +1 -2
- package/hooks/features/filter/useGridFilter.js +2 -2
- package/hooks/features/rows/useGridParamsApi.js +6 -10
- package/hooks/features/rows/useGridRows.js +8 -4
- package/hooks/features/rows/useGridRowsMeta.js +5 -13
- package/hooks/features/sorting/gridSortingUtils.js +9 -1
- package/hooks/features/sorting/useGridSorting.js +2 -2
- package/hooks/features/virtualization/gridVirtualizationSelectors.d.ts +0 -9
- package/hooks/features/virtualization/gridVirtualizationSelectors.js +0 -7
- package/hooks/features/virtualization/useGridVirtualScroller.d.ts +3 -0
- package/hooks/features/virtualization/useGridVirtualScroller.js +88 -138
- package/hooks/features/virtualization/useGridVirtualization.d.ts +0 -8
- package/hooks/features/virtualization/useGridVirtualization.js +1 -6
- package/hooks/utils/useTimeout.d.ts +5 -3
- package/hooks/utils/useTimeout.js +13 -5
- package/index.js +1 -1
- package/internals/index.d.ts +1 -1
- package/internals/index.js +1 -1
- package/models/api/gridApiCommon.d.ts +2 -1
- package/models/api/gridInfiniteLoaderApi.d.ts +6 -0
- package/models/api/gridInfiniteLoaderApi.js +1 -0
- package/models/colDef/gridColDef.d.ts +7 -0
- package/modern/DataGrid/DataGrid.js +2 -0
- package/modern/colDef/gridBooleanOperators.js +1 -1
- package/modern/components/GridRow.js +40 -53
- package/modern/components/cell/GridCell.js +10 -10
- package/modern/components/cell/GridSkeletonCell.js +14 -6
- package/modern/components/columnSelection/GridCellCheckboxRenderer.js +6 -4
- package/modern/components/columnsManagement/GridColumnsManagement.js +1 -1
- package/modern/components/containers/GridRootStyles.js +9 -4
- package/modern/components/virtualization/GridBottomContainer.js +1 -1
- package/modern/components/virtualization/GridTopContainer.js +1 -1
- package/modern/components/virtualization/GridVirtualScroller.js +7 -5
- package/modern/components/virtualization/GridVirtualScrollerRenderZone.js +8 -3
- package/modern/hooks/core/pipeProcessing/useGridPipeProcessing.js +22 -20
- package/modern/hooks/features/columnHeaders/useGridColumnHeaders.js +11 -8
- package/modern/hooks/features/columns/gridColumnsSelector.js +8 -1
- package/modern/hooks/features/columns/useGridColumns.js +2 -0
- package/modern/hooks/features/dimensions/useGridDimensions.js +1 -0
- package/modern/hooks/features/editing/useGridRowEditing.js +1 -2
- package/modern/hooks/features/filter/useGridFilter.js +2 -2
- package/modern/hooks/features/rows/useGridParamsApi.js +6 -10
- package/modern/hooks/features/rows/useGridRows.js +8 -4
- package/modern/hooks/features/rows/useGridRowsMeta.js +5 -13
- package/modern/hooks/features/sorting/gridSortingUtils.js +9 -1
- package/modern/hooks/features/sorting/useGridSorting.js +2 -2
- package/modern/hooks/features/virtualization/gridVirtualizationSelectors.js +0 -7
- package/modern/hooks/features/virtualization/useGridVirtualScroller.js +85 -136
- package/modern/hooks/features/virtualization/useGridVirtualization.js +1 -6
- package/modern/hooks/utils/useTimeout.js +13 -5
- package/modern/index.js +1 -1
- package/modern/internals/index.js +1 -1
- package/modern/models/api/gridInfiniteLoaderApi.js +1 -0
- package/modern/utils/createSelector.js +12 -20
- package/modern/utils/utils.js +9 -0
- package/node/DataGrid/DataGrid.js +1 -0
- package/node/colDef/gridBooleanOperators.js +1 -1
- package/node/components/GridRow.js +40 -53
- package/node/components/cell/GridCell.js +10 -10
- package/node/components/cell/GridSkeletonCell.js +15 -7
- package/node/components/columnSelection/GridCellCheckboxRenderer.js +6 -4
- package/node/components/columnsManagement/GridColumnsManagement.js +1 -1
- package/node/components/containers/GridRootStyles.js +9 -4
- package/node/components/virtualization/GridBottomContainer.js +1 -1
- package/node/components/virtualization/GridTopContainer.js +1 -1
- package/node/components/virtualization/GridVirtualScroller.js +7 -5
- package/node/components/virtualization/GridVirtualScrollerRenderZone.js +7 -2
- package/node/hooks/core/pipeProcessing/useGridPipeProcessing.js +22 -20
- package/node/hooks/features/columnHeaders/useGridColumnHeaders.js +8 -5
- package/node/hooks/features/columns/gridColumnsSelector.js +9 -2
- package/node/hooks/features/columns/useGridColumns.js +2 -0
- package/node/hooks/features/dimensions/useGridDimensions.js +1 -0
- package/node/hooks/features/editing/useGridRowEditing.js +1 -2
- package/node/hooks/features/filter/useGridFilter.js +2 -2
- package/node/hooks/features/rows/useGridParamsApi.js +6 -10
- package/node/hooks/features/rows/useGridRows.js +8 -4
- package/node/hooks/features/rows/useGridRowsMeta.js +5 -13
- package/node/hooks/features/sorting/gridSortingUtils.js +9 -1
- package/node/hooks/features/sorting/useGridSorting.js +2 -2
- package/node/hooks/features/virtualization/gridVirtualizationSelectors.js +1 -8
- package/node/hooks/features/virtualization/useGridVirtualScroller.js +86 -136
- package/node/hooks/features/virtualization/useGridVirtualization.js +2 -7
- package/node/hooks/utils/useTimeout.js +13 -4
- package/node/index.js +1 -1
- package/node/internals/index.js +0 -7
- package/node/models/api/gridInfiniteLoaderApi.js +5 -0
- package/node/utils/createSelector.js +14 -23
- package/node/utils/utils.js +12 -1
- package/package.json +2 -2
- package/utils/createSelector.d.ts +0 -1
- package/utils/createSelector.js +12 -22
- package/utils/utils.d.ts +4 -0
- package/utils/utils.js +9 -0
|
@@ -67,8 +67,10 @@ function GridVirtualScroller(props) {
|
|
|
67
67
|
getContentProps,
|
|
68
68
|
getRenderZoneProps,
|
|
69
69
|
getScrollbarVerticalProps,
|
|
70
|
-
getScrollbarHorizontalProps
|
|
70
|
+
getScrollbarHorizontalProps,
|
|
71
|
+
getRows
|
|
71
72
|
} = virtualScroller;
|
|
73
|
+
const rows = getRows();
|
|
72
74
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridMainContainer.GridMainContainer, (0, _extends2.default)({
|
|
73
75
|
className: classes.root
|
|
74
76
|
}, getContainerProps(), {
|
|
@@ -83,19 +85,19 @@ function GridVirtualScroller(props) {
|
|
|
83
85
|
})]
|
|
84
86
|
}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridOverlays.GridOverlays, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridVirtualScrollerContent.GridVirtualScrollerContent, (0, _extends2.default)({}, getContentProps(), {
|
|
85
87
|
children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridVirtualScrollerRenderZone.GridVirtualScrollerRenderZone, (0, _extends2.default)({}, getRenderZoneProps(), {
|
|
86
|
-
children: [
|
|
88
|
+
children: [rows, /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.detailPanels, {
|
|
87
89
|
virtualScroller: virtualScroller
|
|
88
90
|
})]
|
|
89
91
|
}))
|
|
90
|
-
})), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridVirtualScrollerFiller.GridVirtualScrollerFiller, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridBottomContainer.GridBottomContainer, {
|
|
92
|
+
})), rows.length > 0 && /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridVirtualScrollerFiller.GridVirtualScrollerFiller, {}), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridBottomContainer.GridBottomContainer, {
|
|
91
93
|
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.pinnedRows, {
|
|
92
94
|
position: "bottom",
|
|
93
95
|
virtualScroller: virtualScroller
|
|
94
96
|
})
|
|
95
97
|
})]
|
|
96
|
-
})), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridVirtualScrollbar.GridVirtualScrollbar, (0, _extends2.default)({
|
|
98
|
+
})), dimensions.hasScrollY && /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridVirtualScrollbar.GridVirtualScrollbar, (0, _extends2.default)({
|
|
97
99
|
position: "vertical"
|
|
98
|
-
}, getScrollbarVerticalProps())), /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridVirtualScrollbar.GridVirtualScrollbar, (0, _extends2.default)({
|
|
100
|
+
}, getScrollbarVerticalProps())), dimensions.hasScrollX && /*#__PURE__*/(0, _jsxRuntime.jsx)(_GridVirtualScrollbar.GridVirtualScrollbar, (0, _extends2.default)({
|
|
99
101
|
position: "horizontal"
|
|
100
102
|
}, getScrollbarHorizontalProps())), props.children]
|
|
101
103
|
}));
|
|
@@ -13,6 +13,7 @@ var _system = require("@mui/system");
|
|
|
13
13
|
var _utils = require("@mui/utils");
|
|
14
14
|
var _useGridApiContext = require("../../hooks/utils/useGridApiContext");
|
|
15
15
|
var _useGridSelector = require("../../hooks/utils/useGridSelector");
|
|
16
|
+
var _rows = require("../../hooks/features/rows");
|
|
16
17
|
var _virtualization = require("../../hooks/features/virtualization");
|
|
17
18
|
var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
|
|
18
19
|
var _gridClasses = require("../../constants/gridClasses");
|
|
@@ -47,13 +48,17 @@ const GridVirtualScrollerRenderZone = exports.GridVirtualScrollerRenderZone = /*
|
|
|
47
48
|
const apiRef = (0, _useGridApiContext.useGridApiContext)();
|
|
48
49
|
const rootProps = (0, _useGridRootProps.useGridRootProps)();
|
|
49
50
|
const classes = useUtilityClasses(rootProps);
|
|
50
|
-
const
|
|
51
|
+
const offsetTop = (0, _useGridSelector.useGridSelector)(apiRef, () => {
|
|
52
|
+
const renderContext = (0, _virtualization.gridRenderContextSelector)(apiRef);
|
|
53
|
+
const rowsMeta = (0, _rows.gridRowsMetaSelector)(apiRef.current.state);
|
|
54
|
+
return rowsMeta.positions[renderContext.firstRowIndex] ?? 0;
|
|
55
|
+
});
|
|
51
56
|
return /*#__PURE__*/(0, _jsxRuntime.jsx)(VirtualScrollerRenderZoneRoot, (0, _extends2.default)({
|
|
52
57
|
ref: ref,
|
|
53
58
|
className: (0, _clsx.default)(classes.root, className),
|
|
54
59
|
ownerState: rootProps,
|
|
55
60
|
style: {
|
|
56
|
-
transform: `translate3d(0, ${
|
|
61
|
+
transform: `translate3d(0, ${offsetTop}px, 0)`
|
|
57
62
|
}
|
|
58
63
|
}, other));
|
|
59
64
|
});
|
|
@@ -41,7 +41,7 @@ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e;
|
|
|
41
41
|
* * `apiRef.current.requestPipeProcessorsApplication` is called for the given group.
|
|
42
42
|
*/
|
|
43
43
|
const useGridPipeProcessing = apiRef => {
|
|
44
|
-
const
|
|
44
|
+
const cache = React.useRef({});
|
|
45
45
|
const isRunning = React.useRef(false);
|
|
46
46
|
const runAppliers = React.useCallback(groupCache => {
|
|
47
47
|
if (isRunning.current || !groupCache) {
|
|
@@ -54,52 +54,54 @@ const useGridPipeProcessing = apiRef => {
|
|
|
54
54
|
isRunning.current = false;
|
|
55
55
|
}, []);
|
|
56
56
|
const registerPipeProcessor = React.useCallback((group, id, processor) => {
|
|
57
|
-
if (!
|
|
58
|
-
|
|
57
|
+
if (!cache.current[group]) {
|
|
58
|
+
cache.current[group] = {
|
|
59
59
|
processors: new Map(),
|
|
60
|
+
processorsAsArray: [],
|
|
60
61
|
appliers: {}
|
|
61
62
|
};
|
|
62
63
|
}
|
|
63
|
-
const groupCache =
|
|
64
|
+
const groupCache = cache.current[group];
|
|
64
65
|
const oldProcessor = groupCache.processors.get(id);
|
|
65
66
|
if (oldProcessor !== processor) {
|
|
66
67
|
groupCache.processors.set(id, processor);
|
|
68
|
+
groupCache.processorsAsArray = Array.from(cache.current[group].processors.values());
|
|
67
69
|
runAppliers(groupCache);
|
|
68
70
|
}
|
|
69
71
|
return () => {
|
|
70
|
-
|
|
72
|
+
cache.current[group].processors.delete(id);
|
|
73
|
+
cache.current[group].processorsAsArray = Array.from(cache.current[group].processors.values());
|
|
71
74
|
};
|
|
72
75
|
}, [runAppliers]);
|
|
73
76
|
const registerPipeApplier = React.useCallback((group, id, applier) => {
|
|
74
|
-
if (!
|
|
75
|
-
|
|
77
|
+
if (!cache.current[group]) {
|
|
78
|
+
cache.current[group] = {
|
|
76
79
|
processors: new Map(),
|
|
80
|
+
processorsAsArray: [],
|
|
77
81
|
appliers: {}
|
|
78
82
|
};
|
|
79
83
|
}
|
|
80
|
-
|
|
84
|
+
cache.current[group].appliers[id] = applier;
|
|
81
85
|
return () => {
|
|
82
|
-
const _appliers =
|
|
86
|
+
const _appliers = cache.current[group].appliers,
|
|
83
87
|
otherAppliers = (0, _objectWithoutPropertiesLoose2.default)(_appliers, [id].map(_toPropertyKey2.default));
|
|
84
|
-
|
|
88
|
+
cache.current[group].appliers = otherAppliers;
|
|
85
89
|
};
|
|
86
90
|
}, []);
|
|
87
91
|
const requestPipeProcessorsApplication = React.useCallback(group => {
|
|
88
|
-
|
|
89
|
-
runAppliers(groupCache);
|
|
92
|
+
runAppliers(cache.current[group]);
|
|
90
93
|
}, [runAppliers]);
|
|
91
94
|
const applyPipeProcessors = React.useCallback((...args) => {
|
|
92
95
|
const [group, value, context] = args;
|
|
93
|
-
if (!
|
|
96
|
+
if (!cache.current[group]) {
|
|
94
97
|
return value;
|
|
95
98
|
}
|
|
96
|
-
const
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}, value);
|
|
99
|
+
const processors = cache.current[group].processorsAsArray;
|
|
100
|
+
let result = value;
|
|
101
|
+
for (let i = 0; i < processors.length; i += 1) {
|
|
102
|
+
result = processors[i](result, context);
|
|
103
|
+
}
|
|
104
|
+
return result;
|
|
103
105
|
}, []);
|
|
104
106
|
const preProcessingPrivateApi = {
|
|
105
107
|
registerPipeProcessor,
|
|
@@ -16,6 +16,7 @@ var _useGridApiEventHandler = require("../../utils/useGridApiEventHandler");
|
|
|
16
16
|
var _GridColumnHeaderItem = require("../../../components/columnHeaders/GridColumnHeaderItem");
|
|
17
17
|
var _dimensions = require("../dimensions");
|
|
18
18
|
var _virtualization = require("../virtualization");
|
|
19
|
+
var _useGridVirtualScroller = require("../virtualization/useGridVirtualScroller");
|
|
19
20
|
var _GridColumnGroupHeader = require("../../../components/columnHeaders/GridColumnGroupHeader");
|
|
20
21
|
var _columns = require("../columns");
|
|
21
22
|
var _GridScrollbarFillerCell = require("../../../components/GridScrollbarFillerCell");
|
|
@@ -25,7 +26,7 @@ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return
|
|
|
25
26
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
26
27
|
const SpaceFiller = (0, _styles.styled)('div')({
|
|
27
28
|
/* GridRootStyles conflict */
|
|
28
|
-
'
|
|
29
|
+
'&&&': {
|
|
29
30
|
padding: 0,
|
|
30
31
|
width: 'calc(var(--DataGrid-width) - var(--DataGrid-columnsTotalWidth))'
|
|
31
32
|
}
|
|
@@ -57,14 +58,16 @@ const useGridColumnHeaders = props => {
|
|
|
57
58
|
const [dragCol, setDragCol] = React.useState('');
|
|
58
59
|
const [resizeCol, setResizeCol] = React.useState('');
|
|
59
60
|
const apiRef = (0, _useGridPrivateApiContext.useGridPrivateApiContext)();
|
|
61
|
+
const theme = (0, _styles.useTheme)();
|
|
60
62
|
const rootProps = (0, _useGridRootProps.useGridRootProps)();
|
|
61
63
|
const hasVirtualization = (0, _utils2.useGridSelector)(apiRef, _virtualization.gridVirtualizationColumnEnabledSelector);
|
|
62
64
|
const innerRef = React.useRef(null);
|
|
63
65
|
const handleInnerRef = (0, _utils.unstable_useForkRef)(innerRefProp, innerRef);
|
|
64
66
|
const dimensions = (0, _utils2.useGridSelector)(apiRef, _dimensions.gridDimensionsSelector);
|
|
65
|
-
const
|
|
67
|
+
const columnPositions = (0, _utils2.useGridSelector)(apiRef, _columns.gridColumnPositionsSelector);
|
|
66
68
|
const renderContext = (0, _utils2.useGridSelector)(apiRef, _virtualization.gridRenderContextColumnsSelector);
|
|
67
|
-
const
|
|
69
|
+
const pinnedColumns = (0, _utils2.useGridSelector)(apiRef, _columns.gridVisiblePinnedColumnDefinitionsSelector);
|
|
70
|
+
const offsetLeft = (0, _useGridVirtualScroller.computeOffsetLeft)(columnPositions, renderContext, theme.direction, pinnedColumns.left.length);
|
|
68
71
|
React.useEffect(() => {
|
|
69
72
|
apiRef.current.columnHeadersContainerElementRef.current.scrollLeft = 0;
|
|
70
73
|
}, [apiRef]);
|
|
@@ -96,8 +99,8 @@ const useGridColumnHeaders = props => {
|
|
|
96
99
|
const getFillers = (params, children, leftOverflow, borderTop = false) => {
|
|
97
100
|
const isPinnedRight = params?.position === _columns.GridPinnedColumnPosition.RIGHT;
|
|
98
101
|
const isNotPinned = params?.position === undefined;
|
|
99
|
-
const hasScrollbarFiller =
|
|
100
|
-
const leftOffsetWidth =
|
|
102
|
+
const hasScrollbarFiller = pinnedColumns.right.length > 0 && isPinnedRight || pinnedColumns.right.length === 0 && isNotPinned;
|
|
103
|
+
const leftOffsetWidth = offsetLeft - leftOverflow;
|
|
101
104
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(React.Fragment, {
|
|
102
105
|
children: [isNotPinned && /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
|
|
103
106
|
role: "presentation",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.gridVisiblePinnedColumnDefinitionsSelector = exports.gridVisibleColumnFieldsSelector = exports.gridVisibleColumnDefinitionsSelector = exports.gridPinnedColumnsSelector = exports.gridFilterableColumnLookupSelector = exports.gridFilterableColumnDefinitionsSelector = exports.gridColumnsTotalWidthSelector = exports.gridColumnsStateSelector = exports.gridColumnVisibilityModelSelector = exports.gridColumnPositionsSelector = exports.gridColumnLookupSelector = exports.gridColumnFieldsSelector = exports.gridColumnDefinitionsSelector = void 0;
|
|
6
|
+
exports.gridVisiblePinnedColumnDefinitionsSelector = exports.gridVisibleColumnFieldsSelector = exports.gridVisibleColumnDefinitionsSelector = exports.gridPinnedColumnsSelector = exports.gridHasColSpanSelector = exports.gridFilterableColumnLookupSelector = exports.gridFilterableColumnDefinitionsSelector = exports.gridColumnsTotalWidthSelector = exports.gridColumnsStateSelector = exports.gridColumnVisibilityModelSelector = exports.gridColumnPositionsSelector = exports.gridColumnLookupSelector = exports.gridColumnFieldsSelector = exports.gridColumnDefinitionsSelector = void 0;
|
|
7
7
|
var _createSelector = require("../../../utils/createSelector");
|
|
8
8
|
var _gridColumnsInterfaces = require("./gridColumnsInterfaces");
|
|
9
9
|
var _gridCoreSelector = require("../../core/gridCoreSelector");
|
|
@@ -141,4 +141,11 @@ const gridFilterableColumnLookupSelector = exports.gridFilterableColumnLookupSel
|
|
|
141
141
|
acc[col.field] = col;
|
|
142
142
|
}
|
|
143
143
|
return acc;
|
|
144
|
-
}, {}));
|
|
144
|
+
}, {}));
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* Checks if some column has a colSpan field.
|
|
148
|
+
* @category Columns
|
|
149
|
+
* @ignore - Do not document
|
|
150
|
+
*/
|
|
151
|
+
const gridHasColSpanSelector = exports.gridHasColSpanSelector = (0, _createSelector.createSelectorMemoized)(gridColumnDefinitionsSelector, columns => columns.some(column => column.colSpan !== undefined));
|
|
@@ -55,6 +55,7 @@ function useGridColumns(apiRef, props) {
|
|
|
55
55
|
logger.debug('Updating columns state.');
|
|
56
56
|
apiRef.current.setState(mergeColumnsState(columnsState));
|
|
57
57
|
apiRef.current.publishEvent('columnsChange', columnsState.orderedFields);
|
|
58
|
+
apiRef.current.updateRenderContext?.();
|
|
58
59
|
apiRef.current.forceUpdate();
|
|
59
60
|
}, [logger, apiRef]);
|
|
60
61
|
|
|
@@ -84,6 +85,7 @@ function useGridColumns(apiRef, props) {
|
|
|
84
85
|
keepOnlyColumnsToUpsert: false
|
|
85
86
|
})
|
|
86
87
|
}));
|
|
88
|
+
apiRef.current.updateRenderContext?.();
|
|
87
89
|
apiRef.current.forceUpdate();
|
|
88
90
|
}
|
|
89
91
|
}, [apiRef]);
|
|
@@ -238,6 +238,7 @@ function useGridDimensions(apiRef, props) {
|
|
|
238
238
|
set('--DataGrid-headersTotalHeight', `${dimensions.headersTotalHeight}px`);
|
|
239
239
|
set('--DataGrid-topContainerHeight', `${dimensions.topContainerHeight}px`);
|
|
240
240
|
set('--DataGrid-bottomContainerHeight', `${dimensions.bottomContainerHeight}px`);
|
|
241
|
+
set('--height', `${dimensions.rowHeight}px`);
|
|
241
242
|
}, [root, dimensions]);
|
|
242
243
|
const isFirstSizing = React.useRef(true);
|
|
243
244
|
const handleResize = React.useCallback(size => {
|
|
@@ -30,7 +30,7 @@ const useGridRowEditing = (apiRef, props) => {
|
|
|
30
30
|
const [rowModesModel, setRowModesModel] = React.useState({});
|
|
31
31
|
const rowModesModelRef = React.useRef(rowModesModel);
|
|
32
32
|
const prevRowModesModel = React.useRef({});
|
|
33
|
-
const focusTimeout = React.useRef(
|
|
33
|
+
const focusTimeout = React.useRef();
|
|
34
34
|
const nextFocusedCell = React.useRef(null);
|
|
35
35
|
const {
|
|
36
36
|
processRowUpdate,
|
|
@@ -85,7 +85,6 @@ const useGridRowEditing = (apiRef, props) => {
|
|
|
85
85
|
// focus we check if the next cell that received focus is from a different row.
|
|
86
86
|
nextFocusedCell.current = null;
|
|
87
87
|
focusTimeout.current = setTimeout(() => {
|
|
88
|
-
focusTimeout.current = null;
|
|
89
88
|
if (nextFocusedCell.current?.id !== params.id) {
|
|
90
89
|
// The row might have been deleted during the click
|
|
91
90
|
if (!apiRef.current.getRow(params.id)) {
|
|
@@ -115,7 +115,7 @@ const useGridFilter = (apiRef, props) => {
|
|
|
115
115
|
const filterModel = (0, _gridFilterSelector.gridFilterModelSelector)(apiRef);
|
|
116
116
|
const existingItems = [...filterModel.items];
|
|
117
117
|
items.forEach(item => {
|
|
118
|
-
const itemIndex =
|
|
118
|
+
const itemIndex = existingItems.findIndex(filterItem => filterItem.id === item.id);
|
|
119
119
|
if (itemIndex === -1) {
|
|
120
120
|
existingItems.push(item);
|
|
121
121
|
} else {
|
|
@@ -123,7 +123,7 @@ const useGridFilter = (apiRef, props) => {
|
|
|
123
123
|
}
|
|
124
124
|
});
|
|
125
125
|
apiRef.current.setFilterModel((0, _extends2.default)({}, filterModel, {
|
|
126
|
-
items
|
|
126
|
+
items: existingItems
|
|
127
127
|
}), 'upsertFilterItems');
|
|
128
128
|
}, [apiRef]);
|
|
129
129
|
const deleteFilterItem = React.useCallback(itemToDelete => {
|
|
@@ -41,12 +41,13 @@ function useGridParamsApi(apiRef) {
|
|
|
41
41
|
}, [apiRef]);
|
|
42
42
|
const getCellParams = React.useCallback((id, field) => {
|
|
43
43
|
const colDef = apiRef.current.getColumn(field);
|
|
44
|
-
const value = apiRef.current.getCellValue(id, field);
|
|
45
44
|
const row = apiRef.current.getRow(id);
|
|
46
45
|
const rowNode = apiRef.current.getRowNode(id);
|
|
47
46
|
if (!row || !rowNode) {
|
|
48
47
|
throw new MissingRowIdError(`No row with id #${id} found`);
|
|
49
48
|
}
|
|
49
|
+
const rawValue = row[field];
|
|
50
|
+
const value = colDef?.valueGetter ? colDef.valueGetter(rawValue, row, colDef, apiRef) : rawValue;
|
|
50
51
|
const cellFocus = (0, _gridFocusStateSelector.gridFocusCellSelector)(apiRef);
|
|
51
52
|
const cellTabIndex = (0, _gridFocusStateSelector.gridTabIndexCellSelector)(apiRef);
|
|
52
53
|
const params = {
|
|
@@ -70,19 +71,14 @@ function useGridParamsApi(apiRef) {
|
|
|
70
71
|
}, [apiRef]);
|
|
71
72
|
const getCellValue = React.useCallback((id, field) => {
|
|
72
73
|
const colDef = apiRef.current.getColumn(field);
|
|
73
|
-
if (!colDef || !colDef.valueGetter) {
|
|
74
|
-
const rowModel = apiRef.current.getRow(id);
|
|
75
|
-
if (!rowModel) {
|
|
76
|
-
throw new MissingRowIdError(`No row with id #${id} found`);
|
|
77
|
-
}
|
|
78
|
-
return rowModel[field];
|
|
79
|
-
}
|
|
80
74
|
const row = apiRef.current.getRow(id);
|
|
81
75
|
if (!row) {
|
|
82
76
|
throw new MissingRowIdError(`No row with id #${id} found`);
|
|
83
77
|
}
|
|
84
|
-
|
|
85
|
-
|
|
78
|
+
if (!colDef || !colDef.valueGetter) {
|
|
79
|
+
return row[field];
|
|
80
|
+
}
|
|
81
|
+
return colDef.valueGetter(row[colDef.field], row, colDef, apiRef);
|
|
86
82
|
}, [apiRef]);
|
|
87
83
|
const getRowValue = React.useCallback((row, colDef) => {
|
|
88
84
|
const field = colDef.field;
|
|
@@ -270,13 +270,16 @@ const useGridRows = (apiRef, props) => {
|
|
|
270
270
|
const dataRowIdToIdLookup = (0, _extends2.default)({}, (0, _gridRowsSelector.gridRowsDataRowIdToIdLookupSelector)(apiRef));
|
|
271
271
|
const rootGroup = tree[_gridRowsUtils.GRID_ROOT_GROUP_ID];
|
|
272
272
|
const rootGroupChildren = [...rootGroup.children];
|
|
273
|
+
const seenIds = new Set();
|
|
273
274
|
for (let i = 0; i < newRows.length; i += 1) {
|
|
274
275
|
const rowModel = newRows[i];
|
|
275
276
|
const rowId = (0, _gridRowsUtils.getRowIdFromRowModel)(rowModel, props.getRowId, 'A row was provided without id when calling replaceRows().');
|
|
276
|
-
const [
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
277
|
+
const [removedRowId] = rootGroupChildren.splice(firstRowToRender + i, 1, rowId);
|
|
278
|
+
if (!seenIds.has(removedRowId)) {
|
|
279
|
+
delete dataRowIdToModelLookup[removedRowId];
|
|
280
|
+
delete dataRowIdToIdLookup[removedRowId];
|
|
281
|
+
delete tree[removedRowId];
|
|
282
|
+
}
|
|
280
283
|
const rowTreeNodeConfig = {
|
|
281
284
|
id: rowId,
|
|
282
285
|
depth: 0,
|
|
@@ -287,6 +290,7 @@ const useGridRows = (apiRef, props) => {
|
|
|
287
290
|
dataRowIdToModelLookup[rowId] = rowModel;
|
|
288
291
|
dataRowIdToIdLookup[rowId] = rowId;
|
|
289
292
|
tree[rowId] = rowTreeNodeConfig;
|
|
293
|
+
seenIds.add(rowId);
|
|
290
294
|
}
|
|
291
295
|
tree[_gridRowsUtils.GRID_ROOT_GROUP_ID] = (0, _extends2.default)({}, rootGroup, {
|
|
292
296
|
children: rootGroupChildren
|
|
@@ -115,14 +115,9 @@ const useGridRowsMeta = (apiRef, props) => {
|
|
|
115
115
|
} else {
|
|
116
116
|
rowsHeightLookup.current[row.id].needsFirstMeasurement = false;
|
|
117
117
|
}
|
|
118
|
-
const initialHeights = {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
if (/^base[A-Z]/.test(key)) {
|
|
122
|
-
initialHeights[key] = sizes[key];
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
initialHeights.baseCenter = baseRowHeight;
|
|
118
|
+
const initialHeights = {
|
|
119
|
+
baseCenter: baseRowHeight
|
|
120
|
+
};
|
|
126
121
|
if (getRowSpacing) {
|
|
127
122
|
const indexRelativeToCurrentPage = apiRef.current.getRowIndexRelativeToVisibleRows(row.id);
|
|
128
123
|
const spacing = getRowSpacing((0, _extends2.default)({}, row, {
|
|
@@ -140,19 +135,16 @@ const useGridRowsMeta = (apiRef, props) => {
|
|
|
140
135
|
const positions = [];
|
|
141
136
|
const currentPageTotalHeight = currentPage.rows.reduce((acc, row) => {
|
|
142
137
|
positions.push(acc);
|
|
143
|
-
let maximumBaseSize = 0;
|
|
144
138
|
let otherSizes = 0;
|
|
145
139
|
const processedSizes = calculateRowProcessedSizes(row);
|
|
146
140
|
/* eslint-disable-next-line no-restricted-syntax, guard-for-in */
|
|
147
141
|
for (const key in processedSizes) {
|
|
148
142
|
const value = processedSizes[key];
|
|
149
|
-
if (
|
|
150
|
-
maximumBaseSize = value > maximumBaseSize ? value : maximumBaseSize;
|
|
151
|
-
} else {
|
|
143
|
+
if (key !== 'baseCenter') {
|
|
152
144
|
otherSizes += value;
|
|
153
145
|
}
|
|
154
146
|
}
|
|
155
|
-
return acc +
|
|
147
|
+
return acc + processedSizes.baseCenter + otherSizes;
|
|
156
148
|
}, 0);
|
|
157
149
|
pinnedRows?.top?.forEach(row => {
|
|
158
150
|
calculateRowProcessedSizes(row);
|
|
@@ -37,7 +37,15 @@ const parseSortItem = (sortItem, apiRef) => {
|
|
|
37
37
|
if (!column || sortItem.sort === null) {
|
|
38
38
|
return null;
|
|
39
39
|
}
|
|
40
|
-
|
|
40
|
+
let comparator;
|
|
41
|
+
if (column.getSortComparator) {
|
|
42
|
+
comparator = column.getSortComparator(sortItem.sort);
|
|
43
|
+
} else {
|
|
44
|
+
comparator = isDesc(sortItem.sort) ? (...args) => -1 * column.sortComparator(...args) : column.sortComparator;
|
|
45
|
+
}
|
|
46
|
+
if (!comparator) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
41
49
|
const getSortCellParams = id => ({
|
|
42
50
|
id,
|
|
43
51
|
field: column.field,
|
|
@@ -50,7 +50,7 @@ const useGridSorting = (apiRef, props) => {
|
|
|
50
50
|
const existingIdx = sortModel.findIndex(c => c.field === field);
|
|
51
51
|
let newSortModel = [...sortModel];
|
|
52
52
|
if (existingIdx > -1) {
|
|
53
|
-
if (
|
|
53
|
+
if (sortItem?.sort == null) {
|
|
54
54
|
newSortModel.splice(existingIdx, 1);
|
|
55
55
|
} else {
|
|
56
56
|
newSortModel.splice(existingIdx, 1, sortItem);
|
|
@@ -126,7 +126,7 @@ const useGridSorting = (apiRef, props) => {
|
|
|
126
126
|
const sortItem = createSortItem(column, direction);
|
|
127
127
|
let sortModel;
|
|
128
128
|
if (!allowMultipleSorting || props.disableMultipleColumnsSorting) {
|
|
129
|
-
sortModel =
|
|
129
|
+
sortModel = sortItem?.sort == null ? [] : [sortItem];
|
|
130
130
|
} else {
|
|
131
131
|
sortModel = upsertSortModel(column.field, sortItem);
|
|
132
132
|
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.gridVirtualizationSelector = exports.gridVirtualizationEnabledSelector = exports.gridVirtualizationColumnEnabledSelector = exports.gridRenderContextSelector = exports.gridRenderContextColumnsSelector =
|
|
6
|
+
exports.gridVirtualizationSelector = exports.gridVirtualizationEnabledSelector = exports.gridVirtualizationColumnEnabledSelector = exports.gridRenderContextSelector = exports.gridRenderContextColumnsSelector = void 0;
|
|
7
7
|
var _createSelector = require("../../../utils/createSelector");
|
|
8
8
|
/**
|
|
9
9
|
* Get the columns state
|
|
@@ -31,13 +31,6 @@ const gridVirtualizationColumnEnabledSelector = exports.gridVirtualizationColumn
|
|
|
31
31
|
*/
|
|
32
32
|
const gridRenderContextSelector = exports.gridRenderContextSelector = (0, _createSelector.createSelector)(gridVirtualizationSelector, state => state.renderContext);
|
|
33
33
|
|
|
34
|
-
/**
|
|
35
|
-
* Get the offsets
|
|
36
|
-
* @category Virtualization
|
|
37
|
-
* @ignore - do not document.
|
|
38
|
-
*/
|
|
39
|
-
const gridOffsetsSelector = exports.gridOffsetsSelector = (0, _createSelector.createSelector)(gridVirtualizationSelector, state => state.offsets);
|
|
40
|
-
|
|
41
34
|
/**
|
|
42
35
|
* Get the render context, with only columns filled in.
|
|
43
36
|
* This is cached, so it can be used to only re-render when the column interval changes.
|