@krowdy-ui/views
Version:
React components that implement Google's Material Design.
169 lines (153 loc) • 5.4 kB
JavaScript
;
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;