-
Notifications
You must be signed in to change notification settings - Fork 200
Expand file tree
/
Copy pathCol.js
More file actions
72 lines (61 loc) · 1.64 KB
/
Col.js
File metadata and controls
72 lines (61 loc) · 1.64 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import React, { PropTypes } from 'react';
import createProps from '../createProps';
import style from 'flexboxgrid';
const ModificatorType = PropTypes.oneOfType([PropTypes.number, PropTypes.bool]);
const propTypes = {
xs: ModificatorType,
sm: ModificatorType,
md: ModificatorType,
lg: ModificatorType,
xsOffset: PropTypes.number,
smOffset: PropTypes.number,
mdOffset: PropTypes.number,
lgOffset: PropTypes.number,
reverse: PropTypes.bool,
className: PropTypes.string,
tagName: PropTypes.string,
children: PropTypes.node
};
const classMap = {
xs: 'col-xs',
sm: 'col-sm',
md: 'col-md',
lg: 'col-lg',
xsOffset: 'col-xs-offset',
smOffset: 'col-sm-offset',
mdOffset: 'col-md-offset',
lgOffset: 'col-lg-offset'
};
const hiddenMap = {
xs: 'hidden-xs',
sm: 'hidden-sm',
md: 'hidden-md',
lg: 'hidden-lg',
};
function getClassNames(props) {
const extraClasses = [];
if (props.className) {
extraClasses.push(props.className);
}
if (props.reverse) {
extraClasses.push(style.reverse);
}
return Object.keys(props)
.filter(key => classMap[key])
.map(key => {
const colsAmount = props[key];
if ( Number.isInteger(colsAmount) && colsAmount === 0 ) {
return style[hiddenMap[key]];
} else if ( Number.isInteger(colsAmount) ) {
return style[`${classMap[key]}-${colsAmount}`];
}
return style[classMap[key]];
})
.concat(extraClasses)
.join(' ');
}
export default function Col(props) {
const className = getClassNames(props);
return React.createElement(props.tagName || 'div', createProps(propTypes, props, className));
}
Col.propTypes = propTypes;