UNPKG

@krowdy-ui/views

Version:

React components that implement Google's Material Design.

169 lines (153 loc) 5.4 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _react = _interopRequireDefault(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _clsx = _interopRequireDefault(require("clsx")); var _core = require("@krowdy-ui/core"); var _Column = _interopRequireDefault(require("./Column")); var _Price = _interopRequireDefault(require("./Price")); var _Count = _interopRequireDefault(require("./Count")); var groupByObject = function groupByObject(array, prices) { var keyGetter = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (x) { return x; }; return array.reduce(function (resultObject, x) { var match = keyGetter(x); var price = prices.find(function (price, index) { return match >= price && match <= prices[index + 1]; }); if (price) { resultObject[price] = resultObject[price] || []; resultObject[price].push(x); } return resultObject; }, {}); }; // let interval = 8 // let emptyPrices = new Array(interval) var Histogram = function Histogram(_ref) { var _ref$multiplier = _ref.multiplier, multiplier = _ref$multiplier === void 0 ? 1 : _ref$multiplier, _ref$candidates = _ref.candidates, candidates = _ref$candidates === void 0 ? [] : _ref$candidates; var max = candidates.reduce(function (r, _ref2) { var salary = _ref2.salary; return Math.max(r, salary); }, 1); var min = candidates.reduce(function (r, _ref3) { var salary = _ref3.salary; return Math.min(r, salary); }, Infinity); var interval = (max - min) / multiplier; var emptyPrices = new Array(multiplier + 1).fill(min); var rawPrices = Array.from(emptyPrices, function (value, index) { return value + interval * index; }); var prices = [0].concat((0, _toConsumableArray2["default"])(rawPrices)); var classes = useStyles({ max: max }); var rawData = groupByObject(candidates, rawPrices, function (_ref4) { var salary = _ref4.salary; return salary; }); var keys = Object.keys(rawData); var maxCandidates = (0, _toConsumableArray2["default"])(keys).sort(function (a, b) { return rawData[b].length - rawData[a].length; })[0]; var maxCandidatesSize = rawData[maxCandidates] ? rawData[maxCandidates].length : 0; var columnPrices = prices.slice(0, prices.length - 1); var pricePercent = 100 / prices.length; return /*#__PURE__*/_react["default"].createElement("div", { className: classes.root }, /*#__PURE__*/_react["default"].createElement("div", { className: (0, _clsx["default"])(classes.column, classes.countCandidates) }, new Array(maxCandidatesSize).fill(maxCandidatesSize).map(function (count, index) { return /*#__PURE__*/_react["default"].createElement(_Count["default"], { count: count, index: index, key: index }); })), /*#__PURE__*/_react["default"].createElement("div", { className: (0, _clsx["default"])(classes.column, classes.container) }, /*#__PURE__*/_react["default"].createElement("div", { className: (0, _clsx["default"])(classes.containerHistogram, classes.row) }, columnPrices.map(function (key, index) { return /*#__PURE__*/_react["default"].createElement(_Column["default"], { candidates: rawData[key] || [], divider: columnPrices.length, index: index, key: index, max: max, maxCandidates: maxCandidatesSize, pricePercent: pricePercent }); })), /*#__PURE__*/_react["default"].createElement("div", { className: (0, _clsx["default"])(classes.row, classes.prices) }, prices.map(function (price, index) { return /*#__PURE__*/_react["default"].createElement(_Price["default"], { index: index, key: index, price: price, pricePercent: pricePercent }); })))); }; process.env.NODE_ENV !== "production" ? Histogram.propTypes = { candidates: _propTypes["default"].arrayOf(_propTypes["default"].shape({ firstName: _propTypes["default"].string, lastName: _propTypes["default"].string, photo: _propTypes["default"].string, salary: _propTypes["default"].number, selected: _propTypes["default"].bool })), multiplier: _propTypes["default"].number } : void 0; var useStyles = (0, _core.makeStyles)(function (theme) { return { column: { display: 'flex', flexDirection: 'column' }, container: { height: '100%', minHeight: 150, width: '100%' }, containerHistogram: { borderBottom: "1px solid ".concat(theme.palette.grey[600]), display: 'flex', flexDirection: 'row', height: 'inherit', width: 'inherit' }, countCandidates: { alignItems: 'center' }, price: { color: theme.palette.grey[600] }, prices: { position: 'relative' }, root: { display: 'flex', height: 'calc(100% - 32px)', marginTop: theme.spacing(1), paddingBottom: theme.spacing(1), paddingRight: theme.spacing(1) }, row: { display: 'flex', flexDirection: 'row' } }; }, { name: 'Histogram' }); var _default = Histogram; exports["default"] = _default;