UNPKG

redux-tiles

Version:

Library to create and easily compose redux pieces together in less verbose manner

37 lines (30 loc) 1 kB
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); }