Files
CloudrevePlus-frontend/src/redux/combineReducers.ts
2024-02-25 08:27:01 +08:00

25 lines
765 B
TypeScript

import {
combineReducers as combine,
ReducersMapObject,
AnyAction,
} from "redux";
import invariant from "invariant";
export const combineReducers = (reducers: ReducersMapObject) => {
const combinedReducer = combine(reducers);
// TODO: define state type
return (state: any, action: AnyAction) => {
if (
action.type &&
!action.type.startsWith("@@") &&
action.type.split("/").length > 1
) {
const namespace = action.type.split("/")[0];
const reducer = reducers[namespace];
invariant(!!reducer, `reducer ${namespace} doesn't exist`);
return reducer && reducer(state, action);
}
return combinedReducer(state, action);
};
};