lucid-ui
Version:
A UI component library from AppNexus.
197 lines (150 loc) • 10.8 kB
JavaScript
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
import _keys from "lodash/keys";
import _times from "lodash/times";
import _reduce from "lodash/reduce";
import _map from "lodash/map";
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
import React from 'react';
import PropTypes from 'react-peek/prop-types';
import { lucidClassNames } from '../../util/style-helpers';
import { findTypes, omitProps } from '../../util/component-types';
import Resizer from '../Resizer/Resizer';
var cx = lucidClassNames.bind('&-ResponsiveGrid');
var string = PropTypes.string,
number = PropTypes.number,
arrayOf = PropTypes.arrayOf;
var Cell = function Cell(_props) {
return null;
};
Cell.displayName = 'ResponsiveGrid.Cell';
Cell.peek = {
description: "\n\t\tRenders a `<article>` as the grid cell\n\t"
};
var defaultProps = {
breakPoints: [960, 1430]
};
export var ResponsiveGrid = /*#__PURE__*/function (_React$Component) {
_inherits(ResponsiveGrid, _React$Component);
var _super = _createSuper(ResponsiveGrid);
function ResponsiveGrid() {
var _this;
_classCallCheck(this, ResponsiveGrid);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _super.call.apply(_super, [this].concat(args));
_defineProperty(_assertThisInitialized(_this), "getColumnLayout", function (numberOfColumns) {
var cellProps = _map(findTypes(_this.props, ResponsiveGridWrapper.Cell), 'props');
var columns = _reduce(_map(cellProps, function (props, key) {
return /*#__PURE__*/React.createElement("article", {
key: key,
className: cx('&-Cell')
}, props.children);
}), function (columns, cell, idx) {
columns[idx % numberOfColumns].push(cell);
return columns;
}, _times(numberOfColumns, function () {
return [];
}));
return /*#__PURE__*/React.createElement("div", {
className: cx('&', {
'&-one-column': numberOfColumns === 1
})
}, _map(columns, function (col, index) {
return /*#__PURE__*/React.createElement("div", {
key: index,
className: cx('&-Column')
}, col);
}));
});
return _this;
}
_createClass(ResponsiveGrid, [{
key: "shouldComponentUpdate",
value: function shouldComponentUpdate(nextProps) {
var _this$props = this.props,
width = _this$props.width,
breakPoints = _this$props.breakPoints;
var nextWidth = nextProps.width;
var _breakPoints = _slicedToArray(breakPoints, 2),
breakOne = _breakPoints[0],
breakTwo = _breakPoints[1];
if (nextWidth < width) {
return nextWidth < breakOne && width >= breakOne || nextWidth < breakTwo && width >= breakTwo;
} else if (nextWidth > width) {
return nextWidth > breakOne && width <= breakOne || nextWidth > breakTwo && width <= breakTwo;
}
return false;
}
}, {
key: "render",
value: function render() {
var _this$props2 = this.props,
width = _this$props2.width,
breakPoints = _this$props2.breakPoints;
var _breakPoints2 = _slicedToArray(breakPoints, 2),
breakOne = _breakPoints2[0],
breakTwo = _breakPoints2[1];
if (width < breakTwo) {
if (width < breakOne) {
return this.getColumnLayout(1);
}
return this.getColumnLayout(2);
}
return this.getColumnLayout(3);
}
}]);
return ResponsiveGrid;
}(React.Component);
_defineProperty(ResponsiveGrid, "displayName", 'ResponsiveGrid');
_defineProperty(ResponsiveGrid, "propTypes", {
width: number,
breakPoints: arrayOf(number),
className: string
});
var ResponsiveGridWrapper = function ResponsiveGridWrapper(props) {
var breakPoints = props.breakPoints,
children = props.children,
className = props.className,
passThroughs = _objectWithoutProperties(props, ["breakPoints", "children", "className"]);
return /*#__PURE__*/React.createElement(Resizer, _extends({
className: cx('&', className)
}, omitProps(passThroughs, undefined, _keys(ResponsiveGridWrapper.propTypes), false)), function (width) {
return /*#__PURE__*/React.createElement(ResponsiveGrid, {
width: width,
breakPoints: breakPoints
}, children);
});
};
ResponsiveGridWrapper.Cell = Cell;
ResponsiveGridWrapper.defaultProps = defaultProps;
ResponsiveGridWrapper.displayName = ResponsiveGrid.displayName;
ResponsiveGridWrapper.propTypes = {
breakPoints: arrayOf(number),
className: string
};
ResponsiveGridWrapper.peek = {
description: "\n\t\tA grid container that changes the number of grid columns in response to width changes. By default,\n\t\tthe grid cells are displayed in a single column for widths less than 960px, two columns for widths greater \n\t\tthan 960px and less than 1430px, and three columns for widths greater than 1430px. Custom break points can\n\t\tbe provided through the `breakPoints` prop.\n\t",
categories: ['utility'],
madeFrom: ['Resizer']
};
export default ResponsiveGridWrapper;