25 lines
765 B
TypeScript
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);
|
|
};
|
|
};
|