Skip to content

Commit

Permalink
move column hydratation in a dedicated hook
Browse files Browse the repository at this point in the history
  • Loading branch information
alexfauquette committed Jul 2, 2022
1 parent 0a11d17 commit 22782a0
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ import {
useGridColumnSpanning,
useGridRowReorder,
useGridRowReorderPreProcessors,
useGridColumnGroupingPreProcessors,
} from '@mui/x-data-grid-pro/internals';
import { GridApiPremium } from '../models/gridApiPremium';
import { DataGridPremiumProcessedProps } from '../models/dataGridPremiumProps';
Expand All @@ -75,6 +76,7 @@ export const useDataGridPremiumComponent = (
/**
* Register all pre-processors called during state initialization here.
*/
useGridColumnGroupingPreProcessors(apiRef, props);
useGridSelectionPreProcessors(apiRef, props);
useGridRowReorderPreProcessors(apiRef, props);
useGridRowGroupingPreProcessors(apiRef, props);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ import {
selectionStateInitializer,
useGridColumnGrouping,
columnGroupsStateInitializer,
useGridColumnGroupingPreProcessors,
} from '@mui/x-data-grid/internals';
import { GridApiPro } from '../models/gridApiPro';
import { DataGridProProcessedProps } from '../models/dataGridProProps';
Expand Down Expand Up @@ -79,6 +80,7 @@ export const useDataGridProComponent = (
/**
* Register all pre-processors called during state initialization here.
*/
useGridColumnGroupingPreProcessors(apiRef, props);
useGridSelectionPreProcessors(apiRef, props);
useGridRowReorderPreProcessors(apiRef, props);
useGridTreeDataPreProcessors(apiRef, props);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,15 @@ import {
useGridColumnGrouping,
columnGroupsStateInitializer,
} from '../hooks/features/columns/useGridColumnGrouping';
import { useGridColumnGroupingPreProcessors } from '../hooks/features/columns/useGridColumnGroupingPreProcessors';

export const useDataGridComponent = (props: DataGridProcessedProps) => {
const apiRef = useGridInitialization<GridApiCommunity>(undefined, props);

/**
* Register all pre-processors called during state initialization here.
*/
useGridColumnGroupingPreProcessors(apiRef, props);
useGridSelectionPreProcessors(apiRef, props);
useGridRowsPreProcessors(apiRef);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import * as React from 'react';
import { GridApiCommunity } from '../../../models/api/gridApiCommunity';
import { GridPipeProcessor, useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
import { DataGridProcessedProps } from '../../../models/props/DataGridProps';
import { GridStateInitializer } from '../../utils/useGridInitializeState';
import {
Expand All @@ -12,7 +11,6 @@ import { gridColumnGroupsLookupSelector, gridColumnLookupSelector } from './grid
import { GridColumnGroupLookup } from './gridColumnsInterfaces';
import { GridColumnGroupingApi } from '../../../models/api/gridColumnGroupingApi';
import { useGridApiMethod } from '../../utils/useGridApiMethod';
import { isDeepEqual } from '../../../utils/utils';
import { GridStateColDef, GridColDef } from '../../../models/colDef';

export function hasGroupPath(
Expand Down Expand Up @@ -158,39 +156,6 @@ export const useGridColumnGrouping = (

useGridApiMethod(apiRef, columnGroupingApi, 'GridColumnGroupingApi');

/**
* Processors
* */
const addHeaderGroups = React.useCallback<GridPipeProcessor<'hydrateColumns'>>(
(columnsState) => {
if (!props.columnGroupingModel) {
return columnsState;
}
const unwrappedGroupingModel = unwrapGroupingColumnModel(props.columnGroupingModel);
if (Object.keys(unwrappedGroupingModel).length === 0) {
return columnsState;
}

columnsState.all.forEach((field) => {
const newGroupPath = unwrappedGroupingModel[field] ?? [];

const lookupElement = columnsState.lookup[field];
if (hasGroupPath(lookupElement) && isDeepEqual(newGroupPath, lookupElement?.groupPath)) {
// Avoid modifying the pointer to allow shadow comparison in https://github.com/mui/mui-x/blob/f90afbf10a1264ee8b453d7549dd7cdd6110a4ed/packages/grid/x-data-grid/src/hooks/features/columns/gridColumnsUtils.ts#L446:L453
return;
}
columnsState.lookup[field] = {
...columnsState.lookup[field],
groupPath: unwrappedGroupingModel[field] ?? [],
};
});
return columnsState;
},
[props.columnGroupingModel],
);

useGridRegisterPipeProcessor(apiRef, 'hydrateColumns', addHeaderGroups);

/**
* EFFECTS
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import * as React from 'react';
import { GridPipeProcessor, useGridRegisterPipeProcessor } from '../../core/pipeProcessing';
import { DataGridProcessedProps } from '../../../models/props/DataGridProps';
import { GridApiCommunity } from '../../../models/api/gridApiCommunity';
import { isDeepEqual } from '../../../utils/utils';
import { unwrapGroupingColumnModel, hasGroupPath } from './useGridColumnGrouping';

export const useGridColumnGroupingPreProcessors = (
apiRef: React.MutableRefObject<GridApiCommunity>,
props: DataGridProcessedProps,
) => {
const addHeaderGroups = React.useCallback<GridPipeProcessor<'hydrateColumns'>>(
(columnsState) => {
if (!props.columnGroupingModel) {
return columnsState;
}
const unwrappedGroupingModel = unwrapGroupingColumnModel(props.columnGroupingModel);
if (Object.keys(unwrappedGroupingModel).length === 0) {
return columnsState;
}

columnsState.all.forEach((field) => {
const newGroupPath = unwrappedGroupingModel[field] ?? [];

const lookupElement = columnsState.lookup[field];
if (hasGroupPath(lookupElement) && isDeepEqual(newGroupPath, lookupElement?.groupPath)) {
// Avoid modifying the pointer to allow shadow comparison in https://github.com/mui/mui-x/blob/f90afbf10a1264ee8b453d7549dd7cdd6110a4ed/packages/grid/x-data-grid/src/hooks/features/columns/gridColumnsUtils.ts#L446:L453
return;
}
columnsState.lookup[field] = {
...columnsState.lookup[field],
groupPath: unwrappedGroupingModel[field] ?? [],
};
});
return columnsState;
},
[props.columnGroupingModel],
);

useGridRegisterPipeProcessor(apiRef, 'hydrateColumns', addHeaderGroups);
};
1 change: 1 addition & 0 deletions packages/grid/x-data-grid/src/internals/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ export {
useGridColumnGrouping,
columnGroupsStateInitializer,
} from '../hooks/features/columns/useGridColumnGrouping';
export { useGridColumnGroupingPreProcessors } from '../hooks/features/columns/useGridColumnGroupingPreProcessors';
export type {
GridColumnRawLookup,
GridColumnsRawState,
Expand Down

0 comments on commit 22782a0

Please sign in to comment.