UNPKG

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
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 ); };