From a04dd5ff7ea25da43333365730ca3512928cb3f4 Mon Sep 17 00:00:00 2001 From: NikolaBorislavovHristov Date: Wed, 15 May 2019 12:22:56 +0300 Subject: [PATCH] RoutesContainerContext, providers and consumers implemented --- .../RoutesContainerContext.js | 7 +++++ .../RoutesContainerProvider.js | 26 +++++++++++++++++++ .../RoutesContainerContext/index.js | 9 +++++++ .../useRoutesContainer.js | 8 ++++++ .../withRoutesContainer.js | 13 ++++++++++ 5 files changed, 63 insertions(+) create mode 100644 src/navigation/RoutesContainerContext/RoutesContainerContext.js create mode 100644 src/navigation/RoutesContainerContext/RoutesContainerProvider.js create mode 100644 src/navigation/RoutesContainerContext/index.js create mode 100644 src/navigation/RoutesContainerContext/useRoutesContainer.js create mode 100644 src/navigation/RoutesContainerContext/withRoutesContainer.js diff --git a/src/navigation/RoutesContainerContext/RoutesContainerContext.js b/src/navigation/RoutesContainerContext/RoutesContainerContext.js new file mode 100644 index 000000000..4c1adcbb5 --- /dev/null +++ b/src/navigation/RoutesContainerContext/RoutesContainerContext.js @@ -0,0 +1,7 @@ +const React = require('react'); + +const RoutesContainerContext = React.createContext(null); + +RoutesContainerContext.displayName = 'RoutesContainerContext'; + +module.exports = RoutesContainerContext; diff --git a/src/navigation/RoutesContainerContext/RoutesContainerProvider.js b/src/navigation/RoutesContainerContext/RoutesContainerProvider.js new file mode 100644 index 000000000..02119f094 --- /dev/null +++ b/src/navigation/RoutesContainerContext/RoutesContainerProvider.js @@ -0,0 +1,26 @@ +const React = require('react'); +const PropTypes = require('prop-types'); +const RoutesContainerContext = require('./RoutesContainerContext'); + +const RoutesContainerProvider = React.memo(({ containerClassName, children }) => { + const [container, setContainer] = React.useState(null); + return ( + +
+ {container instanceof HTMLElement ? children : null} +
+
+ ); +}); + +RoutesContainerProvider.displayName = 'RoutesContainerProvider'; + +RoutesContainerProvider.propTypes = { + containerClassName: PropTypes.string, + children: PropTypes.oneOfType([ + PropTypes.arrayOf(PropTypes.node), + PropTypes.node + ]) +}; + +module.exports = RoutesContainerProvider; diff --git a/src/navigation/RoutesContainerContext/index.js b/src/navigation/RoutesContainerContext/index.js new file mode 100644 index 000000000..c99f4252e --- /dev/null +++ b/src/navigation/RoutesContainerContext/index.js @@ -0,0 +1,9 @@ +const RoutesContainerProvider = require('./RoutesContainerProvider'); +const useRoutesContainer = require('./useRoutesContainer.js'); +const withRoutesContainer = require('./withRoutesContainer'); + +module.exports = { + RoutesContainerProvider, + useRoutesContainer, + withRoutesContainer +}; diff --git a/src/navigation/RoutesContainerContext/useRoutesContainer.js b/src/navigation/RoutesContainerContext/useRoutesContainer.js new file mode 100644 index 000000000..046b294fc --- /dev/null +++ b/src/navigation/RoutesContainerContext/useRoutesContainer.js @@ -0,0 +1,8 @@ +const React = require('react'); +const RoutesContainerContext = require('./RoutesContainerContext'); + +const useRoutesContainer = () => { + return React.useContext(RoutesContainerContext); +}; + +module.exports = useRoutesContainer; diff --git a/src/navigation/RoutesContainerContext/withRoutesContainer.js b/src/navigation/RoutesContainerContext/withRoutesContainer.js new file mode 100644 index 000000000..c3f75e895 --- /dev/null +++ b/src/navigation/RoutesContainerContext/withRoutesContainer.js @@ -0,0 +1,13 @@ +const React = require('react'); +const useRoutesContainer = require('./useRoutesContainer'); + +const withRoutesContainer = (Component) => { + return (props) => { + const routesContainer = useRoutesContainer(); + return ( + + ); + }; +}; + +module.exports = withRoutesContainer;