react-redux-provide
Version:
Build your UI with React. Manage application state with Redux providers. Persist and share application state with replication. Use pure functions everywhere.
70 lines (57 loc) • 1.92 kB
JavaScript
import React from 'react';
import provide from './provide';
const { createElement } = React;
React.createElement = function(ComponentClass, props, ...args) {
if (typeof ComponentClass === 'string') {
if (props && typeof props === 'object') {
delete props.__wrapper;
delete props.__provided;
}
return createElement.apply(this, arguments);
}
if (
props && props.__provided
|| ComponentClass && ComponentClass.__provide === false
) {
return createElement.apply(this, arguments);
}
if (props && typeof props.component === 'function') {
props.component = provide(props.component);
}
if (ComponentClass && !ComponentClass.Provide) {
ComponentClass.Provide = provide(ComponentClass);
if (process.env.NODE_ENV !== 'production') {
if (typeof window !== 'undefined' && window.__reactComponentProxies) {
for (let key in window.__reactComponentProxies) {
let proxy = window.__reactComponentProxies[key];
let { update } = proxy;
if (!proxy.__provided) {
proxy.__provided = true;
proxy.update = function() {
const instances = update.apply(this, arguments);
for (let instance of instances) {
let wrapper = (
instance.componentProps || !instance.props.__wrapper
) ? instance : instance.props.__wrapper;
let { props, context } = wrapper;
wrapper.reinitialize(props, context);
}
return instances;
};
}
}
}
}
}
props = props || {};
props.__provided = true;
if (props.child && props.child['$$typeof'] && props.child.props) {
Object.assign(props, props.child.props);
}
return createElement.call(
this,
ComponentClass && ComponentClass.Provide || ComponentClass,
props,
...args
);
};