diff --git a/packages/x-data-grid-premium/src/components/GridAggregationRowOverlay.tsx b/packages/x-data-grid-premium/src/components/GridAggregationRowOverlay.tsx index 7e20de1d5250c..90beafe447cee 100644 --- a/packages/x-data-grid-premium/src/components/GridAggregationRowOverlay.tsx +++ b/packages/x-data-grid-premium/src/components/GridAggregationRowOverlay.tsx @@ -2,11 +2,7 @@ import * as React from 'react'; import { forwardRef } from '@mui/x-internals/forwardRef'; import { styled } from '@mui/system'; import composeClasses from '@mui/utils/composeClasses'; -import { - gridRowsLoadingSelector, - getDataGridUtilityClass, - useGridRootProps, -} from '@mui/x-data-grid-pro'; +import { getDataGridUtilityClass, useGridRootProps } from '@mui/x-data-grid-pro'; import { GridSkeletonLoadingOverlayInner, useGridSelector } from '@mui/x-data-grid-pro/internals'; import { useGridApiContext } from '../hooks/utils/useGridApiContext'; import { gridAggregationModelSelector } from '../hooks/features/aggregation/gridAggregationSelectors'; @@ -37,11 +33,7 @@ const GridAggregationRowOverlay = forwardRef { const slots = { @@ -23,6 +31,8 @@ export function GridPinnedRows({ position, virtualScroller }: GridPinnedRowsProp const renderContext = useGridSelector(apiRef, gridRenderContextSelector); const pinnedRowsData = useGridSelector(apiRef, gridPinnedRowsSelector); + const aggregationLookup = useGridSelector(apiRef, gridAggregationLookupSelector); + const isLoading = useGridSelector(apiRef, gridRowsLoadingSelector); const rows = pinnedRowsData[position]; const pinnedRenderContext = React.useMemo( @@ -45,10 +55,21 @@ export function GridPinnedRows({ position, virtualScroller }: GridPinnedRowsProp renderContext: pinnedRenderContext, }); + const isAggregationRow = + position === 'bottom' && rows.length === 1 && rows[0].model[GRID_ID_AUTOGENERATED]; + + const isAggregationRowEmpty = (Object.values(aggregationLookup[GRID_ROOT_GROUP_ID]) || []).every( + ({ value }) => value === '', + ); + + if (isAggregationRow && isAggregationRowEmpty && !isLoading) { + return null; + } + return (
{pinnedRows} - {position === 'bottom' && } + {isAggregationRow && isLoading && }
); } diff --git a/packages/x-data-grid-premium/src/hooks/features/aggregation/gridAggregationUtils.ts b/packages/x-data-grid-premium/src/hooks/features/aggregation/gridAggregationUtils.ts index 0da6f35c1ec64..53dad77822ffc 100644 --- a/packages/x-data-grid-premium/src/hooks/features/aggregation/gridAggregationUtils.ts +++ b/packages/x-data-grid-premium/src/hooks/features/aggregation/gridAggregationUtils.ts @@ -196,10 +196,7 @@ export const addFooterRows = ({ }; const updateRootGroupFooter = (groupNode: GridGroupNode) => { - const shouldHaveFooter = - hasAggregationRule && - getAggregationPosition(groupNode) === 'footer' && - groupNode.children.length > 0; + const shouldHaveFooter = hasAggregationRule && getAggregationPosition(groupNode) === 'footer'; if (shouldHaveFooter) { const rowId = getAggregationFooterRowIdFromGroupId(null);