diff --git a/src/index.ts b/src/index.ts index 3323082..249969d 100644 --- a/src/index.ts +++ b/src/index.ts @@ -7,15 +7,21 @@ type ReducerMap, A> = { type ReducerMapState = T extends ReducerMap ? R : never; type ReducerMapAction = T extends ReducerMap ? R : never; +interface CompositeReducerOptions { + independent?: boolean; +} + const compositeReducer = , A extends Record, M extends ReducerMap, any>>( rootReducer: RootReducer, - reducers: M + reducers: M, + options: CompositeReducerOptions = {} ): RootReducer, A | ReducerMapAction> => (state, action) => Object.keys(reducers).reduce((acc, key) => { - if (acc) { - const subState = reducers[key]!(acc[key], action as ReducerMapAction); + const refState = options.independent ? state : acc; + if (refState) { + const subState = reducers[key]!(refState[key], action as ReducerMapAction); if (subState !== acc[key]) { return { ...acc,