Skip to content

Commit e72393b

Browse files
authored
[Grid v2][system] handle direction object prop for responsive design (mui#34574)
1 parent f8d3ab9 commit e72393b

File tree

3 files changed

+33
-3
lines changed

3 files changed

+33
-3
lines changed

packages/mui-system/src/Unstable_Grid/createGrid.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import {
2121
generateGridOffsetStyles,
2222
generateSizeClassNames,
2323
generateSpacingClassNames,
24+
generateDirectionClasses,
2425
} from './gridGenerator';
2526
import { CreateMUIStyled } from '../createStyled';
2627
import { GridTypeMap, GridOwnerState } from './GridProps';
@@ -62,13 +63,12 @@ export default function createGrid(
6263

6364
const useUtilityClasses = (ownerState: GridOwnerState, theme: typeof defaultTheme) => {
6465
const { container, direction, spacing, wrap, gridSize } = ownerState;
65-
6666
const slots = {
6767
root: [
6868
'root',
6969
container && 'container',
70-
direction !== 'row' && `direction-xs-${String(direction)}`,
7170
wrap !== 'wrap' && `wrap-xs-${String(wrap)}`,
71+
...generateDirectionClasses(direction),
7272
...generateSizeClassNames(gridSize),
7373
...(container ? generateSpacingClassNames(spacing, theme.breakpoints.keys[0]) : []),
7474
],

packages/mui-system/src/Unstable_Grid/gridGenerator.test.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
generateGridOffsetStyles,
1313
generateSizeClassNames,
1414
generateSpacingClassNames,
15+
generateDirectionClasses,
1516
} from './gridGenerator';
1617

1718
const spacing = createSpacing();
@@ -569,4 +570,19 @@ describe('grid generator', () => {
569570
).to.deep.equal(['spacing-mobile-3', 'spacing-tablet-4']);
570571
});
571572
});
573+
574+
describe('generateDirectionClasses', () => {
575+
it('should generate correct direction class names', () => {
576+
expect(generateDirectionClasses()).to.deep.equal([]);
577+
expect(generateDirectionClasses('row')).to.deep.equal(['direction-xs-row']);
578+
expect(generateDirectionClasses('column')).to.deep.equal(['direction-xs-column']);
579+
expect(
580+
generateDirectionClasses({
581+
xs: 'row',
582+
sm: 'column',
583+
md: 'row',
584+
}),
585+
).to.deep.equal(['direction-xs-row', 'direction-sm-column', 'direction-md-row']);
586+
});
587+
});
572588
});

packages/mui-system/src/Unstable_Grid/gridGenerator.ts

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Breakpoints, Breakpoint } from '../createTheme/createBreakpoints';
22
import { Spacing } from '../createTheme/createSpacing';
3-
import { GridOwnerState } from './GridProps';
3+
import { ResponsiveStyleValue } from '../styleFunctionSx';
4+
import { GridDirection, GridOwnerState } from './GridProps';
45

56
interface Props {
67
theme: { breakpoints: Breakpoints; spacing?: Spacing };
@@ -255,3 +256,16 @@ export const generateSpacingClassNames = (
255256
}
256257
return [];
257258
};
259+
260+
export const generateDirectionClasses = (
261+
direction: ResponsiveStyleValue<GridDirection> | undefined,
262+
): string[] => {
263+
if (direction === undefined) {
264+
return [];
265+
}
266+
if (typeof direction === 'object') {
267+
return Object.entries(direction).map(([key, value]) => `direction-${key}-${value}`);
268+
}
269+
270+
return [`direction-xs-${String(direction)}`];
271+
};

0 commit comments

Comments
 (0)