redux-tiles
Version:
Library to create and easily compose redux pieces together in less verbose manner
37 lines (30 loc) • 1 kB
text/typescript
import { combineReducers, Reducer } from "redux";
import { iterate, populateHash } from "./helpers";
import { changeDefaultReducer, DEFAULT_REDUCER } from "./tiles/selectors";
import { ITile } from "./tiles/types";
import { isFunction, isString } from "./utils";
export function createNestedReducers(value: any): Reducer<any> {
return combineReducers(
Object.keys(value).reduce((hash: any, key: string) => {
const elem: Function | {} = value[key];
hash[key] = isFunction(elem) ? elem : createNestedReducers(elem);
return hash;
}, {})
);
}
export function createReducers(
modules: ITile[],
topReducer: string = DEFAULT_REDUCER
): Reducer<any> {
if (topReducer !== DEFAULT_REDUCER) {
changeDefaultReducer(topReducer);
}
const nestedModules: any = iterate(modules).reduce(
(hash: any, module: ITile) => {
populateHash(hash, module.tileName, module.reducer);
return hash;
},
{}
);
return createNestedReducers(nestedModules);
}