UNPKG

@mui/x-data-grid-premium

Version:

The Premium plan edition of the MUI X Data Grid Components.

82 lines (81 loc) 4.33 kB
"use strict"; 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;