react-timeseries-charts
Version:
Declarative timeseries charts
171 lines (145 loc) • 4.8 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
var _react = require("react");
var _react2 = _interopRequireDefault(_react);
var _propTypes = require("prop-types");
var _propTypes2 = _interopRequireDefault(_propTypes);
var _merge = require("merge");
var _merge2 = _interopRequireDefault(_merge);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var defaultBoxStyle = {
fill: "#FEFEFE",
stroke: "#DDD",
opacity: 0.8
}; /**
* Copyright (c) 2015-present, The Regents of the University of California,
* through Lawrence Berkeley National Laboratory (subject to receipt
* of any required approvals from the U.S. Dept. of Energy).
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree.
*/
var defaultTextStyle = {
fontSize: 11,
textAnchor: "left",
fill: "#b0b0b0",
pointerEvents: "none"
};
var defaultTextStyleCentered = {
fontSize: 11,
textAnchor: "middle",
fill: "#bdbdbd",
pointerEvents: "none"
};
function mergeStyles(style, isCentered) {
return {
boxStyle: (0, _merge2.default)(true, defaultBoxStyle, style.box ? style.box : {}),
labelStyle: (0, _merge2.default)(true, isCentered ? defaultTextStyleCentered : defaultTextStyle, style.label ? style.label : {})
};
}
/**
* Renders a list of values in svg
*
* +----------------+
* | Max 100 Gbps |
* | Avg 26 Gbps |
* +----------------+
*/
var ValueList = function ValueList(props) {
var align = props.align,
style = props.style,
width = props.width,
height = props.height;
var _mergeStyles = mergeStyles(style, align === "center"),
boxStyle = _mergeStyles.boxStyle,
labelStyle = _mergeStyles.labelStyle;
if (!props.values.length) {
return _react2.default.createElement("g", null);
}
var values = props.values.map(function (item, i) {
if (align === "left") {
return _react2.default.createElement(
"g",
{ key: i },
_react2.default.createElement(
"text",
{ x: 10, y: 5, dy: (i + 1) * 1.2 + "em", style: labelStyle },
_react2.default.createElement(
"tspan",
{ style: { fontWeight: 700 } },
item.label + ": "
),
_react2.default.createElement(
"tspan",
null,
"" + item.value
)
)
);
}
var posx = parseInt(props.width / 2, 10);
return _react2.default.createElement(
"g",
{ key: i },
_react2.default.createElement(
"text",
{ x: posx, y: 5, dy: (i + 1) * 1.2 + "em", style: labelStyle },
_react2.default.createElement(
"tspan",
{ style: { fontWeight: 700 } },
item.label + ": "
),
_react2.default.createElement(
"tspan",
null,
"" + item.value
)
)
);
});
var box = _react2.default.createElement("rect", { style: boxStyle, x: 0, y: 0, width: width, height: height });
return _react2.default.createElement(
"g",
null,
box,
values
);
};
ValueList.defaultProps = {
align: "center",
width: 100,
height: 100,
pointerEvents: "none",
style: { fill: "#FEFEFE", stroke: "#DDD", opacity: 0.8 }
};
ValueList.propTypes = {
/**
* Where to position the label, either "left" or "center" within the box
*/
align: _propTypes2.default.oneOf(["center", "left"]),
/**
* An array of label value pairs to render
*/
values: _propTypes2.default.arrayOf(_propTypes2.default.shape({
label: _propTypes2.default.string, // eslint-disable-line
value: _propTypes2.default.oneOfType([
// eslint-disable-line
_propTypes2.default.number, _propTypes2.default.string])
})).isRequired,
/**
* CSS object to be applied to the ValueList surrounding box and the label (text).
*/
style: _propTypes2.default.object, // eslint-disable-line
/**
* The width of the rectangle to render into
*/
width: _propTypes2.default.number,
/**
* The height of the rectangle to render into
*/
height: _propTypes2.default.number
};
exports.default = ValueList;