@mui/x-charts
Version:
The community edition of MUI X Charts components.
96 lines (94 loc) • 3.2 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useChartApiInitialization = useChartApiInitialization;
exports.useCharts = useCharts;
var React = _interopRequireWildcard(require("react"));
var _useId = _interopRequireDefault(require("@mui/utils/useId"));
var _ChartStore = require("../plugins/utils/ChartStore");
var _corePlugins = require("../plugins/corePlugins");
var _extractPluginParamsFromProps = require("./extractPluginParamsFromProps");
let globalId = 0;
/**
* This is the main hook that setups the plugin system for the chart.
*
* It manages the data used to create the charts.
*
* @param inPlugins All the plugins that will be used in the chart.
* @param props The props passed to the chart.
* @param seriesConfig The set of helpers used for series-specific computation.
*/
function useCharts(inPlugins, props, seriesConfig) {
const chartId = (0, _useId.default)();
const plugins = React.useMemo(() => [..._corePlugins.CHART_CORE_PLUGINS, ...inPlugins], [inPlugins]);
const pluginParams = (0, _extractPluginParamsFromProps.extractPluginParamsFromProps)({
plugins,
props
});
pluginParams.id = pluginParams.id ?? chartId;
const instanceRef = React.useRef({});
const instance = instanceRef.current;
const publicAPI = useChartApiInitialization(props.apiRef);
const innerChartRootRef = React.useRef(null);
const innerSvgRef = React.useRef(null);
const storeRef = React.useRef(null);
if (storeRef.current == null) {
// eslint-disable-next-line react-compiler/react-compiler
globalId += 1;
const initialState = {
cacheKey: {
id: globalId
}
};
plugins.forEach(plugin => {
if (plugin.getInitialState) {
Object.assign(initialState, plugin.getInitialState(pluginParams, initialState, seriesConfig));
}
});
storeRef.current = new _ChartStore.ChartStore(initialState);
}
const runPlugin = plugin => {
const pluginResponse = plugin({
instance,
params: pluginParams,
plugins: plugins,
store: storeRef.current,
svgRef: innerSvgRef,
chartRootRef: innerChartRootRef,
seriesConfig
});
if (pluginResponse.publicAPI) {
Object.assign(publicAPI.current, pluginResponse.publicAPI);
}
if (pluginResponse.instance) {
Object.assign(instance, pluginResponse.instance);
}
};
plugins.forEach(runPlugin);
const contextValue = React.useMemo(() => ({
store: storeRef.current,
publicAPI: publicAPI.current,
instance,
svgRef: innerSvgRef,
chartRootRef: innerChartRootRef
}), [instance, publicAPI]);
return {
contextValue
};
}
function initializeInputApiRef(inputApiRef) {
if (inputApiRef.current == null) {
inputApiRef.current = {};
}
return inputApiRef;
}
function useChartApiInitialization(inputApiRef) {
const fallbackPublicApiRef = React.useRef({});
if (inputApiRef) {
return initializeInputApiRef(inputApiRef);
}
return fallbackPublicApiRef;
}
;