import React from 'react';
function onlyChild(children) {
return Array.isArray(children) ? children[0] : children;
}
export function combineContext(contexts) {
class Provider extends React.Component {
render() {
const init = this.props.children;
return Object.keys(contexts).reduce((acc, contextName) => {
const TheContext = contexts[contextName];
return {acc};
}, init);
}
}
class Consumer extends React.Component {
render() {
const init = (value) => onlyChild(this.props.children)(value);
const renderer = Object.keys(contexts).reduce((acc, contextName) => {
const TheContext = contexts[contextName];
return (value) => (
{contextValue => {
return acc({
...value,
[contextName]: contextValue,
});
}}
);
}, init);
return renderer({});
}
}
return {
Consumer,
Provider,
};
}