@mui/x-charts
Version:
The community edition of MUI X Charts components.
39 lines (38 loc) • 2.53 kB
JavaScript
;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useRadarRotationIndex = useRadarRotationIndex;
var _formatErrorMessage2 = _interopRequireDefault(require("@mui/x-internals/formatErrorMessage"));
var React = _interopRequireWildcard(require("react"));
var _useChartPolarAxis = require("../../internals/plugins/featurePlugins/useChartPolarAxis");
var _getChartPoint = require("../../internals/getChartPoint");
var _coordinateTransformation = require("../../internals/plugins/featurePlugins/useChartPolarAxis/coordinateTransformation");
var _getAxisIndex = require("../../internals/plugins/featurePlugins/useChartPolarAxis/getAxisIndex");
var _useStore = require("../../internals/store/useStore");
var _useChartsLayerContainerRef = require("../../hooks/useChartsLayerContainerRef");
var _useAxis = require("../../hooks/useAxis");
/**
* This hook provides a function that from pointer event returns the rotation index.
* @return {(event: { clientX: number; clientY: number }) => number | null} rotationIndexGetter Returns the rotation data index.
*/
function useRadarRotationIndex() {
const chartsLayerContainerRef = (0, _useChartsLayerContainerRef.useChartsLayerContainerRef)();
const store = (0, _useStore.useStore)();
const rotationAxis = (0, _useAxis.useRotationAxis)();
const center = store.use(_useChartPolarAxis.selectorChartPolarCenter);
const rotationIndexGetter = React.useCallback(function rotationIndexGetter(event) {
const element = chartsLayerContainerRef.current;
if (!element || !rotationAxis) {
// Should never append
throw new Error(process.env.NODE_ENV !== "production" ? `MUI X Charts: The ${!element ? 'SVG element' : 'rotation axis'} was not found. ` + 'This is required to compute the radar chart dataIndex. ' + 'Ensure the radar chart is properly initialized with all required axes.' : (0, _formatErrorMessage2.default)(28, !element ? 'SVG element' : 'rotation axis'));
}
const svgPoint = (0, _getChartPoint.getChartPoint)(element, event);
const rotation = (0, _coordinateTransformation.generateSvg2rotation)(center)(svgPoint.x, svgPoint.y);
const rotationIndex = (0, _getAxisIndex.getAxisIndex)(rotationAxis, rotation);
return rotationIndex;
}, [center, rotationAxis, chartsLayerContainerRef]);
return rotationIndexGetter;
}