68 lines
2.2 KiB
JavaScript
68 lines
2.2 KiB
JavaScript
"use strict";
|
|
|
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.useRadarSeriesData = useRadarSeriesData;
|
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
var _useScale = require("../../hooks/useScale");
|
|
var _useRadarSeries = require("../../hooks/useRadarSeries");
|
|
var _useAxis = require("../../hooks/useAxis");
|
|
var _useItemHighlightedGetter = require("../../hooks/useItemHighlightedGetter");
|
|
var _useChartContext = require("../../context/ChartProvider/useChartContext");
|
|
/**
|
|
* This hook provides all the data needed to display radar series.
|
|
* @param querySeriesId The id of the series to display
|
|
* @returns
|
|
*/
|
|
function useRadarSeriesData(querySeriesId) {
|
|
const {
|
|
instance
|
|
} = (0, _useChartContext.useChartContext)();
|
|
const rotationScale = (0, _useScale.useRotationScale)();
|
|
const {
|
|
radiusAxis
|
|
} = (0, _useAxis.useRadiusAxes)();
|
|
const radarSeries = (0, _useRadarSeries.useRadarSeries)(querySeriesId === undefined ? undefined : [querySeriesId]);
|
|
const {
|
|
isFaded: isItemFaded,
|
|
isHighlighted: isItemHighlighted
|
|
} = (0, _useItemHighlightedGetter.useItemHighlightedGetter)();
|
|
const metrics = rotationScale?.domain() ?? [];
|
|
const angles = metrics.map(key => rotationScale(key));
|
|
return radarSeries.map(series => {
|
|
const seriesId = series.id;
|
|
const isSeriesHighlighted = isItemHighlighted({
|
|
seriesId
|
|
});
|
|
const isSeriesFaded = !isSeriesHighlighted && isItemFaded({
|
|
seriesId
|
|
});
|
|
return (0, _extends2.default)({}, series, {
|
|
seriesId: series.id,
|
|
isSeriesHighlighted,
|
|
isSeriesFaded,
|
|
points: series.data.map((value, dataIndex) => {
|
|
const highlighted = isItemHighlighted({
|
|
seriesId,
|
|
dataIndex
|
|
});
|
|
const faded = !highlighted && isItemFaded({
|
|
seriesId,
|
|
dataIndex
|
|
});
|
|
const r = radiusAxis[metrics[dataIndex]].scale(value);
|
|
const angle = angles[dataIndex];
|
|
const [x, y] = instance.polar2svg(r, angle);
|
|
return {
|
|
x,
|
|
y,
|
|
isItemHighlighted: highlighted,
|
|
isItemFaded: faded,
|
|
dataIndex
|
|
};
|
|
})
|
|
});
|
|
});
|
|
} |