@mui/x-data-grid-premium
Version:
The Premium plan edition of the MUI X Data Grid Components.
82 lines (81 loc) • 4.33 kB
JavaScript
;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useGridDataSourceRowGroupingPreProcessors = void 0;
var React = _interopRequireWildcard(require("react"));
var _xDataGridPro = require("@mui/x-data-grid-pro");
var _internals = require("@mui/x-data-grid-pro/internals");
var _gridRowGroupingUtils = require("./gridRowGroupingUtils");
var _gridRowGroupingSelector = require("./gridRowGroupingSelector");
const useGridDataSourceRowGroupingPreProcessors = (apiRef, props) => {
const createRowTreeForRowGrouping = React.useCallback(params => {
const getGroupKey = props.dataSource?.getGroupKey;
if (!getGroupKey) {
throw new Error('MUI X: No `getGroupKey` method provided with the dataSource.');
}
const getChildrenCount = props.dataSource?.getChildrenCount;
if (!getChildrenCount) {
throw new Error('MUI X: No `getChildrenCount` method provided with the dataSource.');
}
const pivotingActive = (0, _internals.gridPivotActiveSelector)(apiRef);
const sanitizedRowGroupingModel = (0, _gridRowGroupingSelector.gridRowGroupingSanitizedModelSelector)(apiRef);
const maxDepth = pivotingActive ? sanitizedRowGroupingModel.length - 1 : undefined;
const columnsLookup = (0, _xDataGridPro.gridColumnLookupSelector)(apiRef);
const groupingRules = (0, _gridRowGroupingUtils.getGroupingRules)({
sanitizedRowGroupingModel,
columnsLookup
});
apiRef.current.caches.rowGrouping.rulesOnLastRowTreeCreation = groupingRules;
const getRowTreeBuilderNode = rowId => {
const parentPath = params.updates.groupKeys ?? (0, _internals.getParentPath)(rowId, params);
const leafKey = getGroupKey(params.dataRowIdToModelLookup[rowId]);
return {
id: rowId,
path: [...parentPath, leafKey ?? rowId.toString()].map((key, i) => ({
key,
field: groupingRules[i]?.field ?? null
})),
serverChildrenCount: getChildrenCount(params.dataRowIdToModelLookup[rowId]) ?? 0
};
};
if (params.updates.type === 'full') {
return (0, _internals.createRowTree)({
previousTree: params.previousTree,
nodes: params.updates.rows.map(getRowTreeBuilderNode),
defaultGroupingExpansionDepth: props.defaultGroupingExpansionDepth,
isGroupExpandedByDefault: props.isGroupExpandedByDefault,
groupingName: _internals.RowGroupingStrategy.DataSource,
maxDepth
});
}
return (0, _internals.updateRowTree)({
nodes: {
inserted: params.updates.actions.insert.map(getRowTreeBuilderNode),
modified: params.updates.actions.modify.map(getRowTreeBuilderNode),
removed: params.updates.actions.remove
},
previousTree: params.previousTree,
previousGroupsToFetch: params.previousGroupsToFetch,
previousTreeDepth: params.previousTreeDepths,
defaultGroupingExpansionDepth: props.defaultGroupingExpansionDepth,
isGroupExpandedByDefault: props.isGroupExpandedByDefault,
groupingName: _internals.RowGroupingStrategy.DataSource,
maxDepth
});
}, [apiRef, props.dataSource, props.defaultGroupingExpansionDepth, props.isGroupExpandedByDefault]);
const filterRows = React.useCallback(() => {
const rowTree = (0, _xDataGridPro.gridRowTreeSelector)(apiRef);
return (0, _internals.skipFiltering)(rowTree);
}, [apiRef]);
const sortRows = React.useCallback(() => {
const rowTree = (0, _xDataGridPro.gridRowTreeSelector)(apiRef);
return (0, _internals.skipSorting)(rowTree);
}, [apiRef]);
(0, _internals.useGridRegisterStrategyProcessor)(apiRef, _internals.RowGroupingStrategy.DataSource, 'rowTreeCreation', createRowTreeForRowGrouping);
(0, _internals.useGridRegisterStrategyProcessor)(apiRef, _internals.RowGroupingStrategy.DataSource, 'filtering', filterRows);
(0, _internals.useGridRegisterStrategyProcessor)(apiRef, _internals.RowGroupingStrategy.DataSource, 'sorting', sortRows);
(0, _internals.useGridRegisterStrategyProcessor)(apiRef, _internals.RowGroupingStrategy.DataSource, 'visibleRowsLookupCreation', _internals.getVisibleRowsLookup);
};
exports.useGridDataSourceRowGroupingPreProcessors = useGridDataSourceRowGroupingPreProcessors;