Skip to content
This repository was archived by the owner on Mar 7, 2023. It is now read-only.

Commit 419df6b

Browse files
authored
Fix XY Grid flexbox issues (#80)
1 parent 838aa1c commit 419df6b

File tree

4 files changed

+50
-20
lines changed

4 files changed

+50
-20
lines changed

src/components/xy-grid.js

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,19 @@
11
import React from 'react';
22
import PropTypes from 'prop-types';
33
import { GutterTypes, ExtendedBreakpoints } from '../enums';
4-
import { GeneralPropTypes, FlexboxPropTypes, createClassName, generalClassNames, removeProps, objectKeys, isDefined, objectValues, addBreakpoint, setDirection } from '../utils';
4+
import {
5+
GeneralPropTypes,
6+
FlexboxPropTypes,
7+
createClassName,
8+
generalClassNames,
9+
flexboxClassNames,
10+
removeProps,
11+
objectKeys,
12+
isDefined,
13+
objectValues,
14+
addBreakpoint,
15+
setDirection
16+
} from '../utils';
517

618
/**
719
* Grid container component.
@@ -17,7 +29,8 @@ export const GridContainer = (props) => {
1729
'fluid': props.fluid,
1830
'full': props.full
1931
},
20-
generalClassNames(props)
32+
generalClassNames(props),
33+
flexboxClassNames(props)
2134
);
2235

2336
const passProps = removeProps(props, objectKeys(GridContainer.propTypes));
@@ -50,7 +63,8 @@ export const Grid = (props) => {
5063
isDefined(props.collapseOnMedium) ? `medium-${props.collapseOnMedium}-collapse` : null,
5164
isDefined(props.collapseOnLarge) ? `large-${props.collapseOnLarge}-collapse` : null,
5265
isDefined(props.gridFrame) ? addBreakpoint('grid-frame', props.gridFrame) : null,
53-
generalClassNames(props)
66+
generalClassNames(props),
67+
flexboxClassNames(props)
5468
);
5569

5670
const passProps = removeProps(props, objectKeys(Grid.propTypes));
@@ -90,7 +104,8 @@ export const Cell = (props) => {
90104
isDefined(props.offsetOnSmall) ? `small-offset-${props.offsetOnSmall}` : null,
91105
isDefined(props.offsetOnMedium) ? `medium-offset-${props.offsetOnMedium}` : null,
92106
isDefined(props.offsetOnLarge) ? `large-offset-${props.offsetOnLarge}` : null,
93-
generalClassNames(props)
107+
generalClassNames(props),
108+
flexboxClassNames(props)
94109
);
95110

96111
const passProps = removeProps(props, objectKeys(Cell.propTypes));

src/utils.js

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -181,22 +181,19 @@ export const FlexboxPropTypes = {
181181
* @returns {Object}
182182
*/
183183
export function flexboxClassNames(props) {
184-
const flexClassNames = {
184+
return {
185185
'flex-container': props.flexContainer,
186186
'align-center-middle': props.centerAlign,
187+
[`align-${props.alignX}`]: props.alignX,
188+
[`align-${props.alignY}`]: props.alignY,
189+
[addBreakpoint('flex-dir-row', props.flexDirRow)]: props.flexDirRow,
190+
[addBreakpoint('flex-dir-row-reverse', props.flexDirRowRev)]: props.flexDirRowRev,
191+
[addBreakpoint('flex-dir-column', props.flexDirCol)]: props.flexDirCol,
192+
[addBreakpoint('flex-dir-column-reverse', props.flexDirColRev)]: props.flexDirColRev,
193+
[`flex-child-${props.flexChild}`]: props.flexChild,
194+
[`order-${props.flexOrder}`]: props.flexOrder,
195+
[`small-order-${props.flexOrder}`]: props.flexOrderSmall,
196+
[`medium-order-${props.flexOrder}`]: props.flexOrderMedium,
197+
[`large-order-${props.flexOrder}`]: props.flexOrderLarge
187198
};
188-
189-
if (isDefined(props.alignX)) flexClassNames[`align-${props.alignX}`] = true;
190-
if (isDefined(props.alignY)) flexClassNames[`align-${props.alignY}`] = true;
191-
if (isDefined(props.flexDirRow)) flexClassNames[addBreakpoint('flex-dir-row', props.flexDirRow)] = true;
192-
if (isDefined(props.flexDirRowRev)) flexClassNames[addBreakpoint('flex-dir-row-reverse', props.flexDirRowRev)] = true;
193-
if (isDefined(props.flexDirCol)) flexClassNames[addBreakpoint('flex-dir-column', props.flexDirCol)] = true;
194-
if (isDefined(props.flexDirColRev)) flexClassNames[addBreakpoint('flex-dir-column-reverse', props.flexDirColRev)] = true;
195-
if (isDefined(props.flexChild)) flexClassNames[`flex-child-${props.flexChild}`] = true;
196-
if (isDefined(props.flexOrder)) flexClassNames[`order-${props.flexOrder}`] = true;
197-
if (isDefined(props.flexOrderSmall)) flexClassNames[`small-order-${props.flexOrder}`] = true;
198-
if (isDefined(props.flexOrderMedium)) flexClassNames[`medium-order-${props.flexOrder}`] = true;
199-
if (isDefined(props.flexOrderLarge)) flexClassNames[`large-order-${props.flexOrder}`] = true;
200-
201-
return flexClassNames;
202199
}

test/components/xy-grid-spec.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,12 @@ describe('GridContainer component', () => {
3737
expect(component).to.have.className('full');
3838
expect(component).to.not.have.prop('full');
3939
});
40+
41+
it('sets flexbox class name', () => {
42+
const component = shallow(<GridContainer alignX="center"/>);
43+
expect(component).to.have.className('align-center');
44+
expect(component).to.not.have.prop('alignX');
45+
});
4046
});
4147

4248
describe('Grid component', () => {
@@ -131,6 +137,12 @@ describe('Grid component', () => {
131137
const component = render(<Grid gridFrame={ExtendedBreakpoints.LARGE}/>);
132138
expect(component).to.have.className('large-grid-frame');
133139
});
140+
141+
it('sets flexbox class name', () => {
142+
const component = shallow(<Grid alignX="center"/>);
143+
expect(component).to.have.className('align-center');
144+
expect(component).to.not.have.prop('alignX');
145+
});
134146
});
135147

136148
describe('Cell component', () => {
@@ -230,4 +242,10 @@ describe('Cell component', () => {
230242
const component = render(<Cell shrink={ExtendedBreakpoints.LARGE}/>);
231243
expect(component).to.have.className('large-shrink');
232244
});
245+
246+
it('sets flexbox class name', () => {
247+
const component = shallow(<Cell alignX="center"/>);
248+
expect(component).to.have.className('align-center');
249+
expect(component).to.not.have.prop('alignX');
250+
});
233251
});

test/utils-spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ describe('Utilities', () => {
3939

4040
describe('flexboxClassNames', () => {
4141
const props = {flexDirRow: ExtendedBreakpoints.MEDIUM, flexOrderSmall: 4, flexChild: SpaceControls.GROW};
42-
const classNames = generalClassNames(props);
42+
const classNames = flexboxClassNames(props);
4343
expect(classNames['medium-flex-dir-row']).to.equal.true;
4444
expect(classNames['small-order-4']).to.equal.true;
4545
expect(classNames['flex-child-grow']).to.equal.true;

0 commit comments

Comments
 (0)