@mui/x-data-grid-premium
Version:
The Premium plan edition of the data grid component (MUI X).
172 lines (130 loc) • 5.61 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.setStrategyAvailability = exports.mergeStateWithRowGroupingModel = exports.isGroupingColumn = exports.getRowGroupingFieldFromGroupingCriteria = exports.getRowGroupingCriteriaFromGroupingField = exports.getColDefOverrides = exports.filterRowTreeFromGroupingColumns = exports.ROW_GROUPING_STRATEGY = exports.GRID_ROW_GROUPING_SINGLE_GROUPING_FIELD = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _gridRowGroupingSelector = require("./gridRowGroupingSelector");
const GRID_ROW_GROUPING_SINGLE_GROUPING_FIELD = '__row_group_by_columns_group__';
exports.GRID_ROW_GROUPING_SINGLE_GROUPING_FIELD = GRID_ROW_GROUPING_SINGLE_GROUPING_FIELD;
const ROW_GROUPING_STRATEGY = 'grouping-columns';
exports.ROW_GROUPING_STRATEGY = ROW_GROUPING_STRATEGY;
const getRowGroupingFieldFromGroupingCriteria = groupingCriteria => {
if (groupingCriteria === null) {
return GRID_ROW_GROUPING_SINGLE_GROUPING_FIELD;
}
return `__row_group_by_columns_group_${groupingCriteria}__`;
};
exports.getRowGroupingFieldFromGroupingCriteria = getRowGroupingFieldFromGroupingCriteria;
const getRowGroupingCriteriaFromGroupingField = groupingColDefField => {
const match = groupingColDefField.match(/^__row_group_by_columns_group_(.*)__$/);
if (!match) {
return null;
}
return match[1];
};
exports.getRowGroupingCriteriaFromGroupingField = getRowGroupingCriteriaFromGroupingField;
const isGroupingColumn = field => field === GRID_ROW_GROUPING_SINGLE_GROUPING_FIELD || getRowGroupingCriteriaFromGroupingField(field) !== null;
exports.isGroupingColumn = isGroupingColumn;
/**
* When filtering a group, we only want to filter according to the items related to this grouping column.
*/
const shouldApplyFilterItemOnGroup = (columnField, node) => {
if (columnField === GRID_ROW_GROUPING_SINGLE_GROUPING_FIELD) {
return true;
}
const groupingCriteriaField = getRowGroupingCriteriaFromGroupingField(columnField);
return groupingCriteriaField === node.groupingField;
};
/**
* A leaf is visible if it passed the filter
* A group is visible if all the following criteria are met:
* - One of its children is passing the filter
* - It is passing the filter
*/
const filterRowTreeFromGroupingColumns = params => {
const {
rowTree,
isRowMatchingFilters
} = params;
const visibleRowsLookup = {};
const filteredRowsLookup = {};
const filteredDescendantCountLookup = {};
const filterTreeNode = (node, areAncestorsPassingChildren, areAncestorsExpanded) => {
var _node$children, _node$children2;
let isMatchingFilters;
if (!isRowMatchingFilters) {
isMatchingFilters = true;
} else {
const shouldApplyItem = node.isAutoGenerated ? columnField => shouldApplyFilterItemOnGroup(columnField, node) : undefined;
isMatchingFilters = isRowMatchingFilters(node.id, shouldApplyItem);
}
let filteredDescendantCount = 0;
(_node$children = node.children) == null ? void 0 : _node$children.forEach(childId => {
const childNode = rowTree[childId];
const childSubTreeSize = filterTreeNode(childNode, areAncestorsPassingChildren && isMatchingFilters, areAncestorsExpanded && !!node.childrenExpanded);
filteredDescendantCount += childSubTreeSize;
});
let shouldPassFilters;
if (!areAncestorsPassingChildren) {
shouldPassFilters = false;
} else if ((_node$children2 = node.children) != null && _node$children2.length) {
shouldPassFilters = isMatchingFilters && filteredDescendantCount > 0;
} else {
shouldPassFilters = isMatchingFilters;
}
visibleRowsLookup[node.id] = shouldPassFilters && areAncestorsExpanded;
filteredRowsLookup[node.id] = shouldPassFilters;
if (!shouldPassFilters) {
return 0;
}
filteredDescendantCountLookup[node.id] = filteredDescendantCount;
if (!node.children) {
return filteredDescendantCount + 1;
}
return filteredDescendantCount;
};
const nodes = Object.values(rowTree);
for (let i = 0; i < nodes.length; i += 1) {
const node = nodes[i];
if (node.depth === 0) {
filterTreeNode(node, true, true);
}
}
return {
visibleRowsLookup,
filteredRowsLookup,
filteredDescendantCountLookup
};
};
exports.filterRowTreeFromGroupingColumns = filterRowTreeFromGroupingColumns;
const getColDefOverrides = (groupingColDefProp, fields) => {
if (typeof groupingColDefProp === 'function') {
return groupingColDefProp({
groupingName: ROW_GROUPING_STRATEGY,
fields
});
}
return groupingColDefProp;
};
exports.getColDefOverrides = getColDefOverrides;
const mergeStateWithRowGroupingModel = rowGroupingModel => state => (0, _extends2.default)({}, state, {
rowGrouping: (0, _extends2.default)({}, state.rowGrouping, {
model: rowGroupingModel
})
});
exports.mergeStateWithRowGroupingModel = mergeStateWithRowGroupingModel;
const setStrategyAvailability = (apiRef, disableRowGrouping) => {
let isAvailable;
if (disableRowGrouping) {
isAvailable = () => false;
} else {
isAvailable = () => {
const rowGroupingSanitizedModel = (0, _gridRowGroupingSelector.gridRowGroupingSanitizedModelSelector)(apiRef);
return rowGroupingSanitizedModel.length > 0;
};
}
apiRef.current.unstable_setStrategyAvailability('rowTree', ROW_GROUPING_STRATEGY, isAvailable);
};
exports.setStrategyAvailability = setStrategyAvailability;