@mui/x-data-grid 7.7.1 → 7.8.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 +100 -1
- package/DataGrid/useDataGridComponent.d.ts +0 -1
- package/components/GridFooter.d.ts +1 -1
- package/components/GridLoadingOverlay.d.ts +1 -1
- package/components/GridNoResultsOverlay.d.ts +1 -1
- package/components/GridNoRowsOverlay.d.ts +1 -1
- package/components/GridRowCount.d.ts +1 -1
- package/components/GridSelectedRowCount.d.ts +1 -1
- package/components/cell/GridActionsCellItem.d.ts +3 -3
- package/components/columnHeaders/GridColumnHeaderItem.js +3 -3
- package/components/columnHeaders/GridColumnHeaderSortIcon.d.ts +1 -0
- package/components/columnHeaders/GridColumnHeaderSortIcon.js +11 -6
- package/components/containers/GridFooterContainer.d.ts +1 -1
- package/components/containers/GridOverlay.d.ts +1 -1
- package/components/containers/GridRootStyles.d.ts +0 -1
- package/components/containers/GridRootStyles.js +8 -0
- package/components/containers/GridToolbarContainer.d.ts +1 -1
- package/components/panel/GridPanel.d.ts +1 -1
- package/components/toolbar/GridToolbarExportContainer.d.ts +1 -1
- package/components/virtualization/GridMainContainer.d.ts +1 -1
- package/components/virtualization/GridVirtualScrollerContent.d.ts +1 -1
- package/components/virtualization/GridVirtualScrollerRenderZone.d.ts +1 -1
- package/constants/defaultGridSlotsComponents.js +2 -1
- package/constants/gridClasses.d.ts +5 -0
- package/constants/gridClasses.js +1 -1
- package/hooks/core/pipeProcessing/useGridRegisterPipeApplier.d.ts +2 -1
- package/hooks/core/pipeProcessing/useGridRegisterPipeProcessor.d.ts +2 -2
- package/hooks/core/strategyProcessing/useGridRegisterStrategyProcessor.d.ts +2 -2
- package/hooks/core/useGridInitialization.d.ts +1 -1
- package/hooks/core/useGridLocaleText.d.ts +1 -1
- package/hooks/core/useGridLoggerFactory.d.ts +1 -1
- package/hooks/features/clipboard/useGridClipboard.d.ts +1 -1
- package/hooks/features/columnGrouping/useGridColumnGrouping.d.ts +1 -1
- package/hooks/features/columnResize/useGridColumnResize.d.ts +1 -1
- package/hooks/features/density/useGridDensity.d.ts +1 -1
- package/hooks/features/dimensions/useGridDimensions.js +15 -15
- package/hooks/features/editing/useGridCellEditing.d.ts +1 -1
- package/hooks/features/editing/useGridEditing.d.ts +1 -1
- package/hooks/features/editing/useGridRowEditing.d.ts +1 -1
- package/hooks/features/export/serializers/csvSerializer.d.ts +0 -1
- package/hooks/features/export/useGridCsvExport.d.ts +1 -1
- package/hooks/features/export/useGridPrintExport.d.ts +1 -1
- package/hooks/features/export/useGridPrintExport.js +9 -8
- package/hooks/features/filter/gridFilterUtils.d.ts +1 -1
- package/hooks/features/filter/useGridFilter.d.ts +1 -1
- package/hooks/features/focus/useGridFocus.d.ts +1 -1
- package/hooks/features/headerFiltering/useGridHeaderFiltering.d.ts +1 -1
- package/hooks/features/keyboardNavigation/useGridKeyboardNavigation.d.ts +1 -1
- package/hooks/features/pagination/gridPaginationUtils.d.ts +1 -1
- package/hooks/features/pagination/index.d.ts +1 -1
- package/hooks/features/pagination/useGridPaginationMeta.d.ts +1 -1
- package/hooks/features/pagination/useGridPaginationModel.d.ts +2 -2
- package/hooks/features/pagination/useGridRowCount.d.ts +1 -1
- package/hooks/features/preferencesPanel/useGridPreferencesPanel.d.ts +1 -1
- package/hooks/features/rowSelection/useGridRowSelection.d.ts +1 -1
- package/hooks/features/rows/gridRowsInterfaces.d.ts +10 -2
- package/hooks/features/rows/gridRowsSelector.d.ts +2 -1
- package/hooks/features/rows/gridRowsSelector.js +1 -0
- package/hooks/features/rows/gridRowsUtils.d.ts +8 -6
- package/hooks/features/rows/gridRowsUtils.js +30 -6
- package/hooks/features/rows/useGridRows.d.ts +2 -2
- package/hooks/features/rows/useGridRows.js +39 -21
- package/hooks/features/rows/useGridRowsMeta.d.ts +1 -1
- package/hooks/features/scroll/useGridScroll.d.ts +1 -1
- package/hooks/features/sorting/useGridSorting.d.ts +1 -1
- package/hooks/utils/useGridApiEventHandler.d.ts +2 -2
- package/hooks/utils/useGridApiRef.d.ts +1 -1
- package/hooks/utils/useGridInitializeState.d.ts +1 -1
- package/hooks/utils/useGridRootProps.d.ts +1 -1
- package/hooks/utils/useGridSelector.d.ts +1 -1
- package/hooks/utils/useGridVisibleRows.d.ts +2 -2
- package/index.js +1 -1
- package/internals/index.d.ts +2 -0
- package/internals/index.js +1 -0
- package/internals/utils/propValidation.js +1 -1
- package/models/api/gridApiCommon.d.ts +2 -2
- package/models/api/gridInfiniteLoaderApi.d.ts +0 -1
- package/models/api/gridRowApi.d.ts +14 -0
- package/models/gridColumnGrouping.d.ts +0 -1
- package/models/gridDataSource.d.ts +87 -0
- package/models/gridDataSource.js +1 -0
- package/models/gridRows.d.ts +10 -0
- package/models/gridSlotsComponent.d.ts +5 -0
- package/models/gridSlotsComponentsProps.d.ts +5 -1
- package/models/props/DataGridProps.d.ts +2 -0
- package/modern/components/columnHeaders/GridColumnHeaderItem.js +3 -3
- package/modern/components/columnHeaders/GridColumnHeaderSortIcon.js +11 -6
- package/modern/components/containers/GridRootStyles.js +8 -0
- package/modern/constants/defaultGridSlotsComponents.js +2 -1
- package/modern/constants/gridClasses.js +1 -1
- package/modern/hooks/features/dimensions/useGridDimensions.js +15 -15
- package/modern/hooks/features/export/useGridPrintExport.js +9 -8
- package/modern/hooks/features/rows/gridRowsSelector.js +1 -0
- package/modern/hooks/features/rows/gridRowsUtils.js +30 -6
- package/modern/hooks/features/rows/useGridRows.js +39 -21
- package/modern/index.js +1 -1
- package/modern/internals/index.js +1 -0
- package/modern/internals/utils/propValidation.js +1 -1
- package/modern/models/gridDataSource.js +1 -0
- package/node/components/columnHeaders/GridColumnHeaderItem.js +3 -3
- package/node/components/columnHeaders/GridColumnHeaderSortIcon.js +11 -6
- package/node/components/containers/GridRootStyles.js +8 -0
- package/node/constants/defaultGridSlotsComponents.js +1 -0
- package/node/constants/gridClasses.js +1 -1
- package/node/hooks/features/dimensions/useGridDimensions.js +15 -15
- package/node/hooks/features/export/useGridPrintExport.js +9 -8
- package/node/hooks/features/rows/gridRowsSelector.js +2 -1
- package/node/hooks/features/rows/gridRowsUtils.js +31 -6
- package/node/hooks/features/rows/useGridRows.js +37 -19
- package/node/index.js +1 -1
- package/node/internals/index.js +7 -0
- package/node/internals/utils/propValidation.js +1 -1
- package/node/models/gridDataSource.js +5 -0
- package/package.json +1 -1
- package/utils/cleanupTracking/TimerBasedCleanupTracking.d.ts +0 -1
- package/utils/domUtils.d.ts +0 -1
- package/utils/getPublicApiRef.d.ts +1 -2
- package/utils/keyboardUtils.d.ts +1 -1
- package/utils/warning.d.ts +1 -1
|
@@ -2,17 +2,18 @@ import _extends from "@babel/runtime/helpers/esm/extends";
|
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
import { useGridApiMethod } from '../../utils/useGridApiMethod';
|
|
4
4
|
import { useGridLogger } from '../../utils/useGridLogger';
|
|
5
|
-
import { gridRowCountSelector, gridRowsLookupSelector, gridRowTreeSelector, gridRowGroupingNameSelector, gridRowTreeDepthsSelector, gridDataRowIdsSelector, gridRowsDataRowIdToIdLookupSelector, gridRowMaximumTreeDepthSelector } from './gridRowsSelector';
|
|
5
|
+
import { gridRowCountSelector, gridRowsLookupSelector, gridRowTreeSelector, gridRowGroupingNameSelector, gridRowTreeDepthsSelector, gridDataRowIdsSelector, gridRowsDataRowIdToIdLookupSelector, gridRowMaximumTreeDepthSelector, gridRowGroupsToFetchSelector } from './gridRowsSelector';
|
|
6
6
|
import { useTimeout } from '../../utils/useTimeout';
|
|
7
7
|
import { GridSignature, useGridApiEventHandler } from '../../utils/useGridApiEventHandler';
|
|
8
8
|
import { useGridVisibleRows } from '../../utils/useGridVisibleRows';
|
|
9
9
|
import { gridSortedRowIdsSelector } from '../sorting/gridSortingSelector';
|
|
10
10
|
import { gridFilteredRowsLookupSelector } from '../filter/gridFilterSelector';
|
|
11
|
-
import { getTreeNodeDescendants, createRowsInternalCache, getRowsStateFromCache, isAutoGeneratedRow, GRID_ROOT_GROUP_ID, GRID_ID_AUTOGENERATED, updateCacheWithNewRows, getTopLevelRowCount, getRowIdFromRowModel } from './gridRowsUtils';
|
|
11
|
+
import { getTreeNodeDescendants, createRowsInternalCache, getRowsStateFromCache, isAutoGeneratedRow, GRID_ROOT_GROUP_ID, GRID_ID_AUTOGENERATED, updateCacheWithNewRows, getTopLevelRowCount, getRowIdFromRowModel, computeRowsUpdates } from './gridRowsUtils';
|
|
12
12
|
import { useGridRegisterPipeApplier } from '../../core/pipeProcessing';
|
|
13
13
|
export const rowsStateInitializer = (state, props, apiRef) => {
|
|
14
|
+
const isDataSourceAvailable = !!props.unstable_dataSource;
|
|
14
15
|
apiRef.current.caches.rows = createRowsInternalCache({
|
|
15
|
-
rows: props.rows,
|
|
16
|
+
rows: isDataSourceAvailable ? [] : props.rows,
|
|
16
17
|
getRowId: props.getRowId,
|
|
17
18
|
loading: props.loading,
|
|
18
19
|
rowCount: props.rowCount
|
|
@@ -21,7 +22,7 @@ export const rowsStateInitializer = (state, props, apiRef) => {
|
|
|
21
22
|
rows: getRowsStateFromCache({
|
|
22
23
|
apiRef,
|
|
23
24
|
rowCountProp: props.rowCount,
|
|
24
|
-
loadingProp: props.loading,
|
|
25
|
+
loadingProp: isDataSourceAvailable ? true : props.loading,
|
|
25
26
|
previousTree: null,
|
|
26
27
|
previousTreeDepths: null
|
|
27
28
|
})
|
|
@@ -82,7 +83,8 @@ export const useGridRows = (apiRef, props) => {
|
|
|
82
83
|
rowCountProp: props.rowCount,
|
|
83
84
|
loadingProp: props.loading,
|
|
84
85
|
previousTree: gridRowTreeSelector(apiRef),
|
|
85
|
-
previousTreeDepths: gridRowTreeDepthsSelector(apiRef)
|
|
86
|
+
previousTreeDepths: gridRowTreeDepthsSelector(apiRef),
|
|
87
|
+
previousGroupsToFetch: gridRowGroupsToFetchSelector(apiRef)
|
|
86
88
|
})
|
|
87
89
|
}));
|
|
88
90
|
apiRef.current.publishEvent('rowsSet');
|
|
@@ -124,21 +126,7 @@ export const useGridRows = (apiRef, props) => {
|
|
|
124
126
|
if (props.signature === GridSignature.DataGrid && updates.length > 1) {
|
|
125
127
|
throw new Error(['MUI X: You cannot update several rows at once in `apiRef.current.updateRows` on the DataGrid.', 'You need to upgrade to DataGridPro or DataGridPremium component to unlock this feature.'].join('\n'));
|
|
126
128
|
}
|
|
127
|
-
const nonPinnedRowsUpdates =
|
|
128
|
-
updates.forEach(update => {
|
|
129
|
-
const id = getRowIdFromRowModel(update, props.getRowId, 'A row was provided without id when calling updateRows():');
|
|
130
|
-
const rowNode = apiRef.current.getRowNode(id);
|
|
131
|
-
if (rowNode?.type === 'pinnedRow') {
|
|
132
|
-
// @ts-ignore because otherwise `release:build` doesn't work
|
|
133
|
-
const pinnedRowsCache = apiRef.current.caches.pinnedRows;
|
|
134
|
-
const prevModel = pinnedRowsCache.idLookup[id];
|
|
135
|
-
if (prevModel) {
|
|
136
|
-
pinnedRowsCache.idLookup[id] = _extends({}, prevModel, update);
|
|
137
|
-
}
|
|
138
|
-
} else {
|
|
139
|
-
nonPinnedRowsUpdates.push(update);
|
|
140
|
-
}
|
|
141
|
-
});
|
|
129
|
+
const nonPinnedRowsUpdates = computeRowsUpdates(apiRef, updates, props.getRowId);
|
|
142
130
|
const cache = updateCacheWithNewRows({
|
|
143
131
|
updates: nonPinnedRowsUpdates,
|
|
144
132
|
getRowId: props.getRowId,
|
|
@@ -149,6 +137,31 @@ export const useGridRows = (apiRef, props) => {
|
|
|
149
137
|
throttle: true
|
|
150
138
|
});
|
|
151
139
|
}, [props.signature, props.getRowId, throttledRowsChange, apiRef]);
|
|
140
|
+
const updateServerRows = React.useCallback((updates, groupKeys) => {
|
|
141
|
+
const nonPinnedRowsUpdates = computeRowsUpdates(apiRef, updates, props.getRowId);
|
|
142
|
+
const cache = updateCacheWithNewRows({
|
|
143
|
+
updates: nonPinnedRowsUpdates,
|
|
144
|
+
getRowId: props.getRowId,
|
|
145
|
+
previousCache: apiRef.current.caches.rows,
|
|
146
|
+
groupKeys: groupKeys ?? []
|
|
147
|
+
});
|
|
148
|
+
throttledRowsChange({
|
|
149
|
+
cache,
|
|
150
|
+
throttle: false
|
|
151
|
+
});
|
|
152
|
+
}, [props.getRowId, throttledRowsChange, apiRef]);
|
|
153
|
+
const setLoading = React.useCallback(loading => {
|
|
154
|
+
if (loading === props.loading) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
logger.debug(`Setting loading to ${loading}`);
|
|
158
|
+
apiRef.current.setState(state => _extends({}, state, {
|
|
159
|
+
rows: _extends({}, state.rows, {
|
|
160
|
+
loading
|
|
161
|
+
})
|
|
162
|
+
}));
|
|
163
|
+
apiRef.current.caches.rows.loadingPropBeforePartialUpdates = loading;
|
|
164
|
+
}, [props.loading, apiRef, logger]);
|
|
152
165
|
const getRowModels = React.useCallback(() => {
|
|
153
166
|
const dataRows = gridDataRowIdsSelector(apiRef);
|
|
154
167
|
const idRowsLookup = gridRowsLookupSelector(apiRef);
|
|
@@ -303,6 +316,7 @@ export const useGridRows = (apiRef, props) => {
|
|
|
303
316
|
}, [apiRef, props.signature, props.getRowId]);
|
|
304
317
|
const rowApi = {
|
|
305
318
|
getRow,
|
|
319
|
+
setLoading,
|
|
306
320
|
getRowId,
|
|
307
321
|
getRowModels,
|
|
308
322
|
getRowsCount,
|
|
@@ -318,6 +332,9 @@ export const useGridRows = (apiRef, props) => {
|
|
|
318
332
|
setRowChildrenExpansion,
|
|
319
333
|
getRowGroupChildren
|
|
320
334
|
};
|
|
335
|
+
const rowProPrivateApi = {
|
|
336
|
+
updateServerRows
|
|
337
|
+
};
|
|
321
338
|
|
|
322
339
|
/**
|
|
323
340
|
* EVENTS
|
|
@@ -392,6 +409,7 @@ export const useGridRows = (apiRef, props) => {
|
|
|
392
409
|
useGridRegisterPipeApplier(apiRef, 'hydrateRows', applyHydrateRowsProcessor);
|
|
393
410
|
useGridApiMethod(apiRef, rowApi, 'public');
|
|
394
411
|
useGridApiMethod(apiRef, rowProApi, props.signature === GridSignature.DataGrid ? 'private' : 'public');
|
|
412
|
+
useGridApiMethod(apiRef, rowProPrivateApi, 'private');
|
|
395
413
|
|
|
396
414
|
// The effect do not track any value defined synchronously during the 1st render by hooks called after `useGridRows`
|
|
397
415
|
// As a consequence, the state generated by the 1st run of this useEffect will always be equal to the initialization one
|
|
@@ -436,7 +454,7 @@ export const useGridRows = (apiRef, props) => {
|
|
|
436
454
|
return;
|
|
437
455
|
}
|
|
438
456
|
}
|
|
439
|
-
logger.debug(`Updating all rows, new length ${props.rows
|
|
457
|
+
logger.debug(`Updating all rows, new length ${props.rows?.length}`);
|
|
440
458
|
throttledRowsChange({
|
|
441
459
|
cache: createRowsInternalCache({
|
|
442
460
|
rows: props.rows,
|
package/modern/index.js
CHANGED
|
@@ -55,6 +55,7 @@ export { useGridInitializeState } from '../hooks/utils/useGridInitializeState';
|
|
|
55
55
|
export { getColumnsToExport, defaultGetRowsToExport } from '../hooks/features/export/utils';
|
|
56
56
|
export * from '../utils/createControllablePromise';
|
|
57
57
|
export { createSelector, createSelectorMemoized } from '../utils/createSelector';
|
|
58
|
+
export { gridRowGroupsToFetchSelector } from '../hooks/features/rows/gridRowsSelector';
|
|
58
59
|
export { findParentElementFromClassName, getActiveElement, isEventTargetInPortal } from '../utils/domUtils';
|
|
59
60
|
export { isNavigationKey, isPasteShortcut } from '../utils/keyboardUtils';
|
|
60
61
|
export * from '../utils/utils';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { isNumber } from '../../utils/utils';
|
|
2
2
|
import { GridSignature } from '../../hooks/utils/useGridApiEventHandler';
|
|
3
|
-
export const propValidatorsDataGrid = [props => props.autoPageSize && props.autoHeight && ['MUI X: `<DataGrid autoPageSize={true} autoHeight={true} />` are not valid props.', 'You cannot use both the `autoPageSize` and `autoHeight` props at the same time because `autoHeight` scales the height of the Data Grid according to the `pageSize`.', '', 'Please remove one of these two props.'].join('\n') || undefined, props => props.paginationMode === 'client' && props.paginationMeta != null && ['MUI X: Usage of the `paginationMeta` prop with client-side pagination (`paginationMode="client"`) has no effect.', '`paginationMeta` is only meant to be used with `paginationMode="server"`.'].join('\n') || undefined, props => props.signature === GridSignature.DataGrid && props.paginationMode === 'client' && isNumber(props.rowCount) && ['MUI X: Usage of the `rowCount` prop with client side pagination (`paginationMode="client"`) has no effect.', '`rowCount` is only meant to be used with `paginationMode="server"`.'].join('\n') || undefined, props => props.paginationMode === 'server' && props.rowCount == null && ["MUI X: The `rowCount` prop must be passed using `paginationMode='server'`", 'For more detail, see http://mui.com/components/data-grid/pagination/#index-based-pagination'].join('\n') || undefined];
|
|
3
|
+
export const propValidatorsDataGrid = [props => props.autoPageSize && props.autoHeight && ['MUI X: `<DataGrid autoPageSize={true} autoHeight={true} />` are not valid props.', 'You cannot use both the `autoPageSize` and `autoHeight` props at the same time because `autoHeight` scales the height of the Data Grid according to the `pageSize`.', '', 'Please remove one of these two props.'].join('\n') || undefined, props => props.paginationMode === 'client' && props.paginationMeta != null && ['MUI X: Usage of the `paginationMeta` prop with client-side pagination (`paginationMode="client"`) has no effect.', '`paginationMeta` is only meant to be used with `paginationMode="server"`.'].join('\n') || undefined, props => props.signature === GridSignature.DataGrid && props.paginationMode === 'client' && isNumber(props.rowCount) && ['MUI X: Usage of the `rowCount` prop with client side pagination (`paginationMode="client"`) has no effect.', '`rowCount` is only meant to be used with `paginationMode="server"`.'].join('\n') || undefined, props => props.paginationMode === 'server' && props.rowCount == null && !props.unstable_dataSource && ["MUI X: The `rowCount` prop must be passed using `paginationMode='server'`", 'For more detail, see http://mui.com/components/data-grid/pagination/#index-based-pagination'].join('\n') || undefined];
|
|
4
4
|
const warnedOnceCache = new Set();
|
|
5
5
|
function warnOnce(message) {
|
|
6
6
|
if (!warnedOnceCache.has(message)) {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -12,7 +12,6 @@ var _clsx = _interopRequireDefault(require("clsx"));
|
|
|
12
12
|
var _utils = require("@mui/utils");
|
|
13
13
|
var _fastMemo = require("../../utils/fastMemo");
|
|
14
14
|
var _useGridPrivateApiContext = require("../../hooks/utils/useGridPrivateApiContext");
|
|
15
|
-
var _GridColumnHeaderSortIcon = require("./GridColumnHeaderSortIcon");
|
|
16
15
|
var _ColumnHeaderMenuIcon = require("./ColumnHeaderMenuIcon");
|
|
17
16
|
var _GridColumnHeaderMenu = require("../menu/columnMenu/GridColumnHeaderMenu");
|
|
18
17
|
var _gridClasses = require("../../constants/gridClasses");
|
|
@@ -151,12 +150,13 @@ function GridColumnHeaderItem(props) {
|
|
|
151
150
|
children: [!rootProps.disableColumnFilter && /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.columnHeaderFilterIconButton, (0, _extends2.default)({
|
|
152
151
|
field: colDef.field,
|
|
153
152
|
counter: filterItemsCounter
|
|
154
|
-
}, rootProps.slotProps?.columnHeaderFilterIconButton)), showSortIcon && /*#__PURE__*/(0, _jsxRuntime.jsx)(
|
|
153
|
+
}, rootProps.slotProps?.columnHeaderFilterIconButton)), showSortIcon && /*#__PURE__*/(0, _jsxRuntime.jsx)(rootProps.slots.columnHeaderSortIcon, (0, _extends2.default)({
|
|
154
|
+
field: colDef.field,
|
|
155
155
|
direction: sortDirection,
|
|
156
156
|
index: sortIndex,
|
|
157
157
|
sortingOrder: sortingOrder,
|
|
158
158
|
disabled: !colDef.sortable
|
|
159
|
-
})]
|
|
159
|
+
}, rootProps.slotProps?.columnHeaderSortIcon))]
|
|
160
160
|
});
|
|
161
161
|
React.useLayoutEffect(() => {
|
|
162
162
|
const columnMenuState = apiRef.current.state.columnMenu;
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.GridColumnHeaderSortIcon = void 0;
|
|
8
|
+
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
|
|
8
9
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
10
|
var React = _interopRequireWildcard(require("react"));
|
|
10
11
|
var _propTypes = _interopRequireDefault(require("prop-types"));
|
|
@@ -15,6 +16,7 @@ var _gridClasses = require("../../constants/gridClasses");
|
|
|
15
16
|
var _useGridRootProps = require("../../hooks/utils/useGridRootProps");
|
|
16
17
|
var _GridIconButtonContainer = require("./GridIconButtonContainer");
|
|
17
18
|
var _jsxRuntime = require("react/jsx-runtime");
|
|
19
|
+
const _excluded = ["direction", "index", "sortingOrder", "disabled"];
|
|
18
20
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
19
21
|
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 && {}.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; }
|
|
20
22
|
const useUtilityClasses = ownerState => {
|
|
@@ -44,11 +46,12 @@ function getIcon(icons, direction, className, sortingOrder) {
|
|
|
44
46
|
}
|
|
45
47
|
function GridColumnHeaderSortIconRaw(props) {
|
|
46
48
|
const {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
49
|
+
direction,
|
|
50
|
+
index,
|
|
51
|
+
sortingOrder,
|
|
52
|
+
disabled
|
|
53
|
+
} = props,
|
|
54
|
+
other = (0, _objectWithoutPropertiesLoose2.default)(props, _excluded);
|
|
52
55
|
const apiRef = (0, _useGridApiContext.useGridApiContext)();
|
|
53
56
|
const rootProps = (0, _useGridRootProps.useGridRootProps)();
|
|
54
57
|
const ownerState = (0, _extends2.default)({}, props, {
|
|
@@ -65,13 +68,14 @@ function GridColumnHeaderSortIconRaw(props) {
|
|
|
65
68
|
title: apiRef.current.getLocaleText('columnHeaderSortIconLabel'),
|
|
66
69
|
size: "small",
|
|
67
70
|
disabled: disabled
|
|
68
|
-
}, rootProps.slotProps?.baseIconButton, {
|
|
71
|
+
}, rootProps.slotProps?.baseIconButton, other, {
|
|
69
72
|
children: iconElement
|
|
70
73
|
}));
|
|
71
74
|
return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_GridIconButtonContainer.GridIconButtonContainer, {
|
|
72
75
|
children: [index != null && /*#__PURE__*/(0, _jsxRuntime.jsx)(_Badge.default, {
|
|
73
76
|
badgeContent: index,
|
|
74
77
|
color: "default",
|
|
78
|
+
overlap: "circular",
|
|
75
79
|
children: iconButton
|
|
76
80
|
}), index == null && iconButton]
|
|
77
81
|
});
|
|
@@ -84,6 +88,7 @@ process.env.NODE_ENV !== "production" ? GridColumnHeaderSortIconRaw.propTypes =
|
|
|
84
88
|
// ----------------------------------------------------------------------
|
|
85
89
|
direction: _propTypes.default.oneOf(['asc', 'desc']),
|
|
86
90
|
disabled: _propTypes.default.bool,
|
|
91
|
+
field: _propTypes.default.string.isRequired,
|
|
87
92
|
index: _propTypes.default.number,
|
|
88
93
|
sortingOrder: _propTypes.default.arrayOf(_propTypes.default.oneOf(['asc', 'desc'])).isRequired
|
|
89
94
|
} : void 0;
|
|
@@ -148,6 +148,8 @@ const GridRootStyles = exports.GridRootStyles = (0, _styles.styled)('div', {
|
|
|
148
148
|
[`& .${_gridClasses.gridClasses.treeDataGroupingCell}`]: styles.treeDataGroupingCell
|
|
149
149
|
}, {
|
|
150
150
|
[`& .${_gridClasses.gridClasses.treeDataGroupingCellToggle}`]: styles.treeDataGroupingCellToggle
|
|
151
|
+
}, {
|
|
152
|
+
[`& .${_gridClasses.gridClasses.treeDataGroupingCellLoadingContainer}`]: styles.treeDataGroupingCellLoadingContainer
|
|
151
153
|
}, {
|
|
152
154
|
[`& .${_gridClasses.gridClasses.detailPanelToggleCell}`]: styles.detailPanelToggleCell
|
|
153
155
|
}, {
|
|
@@ -615,6 +617,12 @@ const GridRootStyles = exports.GridRootStyles = (0, _styles.styled)('div', {
|
|
|
615
617
|
alignSelf: 'stretch',
|
|
616
618
|
marginRight: t.spacing(2)
|
|
617
619
|
},
|
|
620
|
+
[`& .${_gridClasses.gridClasses.treeDataGroupingCellLoadingContainer}`]: {
|
|
621
|
+
display: 'flex',
|
|
622
|
+
alignItems: 'center',
|
|
623
|
+
justifyContent: 'center',
|
|
624
|
+
height: '100%'
|
|
625
|
+
},
|
|
618
626
|
[`& .${_gridClasses.gridClasses.groupingCriteriaCell}`]: {
|
|
619
627
|
display: 'flex',
|
|
620
628
|
alignItems: 'center',
|
|
@@ -20,6 +20,7 @@ const DATA_GRID_DEFAULT_SLOTS_COMPONENTS = exports.DATA_GRID_DEFAULT_SLOTS_COMPO
|
|
|
20
20
|
cell: _GridCell.GridCell,
|
|
21
21
|
skeletonCell: _components.GridSkeletonCell,
|
|
22
22
|
columnHeaderFilterIconButton: _components.GridColumnHeaderFilterIconButton,
|
|
23
|
+
columnHeaderSortIcon: _components.GridColumnHeaderSortIcon,
|
|
23
24
|
columnMenu: _GridColumnMenu.GridColumnMenu,
|
|
24
25
|
columnHeaders: _GridColumnHeaders.GridColumnHeaders,
|
|
25
26
|
detailPanels: _GridDetailPanels.GridDetailPanels,
|
|
@@ -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--flex', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--rangeTop', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell--pinnedLeft', 'cell--pinnedRight', 'cell--selectionMode', 'cell', 'cellCheckbox', 'cellEmpty', 'cellSkeleton', 'cellOffsetLeft', 'checkboxInput', 'columnHeader', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader--pinnedLeft', 'columnHeader--pinnedRight', 'columnHeader--last', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnHeader--filledGroup', 'columnHeader--emptyGroup', 'columnHeaders', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsManagement', 'columnsManagementRow', 'columnsManagementHeader', 'columnsManagementFooter', 'container--top', 'container--bottom', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filler', 'filler--borderTop', 'filler--pinnedLeft', 'filler--pinnedRight', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'headerFilterRow', 'iconButtonContainer', 'iconSeparator', 'main', 'main--hasPinnedRight', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'overlayWrapper', 'overlayWrapperInner', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'row', 'row--editable', 'row--editing', 'row--firstVisible', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'row--detailPanelExpanded', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'scrollbar', 'scrollbar--vertical', 'scrollbar--horizontal', 'scrollbarFiller', 'scrollbarFiller--header', 'scrollbarFiller--borderTop', 'scrollbarFiller--pinnedRight', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'withVerticalBorder', 'withBorderColor', 'cell--withRightBorder', 'cell--withLeftBorder', 'columnHeader--withRightBorder', 'columnHeader--withLeftBorder', '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--flex', 'cell--textCenter', 'cell--textLeft', 'cell--textRight', 'cell--rangeTop', 'cell--rangeBottom', 'cell--rangeLeft', 'cell--rangeRight', 'cell--pinnedLeft', 'cell--pinnedRight', 'cell--selectionMode', 'cell', 'cellCheckbox', 'cellEmpty', 'cellSkeleton', 'cellOffsetLeft', 'checkboxInput', 'columnHeader', 'columnHeader--alignCenter', 'columnHeader--alignLeft', 'columnHeader--alignRight', 'columnHeader--dragging', 'columnHeader--moving', 'columnHeader--numeric', 'columnHeader--sortable', 'columnHeader--sorted', 'columnHeader--filtered', 'columnHeader--pinnedLeft', 'columnHeader--pinnedRight', 'columnHeader--last', 'columnHeaderCheckbox', 'columnHeaderDraggableContainer', 'columnHeaderTitle', 'columnHeaderTitleContainer', 'columnHeaderTitleContainerContent', 'columnHeader--filledGroup', 'columnHeader--emptyGroup', 'columnHeaders', 'columnSeparator--resizable', 'columnSeparator--resizing', 'columnSeparator--sideLeft', 'columnSeparator--sideRight', 'columnSeparator', 'columnsManagement', 'columnsManagementRow', 'columnsManagementHeader', 'columnsManagementFooter', 'container--top', 'container--bottom', 'detailPanel', 'detailPanels', 'detailPanelToggleCell', 'detailPanelToggleCell--expanded', 'footerCell', 'panel', 'panelHeader', 'panelWrapper', 'panelContent', 'panelFooter', 'paper', 'editBooleanCell', 'editInputCell', 'filler', 'filler--borderTop', 'filler--pinnedLeft', 'filler--pinnedRight', 'filterForm', 'filterFormDeleteIcon', 'filterFormLogicOperatorInput', 'filterFormColumnInput', 'filterFormOperatorInput', 'filterFormValueInput', 'filterIcon', 'footerContainer', 'headerFilterRow', 'iconButtonContainer', 'iconSeparator', 'main', 'main--hasPinnedRight', 'menu', 'menuIcon', 'menuIconButton', 'menuOpen', 'menuList', 'overlay', 'overlayWrapper', 'overlayWrapperInner', 'root', 'root--densityStandard', 'root--densityComfortable', 'root--densityCompact', 'root--disableUserSelection', 'row', 'row--editable', 'row--editing', 'row--firstVisible', 'row--lastVisible', 'row--dragging', 'row--dynamicHeight', 'row--detailPanelExpanded', 'rowReorderCellPlaceholder', 'rowCount', 'rowReorderCellContainer', 'rowReorderCell', 'rowReorderCell--draggable', 'scrollArea--left', 'scrollArea--right', 'scrollArea', 'scrollbar', 'scrollbar--vertical', 'scrollbar--horizontal', 'scrollbarFiller', 'scrollbarFiller--header', 'scrollbarFiller--borderTop', 'scrollbarFiller--pinnedRight', 'selectedRowCount', 'sortIcon', 'toolbarContainer', 'toolbarFilterList', 'virtualScroller', 'virtualScrollerContent', 'virtualScrollerContent--overflowed', 'virtualScrollerRenderZone', 'pinnedColumns', 'withVerticalBorder', 'withBorderColor', 'cell--withRightBorder', 'cell--withLeftBorder', 'columnHeader--withRightBorder', 'columnHeader--withLeftBorder', 'treeDataGroupingCell', 'treeDataGroupingCellToggle', 'treeDataGroupingCellLoadingContainer', 'groupingCriteriaCell', 'groupingCriteriaCellToggle', 'pinnedRows', 'pinnedRows--top', 'pinnedRows--bottom', 'pinnedRowsRenderZone']);
|
|
@@ -60,6 +60,7 @@ function useGridDimensions(apiRef, props) {
|
|
|
60
60
|
const logger = (0, _useGridLogger.useGridLogger)(apiRef, 'useResizeContainer');
|
|
61
61
|
const errorShown = React.useRef(false);
|
|
62
62
|
const rootDimensionsRef = React.useRef(EMPTY_SIZE);
|
|
63
|
+
const dimensionsState = (0, _utils2.useGridSelector)(apiRef, _gridDimensionsSelectors.gridDimensionsSelector);
|
|
63
64
|
const rowsMeta = (0, _utils2.useGridSelector)(apiRef, _gridRowsMetaSelector.gridRowsMetaSelector);
|
|
64
65
|
const pinnedColumns = (0, _utils2.useGridSelector)(apiRef, _columns.gridVisiblePinnedColumnDefinitionsSelector);
|
|
65
66
|
const densityFactor = (0, _utils2.useGridSelector)(apiRef, _density.gridDensityFactorSelector);
|
|
@@ -219,26 +220,25 @@ function useGridDimensions(apiRef, props) {
|
|
|
219
220
|
}
|
|
220
221
|
}, [apiRef, savedSize, updateDimensions]);
|
|
221
222
|
const root = apiRef.current.rootElementRef.current;
|
|
222
|
-
const dimensions = apiRef.current.state.dimensions;
|
|
223
223
|
(0, _utils.unstable_useEnhancedEffect)(() => {
|
|
224
224
|
if (!root) {
|
|
225
225
|
return;
|
|
226
226
|
}
|
|
227
227
|
const set = (k, v) => root.style.setProperty(k, v);
|
|
228
|
-
set('--DataGrid-width', `${
|
|
229
|
-
set('--DataGrid-hasScrollX', `${Number(
|
|
230
|
-
set('--DataGrid-hasScrollY', `${Number(
|
|
231
|
-
set('--DataGrid-scrollbarSize', `${
|
|
232
|
-
set('--DataGrid-rowWidth', `${
|
|
233
|
-
set('--DataGrid-columnsTotalWidth', `${
|
|
234
|
-
set('--DataGrid-leftPinnedWidth', `${
|
|
235
|
-
set('--DataGrid-rightPinnedWidth', `${
|
|
236
|
-
set('--DataGrid-headerHeight', `${
|
|
237
|
-
set('--DataGrid-headersTotalHeight', `${
|
|
238
|
-
set('--DataGrid-topContainerHeight', `${
|
|
239
|
-
set('--DataGrid-bottomContainerHeight', `${
|
|
240
|
-
set('--height', `${
|
|
241
|
-
}, [root,
|
|
228
|
+
set('--DataGrid-width', `${dimensionsState.viewportOuterSize.width}px`);
|
|
229
|
+
set('--DataGrid-hasScrollX', `${Number(dimensionsState.hasScrollX)}`);
|
|
230
|
+
set('--DataGrid-hasScrollY', `${Number(dimensionsState.hasScrollY)}`);
|
|
231
|
+
set('--DataGrid-scrollbarSize', `${dimensionsState.scrollbarSize}px`);
|
|
232
|
+
set('--DataGrid-rowWidth', `${dimensionsState.rowWidth}px`);
|
|
233
|
+
set('--DataGrid-columnsTotalWidth', `${dimensionsState.columnsTotalWidth}px`);
|
|
234
|
+
set('--DataGrid-leftPinnedWidth', `${dimensionsState.leftPinnedWidth}px`);
|
|
235
|
+
set('--DataGrid-rightPinnedWidth', `${dimensionsState.rightPinnedWidth}px`);
|
|
236
|
+
set('--DataGrid-headerHeight', `${dimensionsState.headerHeight}px`);
|
|
237
|
+
set('--DataGrid-headersTotalHeight', `${dimensionsState.headersTotalHeight}px`);
|
|
238
|
+
set('--DataGrid-topContainerHeight', `${dimensionsState.topContainerHeight}px`);
|
|
239
|
+
set('--DataGrid-bottomContainerHeight', `${dimensionsState.bottomContainerHeight}px`);
|
|
240
|
+
set('--height', `${dimensionsState.rowHeight}px`);
|
|
241
|
+
}, [root, dimensionsState]);
|
|
242
242
|
const isFirstSizing = React.useRef(true);
|
|
243
243
|
const handleResize = React.useCallback(size => {
|
|
244
244
|
rootDimensionsRef.current = size;
|
|
@@ -128,14 +128,15 @@ const useGridPrintExport = (apiRef, props) => {
|
|
|
128
128
|
gridClone.style.height = `${computedTotalHeight}px`;
|
|
129
129
|
// The height above does not include grid border width, so we need to exclude it
|
|
130
130
|
gridClone.style.boxSizing = 'content-box';
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
131
|
+
if (!normalizeOptions.hideFooter) {
|
|
132
|
+
// the footer is always being placed at the bottom of the page as if all rows are exported
|
|
133
|
+
// so if getRowsToExport is being used to only export a subset of rows then we need to
|
|
134
|
+
// adjust the footer position to be correctly placed at the bottom of the grid
|
|
135
|
+
const gridFooterElement = gridClone.querySelector(`.${_gridClasses.gridClasses.footerContainer}`);
|
|
136
|
+
gridFooterElement.style.position = 'absolute';
|
|
137
|
+
gridFooterElement.style.width = '100%';
|
|
138
|
+
gridFooterElement.style.top = `${computedTotalHeight - gridFooterElementHeight}px`;
|
|
139
|
+
}
|
|
139
140
|
|
|
140
141
|
// printDoc.body.appendChild(gridClone); should be enough but a clone isolation bug in Safari
|
|
141
142
|
// prevents us to do it
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.gridTopLevelRowCountSelector = exports.gridRowsLookupSelector = exports.gridRowsLoadingSelector = exports.gridRowsDataRowIdToIdLookupSelector = exports.gridRowTreeSelector = exports.gridRowTreeDepthsSelector = exports.gridRowMaximumTreeDepthSelector = exports.gridRowGroupingNameSelector = exports.gridRowCountSelector = exports.gridPinnedRowsSelector = exports.gridPinnedRowsCountSelector = exports.gridDataRowIdsSelector = exports.gridAdditionalRowGroupsSelector = void 0;
|
|
6
|
+
exports.gridTopLevelRowCountSelector = exports.gridRowsLookupSelector = exports.gridRowsLoadingSelector = exports.gridRowsDataRowIdToIdLookupSelector = exports.gridRowTreeSelector = exports.gridRowTreeDepthsSelector = exports.gridRowMaximumTreeDepthSelector = exports.gridRowGroupsToFetchSelector = exports.gridRowGroupingNameSelector = exports.gridRowCountSelector = exports.gridPinnedRowsSelector = exports.gridPinnedRowsCountSelector = exports.gridDataRowIdsSelector = exports.gridAdditionalRowGroupsSelector = void 0;
|
|
7
7
|
var _createSelector = require("../../../utils/createSelector");
|
|
8
8
|
const gridRowsStateSelector = state => state.rows;
|
|
9
9
|
const gridRowCountSelector = exports.gridRowCountSelector = (0, _createSelector.createSelector)(gridRowsStateSelector, rows => rows.totalRowCount);
|
|
@@ -14,6 +14,7 @@ const gridTopLevelRowCountSelector = exports.gridTopLevelRowCountSelector = (0,
|
|
|
14
14
|
const gridRowsLookupSelector = exports.gridRowsLookupSelector = (0, _createSelector.createSelector)(gridRowsStateSelector, rows => rows.dataRowIdToModelLookup);
|
|
15
15
|
const gridRowsDataRowIdToIdLookupSelector = exports.gridRowsDataRowIdToIdLookupSelector = (0, _createSelector.createSelector)(gridRowsStateSelector, rows => rows.dataRowIdToIdLookup);
|
|
16
16
|
const gridRowTreeSelector = exports.gridRowTreeSelector = (0, _createSelector.createSelector)(gridRowsStateSelector, rows => rows.tree);
|
|
17
|
+
const gridRowGroupsToFetchSelector = exports.gridRowGroupsToFetchSelector = (0, _createSelector.createSelector)(gridRowsStateSelector, rows => rows.groupsToFetch);
|
|
17
18
|
const gridRowGroupingNameSelector = exports.gridRowGroupingNameSelector = (0, _createSelector.createSelector)(gridRowsStateSelector, rows => rows.groupingName);
|
|
18
19
|
const gridRowTreeDepthsSelector = exports.gridRowTreeDepthsSelector = (0, _createSelector.createSelector)(gridRowsStateSelector, rows => rows.treeDepths);
|
|
19
20
|
const gridRowMaximumTreeDepthSelector = exports.gridRowMaximumTreeDepthSelector = (0, _createSelector.createSelectorMemoized)(gridRowsStateSelector, rows => {
|
|
@@ -7,6 +7,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
exports.buildRootGroup = exports.GRID_ROOT_GROUP_ID = exports.GRID_ID_AUTOGENERATED = void 0;
|
|
8
8
|
exports.calculatePinnedRowsHeight = calculatePinnedRowsHeight;
|
|
9
9
|
exports.checkGridRowIdIsValid = checkGridRowIdIsValid;
|
|
10
|
+
exports.computeRowsUpdates = computeRowsUpdates;
|
|
10
11
|
exports.createRowsInternalCache = void 0;
|
|
11
12
|
exports.getMinimalContentHeight = getMinimalContentHeight;
|
|
12
13
|
exports.updateCacheWithNewRows = exports.isAutoGeneratedRow = exports.getTreeNodeDescendants = exports.getTopLevelRowCount = exports.getRowsStateFromCache = exports.getRowIdFromRowModel = void 0;
|
|
@@ -88,7 +89,8 @@ const getRowsStateFromCache = ({
|
|
|
88
89
|
rowCountProp = 0,
|
|
89
90
|
loadingProp,
|
|
90
91
|
previousTree,
|
|
91
|
-
previousTreeDepths
|
|
92
|
+
previousTreeDepths,
|
|
93
|
+
previousGroupsToFetch
|
|
92
94
|
}) => {
|
|
93
95
|
const cache = apiRef.current.caches.rows;
|
|
94
96
|
|
|
@@ -97,13 +99,15 @@ const getRowsStateFromCache = ({
|
|
|
97
99
|
tree: unProcessedTree,
|
|
98
100
|
treeDepths: unProcessedTreeDepths,
|
|
99
101
|
dataRowIds: unProcessedDataRowIds,
|
|
100
|
-
groupingName
|
|
102
|
+
groupingName,
|
|
103
|
+
groupsToFetch = []
|
|
101
104
|
} = apiRef.current.applyStrategyProcessor('rowTreeCreation', {
|
|
102
105
|
previousTree,
|
|
103
106
|
previousTreeDepths,
|
|
104
107
|
updates: cache.updates,
|
|
105
108
|
dataRowIdToIdLookup: cache.dataRowIdToIdLookup,
|
|
106
|
-
dataRowIdToModelLookup: cache.dataRowIdToModelLookup
|
|
109
|
+
dataRowIdToModelLookup: cache.dataRowIdToModelLookup,
|
|
110
|
+
previousGroupsToFetch
|
|
107
111
|
});
|
|
108
112
|
|
|
109
113
|
// 2. Apply the "hydrateRows" pipe-processing.
|
|
@@ -132,7 +136,8 @@ const getRowsStateFromCache = ({
|
|
|
132
136
|
rowCountProp
|
|
133
137
|
}),
|
|
134
138
|
groupingName,
|
|
135
|
-
loading: loadingProp
|
|
139
|
+
loading: loadingProp,
|
|
140
|
+
groupsToFetch
|
|
136
141
|
});
|
|
137
142
|
};
|
|
138
143
|
exports.getRowsStateFromCache = getRowsStateFromCache;
|
|
@@ -163,7 +168,8 @@ exports.getTreeNodeDescendants = getTreeNodeDescendants;
|
|
|
163
168
|
const updateCacheWithNewRows = ({
|
|
164
169
|
previousCache,
|
|
165
170
|
getRowId,
|
|
166
|
-
updates
|
|
171
|
+
updates,
|
|
172
|
+
groupKeys
|
|
167
173
|
}) => {
|
|
168
174
|
if (previousCache.updates.type === 'full') {
|
|
169
175
|
throw new Error('MUI X: Unable to prepare a partial update if a full update is not applied yet.');
|
|
@@ -187,7 +193,8 @@ const updateCacheWithNewRows = ({
|
|
|
187
193
|
modify: [...(previousCache.updates.actions.modify ?? [])],
|
|
188
194
|
remove: [...(previousCache.updates.actions.remove ?? [])]
|
|
189
195
|
},
|
|
190
|
-
idToActionLookup: (0, _extends2.default)({}, previousCache.updates.idToActionLookup)
|
|
196
|
+
idToActionLookup: (0, _extends2.default)({}, previousCache.updates.idToActionLookup),
|
|
197
|
+
groupKeys
|
|
191
198
|
};
|
|
192
199
|
const dataRowIdToModelLookup = (0, _extends2.default)({}, previousCache.dataRowIdToModelLookup);
|
|
193
200
|
const dataRowIdToIdLookup = (0, _extends2.default)({}, previousCache.dataRowIdToIdLookup);
|
|
@@ -301,4 +308,22 @@ function calculatePinnedRowsHeight(apiRef) {
|
|
|
301
308
|
function getMinimalContentHeight(apiRef) {
|
|
302
309
|
const dimensions = (0, _gridDimensionsSelectors.gridDimensionsSelector)(apiRef.current.state);
|
|
303
310
|
return `var(--DataGrid-overlayHeight, ${2 * dimensions.rowHeight}px)`;
|
|
311
|
+
}
|
|
312
|
+
function computeRowsUpdates(apiRef, updates, getRowId) {
|
|
313
|
+
const nonPinnedRowsUpdates = [];
|
|
314
|
+
updates.forEach(update => {
|
|
315
|
+
const id = getRowIdFromRowModel(update, getRowId, 'A row was provided without id when calling updateRows():');
|
|
316
|
+
const rowNode = apiRef.current.getRowNode(id);
|
|
317
|
+
if (rowNode?.type === 'pinnedRow') {
|
|
318
|
+
// @ts-ignore because otherwise `release:build` doesn't work
|
|
319
|
+
const pinnedRowsCache = apiRef.current.caches.pinnedRows;
|
|
320
|
+
const prevModel = pinnedRowsCache.idLookup[id];
|
|
321
|
+
if (prevModel) {
|
|
322
|
+
pinnedRowsCache.idLookup[id] = (0, _extends2.default)({}, prevModel, update);
|
|
323
|
+
}
|
|
324
|
+
} else {
|
|
325
|
+
nonPinnedRowsUpdates.push(update);
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
return nonPinnedRowsUpdates;
|
|
304
329
|
}
|
|
@@ -20,8 +20,9 @@ var _pipeProcessing = require("../../core/pipeProcessing");
|
|
|
20
20
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
|
|
21
21
|
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 && {}.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; }
|
|
22
22
|
const rowsStateInitializer = (state, props, apiRef) => {
|
|
23
|
+
const isDataSourceAvailable = !!props.unstable_dataSource;
|
|
23
24
|
apiRef.current.caches.rows = (0, _gridRowsUtils.createRowsInternalCache)({
|
|
24
|
-
rows: props.rows,
|
|
25
|
+
rows: isDataSourceAvailable ? [] : props.rows,
|
|
25
26
|
getRowId: props.getRowId,
|
|
26
27
|
loading: props.loading,
|
|
27
28
|
rowCount: props.rowCount
|
|
@@ -30,7 +31,7 @@ const rowsStateInitializer = (state, props, apiRef) => {
|
|
|
30
31
|
rows: (0, _gridRowsUtils.getRowsStateFromCache)({
|
|
31
32
|
apiRef,
|
|
32
33
|
rowCountProp: props.rowCount,
|
|
33
|
-
loadingProp: props.loading,
|
|
34
|
+
loadingProp: isDataSourceAvailable ? true : props.loading,
|
|
34
35
|
previousTree: null,
|
|
35
36
|
previousTreeDepths: null
|
|
36
37
|
})
|
|
@@ -92,7 +93,8 @@ const useGridRows = (apiRef, props) => {
|
|
|
92
93
|
rowCountProp: props.rowCount,
|
|
93
94
|
loadingProp: props.loading,
|
|
94
95
|
previousTree: (0, _gridRowsSelector.gridRowTreeSelector)(apiRef),
|
|
95
|
-
previousTreeDepths: (0, _gridRowsSelector.gridRowTreeDepthsSelector)(apiRef)
|
|
96
|
+
previousTreeDepths: (0, _gridRowsSelector.gridRowTreeDepthsSelector)(apiRef),
|
|
97
|
+
previousGroupsToFetch: (0, _gridRowsSelector.gridRowGroupsToFetchSelector)(apiRef)
|
|
96
98
|
})
|
|
97
99
|
}));
|
|
98
100
|
apiRef.current.publishEvent('rowsSet');
|
|
@@ -134,21 +136,7 @@ const useGridRows = (apiRef, props) => {
|
|
|
134
136
|
if (props.signature === _useGridApiEventHandler.GridSignature.DataGrid && updates.length > 1) {
|
|
135
137
|
throw new Error(['MUI X: You cannot update several rows at once in `apiRef.current.updateRows` on the DataGrid.', 'You need to upgrade to DataGridPro or DataGridPremium component to unlock this feature.'].join('\n'));
|
|
136
138
|
}
|
|
137
|
-
const nonPinnedRowsUpdates =
|
|
138
|
-
updates.forEach(update => {
|
|
139
|
-
const id = (0, _gridRowsUtils.getRowIdFromRowModel)(update, props.getRowId, 'A row was provided without id when calling updateRows():');
|
|
140
|
-
const rowNode = apiRef.current.getRowNode(id);
|
|
141
|
-
if (rowNode?.type === 'pinnedRow') {
|
|
142
|
-
// @ts-ignore because otherwise `release:build` doesn't work
|
|
143
|
-
const pinnedRowsCache = apiRef.current.caches.pinnedRows;
|
|
144
|
-
const prevModel = pinnedRowsCache.idLookup[id];
|
|
145
|
-
if (prevModel) {
|
|
146
|
-
pinnedRowsCache.idLookup[id] = (0, _extends2.default)({}, prevModel, update);
|
|
147
|
-
}
|
|
148
|
-
} else {
|
|
149
|
-
nonPinnedRowsUpdates.push(update);
|
|
150
|
-
}
|
|
151
|
-
});
|
|
139
|
+
const nonPinnedRowsUpdates = (0, _gridRowsUtils.computeRowsUpdates)(apiRef, updates, props.getRowId);
|
|
152
140
|
const cache = (0, _gridRowsUtils.updateCacheWithNewRows)({
|
|
153
141
|
updates: nonPinnedRowsUpdates,
|
|
154
142
|
getRowId: props.getRowId,
|
|
@@ -159,6 +147,31 @@ const useGridRows = (apiRef, props) => {
|
|
|
159
147
|
throttle: true
|
|
160
148
|
});
|
|
161
149
|
}, [props.signature, props.getRowId, throttledRowsChange, apiRef]);
|
|
150
|
+
const updateServerRows = React.useCallback((updates, groupKeys) => {
|
|
151
|
+
const nonPinnedRowsUpdates = (0, _gridRowsUtils.computeRowsUpdates)(apiRef, updates, props.getRowId);
|
|
152
|
+
const cache = (0, _gridRowsUtils.updateCacheWithNewRows)({
|
|
153
|
+
updates: nonPinnedRowsUpdates,
|
|
154
|
+
getRowId: props.getRowId,
|
|
155
|
+
previousCache: apiRef.current.caches.rows,
|
|
156
|
+
groupKeys: groupKeys ?? []
|
|
157
|
+
});
|
|
158
|
+
throttledRowsChange({
|
|
159
|
+
cache,
|
|
160
|
+
throttle: false
|
|
161
|
+
});
|
|
162
|
+
}, [props.getRowId, throttledRowsChange, apiRef]);
|
|
163
|
+
const setLoading = React.useCallback(loading => {
|
|
164
|
+
if (loading === props.loading) {
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
logger.debug(`Setting loading to ${loading}`);
|
|
168
|
+
apiRef.current.setState(state => (0, _extends2.default)({}, state, {
|
|
169
|
+
rows: (0, _extends2.default)({}, state.rows, {
|
|
170
|
+
loading
|
|
171
|
+
})
|
|
172
|
+
}));
|
|
173
|
+
apiRef.current.caches.rows.loadingPropBeforePartialUpdates = loading;
|
|
174
|
+
}, [props.loading, apiRef, logger]);
|
|
162
175
|
const getRowModels = React.useCallback(() => {
|
|
163
176
|
const dataRows = (0, _gridRowsSelector.gridDataRowIdsSelector)(apiRef);
|
|
164
177
|
const idRowsLookup = (0, _gridRowsSelector.gridRowsLookupSelector)(apiRef);
|
|
@@ -313,6 +326,7 @@ const useGridRows = (apiRef, props) => {
|
|
|
313
326
|
}, [apiRef, props.signature, props.getRowId]);
|
|
314
327
|
const rowApi = {
|
|
315
328
|
getRow,
|
|
329
|
+
setLoading,
|
|
316
330
|
getRowId,
|
|
317
331
|
getRowModels,
|
|
318
332
|
getRowsCount,
|
|
@@ -328,6 +342,9 @@ const useGridRows = (apiRef, props) => {
|
|
|
328
342
|
setRowChildrenExpansion,
|
|
329
343
|
getRowGroupChildren
|
|
330
344
|
};
|
|
345
|
+
const rowProPrivateApi = {
|
|
346
|
+
updateServerRows
|
|
347
|
+
};
|
|
331
348
|
|
|
332
349
|
/**
|
|
333
350
|
* EVENTS
|
|
@@ -402,6 +419,7 @@ const useGridRows = (apiRef, props) => {
|
|
|
402
419
|
(0, _pipeProcessing.useGridRegisterPipeApplier)(apiRef, 'hydrateRows', applyHydrateRowsProcessor);
|
|
403
420
|
(0, _useGridApiMethod.useGridApiMethod)(apiRef, rowApi, 'public');
|
|
404
421
|
(0, _useGridApiMethod.useGridApiMethod)(apiRef, rowProApi, props.signature === _useGridApiEventHandler.GridSignature.DataGrid ? 'private' : 'public');
|
|
422
|
+
(0, _useGridApiMethod.useGridApiMethod)(apiRef, rowProPrivateApi, 'private');
|
|
405
423
|
|
|
406
424
|
// The effect do not track any value defined synchronously during the 1st render by hooks called after `useGridRows`
|
|
407
425
|
// As a consequence, the state generated by the 1st run of this useEffect will always be equal to the initialization one
|
|
@@ -446,7 +464,7 @@ const useGridRows = (apiRef, props) => {
|
|
|
446
464
|
return;
|
|
447
465
|
}
|
|
448
466
|
}
|
|
449
|
-
logger.debug(`Updating all rows, new length ${props.rows
|
|
467
|
+
logger.debug(`Updating all rows, new length ${props.rows?.length}`);
|
|
450
468
|
throttledRowsChange({
|
|
451
469
|
cache: (0, _gridRowsUtils.createRowsInternalCache)({
|
|
452
470
|
rows: props.rows,
|
package/node/index.js
CHANGED
package/node/internals/index.js
CHANGED
|
@@ -57,6 +57,7 @@ var _exportNames = {
|
|
|
57
57
|
useGridParamsApi: true,
|
|
58
58
|
gridAdditionalRowGroupsSelector: true,
|
|
59
59
|
gridPinnedRowsSelector: true,
|
|
60
|
+
gridRowGroupsToFetchSelector: true,
|
|
60
61
|
headerFilteringStateInitializer: true,
|
|
61
62
|
useGridHeaderFiltering: true,
|
|
62
63
|
useGridRowSelection: true,
|
|
@@ -313,6 +314,12 @@ Object.defineProperty(exports, "gridPinnedRowsSelector", {
|
|
|
313
314
|
return _gridRowsSelector.gridPinnedRowsSelector;
|
|
314
315
|
}
|
|
315
316
|
});
|
|
317
|
+
Object.defineProperty(exports, "gridRowGroupsToFetchSelector", {
|
|
318
|
+
enumerable: true,
|
|
319
|
+
get: function () {
|
|
320
|
+
return _gridRowsSelector.gridRowGroupsToFetchSelector;
|
|
321
|
+
}
|
|
322
|
+
});
|
|
316
323
|
Object.defineProperty(exports, "headerFilteringStateInitializer", {
|
|
317
324
|
enumerable: true,
|
|
318
325
|
get: function () {
|