UNPKG

eunomia-controller

Version:

46 lines (39 loc) 1.38 kB
// Boilerplate reduction for dynamic routes const errorLoading = (err) => console.error('Dynamic page loading failed', err) const loadModule = (cb) => (componentModule) => cb(null, componentModule.default) const injectAndRender = (injectReducer, reducer, injectSagas, sagas, renderRoute, component) => { injectReducer('home', reducer.default); injectSagas(sagas.default); renderRoute(component); } const createRoutes = (store, routes, getAsyncInjectors, createReducer) => { const { injectReducer, injectSagas } = getAsyncInjectors(store, createReducer); return routes.map(item => { let result = { path: item.path, name: item.name } if (typeof item.component.length !== 'undefined') { Object.assign(result, { getComponent(nextState, cb) { const renderRoute = loadModule(cb); Promise.all(item.component).then(([reducer, sagas, component]) => injectAndRender(injectReducer, reducer, injectSagas, sagas, renderRoute, component)).catch(errorLoading); } }) } else { Object.assign(result, { getComponent(nextState, cb) { item.component.then(loadModule(cb)).catch(errorLoading) } }) } return result }) } module.exports = ({ errorLoading: errorLoading, loadModule: loadModule, injectAndRender: injectAndRender, createRoutes: createRoutes })