react-d3-radar
Version:
React-based Radar chart for D3
86 lines (74 loc) • 3.35 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = EmptyRadar;
var _react = _interopRequireDefault(require("react"));
var _RadarAxis = _interopRequireDefault(require("./RadarAxis"));
var _RadarRings = _interopRequireDefault(require("./RadarRings"));
var _utils = require("./utils");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var defaultRadarStyle = {
numRings: 4,
axisColor: "#cdcdcd",
ringColor: "#cdcdcd"
};
function EmptyRadar(props) {
var width = props.width,
height = props.height,
padding = props.padding,
variables = props.variables,
domainMax = props.domainMax,
style = props.style;
var _defaultRadarStyle$st = _objectSpread({}, defaultRadarStyle, style),
axisColor = _defaultRadarStyle$st.axisColor,
ringColor = _defaultRadarStyle$st.ringColor,
numRings = _defaultRadarStyle$st.numRings;
var innerHeight = height - padding * 2;
var innerWidth = width - padding * 2;
var radius = Math.min(innerWidth / 2, innerHeight / 2);
var diameter = radius * 2;
var scales = (0, _utils.radiusScales)(variables, domainMax, radius);
var angleSliceRadians = Math.PI * 2 / variables.length;
var offsetAngles = {};
(0, _utils.forEachArray)(variables, function (_ref, i) {
var key = _ref.key;
offsetAngles[key] = angleSliceRadians * i;
});
var backgroundScale = scales[variables[0].key];
var ticks = backgroundScale.ticks(numRings).slice(1);
var tickFormat = backgroundScale.tickFormat(numRings);
return _react.default.createElement("svg", {
width: width,
height: height
}, _react.default.createElement("g", {
transform: "translate(".concat(padding, ", ").concat(padding, ")")
}, _react.default.createElement("rect", {
width: diameter,
height: diameter,
fill: "transparent",
transform: "translate(".concat((innerWidth - diameter) / 2, ", ").concat((innerHeight - diameter) / 2, ")")
}), _react.default.createElement("g", {
transform: "translate(".concat(innerWidth / 2, ", ").concat(innerHeight / 2, ")")
}, _react.default.createElement(_RadarRings.default, {
ticks: ticks,
scale: backgroundScale,
color: ringColor,
format: tickFormat
}), variables.map(function (_ref2) {
var key = _ref2.key,
label = _ref2.label;
return _react.default.createElement(_RadarAxis.default, {
variableKey: key,
key: key,
scale: scales[key],
offsetAngle: offsetAngles[key],
label: label,
domainMax: domainMax,
color: axisColor,
textStyle: {}
});
}))));
}