@mui/x-charts
Version:
The community edition of MUI X Charts components.
62 lines (61 loc) • 1.98 kB
JavaScript
import _extends from "@babel/runtime/helpers/esm/extends";
import { useRotationScale } from "../../hooks/useScale.js";
import { useRadarSeries } from "../../hooks/useRadarSeries.js";
import { useRadiusAxes } from "../../hooks/useAxis.js";
import { useItemHighlightedGetter } from "../../hooks/useItemHighlightedGetter.js";
import { useChartContext } from "../../context/ChartProvider/useChartContext.js";
/**
* This hook provides all the data needed to display radar series.
* @param querySeriesId The id of the series to display
* @returns
*/
export function useRadarSeriesData(querySeriesId) {
const {
instance
} = useChartContext();
const rotationScale = useRotationScale();
const {
radiusAxis
} = useRadiusAxes();
const radarSeries = useRadarSeries(querySeriesId === undefined ? undefined : [querySeriesId]);
const {
isFaded: isItemFaded,
isHighlighted: isItemHighlighted
} = 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 _extends({}, 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
};
})
});
});
}