@data-ui/xy-chart
Version:
A package of charts with standard x- and y- axes. https://williaster.github.io/data-ui
125 lines (96 loc) • 4.61 kB
JavaScript
;
exports.__esModule = true;
exports.default = void 0;
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _d3Array = require("d3-array");
var _PointSeries = _interopRequireWildcard(require("./PointSeries"));
var _computeCirclePack = _interopRequireDefault(require("../utils/computeCirclePack"));
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
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); }
var DEFAULT_POINT_SIZE = 4;
var CIRCLE_PACK_LAYOUT_TIMEOUT = 10;
var propTypes = _extends({}, _PointSeries.propTypes, {
data: _propTypes.default.arrayOf(_propTypes.default.shape({
// x should be anything sortable
x: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.object, _propTypes.default.instanceOf(Date)]),
size: _propTypes.default.number
})).isRequired,
layoutCallback: _propTypes.default.func,
layout: _propTypes.default.func
});
var defaultProps = _extends({}, _PointSeries.defaultProps, {
size: function size(d) {
return d.size || DEFAULT_POINT_SIZE;
},
layoutCallback: null,
layout: _computeCirclePack.default
});
var CirclePackSeries =
/*#__PURE__*/
function (_React$PureComponent) {
_inheritsLoose(CirclePackSeries, _React$PureComponent);
function CirclePackSeries(props) {
var _this;
_this = _React$PureComponent.call(this, props) || this;
_this.computeCirclePack = _this.computeCirclePack.bind(_assertThisInitialized(_assertThisInitialized(_this)));
_this.state = {
data: _this.computeCirclePack(props)
};
return _this;
}
var _proto = CirclePackSeries.prototype;
_proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {
var _this2 = this;
// eslint-disable-next-line react/destructuring-assignment
if (['data', 'xScale', 'size'].some(function (prop) {
return _this2.props[prop] !== nextProps[prop];
})) {
this.setState({
data: this.computeCirclePack(nextProps)
});
}
};
_proto.componentWillUnmount = function componentWillUnmount() {
if (this.timeout) clearTimeout(this.timeout);
};
_proto.computeCirclePack = function computeCirclePack(_ref) {
var rawData = _ref.data,
xScale = _ref.xScale,
yScale = _ref.yScale,
size = _ref.size,
layoutCallback = _ref.layoutCallback,
layout = _ref.layout;
var data = layout(rawData, xScale, size); // callback enables the user to re-set the chart height if there is overflow
if (layoutCallback) {
if (this.timeout) clearTimeout(this.timeout);
var _d3Extent = (0, _d3Array.extent)(data, function (d) {
return d.y;
}),
min = _d3Extent[0],
max = _d3Extent[1];
this.timeout = setTimeout(function () {
layoutCallback({
range: [min, max],
domain: [yScale(min), yScale(max)]
});
}, CIRCLE_PACK_LAYOUT_TIMEOUT);
}
return data;
};
_proto.render = function render() {
var data = this.state.data;
return _react.default.createElement(_PointSeries.default, _extends({}, this.props, {
data: data
}));
};
return CirclePackSeries;
}(_react.default.PureComponent);
CirclePackSeries.propTypes = propTypes;
CirclePackSeries.defaultProps = defaultProps;
CirclePackSeries.displayName = 'CirclePackSeries';
var _default = CirclePackSeries;
exports.default = _default;