From 5c158accf4a6743c3ae18f5ba3082dc073b5bc1e Mon Sep 17 00:00:00 2001 From: kappu Date: Mon, 27 Mar 2017 15:18:08 +0200 Subject: [PATCH 1/3] Added appEpics that eanble to pass an object with app specific Epics. If Epic's name is the same the one in plugins this will override plugin's one --- web/client/jsapi/MapStore2.js | 2 +- web/client/product/app.jsx | 2 +- web/client/stores/StandardStore.js | 4 ++-- web/client/utils/PluginsUtils.js | 6 +++--- web/client/utils/__tests__/PluginUtils-test.js | 7 +++++++ 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/web/client/jsapi/MapStore2.js b/web/client/jsapi/MapStore2.js index feff2262c3..3ae91f1fc0 100644 --- a/web/client/jsapi/MapStore2.js +++ b/web/client/jsapi/MapStore2.js @@ -284,7 +284,7 @@ const MapStore2 = { pages }))(require('../components/app/StandardRouter')); - const appStore = require('../stores/StandardStore').bind(null, initialState || {}, {}); + const appStore = require('../stores/StandardStore').bind(null, initialState || {}, {}, {}); const initialActions = getInitialActions(options); const appConfig = { storeOpts: assign({}, storeOpts, {notify: true}), diff --git a/web/client/product/app.jsx b/web/client/product/app.jsx index 7349f7592a..25b4ca690e 100644 --- a/web/client/product/app.jsx +++ b/web/client/product/app.jsx @@ -27,7 +27,7 @@ const startApp = () => { const appStore = require('../stores/StandardStore').bind(null, initialState, { home: require('./reducers/home'), maps: require('../reducers/maps') - }); + }, {}); const initialActions = [ () => loadMaps(ConfigUtils.getDefaults().geoStoreUrl, ConfigUtils.getDefaults().initialMapFilter || "*") diff --git a/web/client/stores/StandardStore.js b/web/client/stores/StandardStore.js index 892bb3f09e..3784ea63e9 100644 --- a/web/client/stores/StandardStore.js +++ b/web/client/stores/StandardStore.js @@ -26,7 +26,7 @@ const {createEpicMiddleware} = require('redux-observable'); const SecurityUtils = require('../utils/SecurityUtils'); const ListenerEnhancer = require('@carnesen/redux-add-action-listener-enhancer').default; -module.exports = (initialState = {defaultState: {}, mobile: {}}, appReducers = {}, plugins, storeOpts) => { +module.exports = (initialState = {defaultState: {}, mobile: {}}, appReducers = {}, appEpics = {}, plugins, storeOpts) => { const allReducers = combineReducers(plugins, { ...appReducers, localConfig: require('../reducers/localConfig'), @@ -39,7 +39,7 @@ module.exports = (initialState = {defaultState: {}, mobile: {}}, appReducers = { mapInitialConfig: () => {return null; }, layers: () => {return null; } }); - const rootEpic = combineEpics(plugins); + const rootEpic = combineEpics(plugins, appEpics); const defaultState = initialState.defaultState; const mobileOverride = initialState.mobile; const epicMiddleware = createEpicMiddleware(rootEpic); diff --git a/web/client/utils/PluginsUtils.js b/web/client/utils/PluginsUtils.js index f213dca0b4..5a05d2f0bd 100644 --- a/web/client/utils/PluginsUtils.js +++ b/web/client/utils/PluginsUtils.js @@ -144,9 +144,9 @@ const PluginsUtils = { * @param {function[]} [epics] the epics to add to the plugins' ones * @return {function} the rootEpic, obtained combining plugins' epics and the other epics passed as argument. */ - combineEpics: (plugins, epics = []) => { - const pluginEpics = getEpics(plugins); - return combineEpics(...[ ...Object.keys(pluginEpics).map(k => pluginEpics[k]), ...epics]); + combineEpics: (plugins, epics = {}) => { + const pluginEpics = assign({}, getEpics(plugins), epics); + return combineEpics( ...Object.keys(pluginEpics).map(k => pluginEpics[k])); }, getReducers, filterState, diff --git a/web/client/utils/__tests__/PluginUtils-test.js b/web/client/utils/__tests__/PluginUtils-test.js index 6a61940c3a..b9e0879bcc 100644 --- a/web/client/utils/__tests__/PluginUtils-test.js +++ b/web/client/utils/__tests__/PluginUtils-test.js @@ -8,6 +8,7 @@ const expect = require('expect'); const PluginsUtils = require('../PluginsUtils'); const assign = require('object-assign'); +const MapSearchPlugin = require('../../plugins/MapSearch') describe('PluginsUtils', () => { beforeEach( () => { @@ -72,5 +73,11 @@ describe('PluginsUtils', () => { expect(desc1.items[0].cfg).toExist(); }); + it('combineEpics', () => { + const plugins = {MapSearchPlugin: MapSearchPlugin}; + const appEpics = {appEpics: (actions$) => actions$}; + const epics = PluginsUtils.combineEpics(plugins, appEpics); + expect(typeof epics ).toEqual('function'); + }); }); From ad35ca8d20c7e1d550804624b74df76653b2022b Mon Sep 17 00:00:00 2001 From: kappu Date: Mon, 27 Mar 2017 15:25:21 +0200 Subject: [PATCH 2/3] fixed eslint error --- web/client/utils/__tests__/PluginUtils-test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/client/utils/__tests__/PluginUtils-test.js b/web/client/utils/__tests__/PluginUtils-test.js index b9e0879bcc..5b7420f889 100644 --- a/web/client/utils/__tests__/PluginUtils-test.js +++ b/web/client/utils/__tests__/PluginUtils-test.js @@ -8,7 +8,7 @@ const expect = require('expect'); const PluginsUtils = require('../PluginsUtils'); const assign = require('object-assign'); -const MapSearchPlugin = require('../../plugins/MapSearch') +const MapSearchPlugin = require('../../plugins/MapSearch'); describe('PluginsUtils', () => { beforeEach( () => { From 3e95ba146de7da41955d127b0c262be580b47ad7 Mon Sep 17 00:00:00 2001 From: kappu Date: Mon, 27 Mar 2017 15:42:55 +0200 Subject: [PATCH 3/3] Fix on Lore's comment --- web/client/utils/__tests__/PluginUtils-test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/client/utils/__tests__/PluginUtils-test.js b/web/client/utils/__tests__/PluginUtils-test.js index 5b7420f889..8686bd1245 100644 --- a/web/client/utils/__tests__/PluginUtils-test.js +++ b/web/client/utils/__tests__/PluginUtils-test.js @@ -75,7 +75,7 @@ describe('PluginsUtils', () => { }); it('combineEpics', () => { const plugins = {MapSearchPlugin: MapSearchPlugin}; - const appEpics = {appEpics: (actions$) => actions$}; + const appEpics = {appEpics: (actions$) => actions$.ofType('TEST_ACTION').map({type: "NEW_ACTION_TEST"})}; const epics = PluginsUtils.combineEpics(plugins, appEpics); expect(typeof epics ).toEqual('function'); });