UNPKG

@mui/x-data-grid-pro

Version:

The Pro plan edition of the MUI X Data Grid components.

101 lines (100 loc) 3.26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.filterRowTreeFromTreeData = exports.TreeDataStrategy = void 0; var _internals = require("@mui/x-data-grid/internals"); let TreeDataStrategy = exports.TreeDataStrategy = /*#__PURE__*/function (TreeDataStrategy) { TreeDataStrategy["Default"] = "tree-data"; TreeDataStrategy["DataSource"] = "tree-data-source"; return TreeDataStrategy; }({}); /** * A node is visible if one of the following criteria is met: * - One of its children is passing the filter * - It is passing the filter */ const filterRowTreeFromTreeData = params => { const { apiRef, rowTree, disableChildrenFiltering, isRowMatchingFilters } = params; const filteredRowsLookup = {}; const filteredChildrenCountLookup = {}; const filteredDescendantCountLookup = {}; const filterCache = {}; const filterResults = { passingFilterItems: null, passingQuickFilterValues: null }; const filterTreeNode = (node, isParentMatchingFilters, areAncestorsExpanded) => { const shouldSkipFilters = disableChildrenFiltering && node.depth > 0; let isMatchingFilters; if (shouldSkipFilters) { isMatchingFilters = null; } else if (!isRowMatchingFilters || node.type === 'footer') { isMatchingFilters = true; } else { const row = apiRef.current.getRow(node.id); isRowMatchingFilters(row, undefined, filterResults); isMatchingFilters = (0, _internals.passFilterLogic)([filterResults.passingFilterItems], [filterResults.passingQuickFilterValues], params.filterModel, params.apiRef, filterCache); } let filteredChildrenCount = 0; let filteredDescendantCount = 0; if (node.type === 'group') { node.children.forEach(childId => { const childNode = rowTree[childId]; const childSubTreeSize = filterTreeNode(childNode, isMatchingFilters ?? isParentMatchingFilters, areAncestorsExpanded && !!node.childrenExpanded); filteredDescendantCount += childSubTreeSize; if (childSubTreeSize > 0) { filteredChildrenCount += 1; } }); } let shouldPassFilters; switch (isMatchingFilters) { case true: { shouldPassFilters = true; break; } case false: { shouldPassFilters = filteredDescendantCount > 0; break; } default: { shouldPassFilters = isParentMatchingFilters; break; } } if (!shouldPassFilters) { filteredRowsLookup[node.id] = false; } if (!shouldPassFilters) { return 0; } filteredChildrenCountLookup[node.id] = filteredChildrenCount; filteredDescendantCountLookup[node.id] = filteredDescendantCount; if (node.type === 'footer') { return filteredDescendantCount; } return filteredDescendantCount + 1; }; 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 { filteredRowsLookup, filteredChildrenCountLookup, filteredDescendantCountLookup }; }; exports.filterRowTreeFromTreeData = filterRowTreeFromTreeData;