react-d3-radar
Version:
React-based Radar chart for D3
88 lines (70 loc) • 3.83 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.flatMapDeepArray = flatMapDeepArray;
exports.forEachArray = forEachArray;
exports.radiusScales = radiusScales;
exports.radarPoints = radarPoints;
var _flatMapDeep = _interopRequireDefault(require("lodash/flatMapDeep"));
var _forEach = _interopRequireDefault(require("lodash/forEach"));
var _sortBy = _interopRequireDefault(require("lodash/sortBy"));
var _indexOf = _interopRequireDefault(require("lodash/indexOf"));
var _d3Scale = require("d3-scale");
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; }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
function flatMapDeepArray(collection, fn) {
return (0, _flatMapDeep.default)(collection, fn);
}
function forEachArray(collection, fn) {
(0, _forEach.default)(collection, fn);
}
function radiusScales(variables, domainMax, radius) {
var res = {};
(0, _forEach.default)(variables, function (_ref) {
var key = _ref.key;
var scale = (0, _d3Scale.scaleLinear)().domain([0, domainMax]).range([0, radius]);
res[key] = scale;
});
return res;
}
function radarPoints(data, scales, offsetAngles) {
var allVariableKeys = data.variables.map(function (variable) {
return variable.key;
});
return data.sets.map(function (_ref2) {
var key = _ref2.key,
values = _ref2.values,
rest = _objectWithoutProperties(_ref2, ["key", "values"]);
var points = [];
(0, _forEach.default)(values, function (value, variableKey) {
var scale = scales[variableKey];
var offsetAngle = offsetAngles[variableKey];
if (scale === undefined || offsetAngle === undefined) {
return;
}
var x = scale(value) * Math.cos(offsetAngle - Math.PI / 2);
var y = scale(value) * Math.sin(offsetAngle - Math.PI / 2);
var point = {
x: x,
y: y,
value: value,
setKey: key,
variableKey: variableKey,
key: "".concat(key, "--").concat(variableKey)
};
points.push(point);
});
var sortedPoints = (0, _sortBy.default)(points, function (point) {
var pointVariableKey = point.variableKey;
return (0, _indexOf.default)(allVariableKeys, pointVariableKey);
});
return _objectSpread({
setKey: key,
points: sortedPoints
}, rest);
});
}