UNPKG

@data-ui/histogram

Version:

React + d3 library for creating histograms

163 lines (151 loc) 5.08 kB
"use strict"; exports.__esModule = true; exports.default = void 0; var _propTypes = _interopRequireDefault(require("prop-types")); var _react = _interopRequireDefault(require("react")); var _reactMove = require("react-move"); var _shape = require("@vx/shape"); var _curve = require("@vx/curve"); var _group = require("@vx/group"); var _theme = require("@data-ui/theme"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var propTypes = { densityData: _propTypes.default.arrayOf(_propTypes.default.object).isRequired, // @TODO shape fill: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.string]), fillOpacity: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.number]), getX: _propTypes.default.func.isRequired, getY: _propTypes.default.func.isRequired, horizontal: _propTypes.default.bool, keyAccessor: _propTypes.default.func, showArea: _propTypes.default.bool, showLine: _propTypes.default.bool, stroke: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.string]), strokeDasharray: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.string]), strokeLinecap: _propTypes.default.oneOf(['butt', 'square', 'round', 'inherit']), strokeWidth: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.number]), xScale: _propTypes.default.func.isRequired, yScale: _propTypes.default.func.isRequired }; var defaultProps = { fill: _theme.chartTheme.colors.default, fillOpacity: 0.3, horizontal: false, showArea: true, showLine: true, stroke: _theme.chartTheme.colors.default, strokeWidth: 2, strokeDasharray: null, strokeLinecap: 'round', keyAccessor: function keyAccessor(d) { return d.id; } }; var INDEX_DELAY_MULTIPLIER = 10; function AnimatedDensitySeries(_ref) { var densityData = _ref.densityData, fill = _ref.fill, fillOpacity = _ref.fillOpacity, horizontal = _ref.horizontal, keyAccessor = _ref.keyAccessor, getX = _ref.getX, getY = _ref.getY, showArea = _ref.showArea, showLine = _ref.showLine, stroke = _ref.stroke, strokeWidth = _ref.strokeWidth, strokeDasharray = _ref.strokeDasharray, strokeLinecap = _ref.strokeLinecap, xScale = _ref.xScale, yScale = _ref.yScale; var maxY = Math.max.apply(Math, yScale.range()); return _react.default.createElement(_reactMove.NodeGroup, { data: densityData, keyAccessor: keyAccessor, start: function start(d) { if (horizontal) return { x: 0, y: yScale.invert ? yScale(getY(d)) : getY(d) }; return { x: xScale.invert ? xScale(getX(d)) : getX(d), y: maxY }; }, enter: function enter(d, i) { return { x: [xScale.invert ? xScale(getX(d)) : getX(d)], y: [yScale.invert ? yScale(getY(d)) : getY(d)], fill: [d.fill || fill], stroke: [d.stroke || stroke], timing: { duration: 300, delay: INDEX_DELAY_MULTIPLIER * i } }; }, update: function update(d, i) { return { x: [xScale.invert ? xScale(getX(d)) : getX(d)], y: [yScale.invert ? yScale(getY(d)) : getY(d)], fill: [d.fill || fill], stroke: [d.stroke || stroke], timing: { duration: 300, delay: INDEX_DELAY_MULTIPLIER * i } }; }, leave: function leave(d, i) { return { x: xScale.invert ? xScale(getX(d)) : getX(d), y: horizontal ? 0 : maxY, timing: { duration: 300, delay: INDEX_DELAY_MULTIPLIER / 2 * i } }; } }, function (modifiedData) { return _react.default.createElement(_group.Group, { style: { pointerEvents: 'none' } }, showArea && _react.default.createElement(_shape.AreaClosed, { data: modifiedData, x: function x(d) { return xScale.invert ? xScale.invert(d.state.x) : d.state.x; }, y: function y(d) { return yScale.invert ? yScale.invert(d.state.y) : d.state.y; }, xScale: xScale, yScale: yScale, fill: fill, fillOpacity: fillOpacity, stroke: "transparent", strokeWidth: strokeWidth, curve: _curve.curveBasis }), showLine && strokeWidth > 0 && _react.default.createElement(_shape.LinePath, { data: modifiedData, x: function x(d) { return xScale.invert ? xScale.invert(d.state.x) : d.state.x; }, y: function y(d) { return yScale.invert ? yScale.invert(d.state.y) : d.state.y; }, xScale: xScale, yScale: yScale, stroke: stroke, strokeWidth: strokeWidth, strokeDasharray: strokeDasharray, strokeLinecap: strokeLinecap, curve: _curve.curveBasis, glyph: null })); }); } AnimatedDensitySeries.propTypes = propTypes; AnimatedDensitySeries.defaultProps = defaultProps; var _default = AnimatedDensitySeries; exports.default = _default;