From 0686ec656385e6a1266a9fac8780e93e573333d7 Mon Sep 17 00:00:00 2001 From: Rom Grk Date: Tue, 11 Jul 2023 12:34:54 -0400 Subject: [PATCH 1/6] perf: replace lookups with sets --- .../features/rowGrouping/gridRowGroupingUtils.ts | 4 ++-- .../src/hooks/features/treeData/gridTreeDataUtils.ts | 4 ++-- .../grid/x-data-grid-pro/src/utils/tree/utils.ts | 12 ++++++------ .../src/hooks/features/filter/gridFilterSelector.ts | 6 ++---- .../src/hooks/features/filter/gridFilterState.ts | 4 ++-- .../src/hooks/features/filter/useGridFilter.tsx | 10 +++++----- 6 files changed, 19 insertions(+), 21 deletions(-) diff --git a/packages/grid/x-data-grid-premium/src/hooks/features/rowGrouping/gridRowGroupingUtils.ts b/packages/grid/x-data-grid-premium/src/hooks/features/rowGrouping/gridRowGroupingUtils.ts index 1979146222f9c..5b535b85dee0f 100644 --- a/packages/grid/x-data-grid-premium/src/hooks/features/rowGrouping/gridRowGroupingUtils.ts +++ b/packages/grid/x-data-grid-premium/src/hooks/features/rowGrouping/gridRowGroupingUtils.ts @@ -84,7 +84,7 @@ export const filterRowTreeFromGroupingColumns = ( params: FilterRowTreeFromTreeDataParams, ): Omit => { const { apiRef, rowTree, isRowMatchingFilters, filterModel } = params; - const filteredRowsLookup: Record = {}; + const filteredRowsLookup = new Set(); const filteredDescendantCountLookup: Record = {}; const filterCache = {}; @@ -141,7 +141,7 @@ export const filterRowTreeFromGroupingColumns = ( } } - filteredRowsLookup[node.id] = isPassingFiltering; + if (isPassingFiltering) filteredRowsLookup.add(node.id); if (!isPassingFiltering) { return 0; diff --git a/packages/grid/x-data-grid-pro/src/hooks/features/treeData/gridTreeDataUtils.ts b/packages/grid/x-data-grid-pro/src/hooks/features/treeData/gridTreeDataUtils.ts index 291adc3f39d74..80553dff0a56e 100644 --- a/packages/grid/x-data-grid-pro/src/hooks/features/treeData/gridTreeDataUtils.ts +++ b/packages/grid/x-data-grid-pro/src/hooks/features/treeData/gridTreeDataUtils.ts @@ -31,7 +31,7 @@ export const filterRowTreeFromTreeData = ( params: FilterRowTreeFromTreeDataParams, ): Omit => { const { apiRef, rowTree, disableChildrenFiltering, isRowMatchingFilters } = params; - const filteredRowsLookup: Record = {}; + const filteredRowsLookup = new Set(); const filteredDescendantCountLookup: Record = {}; const filterCache = {}; @@ -94,7 +94,7 @@ export const filterRowTreeFromTreeData = ( } } - filteredRowsLookup[node.id] = shouldPassFilters; + if (shouldPassFilters) filteredRowsLookup.add(node.id); if (!shouldPassFilters) { return 0; diff --git a/packages/grid/x-data-grid-pro/src/utils/tree/utils.ts b/packages/grid/x-data-grid-pro/src/utils/tree/utils.ts index 3d4087f9ea054..5e77ed37b980f 100644 --- a/packages/grid/x-data-grid-pro/src/utils/tree/utils.ts +++ b/packages/grid/x-data-grid-pro/src/utils/tree/utils.ts @@ -231,13 +231,13 @@ export const getVisibleRowsLookup = ({ filteredRowsLookup: GridFilterState['filteredRowsLookup']; }) => { if (!filteredRowsLookup) { - return {}; + return new Set(); } - const visibleRowsLookup: Record = {}; + const visibleRowsLookup = new Set(); const handleTreeNode = (node: GridTreeNode, areAncestorsExpanded: boolean) => { - const isPassingFiltering = filteredRowsLookup[node.id]; + const isPassingFiltering = filteredRowsLookup.has(node.id); if (node.type === 'group') { node.children.forEach((childId) => { @@ -246,12 +246,12 @@ export const getVisibleRowsLookup = ({ }); } - visibleRowsLookup[node.id] = isPassingFiltering && areAncestorsExpanded; + if (isPassingFiltering && areAncestorsExpanded) visibleRowsLookup.add(node.id); // TODO rows v6: Should we keep storing the visibility status of footer independently or rely on the group visibility in the selector ? if (node.type === 'group' && node.footerId != null) { - visibleRowsLookup[node.footerId] = - isPassingFiltering && areAncestorsExpanded && !!node.childrenExpanded; + if (isPassingFiltering && areAncestorsExpanded && !!node.childrenExpanded) + visibleRowsLookup.add(node.footerId); } }; diff --git a/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterSelector.ts b/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterSelector.ts index 40fa6d9c6a3bd..f2eb29e64c957 100644 --- a/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterSelector.ts +++ b/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterSelector.ts @@ -60,8 +60,7 @@ export const gridFilteredDescendantCountLookupSelector = createSelector( export const gridExpandedSortedRowEntriesSelector = createSelectorMemoized( gridVisibleRowsLookupSelector, gridSortedRowEntriesSelector, - (visibleRowsLookup, sortedRows) => - sortedRows.filter((row) => visibleRowsLookup[row.id] !== false), + (visibleRowsLookup, sortedRows) => sortedRows.filter((row) => visibleRowsLookup.has(row.id)), ); /** @@ -82,8 +81,7 @@ export const gridExpandedSortedRowIdsSelector = createSelectorMemoized( export const gridFilteredSortedRowEntriesSelector = createSelectorMemoized( gridFilteredRowsLookupSelector, gridSortedRowEntriesSelector, - (filteredRowsLookup, sortedRows) => - sortedRows.filter((row) => filteredRowsLookup[row.id] !== false), + (filteredRowsLookup, sortedRows) => sortedRows.filter((row) => filteredRowsLookup.has(row.id)), ); /** diff --git a/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterState.ts b/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterState.ts index 96926508a7680..7e0c16f6cc7c3 100644 --- a/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterState.ts +++ b/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterState.ts @@ -21,7 +21,7 @@ export interface GridFilterState { * If a row is not registered in this lookup, it is filtered. * This is the equivalent of the `visibleRowsLookup` if all the groups were expanded. */ - filteredRowsLookup: Record; + filteredRowsLookup: Set; /** * Amount of descendants that are passing the filters. * For the Tree Data, it includes all the intermediate depth levels (= amount of children + amount of grand children + ...). @@ -62,4 +62,4 @@ export type GridFilteringMethodValue = Omit; * A row is visible if it is passing the filters AND if its parents are expanded. * If a row is not registered in this lookup, it is visible. */ -export type GridVisibleRowsLookupState = Record; +export type GridVisibleRowsLookupState = Set; diff --git a/packages/grid/x-data-grid/src/hooks/features/filter/useGridFilter.tsx b/packages/grid/x-data-grid/src/hooks/features/filter/useGridFilter.tsx index 5897020a5dce5..12fec459ec280 100644 --- a/packages/grid/x-data-grid/src/hooks/features/filter/useGridFilter.tsx +++ b/packages/grid/x-data-grid/src/hooks/features/filter/useGridFilter.tsx @@ -44,7 +44,7 @@ export const filterStateInitializer: GridStateInitializer< filterModel: sanitizeFilterModel(filterModel, props.disableMultipleColumnsFiltering, apiRef), filteredDescendantCountLookup: {}, }, - visibleRowsLookup: {}, + visibleRowsLookup: new Set(), }; }; @@ -396,13 +396,13 @@ export const useGridFilter = ( (params) => { if (props.filterMode !== 'client' || !params.isRowMatchingFilters) { return { - filteredRowsLookup: {}, + filteredRowsLookup: new Set(), filteredDescendantCountLookup: {}, }; } const dataRowIdToModelLookup = gridRowsLookupSelector(apiRef); - const filteredRowsLookup: Record = {}; + const filteredRowsLookup = new Set(); const { isRowMatchingFilters } = params; const filterCache = {}; @@ -425,13 +425,13 @@ export const useGridFilter = ( filterCache, ); - filteredRowsLookup[id] = isRowPassing; + if (isRowPassing) filteredRowsLookup.add(id); } const footerId = 'auto-generated-group-footer-root'; const footer = dataRowIdToModelLookup[footerId]; if (footer) { - filteredRowsLookup[footerId] = true; + filteredRowsLookup.add(footerId); } return { From a44f2c08f68e316b1d4e83242715a2ae267b1fae Mon Sep 17 00:00:00 2001 From: Rom Grk Date: Tue, 11 Jul 2023 14:40:53 -0400 Subject: [PATCH 2/6] fix --- .../src/hooks/features/aggregation/createAggregationLookup.ts | 2 +- .../grid/x-data-grid/src/hooks/features/rows/useGridRows.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/grid/x-data-grid-premium/src/hooks/features/aggregation/createAggregationLookup.ts b/packages/grid/x-data-grid-premium/src/hooks/features/aggregation/createAggregationLookup.ts index 0e91f89ecee6a..cec2a07652d90 100644 --- a/packages/grid/x-data-grid-premium/src/hooks/features/aggregation/createAggregationLookup.ts +++ b/packages/grid/x-data-grid-premium/src/hooks/features/aggregation/createAggregationLookup.ts @@ -37,7 +37,7 @@ const getAggregationCellValue = ({ const values: any[] = []; rowIds.forEach((rowId) => { - if (aggregationRowsScope === 'filtered' && filteredRowsLookup[rowId] === false) { + if (aggregationRowsScope === 'filtered' && filteredRowsLookup.has(rowId)) { return; } diff --git a/packages/grid/x-data-grid/src/hooks/features/rows/useGridRows.ts b/packages/grid/x-data-grid/src/hooks/features/rows/useGridRows.ts index 144b92b3285f1..f940def552d54 100644 --- a/packages/grid/x-data-grid/src/hooks/features/rows/useGridRows.ts +++ b/packages/grid/x-data-grid/src/hooks/features/rows/useGridRows.ts @@ -311,7 +311,7 @@ export const useGridRows = ( if (applyFiltering) { const filteredRowsLookup = gridFilteredRowsLookupSelector(apiRef); - children = children.filter((childId) => filteredRowsLookup[childId] !== false); + children = children.filter((childId) => filteredRowsLookup.has(childId)); } return children; From fd423dffcab1bf53bad73494e107fc7c739c7ad6 Mon Sep 17 00:00:00 2001 From: Rom Grk Date: Fri, 15 Sep 2023 09:19:33 -0400 Subject: [PATCH 3/6] lint --- .../hooks/features/aggregation/createAggregationLookup.ts | 2 +- .../src/hooks/features/rowGrouping/gridRowGroupingUtils.ts | 4 +++- .../src/hooks/features/treeData/gridTreeDataUtils.ts | 4 +++- packages/grid/x-data-grid-pro/src/utils/tree/utils.ts | 7 +++++-- .../src/hooks/features/filter/useGridFilter.tsx | 4 +++- 5 files changed, 15 insertions(+), 6 deletions(-) diff --git a/packages/grid/x-data-grid-premium/src/hooks/features/aggregation/createAggregationLookup.ts b/packages/grid/x-data-grid-premium/src/hooks/features/aggregation/createAggregationLookup.ts index cec2a07652d90..40d279ca2cbb2 100644 --- a/packages/grid/x-data-grid-premium/src/hooks/features/aggregation/createAggregationLookup.ts +++ b/packages/grid/x-data-grid-premium/src/hooks/features/aggregation/createAggregationLookup.ts @@ -37,7 +37,7 @@ const getAggregationCellValue = ({ const values: any[] = []; rowIds.forEach((rowId) => { - if (aggregationRowsScope === 'filtered' && filteredRowsLookup.has(rowId)) { + if (aggregationRowsScope === 'filtered' && !filteredRowsLookup.has(rowId)) { return; } diff --git a/packages/grid/x-data-grid-premium/src/hooks/features/rowGrouping/gridRowGroupingUtils.ts b/packages/grid/x-data-grid-premium/src/hooks/features/rowGrouping/gridRowGroupingUtils.ts index 5b535b85dee0f..24992220732c9 100644 --- a/packages/grid/x-data-grid-premium/src/hooks/features/rowGrouping/gridRowGroupingUtils.ts +++ b/packages/grid/x-data-grid-premium/src/hooks/features/rowGrouping/gridRowGroupingUtils.ts @@ -141,7 +141,9 @@ export const filterRowTreeFromGroupingColumns = ( } } - if (isPassingFiltering) filteredRowsLookup.add(node.id); + if (isPassingFiltering) { + filteredRowsLookup.add(node.id); + } if (!isPassingFiltering) { return 0; diff --git a/packages/grid/x-data-grid-pro/src/hooks/features/treeData/gridTreeDataUtils.ts b/packages/grid/x-data-grid-pro/src/hooks/features/treeData/gridTreeDataUtils.ts index 80553dff0a56e..e595996693fd3 100644 --- a/packages/grid/x-data-grid-pro/src/hooks/features/treeData/gridTreeDataUtils.ts +++ b/packages/grid/x-data-grid-pro/src/hooks/features/treeData/gridTreeDataUtils.ts @@ -94,7 +94,9 @@ export const filterRowTreeFromTreeData = ( } } - if (shouldPassFilters) filteredRowsLookup.add(node.id); + if (shouldPassFilters) { + filteredRowsLookup.add(node.id); + } if (!shouldPassFilters) { return 0; diff --git a/packages/grid/x-data-grid-pro/src/utils/tree/utils.ts b/packages/grid/x-data-grid-pro/src/utils/tree/utils.ts index f43e2bfcd1981..fd2fb97ec326e 100644 --- a/packages/grid/x-data-grid-pro/src/utils/tree/utils.ts +++ b/packages/grid/x-data-grid-pro/src/utils/tree/utils.ts @@ -240,12 +240,15 @@ export const getVisibleRowsLookup = ({ }); } - if (isPassingFiltering && areAncestorsExpanded) visibleRowsLookup.add(node.id); + if (isPassingFiltering && areAncestorsExpanded) { + visibleRowsLookup.add(node.id); + } // TODO rows v6: Should we keep storing the visibility status of footer independently or rely on the group visibility in the selector ? if (node.type === 'group' && node.footerId != null) { - if (isPassingFiltering && areAncestorsExpanded && !!node.childrenExpanded) + if (isPassingFiltering && areAncestorsExpanded && !!node.childrenExpanded) { visibleRowsLookup.add(node.footerId); + } } }; diff --git a/packages/grid/x-data-grid/src/hooks/features/filter/useGridFilter.tsx b/packages/grid/x-data-grid/src/hooks/features/filter/useGridFilter.tsx index f062c4a074bff..59f1d5cc711ae 100644 --- a/packages/grid/x-data-grid/src/hooks/features/filter/useGridFilter.tsx +++ b/packages/grid/x-data-grid/src/hooks/features/filter/useGridFilter.tsx @@ -433,7 +433,9 @@ export const useGridFilter = ( filterCache, ); - if (isRowPassing) filteredRowsLookup.add(id); + if (isRowPassing) { + filteredRowsLookup.add(id); + } } const footerId = 'auto-generated-group-footer-root'; From 9d83befc46d75488db1f3e288fa2f47904b5b70b Mon Sep 17 00:00:00 2001 From: Rom Grk Date: Sun, 17 Sep 2023 07:26:47 -0400 Subject: [PATCH 4/6] refactor: visible -> hidden --- .../aggregation/createAggregationLookup.ts | 2 +- .../rowGrouping/gridRowGroupingUtils.ts | 2 +- .../useGridRowGroupingPreProcessors.ts | 6 ++-- .../features/treeData/gridTreeDataUtils.ts | 2 +- .../treeData/useGridTreeDataPreProcessors.tsx | 6 ++-- .../x-data-grid-pro/src/internals/index.ts | 2 +- .../x-data-grid-pro/src/utils/tree/utils.ts | 16 +++++------ .../gridStrategyProcessingApi.ts | 6 ++-- .../useGridStrategyProcessing.ts | 2 +- .../features/filter/gridFilterSelector.ts | 8 +++--- .../hooks/features/filter/gridFilterState.ts | 4 +-- .../hooks/features/filter/useGridFilter.tsx | 28 +++++++++---------- .../src/hooks/features/rows/useGridRows.ts | 2 +- .../src/models/gridStateCommunity.ts | 4 +-- scripts/x-data-grid-premium.exports.json | 2 +- scripts/x-data-grid-pro.exports.json | 2 +- scripts/x-data-grid.exports.json | 2 +- 17 files changed, 48 insertions(+), 48 deletions(-) diff --git a/packages/grid/x-data-grid-premium/src/hooks/features/aggregation/createAggregationLookup.ts b/packages/grid/x-data-grid-premium/src/hooks/features/aggregation/createAggregationLookup.ts index 40d279ca2cbb2..cec2a07652d90 100644 --- a/packages/grid/x-data-grid-premium/src/hooks/features/aggregation/createAggregationLookup.ts +++ b/packages/grid/x-data-grid-premium/src/hooks/features/aggregation/createAggregationLookup.ts @@ -37,7 +37,7 @@ const getAggregationCellValue = ({ const values: any[] = []; rowIds.forEach((rowId) => { - if (aggregationRowsScope === 'filtered' && !filteredRowsLookup.has(rowId)) { + if (aggregationRowsScope === 'filtered' && filteredRowsLookup.has(rowId)) { return; } diff --git a/packages/grid/x-data-grid-premium/src/hooks/features/rowGrouping/gridRowGroupingUtils.ts b/packages/grid/x-data-grid-premium/src/hooks/features/rowGrouping/gridRowGroupingUtils.ts index 24992220732c9..216924abc3fc8 100644 --- a/packages/grid/x-data-grid-premium/src/hooks/features/rowGrouping/gridRowGroupingUtils.ts +++ b/packages/grid/x-data-grid-premium/src/hooks/features/rowGrouping/gridRowGroupingUtils.ts @@ -141,7 +141,7 @@ export const filterRowTreeFromGroupingColumns = ( } } - if (isPassingFiltering) { + if (!isPassingFiltering) { filteredRowsLookup.add(node.id); } diff --git a/packages/grid/x-data-grid-premium/src/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.ts b/packages/grid/x-data-grid-premium/src/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.ts index f134c040d14e9..1115ba50432ba 100644 --- a/packages/grid/x-data-grid-premium/src/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.ts +++ b/packages/grid/x-data-grid-premium/src/hooks/features/rowGrouping/useGridRowGroupingPreProcessors.ts @@ -17,7 +17,7 @@ import { createRowTree, updateRowTree, RowTreeBuilderGroupingCriterion, - getVisibleRowsLookup, + getHiddenRowsLookup, } from '@mui/x-data-grid-pro/internals'; import { DataGridPremiumProcessedProps } from '../../../models/dataGridPremiumProps'; import { @@ -237,8 +237,8 @@ export const useGridRowGroupingPreProcessors = ( useGridRegisterStrategyProcessor( apiRef, ROW_GROUPING_STRATEGY, - 'visibleRowsLookupCreation', - getVisibleRowsLookup, + 'hiddenRowsLookupCreation', + getHiddenRowsLookup, ); /** diff --git a/packages/grid/x-data-grid-pro/src/hooks/features/treeData/gridTreeDataUtils.ts b/packages/grid/x-data-grid-pro/src/hooks/features/treeData/gridTreeDataUtils.ts index e595996693fd3..0c9f05ff62593 100644 --- a/packages/grid/x-data-grid-pro/src/hooks/features/treeData/gridTreeDataUtils.ts +++ b/packages/grid/x-data-grid-pro/src/hooks/features/treeData/gridTreeDataUtils.ts @@ -94,7 +94,7 @@ export const filterRowTreeFromTreeData = ( } } - if (shouldPassFilters) { + if (!shouldPassFilters) { filteredRowsLookup.add(node.id); } diff --git a/packages/grid/x-data-grid-pro/src/hooks/features/treeData/useGridTreeDataPreProcessors.tsx b/packages/grid/x-data-grid-pro/src/hooks/features/treeData/useGridTreeDataPreProcessors.tsx index c15e51048921d..d35515e5a406d 100644 --- a/packages/grid/x-data-grid-pro/src/hooks/features/treeData/useGridTreeDataPreProcessors.tsx +++ b/packages/grid/x-data-grid-pro/src/hooks/features/treeData/useGridTreeDataPreProcessors.tsx @@ -33,7 +33,7 @@ import { } from '../../../utils/tree/models'; import { sortRowTree } from '../../../utils/tree/sortRowTree'; import { updateRowTree } from '../../../utils/tree/updateRowTree'; -import { getVisibleRowsLookup } from '../../../utils/tree/utils'; +import { getHiddenRowsLookup } from '../../../utils/tree/utils'; export const useGridTreeDataPreProcessors = ( privateApiRef: React.MutableRefObject, @@ -216,8 +216,8 @@ export const useGridTreeDataPreProcessors = ( useGridRegisterStrategyProcessor( privateApiRef, TREE_DATA_STRATEGY, - 'visibleRowsLookupCreation', - getVisibleRowsLookup, + 'hiddenRowsLookupCreation', + getHiddenRowsLookup, ); /** diff --git a/packages/grid/x-data-grid-pro/src/internals/index.ts b/packages/grid/x-data-grid-pro/src/internals/index.ts index 4a4bd270d8b11..6d5361fb34eab 100644 --- a/packages/grid/x-data-grid-pro/src/internals/index.ts +++ b/packages/grid/x-data-grid-pro/src/internals/index.ts @@ -51,5 +51,5 @@ export type { export { createRowTree } from '../utils/tree/createRowTree'; export { updateRowTree } from '../utils/tree/updateRowTree'; export { sortRowTree } from '../utils/tree/sortRowTree'; -export { insertNodeInTree, removeNodeFromTree, getVisibleRowsLookup } from '../utils/tree/utils'; +export { insertNodeInTree, removeNodeFromTree, getHiddenRowsLookup } from '../utils/tree/utils'; export type { RowTreeBuilderGroupingCriterion } from '../utils/tree/models'; diff --git a/packages/grid/x-data-grid-pro/src/utils/tree/utils.ts b/packages/grid/x-data-grid-pro/src/utils/tree/utils.ts index fd2fb97ec326e..ce4bb4071627a 100644 --- a/packages/grid/x-data-grid-pro/src/utils/tree/utils.ts +++ b/packages/grid/x-data-grid-pro/src/utils/tree/utils.ts @@ -217,7 +217,7 @@ export const createUpdatedGroupsManager = (): GridRowTreeUpdatedGroupsManager => }, }); -export const getVisibleRowsLookup = ({ +export const getHiddenRowsLookup = ({ tree, filteredRowsLookup, }: { @@ -228,10 +228,10 @@ export const getVisibleRowsLookup = ({ return new Set(); } - const visibleRowsLookup = new Set(); + const hiddenRowsLookup = new Set(); const handleTreeNode = (node: GridTreeNode, areAncestorsExpanded: boolean) => { - const isPassingFiltering = filteredRowsLookup.has(node.id); + const isPassingFiltering = !filteredRowsLookup.has(node.id); if (node.type === 'group') { node.children.forEach((childId) => { @@ -240,14 +240,14 @@ export const getVisibleRowsLookup = ({ }); } - if (isPassingFiltering && areAncestorsExpanded) { - visibleRowsLookup.add(node.id); + if (!(isPassingFiltering && areAncestorsExpanded)) { + hiddenRowsLookup.add(node.id); } // TODO rows v6: Should we keep storing the visibility status of footer independently or rely on the group visibility in the selector ? if (node.type === 'group' && node.footerId != null) { - if (isPassingFiltering && areAncestorsExpanded && !!node.childrenExpanded) { - visibleRowsLookup.add(node.footerId); + if (!(isPassingFiltering && areAncestorsExpanded && !!node.childrenExpanded)) { + hiddenRowsLookup.add(node.footerId); } } }; @@ -259,5 +259,5 @@ export const getVisibleRowsLookup = ({ handleTreeNode(node, true); } } - return visibleRowsLookup; + return hiddenRowsLookup; }; diff --git a/packages/grid/x-data-grid/src/hooks/core/strategyProcessing/gridStrategyProcessingApi.ts b/packages/grid/x-data-grid/src/hooks/core/strategyProcessing/gridStrategyProcessingApi.ts index ef4094d3887fb..5bf22ef19e500 100644 --- a/packages/grid/x-data-grid/src/hooks/core/strategyProcessing/gridStrategyProcessingApi.ts +++ b/packages/grid/x-data-grid/src/hooks/core/strategyProcessing/gridStrategyProcessingApi.ts @@ -7,7 +7,7 @@ import { GridFilteringMethodParams, GridFilteringMethodValue, GridFilterState, - GridVisibleRowsLookupState, + GridHiddenRowsLookupState, } from '../../features/filter/gridFilterState'; import { GridSortingMethodParams, @@ -35,13 +35,13 @@ export interface GridStrategyProcessingLookup { params: GridSortingMethodParams; value: GridSortingMethodValue; }; - visibleRowsLookupCreation: { + hiddenRowsLookupCreation: { group: 'rowTree'; params: { tree: GridRowsState['tree']; filteredRowsLookup: GridFilterState['filteredRowsLookup']; }; - value: GridVisibleRowsLookupState; + value: GridHiddenRowsLookupState; }; } diff --git a/packages/grid/x-data-grid/src/hooks/core/strategyProcessing/useGridStrategyProcessing.ts b/packages/grid/x-data-grid/src/hooks/core/strategyProcessing/useGridStrategyProcessing.ts index 0dbe135f4d75d..6ce62b6d5f5bb 100644 --- a/packages/grid/x-data-grid/src/hooks/core/strategyProcessing/useGridStrategyProcessing.ts +++ b/packages/grid/x-data-grid/src/hooks/core/strategyProcessing/useGridStrategyProcessing.ts @@ -17,7 +17,7 @@ export const GRID_STRATEGIES_PROCESSORS: { rowTreeCreation: 'rowTree', filtering: 'rowTree', sorting: 'rowTree', - visibleRowsLookupCreation: 'rowTree', + hiddenRowsLookupCreation: 'rowTree', }; type UntypedStrategyProcessors = { diff --git a/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterSelector.ts b/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterSelector.ts index f2eb29e64c957..f1ebf92ecefd6 100644 --- a/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterSelector.ts +++ b/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterSelector.ts @@ -32,7 +32,7 @@ export const gridQuickFilterValuesSelector = createSelector( * @category Visible rows * @ignore - do not document. */ -export const gridVisibleRowsLookupSelector = (state: GridStateCommunity) => state.visibleRowsLookup; +export const gridHiddenRowsLookupSelector = (state: GridStateCommunity) => state.hiddenRowsLookup; /** * @category Filtering @@ -58,9 +58,9 @@ export const gridFilteredDescendantCountLookupSelector = createSelector( * @category Filtering */ export const gridExpandedSortedRowEntriesSelector = createSelectorMemoized( - gridVisibleRowsLookupSelector, + gridHiddenRowsLookupSelector, gridSortedRowEntriesSelector, - (visibleRowsLookup, sortedRows) => sortedRows.filter((row) => visibleRowsLookup.has(row.id)), + (hiddenRowsLookup, sortedRows) => sortedRows.filter((row) => !hiddenRowsLookup.has(row.id)), ); /** @@ -81,7 +81,7 @@ export const gridExpandedSortedRowIdsSelector = createSelectorMemoized( export const gridFilteredSortedRowEntriesSelector = createSelectorMemoized( gridFilteredRowsLookupSelector, gridSortedRowEntriesSelector, - (filteredRowsLookup, sortedRows) => sortedRows.filter((row) => filteredRowsLookup.has(row.id)), + (filteredRowsLookup, sortedRows) => sortedRows.filter((row) => !filteredRowsLookup.has(row.id)), ); /** diff --git a/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterState.ts b/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterState.ts index 7e0c16f6cc7c3..79bcb03786fa0 100644 --- a/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterState.ts +++ b/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterState.ts @@ -19,7 +19,7 @@ export interface GridFilterState { * Filtering status for each row. * A row is filtered if it is passing the filters, whether its parents are expanded or not. * If a row is not registered in this lookup, it is filtered. - * This is the equivalent of the `visibleRowsLookup` if all the groups were expanded. + * This is the equivalent of the `hiddenRowsLookup` if all the groups were expanded. */ filteredRowsLookup: Set; /** @@ -62,4 +62,4 @@ export type GridFilteringMethodValue = Omit; * A row is visible if it is passing the filters AND if its parents are expanded. * If a row is not registered in this lookup, it is visible. */ -export type GridVisibleRowsLookupState = Set; +export type GridHiddenRowsLookupState = Set; diff --git a/packages/grid/x-data-grid/src/hooks/features/filter/useGridFilter.tsx b/packages/grid/x-data-grid/src/hooks/features/filter/useGridFilter.tsx index 59f1d5cc711ae..c0b995e5eee11 100644 --- a/packages/grid/x-data-grid/src/hooks/features/filter/useGridFilter.tsx +++ b/packages/grid/x-data-grid/src/hooks/features/filter/useGridFilter.tsx @@ -44,23 +44,23 @@ export const filterStateInitializer: GridStateInitializer< ...state, filter: { filterModel: sanitizeFilterModel(filterModel, props.disableMultipleColumnsFiltering, apiRef), - filteredRowsLookup: {}, + filteredRowsLookup: new Set(), filteredDescendantCountLookup: {}, }, - visibleRowsLookup: new Set(), + hiddenRowsLookup: new Set(), }; }; -const getVisibleRowsLookup: GridStrategyProcessor<'visibleRowsLookupCreation'> = (params) => { - // For flat tree, the `visibleRowsLookup` and the `filteredRowsLookup` are equals since no row is collapsed. +const getHiddenRowsLookup: GridStrategyProcessor<'hiddenRowsLookupCreation'> = (params) => { + // For flat tree, the `hiddenRowsLookup` and the `filteredRowsLookup` are equals since no row is collapsed. return params.filteredRowsLookup; }; -function getVisibleRowsLookupState( +function getHiddenRowsLookupState( apiRef: React.MutableRefObject, state: GridStateCommunity, ) { - return apiRef.current.applyStrategyProcessor('visibleRowsLookupCreation', { + return apiRef.current.applyStrategyProcessor('hiddenRowsLookupCreation', { tree: state.rows.tree, filteredRowsLookup: state.filter.filteredRowsLookup, }); @@ -123,11 +123,11 @@ export const useGridFilter = ( }, }; - const visibleRowsLookupState = getVisibleRowsLookupState(apiRef, newState); + const hiddenRowsLookupState = getHiddenRowsLookupState(apiRef, newState); return { ...newState, - visibleRowsLookup: visibleRowsLookupState, + hiddenRowsLookup: hiddenRowsLookupState, }; }); apiRef.current.publishEvent('filteredRowsSet'); @@ -433,7 +433,7 @@ export const useGridFilter = ( filterCache, ); - if (isRowPassing) { + if (!isRowPassing) { filteredRowsLookup.add(id); } } @@ -460,8 +460,8 @@ export const useGridFilter = ( useGridRegisterStrategyProcessor( apiRef, GRID_DEFAULT_STRATEGY, - 'visibleRowsLookupCreation', - getVisibleRowsLookup, + 'hiddenRowsLookupCreation', + getHiddenRowsLookup, ); /** @@ -490,11 +490,11 @@ export const useGridFilter = ( [apiRef], ); - const updateVisibleRowsLookupState = React.useCallback(() => { + const updateHiddenRowsLookupState = React.useCallback(() => { apiRef.current.setState((state) => { return { ...state, - visibleRowsLookup: getVisibleRowsLookupState(apiRef, state), + hiddenRowsLookup: getHiddenRowsLookupState(apiRef, state), }; }); apiRef.current.forceUpdate(); @@ -505,7 +505,7 @@ export const useGridFilter = ( useGridApiEventHandler(apiRef, 'rowsSet', updateFilteredRows); useGridApiEventHandler(apiRef, 'columnsChange', handleColumnsChange); useGridApiEventHandler(apiRef, 'activeStrategyProcessorChange', handleStrategyProcessorChange); - useGridApiEventHandler(apiRef, 'rowExpansionChange', updateVisibleRowsLookupState); + useGridApiEventHandler(apiRef, 'rowExpansionChange', updateHiddenRowsLookupState); useGridApiEventHandler(apiRef, 'columnVisibilityModelChange', () => { const filterModel = gridFilterModelSelector(apiRef); if (filterModel.quickFilterValues && filterModel.quickFilterExcludeHiddenColumns) { diff --git a/packages/grid/x-data-grid/src/hooks/features/rows/useGridRows.ts b/packages/grid/x-data-grid/src/hooks/features/rows/useGridRows.ts index 9be7bb646550c..ea8b16878443d 100644 --- a/packages/grid/x-data-grid/src/hooks/features/rows/useGridRows.ts +++ b/packages/grid/x-data-grid/src/hooks/features/rows/useGridRows.ts @@ -322,7 +322,7 @@ export const useGridRows = ( if (applyFiltering) { const filteredRowsLookup = gridFilteredRowsLookupSelector(apiRef); - children = children.filter((childId) => filteredRowsLookup.has(childId)); + children = children.filter((childId) => !filteredRowsLookup.has(childId)); } return children; diff --git a/packages/grid/x-data-grid/src/models/gridStateCommunity.ts b/packages/grid/x-data-grid/src/models/gridStateCommunity.ts index ac5bf733807a1..864392672d7f2 100644 --- a/packages/grid/x-data-grid/src/models/gridStateCommunity.ts +++ b/packages/grid/x-data-grid/src/models/gridStateCommunity.ts @@ -20,14 +20,14 @@ import type { GridRowsMetaState } from '../hooks/features/rows/gridRowsMetaState import type { GridEditingState } from './gridEditRowModel'; import { GridHeaderFilteringState } from './gridHeaderFilteringModel'; import type { GridRowSelectionModel } from './gridRowSelectionModel'; -import type { GridVisibleRowsLookupState } from '../hooks/features/filter/gridFilterState'; +import type { GridHiddenRowsLookupState } from '../hooks/features/filter/gridFilterState'; /** * The state of `DataGrid`. */ export interface GridStateCommunity { rows: GridRowsState; - visibleRowsLookup: GridVisibleRowsLookupState; + hiddenRowsLookup: GridHiddenRowsLookupState; rowsMeta: GridRowsMetaState; editRows: GridEditingState; headerFiltering: GridHeaderFilteringState; diff --git a/scripts/x-data-grid-premium.exports.json b/scripts/x-data-grid-premium.exports.json index ebedf754fd30f..4caa339a1e461 100644 --- a/scripts/x-data-grid-premium.exports.json +++ b/scripts/x-data-grid-premium.exports.json @@ -574,7 +574,7 @@ { "name": "GridVisibilityOffIcon", "kind": "Variable" }, { "name": "gridVisibleColumnDefinitionsSelector", "kind": "Variable" }, { "name": "gridVisibleColumnFieldsSelector", "kind": "Variable" }, - { "name": "gridVisibleRowsLookupSelector", "kind": "Variable" }, + { "name": "gridHiddenRowsLookupSelector", "kind": "Variable" }, { "name": "GridWorkspacesIcon", "kind": "Variable" }, { "name": "heIL", "kind": "Variable" }, { "name": "huHU", "kind": "Variable" }, diff --git a/scripts/x-data-grid-pro.exports.json b/scripts/x-data-grid-pro.exports.json index fd133a4565cd5..e975c89452694 100644 --- a/scripts/x-data-grid-pro.exports.json +++ b/scripts/x-data-grid-pro.exports.json @@ -529,7 +529,7 @@ { "name": "GridVisibilityOffIcon", "kind": "Variable" }, { "name": "gridVisibleColumnDefinitionsSelector", "kind": "Variable" }, { "name": "gridVisibleColumnFieldsSelector", "kind": "Variable" }, - { "name": "gridVisibleRowsLookupSelector", "kind": "Variable" }, + { "name": "gridHiddenRowsLookupSelector", "kind": "Variable" }, { "name": "heIL", "kind": "Variable" }, { "name": "huHU", "kind": "Variable" }, { "name": "isLeaf", "kind": "Function" }, diff --git a/scripts/x-data-grid.exports.json b/scripts/x-data-grid.exports.json index 16e767b27a52a..5cac16613e3b5 100644 --- a/scripts/x-data-grid.exports.json +++ b/scripts/x-data-grid.exports.json @@ -484,7 +484,7 @@ { "name": "GridVisibilityOffIcon", "kind": "Variable" }, { "name": "gridVisibleColumnDefinitionsSelector", "kind": "Variable" }, { "name": "gridVisibleColumnFieldsSelector", "kind": "Variable" }, - { "name": "gridVisibleRowsLookupSelector", "kind": "Variable" }, + { "name": "gridHiddenRowsLookupSelector", "kind": "Variable" }, { "name": "heIL", "kind": "Variable" }, { "name": "huHU", "kind": "Variable" }, { "name": "isLeaf", "kind": "Function" }, From bf1d8c3157ce8da57e316ee55876fb1154e3fc2f Mon Sep 17 00:00:00 2001 From: Rom Grk Date: Sun, 17 Sep 2023 07:51:05 -0400 Subject: [PATCH 5/6] lint --- scripts/x-data-grid-premium.exports.json | 2 +- scripts/x-data-grid-pro.exports.json | 2 +- scripts/x-data-grid.exports.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/x-data-grid-premium.exports.json b/scripts/x-data-grid-premium.exports.json index 4caa339a1e461..2c433e6758100 100644 --- a/scripts/x-data-grid-premium.exports.json +++ b/scripts/x-data-grid-premium.exports.json @@ -362,6 +362,7 @@ { "name": "GridHeaderFilterMenu", "kind": "Function" }, { "name": "GridHeaderFilterMenuContainer", "kind": "Function" }, { "name": "GridHeaderSelectionCheckboxParams", "kind": "Interface" }, + { "name": "gridHiddenRowsLookupSelector", "kind": "Variable" }, { "name": "GridIconSlotsComponent", "kind": "Interface" }, { "name": "GridInitialState", "kind": "TypeAlias" }, { "name": "GridInputRowSelectionModel", "kind": "TypeAlias" }, @@ -574,7 +575,6 @@ { "name": "GridVisibilityOffIcon", "kind": "Variable" }, { "name": "gridVisibleColumnDefinitionsSelector", "kind": "Variable" }, { "name": "gridVisibleColumnFieldsSelector", "kind": "Variable" }, - { "name": "gridHiddenRowsLookupSelector", "kind": "Variable" }, { "name": "GridWorkspacesIcon", "kind": "Variable" }, { "name": "heIL", "kind": "Variable" }, { "name": "huHU", "kind": "Variable" }, diff --git a/scripts/x-data-grid-pro.exports.json b/scripts/x-data-grid-pro.exports.json index e975c89452694..1a59b588b9453 100644 --- a/scripts/x-data-grid-pro.exports.json +++ b/scripts/x-data-grid-pro.exports.json @@ -326,6 +326,7 @@ { "name": "GridHeaderFilterMenu", "kind": "Function" }, { "name": "GridHeaderFilterMenuContainer", "kind": "Function" }, { "name": "GridHeaderSelectionCheckboxParams", "kind": "Interface" }, + { "name": "gridHiddenRowsLookupSelector", "kind": "Variable" }, { "name": "GridIconSlotsComponent", "kind": "Interface" }, { "name": "GridInitialState", "kind": "TypeAlias" }, { "name": "GridInputRowSelectionModel", "kind": "TypeAlias" }, @@ -529,7 +530,6 @@ { "name": "GridVisibilityOffIcon", "kind": "Variable" }, { "name": "gridVisibleColumnDefinitionsSelector", "kind": "Variable" }, { "name": "gridVisibleColumnFieldsSelector", "kind": "Variable" }, - { "name": "gridHiddenRowsLookupSelector", "kind": "Variable" }, { "name": "heIL", "kind": "Variable" }, { "name": "huHU", "kind": "Variable" }, { "name": "isLeaf", "kind": "Function" }, diff --git a/scripts/x-data-grid.exports.json b/scripts/x-data-grid.exports.json index 5cac16613e3b5..ea673b7284688 100644 --- a/scripts/x-data-grid.exports.json +++ b/scripts/x-data-grid.exports.json @@ -295,6 +295,7 @@ { "name": "GridHeaderCheckbox", "kind": "Variable" }, { "name": "GridHeaderFilterEventLookup", "kind": "Interface" }, { "name": "GridHeaderSelectionCheckboxParams", "kind": "Interface" }, + { "name": "gridHiddenRowsLookupSelector", "kind": "Variable" }, { "name": "GridIconSlotsComponent", "kind": "Interface" }, { "name": "GridInitialState", "kind": "TypeAlias" }, { "name": "GridInputRowSelectionModel", "kind": "TypeAlias" }, @@ -484,7 +485,6 @@ { "name": "GridVisibilityOffIcon", "kind": "Variable" }, { "name": "gridVisibleColumnDefinitionsSelector", "kind": "Variable" }, { "name": "gridVisibleColumnFieldsSelector", "kind": "Variable" }, - { "name": "gridHiddenRowsLookupSelector", "kind": "Variable" }, { "name": "heIL", "kind": "Variable" }, { "name": "huHU", "kind": "Variable" }, { "name": "isLeaf", "kind": "Function" }, From 5d1442ce6374f9e30e84cc447baf65e42db37d88 Mon Sep 17 00:00:00 2001 From: Rom Grk Date: Sun, 17 Sep 2023 07:52:47 -0400 Subject: [PATCH 6/6] lint --- .../x-data-grid/src/hooks/features/filter/gridFilterState.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterState.ts b/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterState.ts index 79bcb03786fa0..d6cf4f631563e 100644 --- a/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterState.ts +++ b/packages/grid/x-data-grid/src/hooks/features/filter/gridFilterState.ts @@ -17,8 +17,7 @@ export interface GridFilterState { /** * Filtering status for each row. - * A row is filtered if it is passing the filters, whether its parents are expanded or not. - * If a row is not registered in this lookup, it is filtered. + * This contains the rows that are filtered *out*, which means they did not pass the filters. * This is the equivalent of the `hiddenRowsLookup` if all the groups were expanded. */ filteredRowsLookup: Set;