43 lines
1.4 KiB
JavaScript
43 lines
1.4 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.useRadarMetricData = useRadarMetricData;
|
|
var _useDrawingArea = require("../../hooks/useDrawingArea");
|
|
var _useAxis = require("../../hooks/useAxis");
|
|
var _angleConversion = require("../../internals/angleConversion");
|
|
function useRadarMetricData() {
|
|
const rotationAxis = (0, _useAxis.useRotationAxis)();
|
|
const {
|
|
scale: rotationScale,
|
|
valueFormatter,
|
|
labelGap = 10
|
|
} = rotationAxis;
|
|
const {
|
|
radiusAxis
|
|
} = (0, _useAxis.useRadiusAxes)();
|
|
const drawingArea = (0, _useDrawingArea.useDrawingArea)();
|
|
const cx = drawingArea.left + drawingArea.width / 2;
|
|
const cy = drawingArea.top + drawingArea.height / 2;
|
|
const metrics = rotationScale.domain();
|
|
const angles = metrics.map(key => rotationScale(key));
|
|
return {
|
|
corners: metrics.map((metric, dataIndex) => {
|
|
const radiusScale = radiusAxis[metric].scale;
|
|
const r = radiusScale.range()[1] + labelGap;
|
|
const angle = angles[dataIndex];
|
|
const defaultTickLabel = metric;
|
|
return {
|
|
x: cx + r * Math.sin(angle),
|
|
y: cy - r * Math.cos(angle),
|
|
angle: (0, _angleConversion.rad2deg)(angle),
|
|
label: valueFormatter?.(metric, {
|
|
location: 'tick',
|
|
scale: rotationScale,
|
|
defaultTickLabel
|
|
}) ?? defaultTickLabel
|
|
};
|
|
})
|
|
};
|
|
} |