RoutesContainerContext, providers and consumers implemented

This commit is contained in:
NikolaBorislavovHristov 2019-05-15 12:22:56 +03:00
parent 04a47d4e54
commit a04dd5ff7e
5 changed files with 63 additions and 0 deletions

View file

@ -0,0 +1,7 @@
const React = require('react');
const RoutesContainerContext = React.createContext(null);
RoutesContainerContext.displayName = 'RoutesContainerContext';
module.exports = RoutesContainerContext;

View file

@ -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 (
<RoutesContainerContext.Provider value={container}>
<div ref={setContainer} className={containerClassName}>
{container instanceof HTMLElement ? children : null}
</div>
</RoutesContainerContext.Provider>
);
});
RoutesContainerProvider.displayName = 'RoutesContainerProvider';
RoutesContainerProvider.propTypes = {
containerClassName: PropTypes.string,
children: PropTypes.oneOfType([
PropTypes.arrayOf(PropTypes.node),
PropTypes.node
])
};
module.exports = RoutesContainerProvider;

View file

@ -0,0 +1,9 @@
const RoutesContainerProvider = require('./RoutesContainerProvider');
const useRoutesContainer = require('./useRoutesContainer.js');
const withRoutesContainer = require('./withRoutesContainer');
module.exports = {
RoutesContainerProvider,
useRoutesContainer,
withRoutesContainer
};

View file

@ -0,0 +1,8 @@
const React = require('react');
const RoutesContainerContext = require('./RoutesContainerContext');
const useRoutesContainer = () => {
return React.useContext(RoutesContainerContext);
};
module.exports = useRoutesContainer;

View file

@ -0,0 +1,13 @@
const React = require('react');
const useRoutesContainer = require('./useRoutesContainer');
const withRoutesContainer = (Component) => {
return (props) => {
const routesContainer = useRoutesContainer();
return (
<Component {...props} routesContainer={routesContainer} />
);
};
};
module.exports = withRoutesContainer;