summaryrefslogtreecommitdiffstats
path: root/front/odiparpack/app/utils/injectReducer.js
diff options
context:
space:
mode:
authorDayana31 <[email protected]>2022-04-21 17:27:08 -0500
committerDayana31 <[email protected]>2022-04-21 17:27:08 -0500
commit67c50667678dd0ce4709b29a854f6a47093a1ac5 (patch)
treeb6f9f39092ad54bf6b815984d32b37d7c7ca67ab /front/odiparpack/app/utils/injectReducer.js
parent91140b24f0d49a9f89a080ee063e9eb023a4b73a (diff)
parente13e630cd6e4fc0b1ff92098a28a770794c7bb9a (diff)
downloadDP1_project-67c50667678dd0ce4709b29a854f6a47093a1ac5.tar.gz
DP1_project-67c50667678dd0ce4709b29a854f6a47093a1ac5.tar.bz2
DP1_project-67c50667678dd0ce4709b29a854f6a47093a1ac5.zip
Merge branch 'gabshr' into dayana
Diffstat (limited to 'front/odiparpack/app/utils/injectReducer.js')
-rw-r--r--front/odiparpack/app/utils/injectReducer.js45
1 files changed, 45 insertions, 0 deletions
diff --git a/front/odiparpack/app/utils/injectReducer.js b/front/odiparpack/app/utils/injectReducer.js
new file mode 100644
index 0000000..13833c2
--- /dev/null
+++ b/front/odiparpack/app/utils/injectReducer.js
@@ -0,0 +1,45 @@
+import React from 'react';
+import hoistNonReactStatics from 'hoist-non-react-statics';
+import { ReactReduxContext } from 'react-redux';
+
+import getInjectors from './reducerInjectors';
+
+/**
+ * Dynamically injects a reducer
+ *
+ * @param {string} key A key of the reducer
+ * @param {function} reducer A reducer that will be injected
+ *
+ */
+export default ({ key, reducer }) => WrappedComponent => {
+ class ReducerInjector extends React.Component {
+ static WrappedComponent = WrappedComponent;
+
+ static contextType = ReactReduxContext;
+
+ static displayName = `withReducer(${WrappedComponent.displayName
+ || WrappedComponent.name
+ || 'Component'})`;
+
+ constructor(props, context) {
+ super(props, context);
+
+ getInjectors(context.store).injectReducer(key, reducer);
+ }
+
+ render() {
+ return <WrappedComponent {...this.props} />;
+ }
+ }
+
+ return hoistNonReactStatics(ReducerInjector, WrappedComponent);
+};
+
+const useInjectReducer = ({ key, reducer }) => {
+ const context = React.useContext(ReactReduxContext);
+ React.useEffect(() => {
+ getInjectors(context.store).injectReducer(key, reducer);
+ }, []);
+};
+
+export { useInjectReducer };