diff --git a/examples/getstarted/README.md b/examples/getstarted/README.md index 0b51864113..84a82286ec 100644 --- a/examples/getstarted/README.md +++ b/examples/getstarted/README.md @@ -1,3 +1,8 @@ # getstarted A quick description of getstarted. + + +Start the app with mongo + +`DB=mongo yarn develop` diff --git a/packages/strapi-admin/admin/src/plugins.js b/packages/strapi-admin/admin/src/plugins.js index a320ba2ada..69afa1b31e 100644 --- a/packages/strapi-admin/admin/src/plugins.js +++ b/packages/strapi-admin/admin/src/plugins.js @@ -1,5 +1,7 @@ const injectReducer = require('./utils/injectReducer').default; +const useInjectReducer = require('./utils/injectReducer').useInjectReducer; const injectSaga = require('./utils/injectSaga').default; +const useInjectSaga = require('./utils/injectSaga').useInjectSaga; const { languages } = require('./i18n'); window.strapi = Object.assign(window.strapi || {}, { @@ -13,6 +15,8 @@ window.strapi = Object.assign(window.strapi || {}, { 'en', injectReducer, injectSaga, + useInjectReducer, + useInjectSaga, }); module.exports = { diff --git a/packages/strapi-admin/admin/src/utils/injectReducer.js b/packages/strapi-admin/admin/src/utils/injectReducer.js index d00e7bace8..5288f793ae 100644 --- a/packages/strapi-admin/admin/src/utils/injectReducer.js +++ b/packages/strapi-admin/admin/src/utils/injectReducer.js @@ -34,3 +34,14 @@ export default ({ key, reducer, pluginId }) => WrappedComponent => { return hoistNonReactStatics(ReducerInjector, WrappedComponent); }; + +const useInjectReducer = ({ key, reducer, pluginId }) => { + const context = React.useContext(ReactReduxContext); + const reducerName = pluginId ? `${pluginId}_${key}` : key; + + React.useEffect(() => { + getInjectors(context.store).injectReducer(reducerName, reducer); + }, []); +}; + +export { useInjectReducer }; diff --git a/packages/strapi-admin/admin/src/utils/injectSaga.js b/packages/strapi-admin/admin/src/utils/injectSaga.js index 72d1e18795..8e4e7829df 100644 --- a/packages/strapi-admin/admin/src/utils/injectSaga.js +++ b/packages/strapi-admin/admin/src/utils/injectSaga.js @@ -49,3 +49,19 @@ export default ({ key, saga, mode, pluginId }) => WrappedComponent => { return hoistNonReactStatics(InjectSaga, WrappedComponent); }; + +const useInjectSaga = ({ key, saga, mode, pluginId }) => { + const context = React.useContext(ReactReduxContext); + const sagaName = pluginId ? `${pluginId}_${key}` : key; + + React.useEffect(() => { + const injectors = getInjectors(context.store); + injectors.injectSaga(sagaName, { saga, mode }); + + return () => { + injectors.ejectSaga(sagaName); + }; + }, []); +}; + +export { useInjectSaga }; diff --git a/packages/strapi-admin/index.js b/packages/strapi-admin/index.js index 596f4424fa..0156314a9a 100644 --- a/packages/strapi-admin/index.js +++ b/packages/strapi-admin/index.js @@ -10,6 +10,8 @@ async function createPluginsJs(plugins, dest) { const content = ` const injectReducer = require('./utils/injectReducer').default; const injectSaga = require('./utils/injectSaga').default; + const useInjectReducer = require('./utils/injectReducer').useInjectReducer; + const useInjectSaga = require('./utils/injectSaga').useInjectSaga; const { languages } = require('./i18n'); window.strapi = Object.assign(window.strapi || {}, { @@ -23,6 +25,8 @@ async function createPluginsJs(plugins, dest) { 'en', injectReducer, injectSaga, + useInjectReducer, + useInjectSaga, }); module.exports = {