react-foundation-components-fork
Version:
Foundation Sites components built with the power of React and CSS Modules
130 lines (91 loc) • 4.34 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _isInteger = require('babel-runtime/core-js/number/is-integer');
var _isInteger2 = _interopRequireDefault(_isInteger);
var _keys = require('babel-runtime/core-js/object/keys');
var _keys2 = _interopRequireDefault(_keys);
var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
var _extends3 = require('babel-runtime/helpers/extends');
var _extends4 = _interopRequireDefault(_extends3);
var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
exports.createScreenSizeProps = createScreenSizeProps;
exports.createScreenSizePropTypes = createScreenSizePropTypes;
exports.createScreenSizeClassNames = createScreenSizeClassNames;
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _includes = require('lodash/includes');
var _includes2 = _interopRequireDefault(_includes);
var _mapValues = require('lodash/mapValues');
var _mapValues2 = _interopRequireDefault(_mapValues);
var _decapitalize = require('underscore.string/decapitalize');
var _decapitalize2 = _interopRequireDefault(_decapitalize);
var _constants = require('../constants');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function createScreenSizeProps() {
var classNameMapping = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
return classNameMapping.reduce(function (columnAgg, _ref) {
var baseClassName = _ref.baseClassName,
basePropName = _ref.basePropName,
flattenSmall = _ref.flattenSmall,
column = (0, _objectWithoutProperties3.default)(_ref, ['baseClassName', 'basePropName', 'flattenSmall']);
var props = _constants.SCREEN_SIZES.reduce(function (sizeAgg, size) {
var className = '';
var propName = '';
if (flattenSmall && size === _constants.SCREEN_SIZE_SMALL) {
className = baseClassName;
propName = (0, _decapitalize2.default)(basePropName);
} else {
className = size + (baseClassName ? '-' + baseClassName : '');
propName = '' + size + basePropName;
}
return (0, _extends4.default)({}, sizeAgg, (0, _defineProperty3.default)({}, propName, (0, _extends4.default)({}, column, {
className: className
})));
}, {});
return (0, _extends4.default)({}, columnAgg, props);
}, {});
}
function createScreenSizePropTypes() {
var screenSizeProps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
return (0, _mapValues2.default)(screenSizeProps, function (_ref2) {
var type = _ref2.type,
values = _ref2.values;
if (type === _constants.CLASS_NAME_TYPES.RANGE) {
return _propTypes2.default.number;
} else if (type === _constants.CLASS_NAME_TYPES.ENUM) {
return _propTypes2.default.oneOf(values);
}
return _propTypes2.default.bool;
});
}
function createScreenSizeClassNames() {
var screenSizeProps = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var classNames = {};
var remainingProps = {};
(0, _keys2.default)(props).forEach(function (prop) {
var propValue = props[prop];
if (screenSizeProps[prop]) {
var _screenSizeProps$prop = screenSizeProps[prop],
className = _screenSizeProps$prop.className,
type = _screenSizeProps$prop.type,
min = _screenSizeProps$prop.min,
max = _screenSizeProps$prop.max,
values = _screenSizeProps$prop.values;
if (type === _constants.CLASS_NAME_TYPES.RANGE) {
classNames[className + '-' + propValue] = (0, _isInteger2.default)(propValue) && propValue >= min && propValue <= max;
} else if (type === _constants.CLASS_NAME_TYPES.ENUM) {
classNames[className + '-' + propValue] = (0, _includes2.default)(values, propValue);
} else {
classNames[className] = propValue;
}
} else {
remainingProps[prop] = propValue;
}
});
return { classNames: classNames, props: remainingProps };
}