@mui/x-data-grid-pro
Version:
The Pro plan edition of the MUI X Data Grid components.
157 lines (154 loc) • 7.68 kB
JavaScript
'use client';
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useGridTreeDataPreProcessors = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose"));
var React = _interopRequireWildcard(require("react"));
var _xDataGrid = require("@mui/x-data-grid");
var _internals = require("@mui/x-data-grid/internals");
var _gridTreeDataGroupColDef = require("./gridTreeDataGroupColDef");
var _gridTreeDataUtils = require("./gridTreeDataUtils");
var _components = require("../../../components");
var _createRowTree = require("../../../utils/tree/createRowTree");
var _sortRowTree = require("../../../utils/tree/sortRowTree");
var _updateRowTree = require("../../../utils/tree/updateRowTree");
var _utils = require("../../../utils/tree/utils");
var _jsxRuntime = require("react/jsx-runtime");
const _excluded = ["hideDescendantCount"];
const useGridTreeDataPreProcessors = (privateApiRef, props) => {
const setStrategyAvailability = React.useCallback(() => {
privateApiRef.current.setStrategyAvailability(_internals.GridStrategyGroup.RowTree, _gridTreeDataUtils.TreeDataStrategy.Default, props.treeData && !props.dataSource ? () => true : () => false);
}, [privateApiRef, props.treeData, props.dataSource]);
const getGroupingColDef = React.useCallback(() => {
const groupingColDefProp = props.groupingColDef;
let colDefOverride;
if (typeof groupingColDefProp === 'function') {
const params = {
groupingName: _gridTreeDataUtils.TreeDataStrategy.Default,
fields: []
};
colDefOverride = groupingColDefProp(params);
} else {
colDefOverride = groupingColDefProp;
}
const _ref = colDefOverride ?? {},
{
hideDescendantCount
} = _ref,
colDefOverrideProperties = (0, _objectWithoutPropertiesLoose2.default)(_ref, _excluded);
const commonProperties = (0, _extends2.default)({}, _gridTreeDataGroupColDef.GRID_TREE_DATA_GROUPING_COL_DEF, {
renderCell: params => /*#__PURE__*/(0, _jsxRuntime.jsx)(_components.GridTreeDataGroupingCell, (0, _extends2.default)({}, params, {
hideDescendantCount: hideDescendantCount
})),
headerName: privateApiRef.current.getLocaleText('treeDataGroupingHeaderName')
});
return (0, _extends2.default)({}, commonProperties, colDefOverrideProperties, _gridTreeDataGroupColDef.GRID_TREE_DATA_GROUPING_COL_DEF_FORCED_PROPERTIES);
}, [privateApiRef, props.groupingColDef]);
const updateGroupingColumn = React.useCallback(columnsState => {
if (props.dataSource) {
return columnsState;
}
const groupingColDefField = _gridTreeDataGroupColDef.GRID_TREE_DATA_GROUPING_COL_DEF_FORCED_PROPERTIES.field;
const shouldHaveGroupingColumn = props.treeData;
const prevGroupingColumn = columnsState.lookup[groupingColDefField];
if (shouldHaveGroupingColumn) {
const newGroupingColumn = getGroupingColDef();
if (prevGroupingColumn) {
newGroupingColumn.width = prevGroupingColumn.width;
newGroupingColumn.flex = prevGroupingColumn.flex;
}
columnsState.lookup[groupingColDefField] = newGroupingColumn;
if (prevGroupingColumn == null) {
columnsState.orderedFields = [groupingColDefField, ...columnsState.orderedFields];
}
} else if (!shouldHaveGroupingColumn && prevGroupingColumn) {
delete columnsState.lookup[groupingColDefField];
columnsState.orderedFields = columnsState.orderedFields.filter(field => field !== groupingColDefField);
}
return columnsState;
}, [props.treeData, props.dataSource, getGroupingColDef]);
const createRowTreeForTreeData = React.useCallback(params => {
if (!props.getTreeDataPath) {
throw new Error('MUI X: No getTreeDataPath given.');
}
const getRowTreeBuilderNode = rowId => ({
id: rowId,
path: props.getTreeDataPath(params.dataRowIdToModelLookup[rowId]).map(key => ({
key,
field: null
}))
});
const onDuplicatePath = (firstId, secondId, path) => {
throw new Error(['MUI X: The path returned by `getTreeDataPath` should be unique.', `The rows with id #${firstId} and #${secondId} have the same.`, `Path: ${JSON.stringify(path.map(step => step.key))}.`].join('\n'));
};
if (params.updates.type === 'full') {
return (0, _createRowTree.createRowTree)({
previousTree: params.previousTree,
nodes: params.updates.rows.map(getRowTreeBuilderNode),
defaultGroupingExpansionDepth: props.defaultGroupingExpansionDepth,
isGroupExpandedByDefault: props.isGroupExpandedByDefault,
groupingName: _gridTreeDataUtils.TreeDataStrategy.Default,
onDuplicatePath
});
}
return (0, _updateRowTree.updateRowTree)({
nodes: {
inserted: params.updates.actions.insert.map(getRowTreeBuilderNode),
modified: params.updates.actions.modify.map(getRowTreeBuilderNode),
removed: params.updates.actions.remove
},
previousTree: params.previousTree,
previousTreeDepth: params.previousTreeDepths,
defaultGroupingExpansionDepth: props.defaultGroupingExpansionDepth,
isGroupExpandedByDefault: props.isGroupExpandedByDefault,
groupingName: _gridTreeDataUtils.TreeDataStrategy.Default
});
}, [props.getTreeDataPath, props.defaultGroupingExpansionDepth, props.isGroupExpandedByDefault]);
const filterRows = React.useCallback(params => {
const rowTree = (0, _xDataGrid.gridRowTreeSelector)(privateApiRef);
return (0, _gridTreeDataUtils.filterRowTreeFromTreeData)({
rowTree,
isRowMatchingFilters: params.isRowMatchingFilters,
disableChildrenFiltering: props.disableChildrenFiltering,
filterModel: params.filterModel,
apiRef: privateApiRef
});
}, [privateApiRef, props.disableChildrenFiltering]);
const sortRows = React.useCallback(params => {
const rowTree = (0, _xDataGrid.gridRowTreeSelector)(privateApiRef);
return (0, _sortRowTree.sortRowTree)({
rowTree,
sortRowList: params.sortRowList,
disableChildrenSorting: props.disableChildrenSorting,
shouldRenderGroupBelowLeaves: false
});
}, [privateApiRef, props.disableChildrenSorting]);
(0, _internals.useGridRegisterPipeProcessor)(privateApiRef, 'hydrateColumns', updateGroupingColumn);
(0, _internals.useGridRegisterStrategyProcessor)(privateApiRef, _gridTreeDataUtils.TreeDataStrategy.Default, 'rowTreeCreation', createRowTreeForTreeData);
(0, _internals.useGridRegisterStrategyProcessor)(privateApiRef, _gridTreeDataUtils.TreeDataStrategy.Default, 'filtering', filterRows);
(0, _internals.useGridRegisterStrategyProcessor)(privateApiRef, _gridTreeDataUtils.TreeDataStrategy.Default, 'sorting', sortRows);
(0, _internals.useGridRegisterStrategyProcessor)(privateApiRef, _gridTreeDataUtils.TreeDataStrategy.Default, 'visibleRowsLookupCreation', _utils.getVisibleRowsLookup);
/**
* 1ST RENDER
*/
(0, _xDataGrid.useFirstRender)(() => {
setStrategyAvailability();
});
/**
* EFFECTS
*/
const isFirstRender = React.useRef(true);
React.useEffect(() => {
if (!isFirstRender.current) {
setStrategyAvailability();
} else {
isFirstRender.current = false;
}
}, [setStrategyAvailability]);
};
exports.useGridTreeDataPreProcessors = useGridTreeDataPreProcessors;
;