|
| 1 | +'use strict'; |
| 2 | + |
| 3 | +var _inherits = require('babel-runtime/helpers/inherits')['default']; |
| 4 | + |
| 5 | +var _createClass = require('babel-runtime/helpers/create-class')['default']; |
| 6 | + |
| 7 | +var _classCallCheck = require('babel-runtime/helpers/class-call-check')['default']; |
| 8 | + |
| 9 | +var _slicedToArray = require('babel-runtime/helpers/sliced-to-array')['default']; |
| 10 | + |
| 11 | +var _objectWithoutProperties = require('babel-runtime/helpers/object-without-properties')['default']; |
| 12 | + |
| 13 | +var _extends = require('babel-runtime/helpers/extends')['default']; |
| 14 | + |
| 15 | +var _Object$keys = require('babel-runtime/core-js/object/keys')['default']; |
| 16 | + |
| 17 | +var _interopRequireDefault = require('babel-runtime/helpers/interop-require-default')['default']; |
| 18 | + |
| 19 | +exports.__esModule = true; |
| 20 | + |
| 21 | +var _stylesheet = require('./stylesheet'); |
| 22 | + |
| 23 | +var _stylesheet2 = _interopRequireDefault(_stylesheet); |
| 24 | + |
| 25 | +var _stilr = require('stilr'); |
| 26 | + |
| 27 | +var _stilr2 = _interopRequireDefault(_stilr); |
| 28 | + |
| 29 | +var _react = require('react'); |
| 30 | + |
| 31 | +var _react2 = _interopRequireDefault(_react); |
| 32 | + |
| 33 | +var _utils = require('./utils'); |
| 34 | + |
| 35 | +var ERGONOMICS = _Object$keys(_utils.settings); |
| 36 | + |
| 37 | +var cellStyles = _stilr2['default'].create({ |
| 38 | + base: { |
| 39 | + padding: '0 ' + _utils.variables.gutter |
| 40 | + }, |
| 41 | + baseFlex: { |
| 42 | + flex: 1 |
| 43 | + }, |
| 44 | + flex: { |
| 45 | + display: 'flex' |
| 46 | + }, |
| 47 | + top: { |
| 48 | + alignSelf: _utils.vertical.top |
| 49 | + }, |
| 50 | + bottom: { |
| 51 | + alignSelf: _utils.vertical.bottom |
| 52 | + }, |
| 53 | + center: { |
| 54 | + alignSelf: _utils.vertical.center |
| 55 | + } |
| 56 | +}, _stylesheet2['default']); |
| 57 | + |
| 58 | +var Cell = (function (_React$Component) { |
| 59 | + _inherits(Cell, _React$Component); |
| 60 | + |
| 61 | + function Cell(props, context) { |
| 62 | + var _this = this; |
| 63 | + |
| 64 | + _classCallCheck(this, Cell); |
| 65 | + |
| 66 | + _React$Component.call(this, props, context); |
| 67 | + |
| 68 | + this.handleFlexSize = function (breakpoint) { |
| 69 | + var _props = _this.props; |
| 70 | + var grow = _props.grow; |
| 71 | + var size = _props.size; |
| 72 | + |
| 73 | + var growStyle = typeof grow === 'number' ? grow : grow === false ? 0 : undefined; |
| 74 | + |
| 75 | + return breakpoint && breakpoint !== 'hidden' ? _this.calcWidth(breakpoint) : size ? _this.calcWidth(size) : growStyle !== undefined ? { flex: growStyle + ' 1 auto', |
| 76 | + WebkitFlex: growStyle + ' 1 auto', |
| 77 | + msFlex: growStyle + ' 1 auto' } : null; |
| 78 | + }; |
| 79 | + |
| 80 | + this.getDefinedBreakpoints = function () { |
| 81 | + var breakpoints = []; |
| 82 | + |
| 83 | + for (var i = 0, len = ERGONOMICS.length; i < len; i++) { |
| 84 | + if (_this.props[ERGONOMICS[i]]) breakpoints.push(ERGONOMICS[i]); |
| 85 | + } |
| 86 | + |
| 87 | + return breakpoints; |
| 88 | + }; |
| 89 | + |
| 90 | + this.getMatchingBreakpoint = function () { |
| 91 | + return _this.props[_utils.findMatch.apply(null, _this.getDefinedBreakpoints())]; |
| 92 | + }; |
| 93 | + } |
| 94 | + |
| 95 | + Cell.prototype.calcWidth = function calcWidth(size) { |
| 96 | + if (typeof size === 'number') { |
| 97 | + return { |
| 98 | + width: size < 1 ? Math.round(size * 10000) / 100 + '%' : size + 'px' |
| 99 | + }; |
| 100 | + } |
| 101 | + |
| 102 | + var _ref = size ? size.split('/') : []; |
| 103 | + |
| 104 | + var _ref2 = _slicedToArray(_ref, 2); |
| 105 | + |
| 106 | + var numerator = _ref2[0]; |
| 107 | + var denominator = _ref2[1]; |
| 108 | + |
| 109 | + return { |
| 110 | + width: 100 / denominator * numerator + '%' |
| 111 | + }; |
| 112 | + }; |
| 113 | + |
| 114 | + Cell.prototype.render = function render() { |
| 115 | + var _props2 = this.props; |
| 116 | + var gutter = _props2.gutter; |
| 117 | + var flex = _props2.flex; |
| 118 | + var className = _props2.className; |
| 119 | + var align = _props2.align; |
| 120 | + var style = _props2.style; |
| 121 | + var children = _props2.children; |
| 122 | + |
| 123 | + var rest = _objectWithoutProperties(_props2, ['gutter', 'flex', 'className', 'align', 'style', 'children']); |
| 124 | + |
| 125 | + var breakpoint = this.getMatchingBreakpoint(); |
| 126 | + |
| 127 | + // Return early for performance |
| 128 | + if (breakpoint === 'hidden') { |
| 129 | + return null; |
| 130 | + } |
| 131 | + |
| 132 | + var flexSize = this.handleFlexSize(breakpoint); |
| 133 | + |
| 134 | + this.styles = _utils.assign({}, gutter ? { padding: '0 ' + gutter } : null, flexSize, style); |
| 135 | + |
| 136 | + var classes = [cellStyles.base, flexSize ? null : cellStyles.baseFlex, className, flex ? cellStyles.flex : null, align ? cellStyles[align] : null].filter(Boolean).join(' '); |
| 137 | + |
| 138 | + return _react2['default'].createElement( |
| 139 | + 'div', |
| 140 | + _extends({}, rest, { |
| 141 | + style: this.styles, |
| 142 | + className: classes }), |
| 143 | + children |
| 144 | + ); |
| 145 | + }; |
| 146 | + |
| 147 | + _createClass(Cell, null, [{ |
| 148 | + key: 'propTypes', |
| 149 | + value: { |
| 150 | + grow: _react.PropTypes.oneOf([false, true, _react.PropTypes.number]), |
| 151 | + gutter: _react.PropTypes.string, |
| 152 | + flex: _react.PropTypes.bool, |
| 153 | + align: _react.PropTypes.oneOf(['top', 'center', 'bottom']), |
| 154 | + size: function size(props, propName) { |
| 155 | + var value = props[propName]; |
| 156 | + if (value && !(typeof value === 'number' || typeof value === 'string' && /^[0-9]+\/[0-9]+$/.test(value))) { |
| 157 | + return new Error('Size should be a fraction (e.g. 1/6) or a number for fixed size'); |
| 158 | + } |
| 159 | + } |
| 160 | + }, |
| 161 | + enumerable: true |
| 162 | + }]); |
| 163 | + |
| 164 | + return Cell; |
| 165 | +})(_react2['default'].Component); |
| 166 | + |
| 167 | +exports['default'] = Cell; |
| 168 | +module.exports = exports['default']; |
0 commit comments