recharts
Version:
React charts
77 lines • 3.81 kB
JavaScript
import { autoBatchEnhancer, combineReducers, configureStore } from '@reduxjs/toolkit';
import { optionsReducer } from './optionsSlice';
import { tooltipReducer } from './tooltipSlice';
import { chartDataReducer } from './chartDataSlice';
import { chartLayoutReducer } from './layoutSlice';
import { mouseClickMiddleware, mouseMoveMiddleware } from './mouseEventsMiddleware';
import { reduxDevtoolsJsonStringifyReplacer } from './reduxDevtoolsJsonStringifyReplacer';
import { cartesianAxisReducer } from './cartesianAxisSlice';
import { graphicalItemsReducer } from './graphicalItemsSlice';
import { referenceElementsReducer } from './referenceElementsSlice';
import { brushReducer } from './brushSlice';
import { legendReducer } from './legendSlice';
import { rootPropsReducer } from './rootPropsSlice';
import { polarAxisReducer } from './polarAxisSlice';
import { polarOptionsReducer } from './polarOptionsSlice';
import { keyboardEventsMiddleware } from './keyboardEventsMiddleware';
import { externalEventsMiddleware } from './externalEventsMiddleware';
import { touchEventMiddleware } from './touchEventsMiddleware';
import { errorBarReducer } from './errorBarSlice';
import { Global } from '../util/Global';
var rootReducer = combineReducers({
brush: brushReducer,
cartesianAxis: cartesianAxisReducer,
chartData: chartDataReducer,
errorBars: errorBarReducer,
graphicalItems: graphicalItemsReducer,
layout: chartLayoutReducer,
legend: legendReducer,
options: optionsReducer,
polarAxis: polarAxisReducer,
polarOptions: polarOptionsReducer,
referenceElements: referenceElementsReducer,
rootProps: rootPropsReducer,
tooltip: tooltipReducer
});
export var createRechartsStore = function createRechartsStore(preloadedState) {
var chartName = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'Chart';
return configureStore({
reducer: rootReducer,
// redux-toolkit v1 types are unhappy with the preloadedState type. Remove the `as any` when bumping to v2
preloadedState: preloadedState,
// @ts-expect-error redux-toolkit v1 types are unhappy with the middleware array. Remove this comment when bumping to v2
middleware: getDefaultMiddleware => getDefaultMiddleware({
serializableCheck: false
}).concat([mouseClickMiddleware.middleware, mouseMoveMiddleware.middleware, keyboardEventsMiddleware.middleware, externalEventsMiddleware.middleware, touchEventMiddleware.middleware]),
/*
* I can't find out how to satisfy typescript here.
* We return `EnhancerArray<[StoreEnhancer<{}, {}>, StoreEnhancer]>` from this function,
* but the types say we should return `EnhancerArray<StoreEnhancer<{}, {}>`.
* Looks like it's badly inferred generics, but it won't allow me to provide the correct type manually either.
* So let's just ignore the error for now.
*/
// @ts-expect-error mismatched generics
enhancers: getDefaultEnhancers => {
var enhancers = getDefaultEnhancers;
if (typeof getDefaultEnhancers === 'function') {
/*
* In RTK v2 this is always a function, but in v1 it is an array.
* Because we have @types/redux-toolkit v1 as a dependency, typescript is going to flag this as an error.
* We support both RTK v1 and v2, so we need to do this check.
* https://redux-toolkit.js.org/usage/migrating-rtk-2#configurestoreenhancers-must-be-a-callback
*/
// @ts-expect-error RTK v2 behaviour on RTK v1 types
enhancers = getDefaultEnhancers();
}
return enhancers.concat(autoBatchEnhancer({
type: 'raf'
}));
},
devTools: Global.devToolsEnabled && {
serialize: {
replacer: reduxDevtoolsJsonStringifyReplacer
},
name: "recharts-".concat(chartName)
}
});
};